From 09127bbeeb77398caa454b0f34e71d4eca110615 Mon Sep 17 00:00:00 2001 From: Jean Ouina Date: Thu, 11 Jun 2020 18:08:41 +0200 Subject: [PATCH] option to not use remote server --- BetterDiscordApp/js/main.js | 27 +++++++++++++------ BetterDiscordApp/js/main.min.js | 2 +- BetterDiscordApp/src/0globals.js | 2 +- .../src/modules/CustomRichPresence.js | 4 +-- BetterDiscordApp/src/modules/distant.js | 17 ++++++++++-- .../core/app/BetterDiscord/index.js | 3 ++- 6 files changed, 39 insertions(+), 16 deletions(-) diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index 39c1ad0..25bfcf9 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -377,7 +377,7 @@ const settings = { }, "Enable Lightcord Servers": { id: "lightcord-5", - info: "Disabling it erase any informations about you in our servers. But you won't see anything like custom badges.", + info: "Enable Lightcord's servers. Disabling this will disable custom badges.", implemented: true, hidden: false, cat: "lightcord", @@ -801,10 +801,6 @@ function EmbedsContains(message, search) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ "./src/0globals.js"); -/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./v2 */ "./src/modules/v2.js"); -/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./src/modules/utils.js"); - - const dispatcher = BDModules.get(m => m.Dispatcher && m.default && m.default.dispatch)[0].default; const ActionTypes = BDModules.get(m => m.ActionTypes)[0].ActionTypes; @@ -2807,6 +2803,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _svg_LightcordUser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../svg/LightcordUser */ "./src/svg/LightcordUser.jsx"); /* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node-fetch */ "node-fetch"); /* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_fetch__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../0globals */ "./src/0globals.js"); + @@ -2882,7 +2880,7 @@ let badgesToFetch = []; const fetchedBadges = await new Promise(resolve => { badgesToFetch.push([user, resolve]); - setImmediate(() => { + setTimeout(() => { let users = badgesToFetch; if (users.length === 0) return; badgesToFetch = []; @@ -2908,7 +2906,7 @@ let badgesToFetch = []; data[1]([]); // resolve no badge fetched }); }); - }); + }, 0); }); for (let badge of fetchedBadges) { @@ -2935,6 +2933,11 @@ let badgesToFetch = []; }()); const handleRequest = function (route, method, data) { + if (!_0globals__WEBPACK_IMPORTED_MODULE_3__["settingsCookie"]["lightcord-5"]) { + console.warn(`Canceling request on ${route} with method ${method} and body`, data, "because of settings."); + return Promise.reject(new LightcordError("The current settings blocked the request.")); + } + console.log(`Sending request on ${route} with method ${method} and body`, data); return node_fetch__WEBPACK_IMPORTED_MODULE_2___default()(`${Constants.SERVER_URL}/api/v1${route}`, { method, @@ -2948,6 +2951,14 @@ const handleRequest = function (route, method, data) { }); }; +class LightcordError extends Error { + constructor() { + super(...arguments); + this.name = "LightcordError"; + } + +} + const Constants = { SERVER_URL: "http://127.0.0.1", badges: [{ @@ -11566,4 +11577,4 @@ module.exports = require("yauzl"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3JlYWN0RGV2VG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BY2NvdW50SW5mb3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wcmVzZW5jZVNldHRpbmdzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NlcnZlckNhcmQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NpZGViYXJWaWV3LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcmVsb2FkSWNvbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Njcm9sbGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlbGVjdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc3dpdGNoLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFySGVhZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFySXRlbS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhclNlcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RpbWVzdGFtcFJlbmRlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXBXcmFwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkveFN2Zy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImV2ZW50c1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJmc1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJta2RpcnBcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJyZXF1ZXN0XCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJMQ0NoYW5lbG9nIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwidGl0bGUiLCJpdGVtcyIsImltYWdlIiwic3VidGl0bGUiLCJyZW1vdGUiLCJnZXRHbG9iYWwiLCJ2ZXJzaW9uIiwiZm9vdGVyIiwiVGV4dEVsZW1lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImZpbmRCeURpc3BsYXlOYW1lIiwiTW9kYWxTdGFjayIsImZpbmRCeVByb3BzIiwiQW5jaG9yIiwiZmluZCIsIm0iLCJkaXNwbGF5TmFtZSIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJjbGljayIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicG9wIiwiQkRWMiIsImpvaW5MQyIsInN1cHBvcnRMaW5rIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50Iiwib25DbGljayIsImNsYXNzTmFtZSIsInNpemUiLCJTaXplcyIsIlNNQUxMIiwiY29sb3IiLCJDb2xvcnMiLCJTVEFOREFSRCIsImJiZENoYW5nZWxvZyIsInR5cGUiLCJzZXR0aW5ncyIsImlkIiwiaW5mbyIsImltcGxlbWVudGVkIiwiaGlkZGVuIiwiY2F0IiwiY2F0ZWdvcnkiLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwiYmRwbHVnaW5FcnJvcnMiLCJiZHRoZW1lRXJyb3JzIiwiYmRDb25maWciLCJPYmplY3QiLCJjcmVhdGUiLCJCZXR0ZXJEaXNjb3JkQ29uZmlnIiwiYmR0aGVtZXMiLCJiZHBsdWdpbnMiLCJwbHVnaW5Db29raWUiLCJ0aGVtZUNvb2tpZSIsImxvY2FsU3RvcmFnZUZpeCIsImxvYWRpbmdJY29uIiwiZGVwcmVjYXRlR2xvYmFsIiwia2V5IiwidmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsIlV0aWxzIiwid2FybiIsImdsb2JhbEtleXMiLCJrZXlzIiwiR2xvYmFscyIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwic2V0Q29uZmlnIiwiaW5pdCIsInJlcXVpcmUiLCJ2MkxvYWRlciIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwiY29udGVudFdpbmRvd0dldHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkhUTUxJRnJhbWVFbGVtZW50IiwicHJvdG90eXBlIiwiY29udGVudFdpbmRvdyIsIlJlZmxlY3QiLCJhcHBseSIsImFyZ3VtZW50cyIsIlByb3h5Iiwib2JqIiwicHJvcCIsInVuZGVmaW5lZCIsInZhbCIsImJpbmQiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIkZ1bmN0aW9uIiwib09wZW4iLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiVEZIb3VyIiwiaW5qZWN0MjRIb3VyIiwiY2FuY2VsMjRIb3VyIiwidHdlbHZlSG91ciIsIlJlZ0V4cCIsImNvbnZlcnQiLCJkYXRhIiwibWF0Y2hlZCIsInJldHVyblZhbHVlIiwibWF0Y2giLCJsZW5ndGgiLCJyZXBsYWNlIiwicGFkU3RhcnQiLCJwYXJzZUludCIsImNhbmNlbENvenkiLCJtb25rZXlQYXRjaCIsIlRpbWVGb3JtYXR0ZXIiLCJhZnRlciIsImNhbmNlbENvbXBhY3QiLCJyZW1vdmUyNEhvdXIiLCJkaXNwYXRjaGVyIiwiTGlnaHRjb3JkIiwiRGlzY29yZE1vZHVsZXMiLCJDaGFubmVsTW9kdWxlIiwiQkRNb2R1bGVzIiwiZSIsImRlZmF1bHQiLCJnZXRDaGFubmVsIiwiaGFzQ2hhbm5lbCIsInJlbGF0aW9uU2hpcE1vZHVsZSIsImFkZFJlbGF0aW9uc2hpcCIsIkRNTW9kdWxlIiwiY2xvc2VQcml2YXRlQ2hhbm5lbCIsImJsb2NrZWQiLCJ1c2VyTW9kdWxlIiwiZ2V0Q3VycmVudFVzZXIiLCJBbnRpQm90RE0iLCJhbnRpRE0iLCJlbmFibGVkIiwiZW5hYmxlIiwic3Vic2NyaWJlIiwiZGlzYWJsZSIsInVuc3Vic2NyaWJlIiwiZXYiLCJtZXNzYWdlIiwiYXV0aG9yIiwiYm90IiwiZ3VpbGRfaWQiLCJjaGFubmVsIiwiY2hhbm5lbF9pZCIsInNjYW5NZXNzYWdlIiwic2hvd1RvYXN0IiwidXNlcm5hbWUiLCJkaXNjcmltaW5hdG9yIiwibG9jYXRpb24iLCJ0ZXN0IiwiY29udGVudCIsIkVtYmVkc0NvbnRhaW5zIiwic2VhcmNoIiwiZW1iZWRzIiwibWFwIiwiZW1iZWQiLCJ0ZXh0IiwiZmllbGRzIiwibmFtZSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJwcm9jZXNzIiwiQ3VzdG9tUmljaFByZXNlbmNlIiwiZ2FtZSIsImZvcm1hdGVkR2FtZSIsImFwcGxpY2F0aW9uX2lkIiwiZGV0YWlscyIsInN0YXRlIiwidGltZXN0YW1wcyIsInN0YXJ0IiwiYXNzZXRzIiwibGFyZ2VfaW1hZ2UiLCJzbWFsbF9pbWFnZSIsInNlbmRHYW1lIiwiTE9DQUxfQUNUSVZJVFlfVVBEQVRFIiwiYWN0aXZpdHkiLCJjb25zb2xlIiwibG9nIiwic2V0IiwiZmV0Y2hBc3NldHMiLCJhcHBsaWNhdGlvbklkIiwiZ2V0QXNzZXRzIiwiRXJyb3IiLCJSZWFjdERPTSIsIlJlYWN0RG9tIiwiUmVhY3RDb21wb25lbnQiLCJXaW5kb3dDb25maWdGaWxlIiwiZW1vdGVzIiwic2NyZWVuV2lkdGgiLCJNYXRoIiwibWF4IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lcldpZHRoIiwic2NyZWVuSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwiaW5qZWN0Q1NTIiwiY3NzIiwiRE9NIiwiYWRkU3R5bGUiLCJlc2NhcGVJRCIsImNsZWFyQ1NTIiwicmVtb3ZlU3R5bGUiLCJsaW5rSlMiLCJhZGRTY3JpcHQiLCJ1bmxpbmtKUyIsInJlbW92ZVNjcmlwdCIsImdldFBsdWdpbiIsImhhc093blByb3BlcnR5IiwicGx1Z2luIiwiZ2V0Q29yZSIsIm1haW5Db3JlIiwiYWxlcnQiLCJzaG93Q29uZmlybWF0aW9uTW9kYWwiLCJjYW5jZWxUZXh0Iiwib3B0aW9ucyIsImZpbmRNb2R1bGUiLCJmaWx0ZXIiLCJmaW5kQWxsTW9kdWxlcyIsImZpbmRBbGwiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZmluZEJ5VW5pcXVlUHJvcGVydGllcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJmaW5kQnlQcm90b3R5cGVzIiwiZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkV2ZW50RW1pdHRlciIsImV2ZW50TmFtZSIsImFyZ3MiLCJlbWl0Iiwib2ZmIiwiZXZlbnRBY3Rpb24iLCJyZW1vdmVMaXN0ZW5lciIsInNlbGVjdG9ycyIsInJlbW92ZURhIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwicHVzaCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidXNlclNldHRpbmdzQWNjb3VudCIsInZpZXdCb2R5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJpc05hTiIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9fZXNNb2R1bGUiLCJiYXNlQ2xhc3NOYW1lIiwic3BsaXQiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJyZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImFzc2lnbiIsInJlbW92ZUNvbG9yZWRUZXh0IiwiY2xhc3NOYW1lTWFya3VwIiwibWFya3VwIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwidGltZUNhY2hlIiwid2F0Y2hlcnMiLCJnZXRDb250ZW50UmVxdWlyZSIsInBsdWdpbnNGb2xkZXIiLCJfcGx1Z2luc0ZvbGRlciIsInJlYWxwYXRoU3luYyIsImRhdGFQYXRoIiwidGhlbWVzRm9sZGVyIiwiX3RoZW1lc0ZvbGRlciIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsImlzRW1wdHkiLCJleHBvcnRzIiwibWFrZVBsYWNlaG9sZGVyUGx1Z2luIiwiZ2V0TmFtZSIsImdldEF1dGhvciIsImdldERlc2NyaXB0aW9uIiwic291cmNlIiwid2Vic2l0ZSIsImxvYWRDb250ZW50IiwiZmlsZSIsInN0YWNrIiwidW5sb2FkQ29udGVudCIsImNhY2hlIiwiaXNMb2FkZWQiLCJyZWxvYWRDb250ZW50IiwiY2FudFVubG9hZCIsImxvYWROZXdDb250ZW50IiwiYmFzZWRpciIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJjb250ZW50TGlzdCIsInZhbHVlcyIsInJlbW92ZWQiLCJmIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJsb2FkUGx1Z2lucyIsImxvYWRUaGVtZXMiLCJjb25maWciLCJmbGF0IiwiRUQiLCJXZWJTb2NrZXQiLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uVXBkYXRlRmFpbGVkIiwiZGlkVXBkYXRlIiwidXBkYXRlSW5qZWN0b3IiLCJyZWxhdW5jaCIsImV4aXQiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJhdG9iIiwiYWRkRXZlbnRMaXN0ZW5lciIsIlBsdWdpbkNlcnRpZmllciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJwcmV2aW91c1ZlcnNpb24iLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJlbW9qaU1vZHVsZSIsIkVtb2ppTW9kdWxlIiwicGF0Y2hTb2NpYWwiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInBhdGNoTWVzc2FnZUhlYWRlciIsInBhdGNoTWVtYmVyTGlzdCIsInBhdGNoQXR0YWNobWVudCIsImhhdmVJbnN0YWxsZWREZWZhdWx0Iiwib25DbG9zZSIsImxvZ28iLCJpbm5lckhUTUwiLCJ0aW1lc0NoZWNrZWQiLCJ3cmFwcGVyIiwiZ3VpbGRDbGFzc2VzIiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwiZGVmZXJMb2FkZWQiLCJyZWFkeVN0YXRlIiwiaW5qZWN0RXh0ZXJuYWxzIiwib3JpZ2luYWwiLCJnZXRTZXR0aW5nR3JvdXAiLCJzYXZlU2V0dGluZ3MiLCJsb2FkU2V0dGluZ3MiLCJzZXR0aW5nIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwic2V0QXR0cmlidXRlIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW5kZXJTaWRlYmFyIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJsaW5rIiwiaHJlZiIsInRhcmdldCIsIkxpZ2h0Y29yZExvZ28iLCJCRExvZ28iLCJjbGFzc05hbWVDb2xvck11dGVkIiwic2l6ZXMiLCJjbGFzc05hbWVWZXJzaW9uSGFzaCIsImNvbG9yTXV0ZWQiLCJzaXplMzIiLCJ2ZXJzaW9uSGFzaCIsImhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInV1aWR2NCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImRpc3BsYXkiLCJhcHBseUJhZGdlcyIsInVzZXIiLCJjaGF0IiwibmV4dFRpY2siLCJkaXYiLCJjaGlsZE5vZGVzIiwiZGlzdGFudCIsImdldEJhZGdlcyIsInRoZW4iLCJiYWRnZXMiLCJzdmciLCJ3aWR0aCIsInNjb3BlcyIsInNjb3BlIiwiY29tcG9uZW50IiwiZGl2MiIsInJlYWN0RG9tIiwicmVuZGVyIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJyZW5kZXJEZWNvcmF0b3JzIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwicGFyc2UiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwic2V0U2V0dGluZ0dyb3VwIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic2VsZWN0b3IiLCJnZXRTZWxlY3RvciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJjb250ZXh0TWVudSIsImF0dGFjaCIsImNtIiwicXVlcnkiLCJjb250YWluZXIiLCJjbVdyYXAiLCJhcHBlbmQiLCJ0b3AiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJ6SW5kZXgiLCJyZW1vdmVDTSIsImtleUNvZGUiLCJjbWciLCJpdGVtR3JvdXAiLCJjbWkiLCJpdGVtIiwiY2xpY2thYmxlIiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5Iiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwiZGVsZXRlIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJBcGkiLCJBdXRob3JpemF0aW9uIiwianNvbiIsImNhdGNoIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJzZXRJbW1lZGlhdGUiLCJ1c2VycyIsInJlc3BvbnNlQm9keSIsInByb21pc2UiLCJ1c2VyX2lkIiwicm91dGUiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkxpZ2h0Y29yZFVzZXJCYWRnZSIsIkJ1Z0h1bnRlckJhZGdlIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJ0aW1pbmciLCJfIiwidXBkYXRlIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJxdWVyeUFsbCIsImh0bWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY2xvbmVOb2RlIiwiZXNjYXBlSFRNTCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJzcGFuRWxlbWVudCIsIm5vZGVWYWx1ZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImNsYXNzbmFtZSIsImluZGljYXRvciIsImhhc0NsYXNzIiwiZXZlcnkiLCJyZXBsYWNlQ2xhc3MiLCJvbGROYW1lIiwibmV3TmFtZSIsImFwcGVuZFRvIiwidGhpc05vZGUiLCJ0aGF0Tm9kZSIsInByZXBlbmRUbyIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInRhcmdldE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsIm5ld05vZGUiLCJuZXh0IiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZpb3VzIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsIm51bSIsImluZGV4IiwicGFyZW50IiwiZmluZENoaWxkIiwiZmluZENoaWxkcmVuIiwicGFyZW50cyIsImNsb3Nlc3QiLCJwYXJlbnRzVW50aWwiLCJzaWJsaW5ncyIsImF0dHJpYnV0ZSIsImdsb2JhbCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJ0ZXh0Q29udGVudCIsIm91dGVyV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm91dGVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsImV2ZW50IiwiZGVsZWdhdGUiLCJuYW1lc3BhY2UiLCJoYXNEZWxlZ2F0ZSIsImV2ZW50RnVuYyIsImNhbmNlbCIsIm5ld0NhbmNlbCIsImZpbmRJbmRleCIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJvbk1vdW50Q2hhbmdlIiwib25Nb3VudCIsIndyYXBwZWRDYWxsYmFjayIsIm9ic2VydmVyIiwibm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsInBhcmVudE1hdGNoIiwib25Vbm1vdW50Iiwib25BZGRlZCIsIndyYXAiLCJlbGVtZW50cyIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJlbnN1cmVFeHBvcnRlZCIsImNhbGwiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJkZWJ1ZyIsImNhY2hlMiIsInByb2Nlc3NBdHRhY2htZW50IiwiY2hlY2tWaXJ1c2VzIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4Iiwic3VzcGVjdCIsImhhc2hUb1VybCIsImhhcm0iLCJyZW5kZXJUb0VsZW1lbnRzIiwibmV4dEhhc2giLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJ1c2VyQWdlbnQiLCJyZXN1bHQiLCJjcnlwdG8iLCJCdWZmZXIiLCJhbGxvYyIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJkYW5nZXIiLCJvbkNhbmNlbCIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwidG9vbHRpcFdyYXAiLCJ2aWV3Qm94IiwieCIsInkiLCJtYXNrIiwiZmlsbCIsInBvaW50ZXJFdmVudHMiLCJvZmZpY2lhbCIsImZsb3dlclN0YXIiLCJzdHJva2UiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJlZGl0Iiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZVNjcm9sbGVyIiwic2Nyb2xsZXIiLCJzY3JvbGxiYXJXaWR0aCIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJyb3dzZXJXaW5kb3ciLCJ3ZWJDb250ZW50cyIsInJlYWN0RGV2VG9vbHMiLCJleHRlbnNpb25QYXRoIiwicGxhdGZvcm0iLCJlbnYiLCJMT0NBTEFQUERBVEEiLCJIT01FIiwidmVyc2lvbnMiLCJpc0V4dGVuc2lvbkluc3RhbGxlZCIsInJlbW92ZURldlRvb2xzRXh0ZW5zaW9uIiwiZGlkSW5zdGFsbCIsImFkZERldlRvb2xzRXh0ZW5zaW9uIiwiaXNEZXZUb29sc09wZW5lZCIsIlYyX1NldHRpbmdzUGFuZWwiLCJzaWRlQmFyT25DbGljayIsInVwZGF0ZVNldHRpbmdzIiwic2lkZWJhciIsIlYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciIsInNob3dPcmlnaW5hbCIsImNsYXNzU2lkZWJhciIsImNvbnRlbnRSZWdpb24iLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJNc2dMb2dTZXR0aW5ncyIsInJlbmRlckNvcmVTZXR0aW5ncyIsInJlbmRlckN1c3RvbUNzc0VkaXRvciIsInJlbmRlckFkZG9uUGFuZSIsInJlbmRlckxpZ2h0Y29yZFNldHRpbmdzIiwicmVuZGVyUHJlc2VuY2VTZXR0aW5ncyIsInJlbmRlckFjY291bnRJbmZvcyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJ0YWJzIiwiY29yZUNvbXBvbmVudCIsIlNjcm9sbGVyIiwiY29udGVudENvbHVtbiIsImZhZGUiLCJkYXJrIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIlRvb2xzIiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIlYyQ19BY2NvdW50SW5mb3MiLCJjdXN0b21Dc3NDb21wb25lbnQiLCJDc3NFZGl0b3IiLCJDb250ZW50TGlzdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIm9uQ2xpY2tMaWdodGNvcmQiLCJMQ2l0ZW1zIiwiY2hhbmdlbG9nQnV0dG9uIiwiSGlzdG9yeSIsImNoYW5nZWxvZ0J1dHRvbkxDIiwiU2lkZUJhciIsImhlYWRlclRleHQiLCJoZWFkZXJCdXR0b24iLCJjaGFuZ2VMb2ciLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJ0aGVtZSIsInVuZXNjYXBlIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwibWVtYmVybGlzdCIsIm1lbWJlcnNXcmFwIiwiZm9ybSIsInJpZ2h0IiwiYm90dG9tIiwidG9hc3RXcmFwcGVyIiwiaWNvbiIsInRpbWVvdXQiLCJ0b2FzdEVsZW0iLCJpbm5lclRleHQiLCJtb2RhbE1vZHVsZSIsIm1vZGFsIiwiaW5uZXIiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJkZWZhdWx0UHJvcHMiLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJjZSIsImNoYW5nZWxvZ0l0ZW1zIiwibWFyZ2luIiwibWFyZ2luVG9wIiwicmVuZGVySGVhZGVyIiwiQ2hpbGQiLCJncm93Iiwic2hyaW5rIiwidGFnIiwiVGFncyIsIkg0IiwiZGF0ZSIsInJlbmRlckZvb3RlciIsImpvaW5CRDIiLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJNYXJrZG93biIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZW1wdHlGdW5jdGlvbiIsInJlZCIsIkJldHRlckRpc2NvcmQiLCJWMiIsImVkaXRvckRldGFjaGVkIiwicmVxIiwid2VicGFja0pzb25wIiwiX19leHRyYV9pZF9fIiwic2hvdWxkUHJvdGVjdCIsInRoZU1vZHVsZSIsImNsZWFyIiwic29ydCIsImdldFRva2VuIiwiZ2V0RW1haWwiLCJzaG93VG9rZW4iLCJwcm90ZWN0IiwicHJveHkiLCJmdW5jIiwicHJvcE5hbWVzIiwicHJvdG9OYW1lcyIsInByb3RvUHJvcCIsImludGVybmFsIiwiam9pbkJEMSIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwibGVhdmVCRDEiLCJHdWlsZEFjdGlvbnMiLCJsZWF2ZUd1aWxkIiwibGVhdmVCRDIiLCJsZWF2ZUxDIiwicmVhY3RDb21wb25lbnQiLCJhbmNob3JDbGFzc2VzIiwic2xhdGVFZGl0b3JDbGFzc2VzIiwibWVzc2FnZUNsYXNzZXMiLCJ1bnJlYWRNZW50aW9uc0JhciIsImd1aWxkc0Vycm9yIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJUb29sdGlwV3JhcHBlciIsIlRvb2x0aXBzIiwiaGlkZSIsInNob3ciLCJzdWJtaXQiLCJhY3RpdmF0ZVJhZ2luZ0RlbW9uIiwiZGlzbWlzcyIsIktleUdlbmVyYXRvciIsIkxheWVyU3RhY2siLCJVc2VyU3RvcmUiLCJDaGFubmVsU3RvcmUiLCJDaGFubmVsQWN0aW9ucyIsIlByaXZhdGVDaGFubmVsQWN0aW9ucyIsIm9wZW5ETSIsInVzZXJJZCIsInNlbGZJZCIsInByaXZhdGVDaGFubmVsSWQiLCJnZXRETUZyb21Vc2VySWQiLCJzZWxlY3RQcml2YXRlQ2hhbm5lbCIsIm9wZW5Qcml2YXRlQ2hhbm5lbCIsInBhcnNlU2V0dGluZ3MiLCJWb2ljZU1vZGUiLCJwcm9maWxNb2R1bGUiLCJmZXRjaE11dHVhbEZyaWVuZHMiLCJjb250ZW50TW9kdWxlIiwibWFyZ2luTW9kdWxlMiIsImRlZmF1bHRNYXJnaW5oNSIsImNvbG9yTW9kdWxlIiwiY29sb3JTdGFuZGFyZCIsInNpemVNb2R1bGUiLCJzY3JvbGxiYXJNb2R1bGUxIiwic2Nyb2xsYmFyR2hvc3RIYWlybGluZSIsIkd1aWxkTW9kdWxlIiwiZ2V0UmVsYXRpb25zaGlwcyIsInNlc3Npb25Nb2R1bGUiLCJnZXRTZXNzaW9ucyIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwicGFkZGluZyIsInNpemUxNCIsImg1IiwiZ2V0UHJvZmlsZVZhbHVlIiwiZ2V0U3RhdGlzdGljcyIsImdldFNlc3Npb25WYWx1ZSIsIm1hcmdpbkJvdHRvbTIwIiwic2Vzc2lvbnNSYXciLCJzZXNzaW9ucyIsInNlc3Npb25JZCIsImNsaWVudEluZm8iLCJvcyIsImNsaWVudCIsImFjdGl2ZSIsImFjdGl2aXRpZXMiLCJyZXBlYXQiLCJjcmVhdGVkQXQiLCJhdmF0YXIiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJmbGFncyIsImhhc1ByZW1pdW1TdWJzY3JpcHRpb24iLCJlbWFpbCIsIm1mYUVuYWJsZWQiLCJtb2JpbGUiLCJwaG9uZSIsInZlcmlmaWVkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwiX19odG1sIiwibGFuZ3VhZ2UiLCJtYXJnaW5Cb3R0b204IiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJzZXRTdGF0ZSIsImNsb3NlU2V0dGluZ3MiLCJwYW5lbFJlZiIsInNldHRpbmdzT3BlbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsInJlZnMiLCJzZXR0aW5nc3BhbmVsIiwiaXNIaWRkZW4iLCJjVG9wIiwic2Nyb2xsVG9wIiwiY0JvdHRvbSIsImVUb3AiLCJvZmZzZXRUb3AiLCJlQm90dG9tIiwiY2FyZE5vZGUiLCJ0aGlzTm9kZU9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsImVuZFBvaW50IiwiZ2V0U3RyaW5nIiwic2V0dGluZ3NDb21wb25lbnQiLCJyZWYiLCJYU3ZnIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZFRpdGxlIiwibmFtZUluZGV4IiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJwb3BMYXllciIsIm1ha2VMaW5rIiwibWFrZUJ1dHRvbiIsImFjdGlvbiIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImRpc2FibGVkIiwiYXV0aG9ySWQiLCJhdXRob3JMaW5rIiwiU3dpdGNoIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvcGVuRm9sZGVyIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0UHJvcHMiLCJnZXRBZGRvbnMiLCJzb3J0ZWRBZGRvbnMiLCJiIiwiY2FwIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwicmVuZGVyZWQiLCJyZWZyZXNoSWNvbiIsImZvcmNlVXBkYXRlIiwiYWRkb25DYXJkcyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJvcGFjaXR5IiwiVjJDX0NoZWNrYm94IiwiY2hlY2tib3hFbGVtZW50IiwiY2hlY2tib3giLCJjaGVja2JveElubmVyIiwiU2VsZWN0IiwiZHJvcGRvd24iLCJjcmVhdGVSZWYiLCJzaG93TWVudSIsImhpZGVNZW51Iiwib3B0IiwiaXNPcGVuIiwiU2VhcmNoIiwib25LZXlEb3duIiwicGxhY2Vob2xkZXIiLCJlbmFibGVkQ2xhc3MiLCJjaGVja2VkQ2xhc3MiLCJWMkNfQ29udGVudENvbHVtbiIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXNzaW9uIiwic2V0TW9kZSIsInNldFNob3dQcmludE1hcmdpbiIsInNldEZvbnRTaXplIiwiZGVzdHJveSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSYWRpdXMiLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsIm1hcmdpbkxlZnQiLCJhcmciLCJnZXRWYWx1ZSIsImJ0b2EiLCJkcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsIkJERXJyb3JCb3VuZGFyeSIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJEZWxldGUiLCJEb3duQXJyb3ciLCJFZGl0IiwiZGF0YVN0b3JlIiwicHJldmlldyIsImlzZmV0Y2hpbmciLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3IiwiYXJyYXkiLCJvaGdvZG9oZnVjayIsImFjdGl2YXRlIiwiSW5wdXRUZXh0Iiwicm93TW9kdWxlIiwicmVtb3ZlS2V5YmluZCIsIm1hcmdpbk1vZHVsZSIsImZsZXhNb2R1bGUiLCJfaG9yaXpvbnRhbCIsImlucHV0TW9kdWxlIiwiaW5wdXRNaW5pIiwic2l6ZU1vZHVsZTIiLCJzaXplMTYiLCJzaXplMjAiLCJyb3ciLCJmbGV4Q2hpbGQiLCJpbnB1dFdyYXBwZXIiLCJpbnB1dERlZmF1bHQiLCJkaXZpZGVyIiwiZGl2aWRlckRlZmF1bHQiLCJJbnB1dE51bWJlciIsImV1aE1vZHVsZTEiLCJjb2xvclRyYW5zcGFyZW50IiwibmV3VmFsdWUiLCJidXR0b25XcmFwcGVyIiwibG9va0ZpbGxlZCIsImNvbG9yQnJhbmQiLCJzaXplU21hbGwiLCJmbGV4IiwiY2xpcGJvYXJkIiwiY29udGVudHMiLCJJbnB1dENob2ljZSIsImNob2ljZXMiLCJEaXNjb3JkQnV0dG9uIiwiUnBjUHJldmlldyIsImNoYW5nZVRhYiIsInRhYiIsImFuY2llbnRUYWIiLCJzZXRBY3RpdmUiLCJycGMiLCJpc0FjdGl2ZSIsIlByb2ZpbGUiLCJQb3BvdXQiLCJUYWIiLCJhdmF0YXJVUkwiLCJnZXRBdmF0YXJVUkwiLCJyb290TW9kdWxlMSIsImZsZXhNb2R1bGUxIiwic3R5bGluZ01vZHVsZTEiLCJuYW1lVGFnTW9kdWxlMSIsImFjdGl2aXR5TW9kdWxlMSIsInRleHRNb2R1bGUxIiwic2l6ZU1vZHVsZTEiLCJzY3JvbGxlck1vZHVsZTEiLCJub3RlTW9kdWxlMSIsInByb3RpcE1vZHVsZTEiLCJjb2xvck1vZHVsZTEiLCJhdmF0YXJNb2R1bGUxIiwidXNlclBvcG91dCIsInZlcnRpY2FsIiwiYWxpZ25TdHJldGNoIiwic3RyZWFtZXJNb2RlRW5hYmxlZEJ0biIsImFjdGl2aXR5VXNlclBvcG91dCIsIm11dGVkIiwidGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMiLCJub3RlIiwicHJvIiwiaW5saW5lIiwidGltZXN0YW1wQ2xhc3MiLCJ0aW1lc3RhbXAiLCJoZWFkZXJQbGF5aW5nIiwianVzdGlmeUNlbnRlciIsImFsaWduQ2VudGVyIiwibm9XcmFwIiwiaGVhZGVyVG9wIiwiYXZhdGFyV3JhcHBlck5vcm1hbCIsImF2YXRhckhpbnQiLCJhdmF0YXJIaW50SW5uZXIiLCJWSUVXX1BST0ZJTEUiLCJob3Jpem9udGFsIiwianVzdGlmeVN0YXJ0IiwiaGVhZGVyVGFnTm9OaWNrbmFtZSIsIm5hbWVUYWciLCJoZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWUiLCJoZWFkZXJUZXh0Tm9ybWFsIiwiVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlORyIsImJvZHlOb3JtYWwiLCJpbWFnZXMiLCJhc3NldHNMYXJnZUltYWdlVXNlclBvcG91dCIsImFzc2V0c0xhcmdlTWFza1VzZXJQb3BvdXQiLCJhc3NldHNTbWFsbEltYWdlVXNlclBvcG91dCIsImNvbnRlbnRJbWFnZXNVc2VyUG9wb3V0IiwibmFtZU5vcm1hbCIsImFjdGl2aXR5TmFtZSIsInRpbWVDb21wb25lbnQiLCJ0aW1lc3RhbXBSZW5kZXIiLCJUaW1lc3RhbXAiLCJlbmQiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyRmFkZSIsImJvZHlJbm5lciIsImJvZHlUaXRsZSIsIk5PVEUiLCJOT1RFX1BMQUNFSE9MREVSIiwicHJvdGlwIiwiUElOTkVEX01FU1NBR0VTX1BST19USVAiLCJ0aXAiLCJDT05URVhUX01FTlVfSElOVCIsIlN0YXR1cyIsImdldFByZXNlbmNlIiwidG9wU2VjdGlvblN0cmVhbWluZyIsImFjdGl2aXR5UHJvZmlsZSIsInRvcFNlY3Rpb25QbGF5aW5nIiwiaGVhZGVySW5mbyIsInByb2ZpbGVCYWRnZXMiLCJoZWFkZXJGaWxsIiwiYXNzZXRzTGFyZ2VJbWFnZVByb2ZpbGUiLCJhc3NldHNMYXJnZU1hc2tQcm9maWxlIiwiYXNzZXRzU21hbGxJbWFnZVByb2ZpbGUiLCJjb250ZW50SW1hZ2VzUHJvZmlsZSIsInVzZXJJbmZvU2VjdGlvbiIsInVzZXJJbmZvU2VjdGlvbkhlYWRlciIsIkNvbm5lY3RlZEFjY291bnRzIiwiYWNjb3VudHMiLCJBY2NvdW50TW9kdWxlMSIsImdldEFjY291bnRzIiwiYWNjcyIsInZpc2liaWxpdHkiLCJhY2MiLCJjb25uZWN0ZWRBY2NvdW50cyIsIkNvbm5lY3RlZEFjY291bnQiLCJmbG93ZXJNb2R1bGUxIiwiYW5jaG9yTW9kdWxlMSIsIlNvY2lhbENvbnN0YW50cyIsImNvbnN0YW50c1NvY2lhbCIsImNvbm5lY3RlZEFjY291bnQiLCJjb25uZWN0ZWRBY2NvdW50SWNvbiIsIndoaXRlIiwiZ3JleSIsImNvbm5lY3RlZEFjY291bnROYW1lSW5uZXIiLCJjb25uZWN0ZWRBY2NvdW50TmFtZSIsImNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb24iLCJjb25uZWN0ZWRBY2NvdW50T3Blbkljb24iLCJCYWRnZXMiLCJyb290TW9kdWxlIiwiVXNlckZsYWdzIiwic2VyaWFsaXplZCIsImZsYWdOYW1lIiwiaGFzRmxhZyIsInNlYXJjaGFibGUiLCJCYWRnZSIsInByb2ZpbGVCYWRnZVdyYXBwZXIiLCJwcm9maWxlQmFkZ2UiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwibG9hZFVSTCIsImJhY2tncm91bmRDb2xvciIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRhYkJhclNlcGFyYXRvciIsInNlYXJjaElucHV0IiwiVGFiQmFySGVhZGVyIiwiVGFiQmFySXRlbSIsIm1heExlbmd0aCIsInNlYXJjaGlucHV0Iiwibm90Q29ubmVjdGVkIiwiY29sdW1uTW9kdWxlIiwibWFyZ2luQm90dG9tIiwibWluSGVpZ2h0IiwibGluZUhlaWdodCIsIlYyQ19TZXJ2ZXJDYXJkIiwiaW1hZ2VFcnJvciIsImNhcmRNb2R1bGUiLCJjYXJkIiwiY2FyZFByaW1hcnkiLCJfaG9yaXpvbnRhbFJldmVyc2UiLCJ3cmFwTW9kdWxlIiwic3RyZWFtZXJNb2RlRW5hYmxlZCIsIm9uRXJyb3IiLCJoYW5kbGVFcnJvciIsIlYyQ19TaWRlYmFyVmlldyIsIlYyQ19SZWxvYWRJY29uIiwieG1sbnMiLCJWMkNfU2Nyb2xsZXIiLCJzY3JvbGxlckhvcml6b250YWwiLCJzY3JvbGxlck1vZHVsZTIiLCJzaWRlYmFyUmVnaW9uU2Nyb2xsZXIiLCJ3cmFwcGVyQ2xhc3MiLCJzY3JvbGxlckNsYXNzIiwiY29udGVudFJlZ2lvblNjcm9sbGVyIiwiY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcCIsInRoZW1lR2hvc3QiLCJzY3JvbGxlclRyYWNrIiwiVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJzZWN0aW9uIiwiU2V0dGluZ3NHcm91cCIsImhhbmRsZUNoYW5nZSIsIldyYXAiLCJEaXJlY3Rpb24iLCJuYXRpdmVTZWxlY3QiLCJIT1JJWk9OVEFMIiwiQWxpZ24iLCJDRU5URVIiLCJWMkNfU2V0dGluZ3NHcm91cCIsImJ1dHRvbkNvbXBvbmVudCIsIlYyQ19TZXR0aW5nc1BhbmVsIiwiVjJDX1NldHRpbmdzVGl0bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19TaWRlQmFyIiwic2kiLCJzY24iLCJucyIsIm5zY24iLCJzZXRTZWxlY3RlZCIsImluaXRpYWxTZWxlY3Rpb24iLCJTd2l0Y2hJdGVtIiwiVjJDX1RhYkJhckhlYWRlciIsIlYyQ19UYWJCYXJJdGVtIiwiVjJDX1RhYkJhclNlcGFyYXRvciIsImludGVydmFsTW9kdWxlMSIsIkludGVydmFsIiwiVGltZVJlbmRlciIsIlB1cmVDb21wb25lbnQiLCJfaW50ZXJ2YWwiLCJnZXRVcGRhdGVkVGltZSIsImdldERpZmYiLCJjaGVja1VuaXgiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwicmVuZGVyVGltZSIsIm51bWJlciIsInJlbW92ZVplcm8iLCJ1c2VkUHJvcHMiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9FTkQiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVCIsIlYyQ19Ub29scyIsInRvb2xzTW9kdWxlIiwidG9vbHNDb250YWluZXIiLCJjb250YWluZXJNb2R1bGUiLCJjbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uQm9sZCIsImtleWJpbmQiLCJrZXliaW5kQm9sZCIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJFbXVsYXRlZFRvb2x0aXAiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwidG9vbHRpcCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJsYXllckNvbnRhaW5lciIsImNhblNob3dBYm92ZSIsImNhblNob3dCZWxvdyIsImNhblNob3dMZWZ0IiwiY2FuU2hvd1JpZ2h0IiwiX2NsYXNzTmFtZSIsInNob3dBYm92ZSIsInNob3dCZWxvdyIsInNob3dMZWZ0Iiwic2hvd1JpZ2h0IiwiY2VudGVySG9yaXpvbnRhbGx5IiwiY2VudGVyVmVydGljYWxseSIsIm5vZGVjZW50ZXIiLCJmaW5kRE9NTm9kZSIsIlYyQ19YU3ZnIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJB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LGtDIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgdm9pY2VNb2RlLCBwbHVnaW5Nb2R1bGUsIHRoZW1lTW9kdWxlLCBkTW9kZSwgcHVibGljU2VydmVyc01vZHVsZSwgbWFpbkNvcmUsIEJEVjI7XHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjRcIjtcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn1cclxuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBcIkJCRCdzIGNoYW5nZWxvZy5cIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIioqTGlnaHRjb3JkKiogaXMgbm93IHVzaW5nIEJhbmRhZ2VkQkQuIFRoYXQgbWVhbnMgYWxsIHBsdWdpbnMgeW91IHdlcmUgdXNpbmcgY2FuIGJlIHVzZWQgdG9vICFcIixcclxuICAgICAgICAgICAgICAgIFwiKipXaW5kb3cgVHJhbnNwYXJlbmN5KiogY2hhbmdlcyB3ZXJlIG1hZGUgdG8gbW9yZSBjb21wYXRpYmxlIHdpdGggZXh0ZXJuYWwgd2luZG93IG1hbmFnZXJzIGFuZCBhZGRvbnMgbGlrZSBHbGFzc2NvcmQuXCIsXHJcbiAgICAgICAgICAgICAgICBcIkluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGhhcyBvbmNlIGFnYWluIGJlZW4gY2hhbmdlZCBzbGlnaHRseSB0byBob3BlZnVsbHkgaW1wcm92ZSBsb2FkaW5nIHRpbWVzLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XHJcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkN1c3RvbSBjc3MgYXV0byB1ZHBhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTFcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtYlwiLCAgaW5mbzogXCJSZXBsYWNlIERpc2NvcmQgYmx1ZSB3aXRoIEJEIEJsdWVcIiwgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiBmYWxzZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCJ9LFxyXG5cclxuICAgIC8qIENvcmUgKi9cclxuICAgIC8qID09PT09PSAqL1xyXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk1pbmltYWwgTW9kZVwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMlwiLCAgaW5mbzogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHMuXCIsICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgTW9kZVwiOiAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy00XCIsICBpbmZvOiBcIk9ubHkgc2hvdyB2b2ljZSBjaGF0XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkRhcmsgTW9kZVwiOiAgICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNVwiLCAgaW5mbzogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0KHdpcClcIiwgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgRGlzY29ubmVjdFwiOiAgICAgICAgICAge2lkOiBcImJkYS1kYy0wXCIsICBpbmZvOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkNvbG9yZWQgVGV4dFwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtN1wiLCAgaW5mbzogXCJNYWtlIHRleHQgY29sb3IgdGhlIHNhbWUgYXMgcm9sZSBjb2xvclwiLCAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTm9ybWFsaXplIENsYXNzZXNcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNFwiLCBpbmZvOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuXHJcbiAgICAvKiBDb250ZW50ICovXHJcbiAgICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjogICAgICAgIHtpZDogXCJmb3JrLXBzLTFcIiwgaW5mbzogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTNcIiwgaW5mbzogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTVcIiwgaW5mbzogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcblxyXG4gICAgLyogRGV2ZWxvcGVyICovXHJcbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJSZWFjdCBEZXZUb29sc1wiOlx0XHRcdCAge2lkOiBcInJlYWN0RGV2VG9vbHNcIiwgaW5mbzogXCJBZGRzIHJlYWN0IGRldmVsb3BlciB0b29scyB0byB0aGUgZGV2dG9vbHMuIE11c3QgYmUgaW5zdGFsbGVkIGluIEdvb2dsZSBDaHJvbWUgb24geW91ciBwYy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbm5hbCBJbmZvcm1hdGlvbnNcIjp7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiIGFuZCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIuIChtdXN0IGNsb3NlIGFuZCByZW9wZW4gc2V0dGluZ3MpXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQWQgQmxvY2tcIjogICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC00XCIsIGluZm86IFwiQmxvY2sgYW55IEJPVCB0aGF0IGRtIHlvdSB3aXRoIGFuIGludml0ZSBsaW5rLiBFdmVuIGluIGFuIGVtYmVkLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkRpc2FibGluZyBpdCBlcmFzZSBhbnkgaW5mb3JtYXRpb25zIGFib3V0IHlvdSBpbiBvdXIgc2VydmVycy4gQnV0IHlvdSB3b24ndCBzZWUgYW55dGhpbmcgbGlrZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFxyXG4gICAgLyoqIFJpY2hQcmVzZW5jZSAqL1xyXG4gICAgXCJFbmFibGVcIjogICAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIiwgaW5mbzogXCJFbmFibGUgUmljaFByZXNlbmNlIGJlbG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcInN0YXR1c1wifVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XHJcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy0yXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy01XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy02XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTJcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy02XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy03XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZGMtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTFcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy05XCI6IHRydWUsXHJcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1wcy0xXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtMlwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy00XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstZXMtM1wiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXdwLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstd3AtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1iZXRhXCI6IHRydWUsXHJcbiAgICBcInJlYWN0RGV2VG9vbHNcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMlwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC00XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNVwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtNlwiOiB0cnVlXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgdGhpcy5tYWluQ29yZSk7XHJcbiAgICAgICAgQ29yZS5pbml0KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIGZ1bmN0aW9uIHBhdGNoTW9kdWxlTG9hZCgpIHtcclxuLy8gICAgIGNvbnN0IG5hbWVzcGFjZSA9IFwiYmV0dGVyZGlzY29yZFwiO1xyXG4vLyAgICAgY29uc3QgcHJlZml4ID0gYCR7bmFtZXNwYWNlfS9gO1xyXG4vLyAgICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKTtcclxuLy8gICAgIGNvbnN0IGxvYWQgPSBNb2R1bGUuX2xvYWQ7XHJcbi8vICAgICAvLyBjb25zdCByZXNvbHZlRmlsZW5hbWUgPSBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZTtcclxuXHJcbi8vICAgICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbihyZXF1ZXN0KSB7XHJcbi8vICAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4vLyAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuLy8gICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbi8vICAgICAgICAgfVxyXG5cclxuLy8gICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgfTtcclxuXHJcbi8vICAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4vLyAgICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4vLyAgICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbi8vICAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbi8vICAgICAvLyAgICAgfVxyXG5cclxuLy8gICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbi8vICAgICAvLyB9O1xyXG5cclxuLy8gICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuLy8gICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4vLyAgICAgfTtcclxuLy8gfVxyXG5cclxuLy8gcGF0Y2hNb2R1bGVMb2FkKCk7XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7XHJcblxyXG5yZXF1aXJlKFwicmVxdWVzdFwiKS8vIGp1c3QgaW4gY2FjaGUgc28gcGx1Z2luIGNhbiByZXF1aXJlIGl0IHRvbyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHNcclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZihlbWJlZC5maWVsZHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fX0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTsiLCIvKiBCREV2ZW50cyAqL1xyXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxyXG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cclxufTsiLCIvKipcclxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcclxuICovXHJcblxyXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxubGV0IHNlbGVjdG9yc1xyXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXHJcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xyXG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcclxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxyXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC5wYXltZW50LWluZm8gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZGVzY3JpcHRpb24gJiYgdHlwZW9mIGUuZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgJiYgZS5kZXNjcmlwdGlvbi5pbmNsdWRlcyhcImZvcm1UZXh0XCIpKVswXS5kZXNjcmlwdGlvbil9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wYXltZW50U291cmNlUm93KVswXS5wYXltZW50U291cmNlUm93KX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc3ViVGV4dCAmJiBlLmRlc2NyaXB0aW9uV3JhcHBlcilbMF0uc3ViVGV4dCl9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXS51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgIHJldHVybiBzZWxlY3RzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcclxuXHJcbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXHJcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXHJcbiR7c2VsZWN0b3JzWzBdfSwgJHtzZWxlY3RvcnNbMV19LCAke3NlbGVjdG9yc1syXX0ge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogYmx1cig0cHgpO1xyXG4gICAgb3BhY2l0eTogLjg7XHJcbn1cclxuXHJcbiR7c2VsZWN0b3JzWzBdfTpob3ZlciwgJHtzZWxlY3RvcnNbMV19OmhvdmVyLCAke3NlbGVjdG9yc1syXX06aG92ZXIge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBub25lO1xyXG4gICAgb3BhY2l0eTogMTtcclxufWApXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fID0gd2luZG93LnJlcXVpcmVcclxuaW1wb3J0IHtiZENvbmZpZywgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXHJcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcclxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcclxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IHttZXNzYWdlOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIiwgc3RhY2s6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwifX1cclxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcclxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZW50LnR5cGUpIHJldHVybjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldO1xyXG4gICAgICAgICAgICAgICAgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV0gPSBjb250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYmR0aGVtZXNbY29udGVudC5uYW1lXTtcclxuICAgICAgICAgICAgYmR0aGVtZXNbY29udGVudC5uYW1lXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVsZXRlIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIHVubG9hZGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX07fVxyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07fVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4gZmFsc2U7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBjYW50VW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICBpZiAoY2FudFVubG9hZCkgcmV0dXJuIGNhbnRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMaXN0ID0gT2JqZWN0LnZhbHVlcyhpc1BsdWdpbiA/IGJkcGx1Z2lucyA6IGJkdGhlbWVzKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aChmaWxlRW5kaW5nKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQWxsQ29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xyXG4gICAgLy8gdGhpcy5pbml0KCk7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBiZENvbmZpZy51cGRhdGVyID8gYmRDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogYmRDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBiZENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBbYFRoZXJlIGlzIGFuIHVwZGF0ZSBhdmFpbGFibGUgZm9yIEJhbmRhZ2VkQkQncyBJbmplY3RvciAoJHtsYXRlc3RMb2NhbFZlcnNpb259KS5gLCBcIllvdSBjYW4gZWl0aGVyIHVwZGF0ZSBhbmQgcmVzdGFydCBub3csIG9yIGxhdGVyLlwiXSwge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiTWF5YmUgTGF0ZXJcIixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtVdGlscy5hbGVydChcIkNvdWxkIE5vdCBVcGRhdGVcIiwgYFVuYWJsZSB0byB1cGRhdGUgYXV0b21hdGljYWxseSwgcGxlYXNlIGRvd25sb2FkIHRoZSBpbnN0YWxsZXIgYW5kIHJlaW5zdGFsbCBub3JtYWxseS48YnIgLz48YnIgLz48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5gKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgc2V0dGluZ3NQYW5lbC5pbml0aWFsaXplU2V0dGluZ3MoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW5zKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lcygpO1xyXG5cclxuICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCBhdG9iKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XHJcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XHJcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbW9qaU1vZHVsZSA9IEVtb2ppTW9kdWxlXHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGF3YWl0IERPTS5hZGRTY3JpcHQoXCJhY2Utc2NyaXB0XCIsIFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKTtcclxuICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpICYmICFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLCBcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllcixcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIF1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJndWlsZC1zZXR0aW5ncy1iYXNlLXNlY3Rpb25cIikubGVuZ3RoKSBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZC1zZXR0aW5ncy1zaWRlYmFyXCIpKSBzZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcclxuICAgICAgICB9KSlcclxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXHJcbiAgICB9fSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcclxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG5cclxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxyXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XHJcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkgXHJcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcclxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XHJcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjMycHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xyXG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcclxuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xyXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSAvKnJlcXVpcmUoXCJyZXF1ZXN0XCIpOyovIG51bGxcclxuXHJcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XHJcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcclxuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcclxuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcclxuXHJcbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcclxuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XHJcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG5cclxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcclxuXHJcbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcclxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcclxuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXHJcbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTsiLCJjb25zdCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyA9IHdpbmRvdy5yZXF1aXJlXHJcblxyXG5pbXBvcnQge2JkQ29uZmlnfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgcmVsZWFzZUNoYW5uZWwgPSBEaXNjb3JkTmF0aXZlLmdsb2JhbHMgPyBEaXNjb3JkTmF0aXZlLmdsb2JhbHMucmVsZWFzZUNoYW5uZWwgOiBEaXNjb3JkTmF0aXZlLmFwcCA/IERpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCkgOiBcInN0YWJsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7c2V0dGluZ3M6IHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fX07XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldk1vZGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xpc3RlbmVyID0gdGhpcy5kZWJ1Z0xpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgdGhpcy5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDExOSB8fCBlLndoaWNoID09IDExOCkgey8vRjhcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1slY0Rldk1vZGUlY10gJWNCcmVhay9SZXN1bWVcIiwgXCJjb2xvcjogcmVkO1wiLCBcImNvbG9yOiAjMzAzMDMwOyBmb250LXdlaWdodDo3MDA7XCIsIFwiY29sb3I6cmVkO1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29weVNlbGVjdG9yTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudGFyZ2V0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0ubGF5ZXIsXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmNvbnRleHRNZW51KVswXSxcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNtID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzSXRlbXMuY29udGV4dE1lbnUuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc05hbWVMYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmNvbnRleHRNZW51fSBiZC1jb250ZXh0LW1lbnVcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuYXBwZW5kKGNtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGNtV3JhcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUubGVmdCA9IGUuY2xpZW50WCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUuekluZGV4ID0gXCIxMDAyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllci5zcGxpdChcIiBcIilbMF0pXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW1Hcm91cH1cIj5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5jbGlja2FibGV9XCI+YCk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmxhYmVsfVwiPkNvcHkgU2VsZWN0b3I8L2Rpdj5gKSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLk5hdGl2ZU1vZHVsZS5jb3B5KHNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjbS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNtZy5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgIGNtLmFwcGVuZChjbWcpO1xyXG4gICAgICAgICAgICAgICAgaWYoY21XcmFwLmNsaWVudEhlaWdodCA8IGNtV3JhcC5zY3JvbGxIZWlnaHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmcgXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gKGNtV3JhcC5zdHlsZS50b3AgLSBjbWcuY2xpZW50SGVpZ2h0KSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXR0YWNoLCAxKTtcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0b3IoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VsZW1lbnQuaWR9YDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbiBmdWxsUGF0aChlbCl7XHJcbiAgICAgICAgICAgIHZhciBuYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICB3aGlsZSAoZWwucGFyZW50Tm9kZSl7XHJcbiAgICAgICAgICAgICAgaWYgKGVsLmlkKXtcclxuICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoJyMnK2VsLmlkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsPT1lbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QuZW50cmllcygpKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpKTtcclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MSxlPWVsO2UucHJldmlvdXNFbGVtZW50U2libGluZztlPWUucHJldmlvdXNFbGVtZW50U2libGluZyxjKyspO1xyXG4gICAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsoZWwuY2xhc3NOYW1lIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpK1wiOm50aC1jaGlsZChcIitjK1wiKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsPWVsLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lcy5qb2luKFwiID4gXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVsbFBhdGgoZWxlbWVudClcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RSdWxlID0gcnVsZXNbcnVsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKGxhdGVzdFJ1bGUpIHJldHVybiBsYXRlc3RSdWxlLnNlbGVjdG9yVGV4dDtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5sZW5ndGgpIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDtcclxuICAgICAgICByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDsqL1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJ1bGVzKGVsZW1lbnQsIGNzcyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cykge1xyXG4gICAgICAgIC8vaWYgKHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMpIHJldHVybiB3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IFsuLi5jc3NdLmZpbHRlcihzID0+ICFzLmhyZWYgfHwgIXMuaHJlZi5pbmNsdWRlcyhcIkJldHRlckRpc2NvcmRBcHBcIikpO1xyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gc2hlZXRzLm1hcChzID0+IFsuLi4ocy5jc3NSdWxlcyB8fCBbXSldKS5mbGF0KCk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJ1bGVzID0gcnVsZXMuZmlsdGVyKHIgPT4gciAmJiByLnNlbGVjdG9yVGV4dCAmJiBlbGVtZW50Lm1hdGNoZXMoci5zZWxlY3RvclRleHQpICYmIHIuc3R5bGUubGVuZ3RoICYmIHIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikubGVuZ3RoIDwgOCAmJiAhci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5pbmNsdWRlcyhcIipcIikpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50UnVsZXM7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXHJcbmltcG9ydCBMaWdodGNvcmRVc2VyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9MaWdodGNvcmRVc2VyXCI7XHJcbmltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHsgLy8gR2VuZXJhdGUgVVVJRCAoTm8gY3J5cHRvIHJuZylcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcclxuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn0gIFxyXG5cclxuY29uc3QgYXdhaXRpbmdCYWRnZXNQcm9taXNlcyA9IHt9XHJcbmxldCBiYWRnZXNUb0ZldGNoID0gW11cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXN0YW50U2VydmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczoge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FjaGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2FjaGUoZGF0YSl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHRoaXMuX2NhY2hlICE9PSBcIm9iamVjdFwiKXJldHVybiB0aGlzLl9jYWNoZSA9IGRhdGFcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuXHJcbiAgICAgICAgbGV0IHJlc29sdmVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXHJcblxyXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VycyA9IGJhZGdlc1RvRmV0Y2hcclxuICAgICAgICAgICAgICAgIGlmKHVzZXJzLmxlbmd0aCA9PT0gMClyZXR1cm5cclxuICAgICAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2ggPSBbXVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdChSb3V0ZXMuYmFkZ2VzLCBcIlBPU1RcIiwgSlNPTi5zdHJpbmdpZnkodXNlcnMubWFwKGUgPT4gZVswXSkpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogc2VydmVyIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2VCb2R5KVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgdXNlciBvZiByZXNwb25zZUJvZHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHVzZXJzLmZpbmQocHJvbWlzZSA9PiBwcm9taXNlWzBdID09PSB1c2VyLnVzZXJfaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBmZXRjaGVkQmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoIUNvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBXZSBkbyBub3QgaGF2ZSB0aGUgQ29tcG9uZW50LCBza2lwIGl0LlxyXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaChDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczogT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLmJhZGdlcywge1t1c2VyXTogYmFkZ2VzfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIH0sIDYwMDAwMCk7XHJcblxyXG4gICAgICAgIHJlc29sdmUoYmFkZ2VzKVxyXG4gICAgICAgIGRlbGV0ZSBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocm91dGUsIG1ldGhvZCwgZGF0YSl7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VuZGluZyByZXF1ZXN0IG9uICR7cm91dGV9IHdpdGggbWV0aG9kICR7bWV0aG9kfSBhbmQgYm9keWAsIGRhdGEpXHJcbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiB8fCBcIk5vbmU6OkFub255bW91c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oZGF0YSA/IHtcclxuICAgICAgICAgICAgYm9keTogZGF0YVxyXG4gICAgICAgIH0gOiB7fSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBTRVJWRVJfVVJMOiBcImh0dHA6Ly8xMjcuMC4wLjFcIixcclxuICAgIGJhZGdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgVXNlclwiLFxyXG4gICAgICAgICAgICBpZDogXCIwMWNmYTdiMC03Y2RiLTRiMGUtODI1OC05YzZhNzgyMzVjOTNcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXHJcbiAgICAgICAgICAgICAgICBcInVzZXJcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IExpZ2h0Y29yZFVzZXJCYWRnZVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBCdWdIdW50ZXJCYWRnZSxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL2JhZGdlcy9idWdfaHVudGVyXCJcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XHJcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYCxcclxuICAgIGRlbGV0ZTogYC9kZWxldGVgXHJcbn0iLCIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge2JkQ29uZmlnLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG4vL2ltcG9ydCBEaXNjb3JkQ3J5cHQgZnJvbSBcIi4vRGlzY29yZENyeXB0XCI7XHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBFbW9qaVJlZ2V4OiAvPGE/XFwuKFxcdyspXFwuKFxcZCspPi9nXHJcbn1cclxuXHJcbmxldCBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbmxldCBBdXRvY29tcGxldGVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilbMF1cclxubGV0IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylbMF1cclxubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF1cclxubGV0IE1lc3NhZ2VzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVswXVxyXG5sZXQgZ3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylbMF1cclxubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW9qaU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG4gICAgICAgIGlmKEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFBhdGNoaW5nIGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgb2YgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXNgLCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcylcclxuICAgICAgICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnNcclxuICAgICAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdXRvY29tcGxldGVPcHRpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUuTElHSFRDT1JEX0VNT0pJUyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzKGFyZzEsIGFyZzIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gYXJnMi5sZW5ndGggPiAxICYmIFwiLlwiID09PSBhcmcxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHRzKHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaTogZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGUuaWQgfHwgZS51bmlxdWVOYW1lIHx8IGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW5lbDogXCIuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi5cIiArIGUgKyBcIi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogRW1vamkgZGlzcGxheSAqL1xyXG4gICAgICAgIHdoaWxlICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKXtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2VcIilcclxuICAgICAgICAgICAgICAgIGlmKCFtZXNzYWdlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50XCIpXHJcbiAgICAgICAgICAgICAgICBpZighY29udGVudCB8fCAhY29udGVudC5sZW5ndGgpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgPSBEaXNjb3JkQ3J5cHQuZGVjcnlwdENvbnRlbnQoY29udGVudClcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRChlLCB0LCBuLCByLCBvLCBpLCBzLCB1LCBsLCBjKSB7XHJcbiAgICBpZiAobnVsbCA9PSBuIHx8IDAgPT09IG4ubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIHZhciBkID0gbi5tYXAoKGZ1bmN0aW9uKGUsIG4pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgb25DbGljazogbyxcclxuICAgICAgICAgICAgb25Ib3ZlcjogcixcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXHJcbiAgICAgICAgICAgIGluZGV4OiBuXHJcbiAgICAgICAgfSwgbChlLCBuKSkpXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gW1IoaSwgcywgZSwgYyksIGRdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xyXG4gICAgdmFyIGEgPSAobi5sZW5ndGggPiAwID8gZS5mb3JtYXQoe1xyXG4gICAgICAgIHByZWZpeDogcihuKVxyXG4gICAgfSkgOiB0KVxyXG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSl7XHJcbiAgICAgICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgYSA9IFwiW0xJR0hUQ09SRF0gXCIrYVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuVGl0bGUsIHtcclxuICAgICAgICB0aXRsZTogYVxyXG4gICAgfSwgYSlcclxufVxyXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcclxuXHJcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxubGV0IGlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlICYmIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcbmxldCBpc1VzYWJsZSA9IGZhbHNlXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuXHJcbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSl7XHJcbiAgICBpc1VzYWJsZSA9IHVzYWJsZVxyXG4gICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlyZXR1cm5cclxuICAgIGlmKCFpc0Vtb2ppRGlzYWJsZWQpaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxuXHJcbiAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbihlbW9qaSl7XHJcbiAgICAgICAgaWYoaXNVc2FibGUpe1xyXG4gICAgICAgICAgICBpZihlbW9qaS5zdXJyb2dhdGVzIHx8IGVtb2ppLmRpdmVyc2l0eSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgIH1cclxufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcclxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5jb25zdCBkZWJ1ZyA9IHRydWVcclxuY29uc3QgY2FjaGUgPSB7fVxyXG5jb25zdCBjYWNoZTIgPSB7fVxyXG4vKlxyXG5jb25zdCBQaW5uZWRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQaW5uZWRNZXNzYWdlcylbMF0uZGVmYXVsdFxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbElkKVswXS5kZWZhdWx0XHJcbmNvbnN0IGZldGNoTWVzc2FnZXNNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5mZXRjaE1lc3NhZ2VzKVswXS5kZWZhdWx0XHJcbmNvbnN0IGZldGNoTWVzc2FnZXNNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZmV0Y2hNZXNzYWdlcylbMV0uZGVmYXVsdFxyXG5jb25zdCBnZXRNZXNzYWdlc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldE1lc3NhZ2VzKVswXS5kZWZhdWx0Ki9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5DZXJ0aWZpZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcblxyXG4gICAgcGF0Y2goYXR0YWNobWVudCwgaWQpe1xyXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgLypjb25zdCBkaXNwYXRjaGVyID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyXHJcbiAgICAgICAgY29uc3QgY29uc3RhbnRzID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5jb25zdGFudHNcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGZXRjaE1lc3NhZ2VzID0gZmV0Y2hNZXNzYWdlc01vZHVsZS5mZXRjaE1lc3NhZ2VzXHJcbiAgICAgICAgZmV0Y2hNZXNzYWdlc01vZHVsZS5mZXRjaE1lc3NhZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbEZldGNoTWVzc2FnZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgICAgICBpZihyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWVcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldiA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBtZXNzYWdlIG9mIGV2Ll9hcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmV0Y2hNZXNzYWdlczIgPSBmZXRjaE1lc3NhZ2VzTW9kdWxlMi5mZXRjaE1lc3NhZ2VzXHJcbiAgICAgICAgZmV0Y2hNZXNzYWdlc01vZHVsZTIuZmV0Y2hNZXNzYWdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxGZXRjaE1lc3NhZ2VzMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgICAgIGlmKHJldHVyblZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ID0gZ2V0TWVzc2FnZXNNb2R1bGUuZ2V0TWVzc2FnZXMoQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IG1lc3NhZ2Ugb2YgZXYuX2FycmF5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWxyZWFkeVVzZWQgPSB7fVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsR2V0UGlubmVkTWVzc2FnZXMgPSBQaW5uZWRNb2R1bGUuZ2V0UGlubmVkTWVzc2FnZXMuYmluZChQaW5uZWRNb2R1bGUpXHJcbiAgICAgICAgUGlubmVkTW9kdWxlLmdldFBpbm5lZE1lc3NhZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgY29uc3QgcGlubmVkID0gb3JpZ2luYWxHZXRQaW5uZWRNZXNzYWdlcyguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIGlmKCFwaW5uZWQgfHwgYWxyZWFkeVVzZWRbcGlubmVkLmlkXSlyZXR1cm4gcGlubmVkXHJcbiAgICAgICAgICAgIGFscmVhZHlVc2VkW3Bpbm5lZC5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhbHJlYWR5VXNlZFtwaW5uZWQuaWRdXHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBwaW5uZWQubWVzc2FnZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudClcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCA1MCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGlubmVkXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnN1YnNjcmliZShjb25zdGFudHMuQWN0aW9uVHlwZXMuTUVTU0FHRV9DUkVBVEUsIChldikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXYubWVzc2FnZVxyXG4gICAgICAgICAgICBpZihtZXNzYWdlLmNoYW5uZWxfaWQgIT09IENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpcmV0dXJuXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgICAgICBpZihhdHRhY2htZW50cy5sZW5ndGggPT09IDApcmV0dXJuIC8vIG5vIGF0dGFjaG1lbnRzXHJcblxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzLl9hcnJheSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG5cclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSovXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCBpZCl7XHJcbiAgICBkYXRhID0gZGF0YS50b1N0cmluZyhcInV0ZjhcIikuc3BsaXQoL1teXFx3XFxkXSsvZylcclxuICAgIGxldCBpc0hhcm1mdWwgPSBmYWxzZVxyXG4gICAgZm9yKGxldCBrZXl3b3JkIG9mIGRhdGEpe1xyXG4gICAgICAgIGZvcihsZXQgb29mIG9mIFtcclxuICAgICAgICAgICAgXCJ0b2tlblwiLFxyXG4gICAgICAgICAgICBcImVtYWlsXCIsXHJcbiAgICAgICAgICAgIFwicGhvbmVcIixcclxuICAgICAgICAgICAgXCJNRkFcIixcclxuICAgICAgICAgICAgXCIyZmFcIixcclxuICAgICAgICAgICAgXCJwcm9jZXNzXCIsXHJcbiAgICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxyXG4gICAgICAgICAgICBcImxvY2FsU3RvcmFnZVwiLFxyXG4gICAgICAgICAgICBcImV2YWxcIixcclxuICAgICAgICAgICAgXCJnZXRHbG9iYWxcIixcclxuICAgICAgICAgICAgXCJCcm93c2VyV2luZG93XCJcclxuICAgICAgICBdKXtcclxuICAgICAgICAgICAgaWYoa2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG9vZi50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICAgICAgICBpc0hhcm1mdWwgPSBcInRva2VuIHN0ZWFsZXIvdmlydXNcIlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIHRoZSBNRVRBIGNvbW1lbnQgZnJvbSBwbHVnaW5zXHJcbiAgICAgICAgaWYoKC92YXIgW1xcd1xcZF8kXSs9XFxbXCIvZ2kpLnRlc3Qobm9fY29tbWVudHMpKXtcclxuICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXhwcyA9IFtcclxuICAgICAgICAgICAgICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydcXCkvZyxcclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICAgICAgLyoqIG1hbmdsZWQgKi9cclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVnZXggb2YgcmVnZXhwcyl7XHJcbiAgICAgICAgICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IHJlZ2V4LnRlc3Qobm9fY29tbWVudHMpID8gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiIDogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXJldHVyblxyXG4gICAgY2FjaGVbaGFzaF0gPSB7XHJcbiAgICAgICAgc3VzcGVjdDogdHJ1ZSxcclxuICAgICAgICBuYW1lOiBoYXNoVG9VcmxbaGFzaF0uc3BsaXQoXCIvXCIpLnBvcCgpLFxyXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXHJcbiAgICAgICAgaGFybTogaXNIYXJtZnVsXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgJHtjYWNoZVtoYXNoXS50eXBlLnRvTG93ZXJDYXNlKCl9OiAke2NhY2hlW2hhc2hdLm5hbWV9YClcclxuXHJcbiAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCBjYWNoZVtoYXNoXSwgY2FjaGVbaGFzaF0ubmFtZSlcclxufVxyXG5cclxuY29uc3QgaGFzaFRvVXJsID0ge31cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcclxuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXHJcbiAgICBpZighYXR0YWNobWVudC51cmwuc3RhcnRzV2l0aChcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuXHJcbiAgICBsZXQgbmV4dEhhc2ggPSAoaGFzaCwgZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKCFjYWNoZVtoYXNoXSl7XHJcbiAgICAgICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50IC8vIGhhdmUgdG8gc2V0IHVzZXItYWdlbnRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXJldHVybiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgaWQpXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXHJcblxyXG4gICAgICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGF0dGFjaG1lbnQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpPT57fSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cclxuXHJcbiAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoY2FjaGUyW2F0dGFjaG1lbnQudXJsXSlyZXR1cm4gbmV4dEhhc2goY2FjaGUyW2F0dGFjaG1lbnQudXJsXSlcclxuXHJcbiAgICBub2RlRmV0Y2goYXR0YWNobWVudC51cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50XHJcbiAgICAgICAgfVxyXG4gICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpXHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuICAgICAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxyXG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxyXG5cclxuICAgICAgICAgICAgbmV4dEhhc2goaGFzaFJlc3VsdCwgZGF0YSlcclxuICAgICAgICB9KVxyXG4gICAgfSkuY2F0Y2goKCk9Pnt9KVxyXG59XHJcblxyXG5sZXQgZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXHJcbmxldCBjaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG5cclxuLyoqXHJcbiAqIFxyXG4gKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50W119IGVsZW1lbnRzIFxyXG4gKiBAcGFyYW0ge3t0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBvZmZpY2lhbD86IGJvb2xlYW59fHtzdXNwZWN0OnRydWUsIHR5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIGhhcm06IHN0cmluZ319IHJlc3VsdFxyXG4gKi9cclxuZnVuY3Rpb24gcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBmaWxlbmFtZSl7XHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm4gLy8gYWxyZWFkeSBjZXJ0aWZpZWQvZGl2IGRvZXMgbm90IGV4aXN0IGFueW1vcmUuXHJcblxyXG4gICAgaWYoIWZsb3dlclN0YXJNb2R1bGUpZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXHJcbiAgICBpZighY2hpbGRNb2R1bGUpY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuICAgIFxyXG5cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjE2cHhcIixoZWlnaHQ6XCIxNnB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjE2cHhcIiwgaGVpZ2h0OiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjE2cHhcIixoZWlnaHQ6XCIxNnB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMTZweFwiLGhlaWdodDpcIjE2cHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgd2FzIG1hZGUgYnkgdGhlIGRldmVsb3BlcnMgb2YgTGlnaHRjb3JkLlwiLHN0eWxlOlwiYnJhbmRcIn0sIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjE2cHhcIiwgaGVpZ2h0OiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjE2cHhcIixoZWlnaHQ6XCIxNnB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCJjdXJyZW50Q29sb3JcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIxNnB4XCIsaGVpZ2h0OlwiMTZweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSwgZGl2KVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNsYXNzIFBsdWdpbk1vZHVsZSB7XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cclxufVxyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcclxuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XHJcblxyXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcclxuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XHJcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xyXG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcclxuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcclxuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XHJcbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcclxuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XHJcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xyXG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcclxuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcclxuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XHJcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZVBsdWdpbkxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkUGx1Z2luKG5hbWUpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbkNvb2tpZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvbk1lc3NhZ2UgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xyXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcclxuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uU3dpdGNoIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycy5zcGxpdChcIiBcIilbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lU2Nyb2xsZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlciAmJiBlLnNjcm9sbGJhcldpZHRoKVswXS5zY3JvbGxlclxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBET00ucXVlcnkoYC4ke3dyYXBwZXJ9IC4ke2NsYXNzTmFtZVNjcm9sbGVyfSA+OmZpcnN0LWNoaWxkYCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IHtzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBlbGVjdHJvbiA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuXHJcbmNvbnN0IEJyb3dzZXJXaW5kb3cgPSBlbGVjdHJvbi5yZW1vdGUuQnJvd3NlcldpbmRvdztcclxuY29uc3Qgd2ViQ29udGVudHMgPSBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCk7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIHJlYWN0RGV2VG9vbHMge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgbGV0IGV4dGVuc2lvblBhdGggPSBcIlwiO1xyXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIGV4dGVuc2lvblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuTE9DQUxBUFBEQVRBLCBcIkdvb2dsZS9DaHJvbWUvVXNlciBEYXRhXCIpO1xyXG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwibGludXhcIikgZXh0ZW5zaW9uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCBcIi5jb25maWcvZ29vZ2xlLWNocm9tZVwiKTtcclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSBleHRlbnNpb25QYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsIFwiTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0dvb2dsZS9DaHJvbWVcIik7XHJcbiAgICAgICAgZWxzZSBleHRlbnNpb25QYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsIFwiLmNvbmZpZy9jaHJvbWl1bVwiKTtcclxuICAgICAgICBleHRlbnNpb25QYXRoICs9IFwiL0RlZmF1bHQvRXh0ZW5zaW9ucy9mbWthZG1hcGdvZmFkb3BsamJqZmthcGRrb2llbmloaS9cIjtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhleHRlbnNpb25QYXRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IGZzLnJlYWRkaXJTeW5jKGV4dGVuc2lvblBhdGgpO1xyXG4gICAgICAgICAgICBleHRlbnNpb25QYXRoID0gcGF0aC5yZXNvbHZlKGV4dGVuc2lvblBhdGgsIHZlcnNpb25zW3ZlcnNpb25zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25QYXRoID0gZXh0ZW5zaW9uUGF0aDtcclxuICAgICAgICB0aGlzLmlzRXh0ZW5zaW9uSW5zdGFsbGVkID0gZnMuZXhpc3RzU3luYyhleHRlbnNpb25QYXRoKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdGhpcy5saXN0ZW5lci5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICBzZXR0aW5nc1tcIlJlYWN0IERldlRvb2xzXCJdLmhpZGRlbiA9ICF0aGlzLmlzRXh0ZW5zaW9uSW5zdGFsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlbmVyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0V4dGVuc2lvbkluc3RhbGxlZCkgcmV0dXJuO1xyXG4gICAgICAgIEJyb3dzZXJXaW5kb3cucmVtb3ZlRGV2VG9vbHNFeHRlbnNpb24oXCJSZWFjdCBEZXZlbG9wZXIgVG9vbHNcIik7XHJcbiAgICAgICAgY29uc3QgZGlkSW5zdGFsbCA9IEJyb3dzZXJXaW5kb3cuYWRkRGV2VG9vbHNFeHRlbnNpb24odGhpcy5leHRlbnNpb25QYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGRpZEluc3RhbGwpIFV0aWxzLmxvZyhcIlJlYWN0IERldlRvb2xzXCIsIFwiU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCByZWFjdCBkZXZ0b29scy5cIik7XHJcbiAgICAgICAgZWxzZSBVdGlscy5lcnIoXCJSZWFjdCBEZXZUb29sc1wiLCBcIkNvdWxkbid0IGZpbmQgcmVhY3QgZGV2dG9vbHMgaW4gY2hyb21lIGV4dGVuc2lvbnMhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB3ZWJDb250ZW50cy5vbihcImRldnRvb2xzLW9wZW5lZFwiLCB0aGlzLmxpc3RlbmVyKSk7XHJcbiAgICAgICAgaWYgKHdlYkNvbnRlbnRzLmlzRGV2VG9vbHNPcGVuZWQoKSkgdGhpcy5saXN0ZW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgd2ViQ29udGVudHMucmVtb3ZlTGlzdGVuZXIoXCJkZXZ0b29scy1vcGVuZWRcIiwgdGhpcy5saXN0ZW5lcik7XHJcbiAgICB9XHJcbn07ICAiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xyXG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xyXG5pbXBvcnQgcmVhY3REZXZUb29scyBmcm9tIFwiLi9yZWFjdERldlRvb2xzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdWkvdG9vbHNcIjtcclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuLi91aS9zY3JvbGxlclwiO1xyXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcclxuaW1wb3J0IENhcmRMaXN0IGZyb20gXCIuLi91aS9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XHJcbmltcG9ydCBWMkNfQWNjb3VudEluZm9zIGZyb20gXCIuLi91aS9BY2NvdW50SW5mb3NcIjtcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBBbnRpQWRETSBmcm9tIFwiLi9BbnRpQWRETVwiO1xyXG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnNpZGVCYXJPbkNsaWNrID0gdGhpcy5zaWRlQmFyT25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKHRoaXMuc2lkZUJhck9uQ2xpY2spO1xyXG4gICAgICAgIC8vIHRoaXMuYnVpbGRQbHVnaW5Qcm9wcyA9IHRoaXMuYnVpbGRQbHVnaW5Qcm9wcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIC8vIHRoaXMuYnVpbGRUaGVtZVByb3BzID0gdGhpcy5idWlsZFRoZW1lUHJvcHMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dPcmlnaW5hbCA9IHRoaXMuc2hvd09yaWdpbmFsLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcixcclxuICAgICAgICAgICAgY2xhc3NTaWRlYmFyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLnNwbGl0KFwiIFwiKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllcitcIiAuXCIrY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdK1wiLCAuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcclxuICAgICAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xyXG4gICAgICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xyXG5cclxuICAgICAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJjb3JlXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBNc2dMb2dTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcIm1zZ2xvZ1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBzaWRlQmFyT25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZWdpb24gPSBET00ucXVlcnkoXCIuY29udGVudFJlZ2lvbi0zbkR1WXksIC5jb250ZW50LXJlZ2lvblwiKTtcclxuICAgICAgICBjb250ZW50UmVnaW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiY29yZVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDb3JlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiY3VzdG9tY3NzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN1c3RvbUNzc0VkaXRvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwbHVnaW5zXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0aGVtZXNcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQWRkb25QYW5lKGlkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibGlnaHRjb3JkXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpZ2h0Y29yZFNldHRpbmdzKClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgXCJzdGF0dXNcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlIFwiYWNjb3VudGluZm9cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQWNjb3VudEluZm9zKClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7fVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQpIHtcclxuICAgICAgICBzZXR0aW5nc0Nvb2tpZVtpZF0gPSBlbmFibGVkO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZWQgJiYgaWQgPT0gXCJiZGEtZ3MtNlwiKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSBDbGFzc05vcm1hbGl6ZXIuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xyXG4gICAgICAgICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT09IFwicmVhY3REZXZUb29sc1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgcmVhY3REZXZUb29scy5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF1cclxuICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0N1cnJlbnRHYW1lOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICAgICAgZWxzZSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTRcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWUucmVhY3REZXZUb29scykgcmVhY3REZXZUb29scy5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0yXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTRcIl0pIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTFcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMlwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0zXCJdKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTZcIl0pIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIsIHNldHRpbmdzQ29va2llKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93T3JpZ2luYWwoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucm9vdCk7XHJcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICBET00ucXVlcnkoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudFJlZ2lvbilbMF0uY29udGVudFJlZ2lvbi5zcGxpdChcIiBcIilbMF0rXCIsIC5jb250ZW50LXJlZ2lvblwiKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJTaWRlYmFyKCkge1xyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2NsYXNzKj0nc2lkZS0nXSA+IFtjbGFzcyo9J2l0ZW0tJ11cIik7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhYnMpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zaG93T3JpZ2luYWwpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZW5kZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29yZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7Y29udGVudENvbHVtbjogdHJ1ZSwgZmFkZTogdHJ1ZSwgZGFyazogdHJ1ZX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uZWRTZXR0aW5nc1BhbmVsLCB7a2V5OiBcImNzcGFuZWxcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc30pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwibHNwYW5uZWxcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNlY3Rpb25zOiB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7Y29udGVudENvbHVtbjogdHJ1ZSwgZmFkZTogdHJ1ZSwgZGFyazogdHJ1ZX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHJlc2VuY2VTZXR0aW5ncywge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nczogdGhpcy5QcmVzZW5jZVNldHRpbmdzXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJsYXBhbm5lbFwiXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJDb3JlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvcmVDb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckxpZ2h0Y29yZFNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKCFyb290KSByZXR1cm4gVXRpbHMuZXJyKFwiU2V0dGluZ3NQYW5lbFwiLCBcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyLTNRclVlRyAuc3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2lcIik7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5saWdodGNvcmRDb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclByZXNlbmNlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLlByZXNlbmNlQ29tcG9uZW50LCByb290KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJBY2NvdW50SW5mb3MoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQ3VzdG9tQ3NzRWRpdG9yKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKCFyb290KSByZXR1cm4gVXRpbHMuZXJyKFwiU2V0dGluZ3NQYW5lbFwiLCBcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyLTNRclVlRyAuc3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2lcIik7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jdXN0b21Dc3NDb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgIC8vICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgIC8vICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbnRlbnRDb21wb25lbnQodHlwZSksIHJvb3QpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXHJcbiAgICAgICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXHJcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcclxuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cclxuICAgICAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdGhpcy5wcm9wcy50eXBlLnJlcGxhY2UoXCJzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAgICAgICAgIEJERXZlbnRzLm9uKGAke3RoaXMucHJlZml4fS1yZWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgQkRFdmVudHMub24oYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgQkRFdmVudHMub24oYCR7dGhpcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LXJlbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ29udGVudExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge3R5cGUsIG9uQ2hhbmdlOiB0aGlzLnNpZGVCYXJPbkNsaWNrfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZSwgbGlzdH0pKSwgdGhpcy5yb290KTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtiYmRDaGFuZ2Vsb2csIExDQ2hhbmVsb2d9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFNpZGVCYXIgZnJvbSBcIi4uL3VpL3NpZGViYXJcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvbkNsaWNrLCBvbkNsaWNrTGlnaHRjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gb25DbGljaztcclxuICAgICAgICB0aGlzLm9uQ2xpY2tMaWdodGNvcmQgPSBvbkNsaWNrTGlnaHRjb3JkXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkJldHRlckRpc2NvcmQgU2V0dGluZ3NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJQbHVnaW5zXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlbWVzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJDdXN0b20gQ1NTXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ2l0ZW1zKCl7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIC8vPFRvb2x0aXBXcmFwIGNvbG9yPVwiYmxhY2tcIiBzaWRlPVwidG9wXCIgdGV4dD17dGl0bGV9PlxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0J1dHRvbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQkJEJ3MgQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge2NsYXNzTmFtZTogXCJiZC1pY29uXCIsIHNpemU6IFwiMTZweFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uTEMgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCdzIENoYW5nZWxvZ1wifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIiwgb25DbGljazogKCkgPT4ge1V0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChMQ0NoYW5lbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQmFyLCB7b25DbGljazogdGhpcy5vbkNsaWNrLCBoZWFkZXJUZXh0OiBcIkxpZ2h0Y29yZFwiLCBoZWFkZXJCdXR0b246IGNoYW5nZWxvZ0J1dHRvbkxDLCBpdGVtczogdGhpcy5MQ2l0ZW1zfSkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQmFyLCB7b25DbGljazogdGhpcy5vbkNsaWNrLCBoZWFkZXJUZXh0OiBcIkJhbmRhZ2VkIEJEXCIsIGhlYWRlckJ1dHRvbjogY2hhbmdlbG9nQnV0dG9uLCBpdGVtczogdGhpcy5pdGVtc30pKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5ncy1zaWRlYmFyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBET00ucXVlcnlBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXTpub3QoW2NsYXNzKj1EYW5nZXJdKVwiKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VMb2cgPSB0YWJzW3RhYnMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKCFjaGFuZ2VMb2cpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjaGFuZ2VMb2cucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5ncy1zaWRlYmFyXCI+YCksIGNoYW5nZUxvZy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IFtjbGFzcyo9J3NpZGUtJ10gPiBbY2xhc3MqPSdpdGVtLSddOm5vdChbY2xhc3MqPURhbmdlcl0pXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29tcG9uZW50LCByb290KTtcclxuICAgICAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jbGFzcyBUaGVtZU1vZHVsZSB7XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXI7fVxyXG59XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubG9hZFRoZW1lRGF0YSgpO1xyXG4gICAgYmR0aGVtZUVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRUaGVtZXMoKSkpO1xyXG4gICAgY29uc3QgdGhlbWVzID0gT2JqZWN0LmtleXMoYmR0aGVtZXMpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhlbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZXNbaV1dO1xyXG4gICAgICAgIGlmICghdGhlbWVDb29raWVbdGhlbWUubmFtZV0pIHRoZW1lQ29va2llW3RoZW1lLm5hbWVdID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1lIGluIHRoZW1lQ29va2llKSB7XHJcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUpO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC4gSXQgbWF5IG5vdCBoYXZlIGJlZW4gbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtbG9hZGVkXCIsIHRoZW1lLm5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVubG9hZFRoZW1lID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBkZWxldGUgYmR0aGVtZXNbdGhlbWVdO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRUaGVtZShiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXJlbG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInRoZW1lXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInRoZW1lc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5zYXZlVGhlbWVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb24sIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcclxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cclxuICAgIHN0YXRpYyBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9XHJcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xyXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN0cmlwQk9NKGNvbnRlbnQpIHtcclxuICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcclxuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhLnNwbGl0KFwiIFwiKVswXStcIiB0ZXh0YXJlYVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xyXG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XHJcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xyXG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBsb2cobW9kdWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXJyKG1vZHVsZU5hbWUsIG1lc3NhZ2UsIGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogcmVkO1wiLCBcIlwiKTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcIiVjRXJyb3I6IFwiICsgZXJyb3IubWVzc2FnZSwgXCJjb2xvcjogcmVkO1wiKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXSkge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwidW5wYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBvcmlnTWV0aG9kO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3VtZW50czogYXJndW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcclxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsTWV0aG9kOiAoKSA9PiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5vcmlnaW5hbE1ldGhvZC5hcHBseShkYXRhLnRoaXNPYmplY3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYWZ0ZXIsIFwiYGFmdGVyYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcclxuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcclxuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvcmlnTWV0aG9kLnRvU3RyaW5nKCk7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1ttXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xyXG4gICAgICAgIH0sIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aW1lb3V0IEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhciAmJiBlLmhhc05vdGljZSlbMF0uc2lkZWJhci5zcGxpdChcIiBcIilbOV0rXCIgKyBkaXZcIikgfHwgbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbWVtYmVybGlzdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLm1lbWJlcnNXcmFwKVswXS5tZW1iZXJzV3JhcCkgOiBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpIDogbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xyXG4gICAgICAgICAgICBjb25zdCByaWdodCA9IG1lbWJlcmxpc3QgPyBtZW1iZXJsaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0ID8gcmlnaHQgLSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IFV0aWxzLnNjcmVlbldpZHRoIC0gbGVmdCAtIDI0MDtcclxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RzXCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20gKyBcInB4XCIpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7dHlwZSA9IFwiXCIsIGljb24gPSB0cnVlLCB0aW1lb3V0ID0gMzAwMH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcclxuICAgICAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xyXG4gICAgICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcclxuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdG9hc3RFbGVtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcclxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcclxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcclxuICAgICAgICBjb25zdCBjbG9zaW5nTGlzdGVuZXJzID0gW11cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25DbG9zZTogKGxpc3RlbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj48ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250ZW50IEVycm9yczwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUYWIoZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYEVycm9yIGRldGFpbHMgZm9yICR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfS5gLCBlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBbZ2VuZXJhdGVUYWIocGx1Z2luRXJyb3JzKSwgZ2VuZXJhdGVUYWIodGhlbWVFcnJvcnMpXTtcclxuICAgIFxyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgXHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBjb25zdCBDaGFuZ2Vsb2dDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiQ2hpbGRcIik7XHJcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJUYWdzXCIsIFwiZGVmYXVsdFwiKTtcclxuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xyXG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XHJcbiAgICBcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgIGltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxyXG4gICAgICAgICAgICBjaGFuZ2VzID0gW10sIFxyXG4gICAgICAgICAgICB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBcclxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcclxuICAgICAgICAgICAgZm9vdGVyXHJcbiAgICAgICAgfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcclxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcclxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcclxuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLmpvaW5CRDIoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxyXG4gICAgICAgICAgICAgICAgb25DbG9zZTogXyA9PiBfLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGFuZ2Vsb2dJdGVtc1xyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcclxuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTtcclxuICAgICAgICBpZiAoIU1vZGFsU3RhY2sgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xyXG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gXCJPa2F5XCIsIGNhbmNlbFRleHQgPSBcIkNhbmNlbFwiLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChDb25maXJtYXRpb25Nb2RhbCwge1xyXG4gICAgICAgICAgICBoZWFkZXI6IHRpdGxlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogY29udGVudCxcclxuICAgICAgICAgICAgcmVkOiBkYW5nZXIsXHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcclxuICAgICAgICAgICAgb25Db25maXJtOiBvbkNvbmZpcm0sXHJcbiAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxyXG4gICAgICAgIH0sIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlbW92ZURhKGNsYXNzTmFtZSl7XHJcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcclxuICAgIH1cclxufVxyXG5cclxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzIiwiaW1wb3J0IHtzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5nZXRUb2tlbiB8fCB0aGVNb2R1bGUuZ2V0RW1haWwgfHwgdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhlTW9kdWxlLmdldFRva2VuICYmICF0aGVNb2R1bGUuZ2V0RW1haWwgJiYgIXRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0aGVNb2R1bGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0aGVNb2R1bGUsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRUb2tlblwiKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIikgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIpIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiKSByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gcHJvdGVjdChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKHByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbCA9IHtcclxuICAgICAgICAgICAgcmVhY3Q6IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJDb21wb25lbnRcIiwgXCJQdXJlQ29tcG9uZW50XCIsIFwiQ2hpbGRyZW5cIiwgXCJjcmVhdGVFbGVtZW50XCIsIFwiY2xvbmVFbGVtZW50XCJdKSxcclxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGUgPT4gZVtPYmplY3Qua2V5cyhlKS5maW5kKGsgPT4gay5zdGFydHNXaXRoKFwiX19yZWFjdEludGVybmFsSW5zdGFuY2VcIikpXTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBqb2luQkQxKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMFRtZm81WmJPUkNScWJBZFwiKTt9XHJcbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxyXG5cclxuICAgIGpvaW5CRDIoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIySFNjbThqXCIpO31cclxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxyXG5cclxuICAgIGpvaW5MQygpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcImN4ZkEyZFRcIik7fVxyXG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcblxyXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XHJcbiAgICBnZXQgc2xhdGVFZGl0b3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2xhdGVUZXh0QXJlYVwiXSk7fVxyXG4gICAgZ2V0IG1lc3NhZ2VDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibWVzc2FnZVwiLCBcImNvbnRhaW5lckNvenlcIl0pO31cclxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XHJcblx0XHRjb25zdCBndWlsZHNXcmFwcGVyID0gQkRNb2R1bGVzLmdldChlID0+IGUud3JhcHBlciAmJiBlLnVucmVhZE1lbnRpb25zQmFyKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ndWlsZHNFcnJvciAmJiBlLnNlbGVjdGVkKVswXVxyXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuICAgIGdldCBNZXNzYWdlQ29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk1lc3NhZ2VcIik7fVxyXG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO31cclxuICAgIGdldCBOYXRpdmVNb2R1bGUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZXRCYWRnZVwiXSk7fVxyXG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cclxuICAgIGdldCBHdWlsZEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJsZWF2ZUd1aWxkXCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uaGlkZSAmJiBtLnNob3cgJiYgIW0uc2VhcmNoICYmICFtLnN1Ym1pdCAmJiAhbS5zZWFyY2ggJiYgIW0uYWN0aXZhdGVSYWdpbmdEZW1vbiAmJiAhbS5kaXNtaXNzKTt9XHJcbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cclxuICAgIGdldCBMYXllclN0YWNrKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wicG9wTGF5ZXJcIl0pO31cclxuICAgIGdldCBVc2VyU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDdXJyZW50VXNlclwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cclxuICAgIGdldCBDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm9wZW5Qcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IFByaXZhdGVDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNlbGVjdFByaXZhdGVDaGFubmVsXCJdKTt9XHJcblxyXG4gICAgb3BlbkRNKHVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGZJZCA9IHRoaXMuVXNlclN0b3JlLmdldEN1cnJlbnRVc2VyKCkuaWQ7XHJcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwcml2YXRlQ2hhbm5lbElkID0gdGhpcy5DaGFubmVsU3RvcmUuZ2V0RE1Gcm9tVXNlcklkKHVzZXJJZCk7XHJcbiAgICAgICAgaWYgKHByaXZhdGVDaGFubmVsSWQpIHJldHVybiB0aGlzLlByaXZhdGVDaGFubmVsQWN0aW9ucy5zZWxlY3RQcml2YXRlQ2hhbm5lbChwcml2YXRlQ2hhbm5lbElkKTtcclxuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3Qgc3R5bGUgPSBgXHJcbiAgICAuY29udGFpbmVyLTJSbDAxdSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmNoYXQtM2JSeHh1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2lkZWJhci0ySzhwRmgge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbmA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVm9pY2VNb2RlIHtcclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcIlZvaWNlTW9kZVwiLCBzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJWb2ljZU1vZGVcIik7XHJcbiAgICB9XHJcbn07IiwiY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIG0uZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gobSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQnlQcm9wcyA9ICguLi5wcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAoLi4ucHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcblxyXG5sZXQgcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkVXNlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBkZWxldGUgcHJvcHMuaHJlZi50YXJnZXRcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocHJvcHMpXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxwcm9wcy5BbmNob3IgaHJlZj17XCIvdXNlcnMvXCIrcHJvcHMudXNlci5pZH0gey4uLnByb3BzLmhyZWZ9IG9uQ2xpY2s9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgaWYoIXByb2ZpbE1vZHVsZSlwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcbiAgICAgICAgICAgICAgICBwcm9maWxNb2R1bGUuZGVmYXVsdC5vcGVuKHByb3BzLnVzZXIuaWQpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9wcm9wcy5BbmNob3I+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1Z0h1bnRlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcclxuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHsgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi4vbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2VcIlxyXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuL3NlbGVjdFwiO1xyXG5pbXBvcnQgdGltZXN0YW1wUmVuZGVyIGZyb20gXCIuL3RpbWVzdGFtcFJlbmRlclwiXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XHJcbiAqL1xyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbmxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG5sZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG5sZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxubGV0IHNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxyXG5jb25zdCBHdWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcylbMF0uZGVmYXVsdFxyXG5jb25zdCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRSZWxhdGlvbnNoaXBzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHNlc3Npb25Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRTZXNzaW9ucylbMF0uZGVmYXVsdFxyXG5jb25zdCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19BY2NvdW50SW5mb3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmKCFjb250ZW50TW9kdWxlKWNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIGlmKCFtYXJnaW5Nb2R1bGUyKW1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbiAgICAgICAgaWYoIWNvbG9yTW9kdWxlKWNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxuICAgICAgICBpZighc2l6ZU1vZHVsZSlzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn1cclxuICAgICAgICAgICAgc3R5bGU9e3twYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRQcm9maWxlVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTdGF0aXN0aWNzKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkIFNlc3Npb25zXHJcbiAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlc3Npb25WYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zUmF3ID0gc2Vzc2lvbk1vZHVsZS5nZXRTZXNzaW9ucygpXHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnMgPSBPYmplY3Qua2V5cyhzZXNzaW9uc1JhdykuZmlsdGVyKGUgPT4gZSAhPT0gXCJhbGxcIikubWFwKGUgPT4gc2Vzc2lvbnNSYXdbZV0pXHJcblxyXG4gICAgICAgIGlmKHNlc3Npb25zLmxlbmd0aCA9PT0gMClyZXR1cm4gXCItIE5vIHNlc3Npb24gZGV0ZWN0ZWQuIFBsZWFzZSB0cnkgaW4gYSBmZXcgc2Vjb25kc1wiXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb25zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGArIGlkOiAke2Uuc2Vzc2lvbklkfVxyXG4rIG9zOiAke2UuY2xpZW50SW5mby5vc1swXS50b1VwcGVyQ2FzZSgpK2UuY2xpZW50SW5mby5vcy5zbGljZSgxKX1cclxuKyBjbGllbnQ6ICR7ZS5jbGllbnRJbmZvLmNsaWVudH1cclxuKyBzdGF0dXM6ICR7ZS5zdGF0dXN9XHJcbisgYWN0aXZlOiAke2UuYWN0aXZlID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxyXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XHJcblxyXG4gICAgICAgIHJldHVybiBgKyBVc2VybmFtZTogJHt1c2VyLnVzZXJuYW1lfVxyXG4rIERpc2NyaW1pbmF0b3I6ICR7dXNlci5kaXNjcmltaW5hdG9yfVxyXG4rIFRhZzogJHt1c2VyLnRhZ31cclxuKyBJRDogJHt1c2VyLmlkfVxyXG4rIEF2YXRhcjogJHt1c2VyLmF2YXRhcn1cclxuKyBBdmF0YXIgVVJMOiBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hdmF0YXJzLyR7dXNlci5pZH0vJHt1c2VyLmF2YXRhcn0uJHt1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikgPyBcImdpZlwiIDogXCJwbmdcIn0/c2l6ZT00MDk2XHJcbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXHJcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cclxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxyXG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cclxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfWBcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi9pY29ucy9kZWxldGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5hcHBlbmRDaGlsZCh0aGlzLnNldHRpbmdzUGFuZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCIuc2Nyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyLCB0aGlzTm9kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGVPZmZzZXQgPSBET00ub2Zmc2V0KHRoaXNOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpc05vZGVPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AgLSAzMDtcclxuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCAtIChwcm9ncmVzcyAqIChvcmlnaW5hbCAtIGVuZFBvaW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHRyeSB7IHRoaXMuc2V0dGluZ3NQYW5lbCA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgdGhpcy5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1vcGVuIHVpLXN3aXRjaC1pdGVtXCIsIHJlZjogXCJjYXJkTm9kZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcImZsb2F0XCI6IFwicmlnaHRcIiwgXCJjdXJzb3JcIjogXCJwb2ludGVyXCJ9LCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCJ9KSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCAhPT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIiwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtfX2h0bWw6IHRoaXMuc2V0dGluZ3NQYW5lbH19KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIi5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcIm5hbWUgYmRhLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJ2ZXJzaW9uIGJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImF1dGhvciBiZGEtYXV0aG9yXCJ9O1xyXG4gICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgKz0gYCAke2FuY2hvckNsYXNzZXMuYW5jaG9yfSAke2FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gO1xyXG4gICAgICAgICAgICAgICAgcHJvcHMudGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmspIHByb3BzLmhyZWYgPSBhdXRob3IubGluaztcclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IuaWQpIHByb3BzLm9uQ2xpY2sgPSAoKSA9PiB7QkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7IEJEVjIub3BlbkRNKGF1dGhvci5pZCk7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCA/IFwiYVwiIDogXCJzcGFuXCIsIHByb3BzLCBhdXRob3IubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpbmsodGl0bGUsIHVybCkge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJiZGEtbGluayBiZGEtbGluay13ZWJzaXRlXCIsIHRhcmdldDogXCJfYmxhbmtcIn07XHJcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwic3RyaW5nXCIpIHByb3BzLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwiZnVuY3Rpb25cIikgcHJvcHMub25DbGljayA9IChldmVudCkgPT4ge2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB1cmwoKTt9O1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHByb3BzLCB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUJ1dHRvbih0aXRsZSwgY2hpbGRyZW4sIGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgY29sb3I9XCJibGFja1wiIHNpZGU9XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17YWN0aW9ufT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICAgPC9Ub29sdGlwV3JhcD47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpbmtzKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW107XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGlmIChhZGRvbi53ZWJzaXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJXZWJzaXRlXCIsIGFkZG9uLndlYnNpdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24uc291cmNlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTb3VyY2VcIiwgYWRkb24uc291cmNlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLmludml0ZSkge1xyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTdXBwb3J0IFNlcnZlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ZXIgPSAvXFwuZ2dcXC8oLiopJC87XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGFkZG9uLmludml0ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXIudGVzdChjb2RlKSkgY29kZSA9IGNvZGUubWF0Y2godGVzdGVyKVsxXTtcclxuICAgICAgICAgICAgICAgIEJEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoY29kZSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkZG9uLmRvbmF0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiRG9uYXRlXCIsIGFkZG9uLmRvbmF0ZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5wYXRyZW9uKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJQYXRyZW9uXCIsIGFkZG9uLnBhdHJlb24pKTtcclxuICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IHRoaXMubGlua3M7XHJcbiAgICAgICAgcmV0dXJuIChsaW5rcy5sZW5ndGggfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC1mb290ZXIgYmRhLWZvb3RlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWxpbmtzIGJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgIC4uLihsaW5rcy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiBpbmRleCA8IGxpbmtzLmxlbmd0aCAtIDEgPyBbZWxlbWVudCwgXCIgfCBcIl0gOiBlbGVtZW50KS5mbGF0KCkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtvbkNsaWNrOiB0aGlzLnNob3dTZXR0aW5ncywgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZGEtc2V0dGluZ3MtYnV0dG9uXCIsIGRpc2FibGVkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSwgXCJTZXR0aW5nc1wiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy50b2dnbGUgJiYgdGhpcy5wcm9wcy50b2dnbGUodGhpcy5uYW1lKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdCgpIHt0aGlzLnByb3BzLmVkaXQodGhpcy5uYW1lKTt9XHJcbiAgICBkZWxldGUoKSB7dGhpcy5wcm9wcy5yZW1vdmUodGhpcy5uYW1lKTt9XHJcbiAgICByZWxvYWQoKSB7dGhpcy5wcm9wcy5yZWxvYWQodGhpcy5uYW1lKTt9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogdGhpcy5wcm9wcy5hZGRvbi5uYW1lKTt9XHJcbiAgICBnZXQgYXV0aG9yKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogdGhpcy5wcm9wcy5hZGRvbi5hdXRob3IpO31cclxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogdGhpcy5wcm9wcy5hZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0IHZlcnNpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogdGhpcy5wcm9wcy5hZGRvbi52ZXJzaW9uKTt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICBjb25zdCB7YXV0aG9ySWQsIGF1dGhvckxpbmt9ID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWhlYWRlciBiZGEtaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtdGl0bGUgYmRhLWhlYWRlci10aXRsZVwifSwgdGhpcy5idWlsZFRpdGxlKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB7bmFtZTogdGhpcy5hdXRob3IsIGlkOiBhdXRob3JJZCwgbGluazogYXV0aG9yTGlua30pKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1jb250cm9scyBiZGEtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZWRpdCAmJiB0aGlzLm1ha2VCdXR0b24oXCJFZGl0XCIsIDxFZGl0SWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZWRpdCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlICYmIHRoaXMubWFrZUJ1dHRvbihcIkRlbGV0ZVwiLCA8RGVsZXRlSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZGVsZXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZWxvYWQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiUmVsb2FkXCIsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5yZWxvYWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWR9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXItd3JhcCBiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlciBiZC1hZGRvbi1kZXNjcmlwdGlvbiBiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIHRoaXMuZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsiLCJpbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tIFwiLi9lcnJvckJvdW5kYXJ5XCI7XHJcbmltcG9ydCBDb250ZW50Q29sdW1uIGZyb20gXCIuL2NvbnRlbnRDb2x1bW5cIjtcclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuL3Rvb2xzXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuL3Njcm9sbGVyXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmltcG9ydCB7c2V0dGluZ3NDb29raWUsIHBsdWdpbkNvb2tpZSwgdGhlbWVDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4uL21vZHVsZXMvYmRBcGlcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRm9sZGVyKCkge1xyXG4gICAgICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbSh0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQobmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3BzKGFkZG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcclxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcclxuICAgICAgICAgICAgLy9lZGl0OiB0aGlzLmVkaXQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVtb3ZlOiB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBhZGRvbjogYWRkb25cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5wcm9wcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xyXG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cclxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cclxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaEljb24gPSA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiUmVsb2FkIExpc3RcIj5cclxuICAgICAgICAgICAgeyhwcm9wcykgPT4gXHJcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5zKSBwbHVnaW5Nb2R1bGUudXBkYXRlUGx1Z2luTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGVtZU1vZHVsZS51cGRhdGVUaGVtZUxpc3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgfTwvVG9vbHRpcD47XHJcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XHJcblxyXG4gICAgICAgIHJldHVybiA8U2Nyb2xsZXIgY29udGVudENvbHVtbj17dHJ1ZX0gZmFkZT17dHJ1ZX0gZGFyaz17dHJ1ZX0+XHJcbiAgICAgICAgICAgICAgICA8Q29udGVudENvbHVtbiB0aXRsZT17YCR7dGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCl94oCUJHthZGRvbkNhcmRzLmxlbmd0aH1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtcGZidG5cIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0+T3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB7IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHJlZnJlc2hJY29ufVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPk9yZGVyOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1zbGlzdCBiZC1hZGRvbi1saXN0XCI+e2FkZG9uQ2FyZHN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XHJcbiAgICAgICAgICAgICAgICA8VG9vbHMga2V5PVwidG9vbHNcIiAvPlxyXG4gICAgICAgICAgICA8L1Njcm9sbGVyPjtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJETG9nbyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHtoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nbyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZToge2ZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJ9LCB2aWV3Qm94OiBcIjAgMCAyMDAwIDIwMDBcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzFcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjIwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3czXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3czKVwifSwgZDogXCJNMTE5NS40NCsxMzUuNDQyTDExOTUuNDQrMTM1LjQ0Mkw5OTcuNisxMzYuNDQyQzEwMjQuMisxNDkuNzQyKzExNzAuMzQrMTYzLjU0MisxMTkzLjY0KzE3OS43NDJDMTI2NC4zNCsyMjguODQyKzEzMTkuNzQrMjkxLjI0MisxMzU4LjI0KzM2NS4wNDJDMTM5OC4xNCs0NDEuNjQyKzE0MTkuNzQrNTMwLjY0MisxNDIyLjU0KzYyOS42NDJMMTQyMi41NCs2MzAuODQyTDE0MjIuNTQrNjMyLjA0MkMxNDIyLjU0Kzc3My4xNDIrMTQyMi41NCsxMjI4LjE0KzE0MjIuNTQrMTM2OS4xNEwxNDIyLjU0KzEzNzAuMzRMMTQyMi41NCsxMzcxLjU0QzE0MTkuODQrMTQ3MC41NCsxMzk4LjI0KzE1NTkuNTQrMTM1OC4yNCsxNjM2LjE0QzEzMTkuNzQrMTcwOS45NCsxMjY0LjQ0KzE3NzIuMzQrMTE5My42NCsxODIxLjQ0QzExNzEuMDQrMTgzNy4xNCsxMDI1LjcrMTg1MC41NCsxMDAwKzE4NjMuNTRMMTE5My41NCsxODY0LjU0QzE1MzkuNzQrMTg2Ni40NCsxODY0LjU0KzE2OTMuMzQrMTg2NC41NCsxMjk2LjY0TDE4NjQuNTQrNzE2Ljk0MkMxODY2LjQ0KzMxMi40NDIrMTU0MS42NCsxMzUuNDQyKzExOTUuNDQrMTM1LjQ0MlpcIiwgZmlsbDogXCIjMTcxNzE3XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzIpXCJ9LCBkOiBcIk0xNjk1LjU0KzYzMS40NDJDMTY4NS44NCsyNzguMDQyKzE0MDkuMzQrMTM1LjQ0MisxMDUyLjk0KzEzNS40NDJMMzYxLjc0KzEzNi40NDJMODAzLjc0KzQ5MC40NDJMMTA2MC43NCs0OTAuNDQyQzEzMzUuMjQrNDkwLjQ0MisxMzM1LjI0KzgzNS4zNDIrMTA2MC43NCs4MzUuMzQyTDEwNjAuNzQrMTE2NC44NEMxMTUwLjIyKzExNjQuODQrMTIxMC41MysxMjAxLjQ4KzEyNDEuNjgrMTI1MC44N0MxMzA2LjA3KzEzNTMrMTI0NS43NisxNTA5LjY0KzEwNjAuNzQrMTUwOS42NEwzNjEuNzQrMTg2My41NEwxMDUyLjk0KzE4NjQuNTRDMTQwOS4yNCsxODY0LjU0KzE2ODUuNzQrMTcyMS45NCsxNjk1LjU0KzEzNjguNTRDMTY5NS41NCsxMjA1Ljk0KzE2NTEuMDQrMTA4NC40NCsxNTcyLjY0Kzk5OS45NDJDMTY1MS4wNCs5MTUuNTQyKzE2OTUuNTQrNzk0LjA0MisxNjk1LjU0KzYzMS40NDJaXCIsIGZpbGw6IFwiIzNFODJFNVwiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJsaVwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94LCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1pbm5lciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveElubmVyKVswXS5jaGVja2JveElubmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94RWxlbWVudCwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge29wZW46IGZhbHNlLCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLm9wdGlvbnNbMF0udmFsdWV9O1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSB0aGlzLnNob3dNZW51LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVudShldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVNZW51KCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IGZhbHNlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wdCA9PiBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuc3RhdGUub3BlbiA/IFwiIG1lbnUtb3BlblwiIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwXCI+XHJcbi8vIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPnt0aGlzLnByb3BzLmxhYmVsfTwvbGFiZWw+XHJcbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtY29udHJvbHNcIj5cclxuLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4vLyAgICAgPC9kaXY+XHJcbi8vIDwvZGl2PlxyXG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuLy8gPC9kaXY+OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTZWFyY2hJY29uIGZyb20gXCIuLi9pY29ucy9zZWFyY2hcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VhcmNoLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9IG9uS2V5RG93bj17dGhpcy5wcm9wcy5vbktleURvd259IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiYmQtc2VhcmNoXCIgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9IG1heExlbmd0aD1cIjUwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8U2VhcmNoSWNvbiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge2NoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH07XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBlbmFibGVkQ2xhc3MgPSB0aGlzLnByb3BzLmRpc2FibGVkID8gXCIgYmQtc3dpdGNoLWRpc2FibGVkXCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWRDbGFzcyA9IHRoaXMuc3RhdGUuY2hlY2tlZCA/IFwiIGJkLXN3aXRjaC1jaGVja2VkXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zd2l0Y2hgICsgZW5hYmxlZENsYXNzICsgY2hlY2tlZENsYXNzfT5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17YGJkLWNoZWNrYm94YH0gZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9IGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tlZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50aXRsZVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XHJcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZU1pcnJvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGNvbnN0IHtkZXRhY2hlZH0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGxldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhhcmcpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGFyZykge1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZGV0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgYnRvYSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZHJvb3QgPSBzZWxmLmRldGFjaGVkUm9vdDtcclxuICAgICAgICBpZiAoIWRyb290KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIElOSkVDVCBST09UOiAuYXBwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNlbGYuZGV0YWNoZWRFZGl0b3IsIGRyb290KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdERldGFjaGVkUm9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0RGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYub25DaGFuZ2UgPSBzZWxmLm9uQ2hhbmdlLmJpbmQoc2VsZik7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xyXG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xyXG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3NzKCkge1xyXG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcclxuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY2NzcyA9IGF0b2IoX2Njc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2NzcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiZC1kZXRhY2hlZC1jc3MtZWRpdG9yXCIsIGlkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtZWRpdG9yXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1pbm5lcnBhbmVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogc2VsZi5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImF0dGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhdHRhY2hcIjpcclxuICAgICAgICAgICAgICAgIGlmIChET00ucXVlcnkoXCIjZWRpdG9yLWRldGFjaGVkXCIpKSBzZWxmLnByb3BzLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYucm9vdCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJERXJyb3JCb3VuZGFyeSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInJlYWN0LWVycm9yXCJ9LCBcIkNvbXBvbmVudCBFcnJvclwiKTsgIFxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjsgXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCREVycm9yQm91bmRhcnkucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCIjRkZGRkZGXCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59Iiwiey8qIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwid2hpdGVcIiB3aWR0aD1cIjE4cHhcIiBoZWlnaHQ9XCIxOHB4XCI+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG48L3N2Zz4gKi99XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE4cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiNGRkZGRkZcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcblxyXG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpIHx8IGRlZmF1bHRSUEMsXHJcbiAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlKHNldHRpbmcsIHZhbHVlKXtcclxuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYoc2V0dGluZy5wcm9wcy5pZCA9PT0gXCJhcHBsaWNhdGlvbl9pZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5zZXQoc2V0dGluZ3NSUEMpXHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hBc3NldHMoKXtcclxuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xyXG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSB0cnVlXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmZldGNoQXNzZXRzKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZClcclxuICAgICAgICAudGhlbihhc3NldHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogT2JqZWN0LmtleXMoYXNzZXRzKS5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2V0ID0gYXNzZXRzW2tdXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc3NldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhc3NldC50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcmV2aWV3KGRhdGEpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn1cclxuICAgICAgICAgICAgc3R5bGU9e3twYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPFYyQ19TZXR0aW5nc0dyb3VwIHRpdGxlPVwiUmljaFByZXNlbmNlIFNldHRpbmdzXCIgc2V0dGluZ3M9e3RoaXMucHJvcHMuc2V0dGluZ3N9IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlJpY2hQcmVzZW5jZVwiLz5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgey8qKiBvcHRpb25zICovfVxyXG4gICAgICAgICAgICAgICAgICAgIHtSUENQcm9wcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gLz4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cclxuICAgICAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XHJcbiAgICAgICAgICAgICAgICAgICAgPFJwY1ByZXZpZXcgc2V0dGluZ3M9e3RoaXN9Lz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XHJcbiAgICAgICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbmNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IFJQQ1Byb3BzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcclxuICAgICAgICBpZDogXCJuYW1lXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxyXG4gICAgICAgIGlkOiBcInN0YXRlXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiVGltZXN0YW1wIFN0YXJ0XCIsXHJcbiAgICAgICAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU21hbGxBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbl1cclxuXHJcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbiAgICAgICAgbGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxuICAgICAgICBsZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBpbnB1dE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF1cclxuICAgICAgICBsZXQgc2l6ZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17aW5wdXRNb2R1bGUuaW5wdXRXcmFwcGVyfT5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9e2Ake2lucHV0TW9kdWxlLmlucHV0RGVmYXVsdH0gJHtzaXplTW9kdWxlMi5zaXplMTZ9YH0gbmFtZT1cInN0YXRlXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlwiIG1heGxlbmd0aD1cIjk5OVwiIHZhbHVlPXt0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXX0gb25DaGFuZ2U9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgZXYudGFyZ2V0LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXS5kaXZpZGVyfSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXS5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBsZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgbGV0IGlucHV0TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXVxyXG4gICAgICAgIGxldCBzaXplTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF1cclxuICAgICAgICBsZXQgZXVoTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2lucHV0TW9kdWxlLmlucHV0V3JhcHBlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPXtgJHtpbnB1dE1vZHVsZS5pbnB1dERlZmF1bHR9ICR7c2l6ZU1vZHVsZTIuc2l6ZTE2fWB9IG5hbWU9XCJzdGF0ZVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJcIiBtYXhsZW5ndGg9XCI5OTlcIiB2YWx1ZT17dGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF19IG9uQ2hhbmdlPXsoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gZXYudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3VmFsdWUgIT09IGV2LnRhcmdldC52YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldi50YXJnZXQudmFsdWUgPSBuZXdWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBuZXdWYWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5idXR0b25XcmFwcGVyKVswXS5idXR0b25XcmFwcGVyfT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17YCR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9ICR7ZXVoTW9kdWxlMS5idXR0b259ICR7ZXVoTW9kdWxlMS5sb29rRmlsbGVkfSAke2V1aE1vZHVsZTEuY29sb3JCcmFuZH0gJHtldWhNb2R1bGUxLnNpemVTbWFsbH0gJHtldWhNb2R1bGUxLmdyb3d9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH19PlxyXG5cdCAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17ZXVoTW9kdWxlMS5jb250ZW50c30+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXS5kaXZpZGVyfSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXS5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIG9uQ2hhbmdlKGRhdGEpe1xyXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBkYXRhLnZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiBkYXRhLnZhbHVlLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG4gICAgICAgIGxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbiAgICAgICAgbGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMuY2hvaWNlc1xyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPFNlbGVjdCB2YWx1ZT17XCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSB8fCBcIm5vbmVcIn0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gb3B0aW9ucz17b3B0aW9uc30vPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLmRpdmlkZXJ9ICR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlckRlZmF1bHQpWzBdLmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgZXVoTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLmJ1dHRvbldyYXBwZXIpWzBdLmJ1dHRvbldyYXBwZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPXtgJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH0gJHtldWhNb2R1bGUxLmJ1dHRvbn0gJHtldWhNb2R1bGUxLmxvb2tGaWxsZWR9ICR7ZXVoTW9kdWxlMS5jb2xvckJyYW5kfSAke2V1aE1vZHVsZTEuc2l6ZVNtYWxsfSAke2V1aE1vZHVsZTEuZ3Jvd31gfSBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19IG9uQ2xpY2s9e3RoaXMub25DbGlja30+XHJcblx0ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtldWhNb2R1bGUxLmNvbnRlbnRzfT57dGhpcy5wcm9wcy50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFJwY1ByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMgPSB7fSl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBcInByb2ZpbGVcIlxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYnMgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGFiKHRhYil7XHJcbiAgICAgICAgbGV0IGFuY2llbnRUYWIgPSB0aGlzLnN0YXRlLmFjdGl2ZVxyXG4gICAgICAgIGlmKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZClyZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGUuc2V0QWN0aXZlKGZhbHNlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGFiLnNldEFjdGl2ZSh0cnVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHByZXZpZXcgPSBuZXcgdGhpcy5wcmV2aWV3KHtcclxuICAgICAgICAgICAgcHJldmlldzogdGhpc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnN0YXRlLnJwYylcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYm5hdlwiIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7cHJldmlldy5yZW5kZXIoKX1cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9ICAgXHJcblxyXG4gICAgaXNBY3RpdmUodGFiKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYlxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcmV2aWV3KCl7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUgPT09IFwicHJvZmlsZVwiKXJldHVybiBQcm9maWxlXHJcbiAgICAgICAgcmV0dXJuIFBvcG91dFxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IHByb3BzLnByZXZpZXcuaXNBY3RpdmUocHJvcHMuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLnByZXZpZXcudGFicy5wdXNoKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYGxjLW5hdkl0ZW1gXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5wcmV2aWV3LmNoYW5nZVRhYih0aGlzKVxyXG4gICAgICAgIH19PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm9vdE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUxLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kdWxlMSxcclxuICAgICAgICAgICAgbmFtZVRhZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5TW9kdWxlMSxcclxuICAgICAgICAgICAgdGV4dE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUxLFxyXG4gICAgICAgICAgICBzY3JvbGxlck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5vdGVNb2R1bGUxLFxyXG4gICAgICAgICAgICBwcm90aXBNb2R1bGUxLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudXNlclBvcG91dClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5VXNlclBvcG91dClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50aGVtZUdob3N0SGFpcmxpbmVDaGFubmVscylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucHJvICYmIGUuaW5saW5lKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy11c2VyUG9wb3V0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJQb3BvdXR9IHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJQbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlDZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRvcH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJXcmFwcGVyTm9ybWFsfSByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthdmF0YXJNb2R1bGUxfSByb2xlPVwiaW1nXCIgc3R5bGU9e3t3aWR0aDogXCI4MHB4XCIsIGhlaWdodDogXCI4MHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOTJcIiBoZWlnaHQ9XCI4MFwiIHZpZXdCb3g9XCIwIDAgOTIgODBcIiBjbGFzcz17YCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXthdmF0YXJVUkx9IGFsdD1cIiBcIiBjbGFzcz17YXZhdGFyTW9kdWxlMS5hdmF0YXJ9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1cyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50fSB2aWV3Qm94PVwiMCAwIDgwIDgwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhckhpbnRJbm5lcn0+e01lc3NhZ2VzLlZJRVdfUFJPRklMRX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlclRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5oZWFkZXJUYWdOb05pY2tuYW1lfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtuYW1lVGFnTW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS5oZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWV9YH0+e3VzZXIudXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5VXNlclBvcG91dH0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT57TWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlOR308L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YVtcImFzc2V0cy5sYXJnZVwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2B9IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVVzZXJQb3BvdXR9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tVc2VyUG9wb3V0IDogXCJcIn1gfSAvPilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYH0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlVXNlclBvcG91dH0gLz4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1VzZXJQb3BvdXR9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLm5hbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YH0gdGl0bGU9e2RhdGEubmFtZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuZGV0YWlscylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB0aXRsZT17ZGF0YS50aXRsZX0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5kZXRhaWxzfT57ZGF0YS5kZXRhaWxzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLnN0YXRlKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9e2RhdGEuc3RhdGV9PntkYXRhLnN0YXRlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQodGltZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7cm9vdE1vZHVsZTEuYm9keX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0gJHtyb290TW9kdWxlMS5ib2R5SW5uZXJ9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmJvZHlUaXRsZX0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake25vdGVNb2R1bGUxLm5vdGV9ICR7cm9vdE1vZHVsZTEubm90ZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBwbGFjZWhvbGRlcj17TWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUn0gbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBjbGFzcz17QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gc3R5bGU9e3toZWlnaHQ6IFwiMzZweFwifX0gZGlzYWJsZWQ+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmZvb3Rlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEucHJvdGlwfSAke3Byb3RpcE1vZHVsZTEuaW5saW5lfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake3Byb3RpcE1vZHVsZTEucHJvfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9IHN0eWxlPXt7Y29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIn19PntNZXNzYWdlcy5QSU5ORURfTUVTU0FHRVNfUFJPX1RJUH08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtjb2xvck1vZHVsZTEuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlMS5zaXplMTR9ICR7cHJvdGlwTW9kdWxlMS50aXB9YH0+e01lc3NhZ2VzLkNPTlRFWFRfTUVOVV9ISU5UfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgU3RhdHVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0uZGVmYXVsdC5nZXRQcmVzZW5jZSgpLnN0YXR1c1xyXG4gICAgICAgIGlmKHN0YXR1cyA9PT0gXCJpbnZpc2libGVcIilzdGF0dXMgPSBcIm9mZmxpbmVcIlxyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+PC9yZWN0PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgdGltZXN0YW1wQ2xhc3MgPSBcIlwiXHJcblxyXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTCh1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikgPyBcImdpZlwiIDogXCJwbmdcIilcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlQcm9maWxlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyRmFkZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXNcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcclxuICAgICAgICB0aW1lc3RhbXBDbGFzcyA9IHRpbWVzdGFtcENsYXNzIHx8IGFjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXBcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5sYXJnZVwiXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLnNtYWxsXCJdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmNvbnRlbnRJbWFnZXNQcm9maWxlfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYy0gXCI+PC9kaXY+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBDb25uZWN0ZWRBY2NvdW50cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgYWNjb3VudHMgPSBbXVxyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IEFjY291bnRNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0QWNjb3VudHMpWzBdLmRlZmF1bHRcclxuXHJcbiAgICAgICAgbGV0IGFjY3MgPSBBY2NvdW50TW9kdWxlMS5nZXRBY2NvdW50cygpLmZpbHRlcihlID0+IGUudmlzaWJpbGl0eSA9PT0gMSlcclxuICAgICAgICBmb3IobGV0IGFjYyBvZiBhY2NzKXtcclxuICAgICAgICAgICAgYWNjb3VudHMucHVzaCg8Q29ubmVjdGVkQWNjb3VudCBhY2M9e2FjY30gLz4pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhY2NvdW50cy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudHN9PlxyXG4gICAgICAgICAgICAgICAgICAgIHthY2NvdW50c31cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxvd2VyTW9kdWxlMSxcclxuICAgICAgICAgICAgYW5jaG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgU29jaWFsQ29uc3RhbnRzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYW5jaG9yKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0ICYmIGUuZGVmYXVsdC5tYXApWzBdLmRlZmF1bHRcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGFjYyA9IHRoaXMucHJvcHMuYWNjXHJcbiAgICAgICAgbGV0IGNvbnN0YW50c1NvY2lhbCA9IFNvY2lhbENvbnN0YW50cy5nZXQoYWNjLnR5cGUpXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke2ZsZXhNb2R1bGUxLmhvcml6b250YWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50fWB9IHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgIDxpbWcgYWx0PXtgTG9nbyAke2NvbnN0YW50c1NvY2lhbC5uYW1lfWB9IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50SWNvbn0gc3JjPXtjb25zdGFudHNTb2NpYWwuaWNvbi5jb2xvciB8fCBjb25zdGFudHNTb2NpYWwuaWNvbi53aGl0ZSB8fCBjb25zdGFudHNTb2NpYWwuaWNvbi5ncmV5fSAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50TmFtZUlubmVyfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lfT57YWNjLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7YWNjLnZlcmlmaWVkID8gKDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2Zsb3dlck1vZHVsZTEuZmxvd2VyU3RhckNvbnRhaW5lcn0gJHtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50VmVyaWZpZWRJY29ufWB9IHN0eWxlPXt7d2lkdGg6IFwiMTZweFwiLCBoZWlnaHQ6IFwiMTZweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9e2Zsb3dlck1vZHVsZTEuZmxvd2VyU3Rhcn0gd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNS4yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzRmNTQ1Y1wiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Zsb3dlck1vZHVsZTEuY2hpbGRDb250YWluZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIiBmaWxsPVwiI2ZmZmZmZlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPXtgJHthbmNob3JNb2R1bGUxLmFuY2hvcn0gJHthbmNob3JNb2R1bGUxLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRPcGVuSWNvbn0gd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTEwIDVWM0g1LjM3NUM0LjA2NTE5IDMgMyA0LjA2NTE5IDMgNS4zNzVWMTguNjI1QzMgMTkuOTM2IDQuMDY1MTkgMjEgNS4zNzUgMjFIMTguNjI1QzE5LjkzNiAyMSAyMSAxOS45MzYgMjEgMTguNjI1VjE0SDE5VjE5SDVWNUgxMFpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMjEgMi45OTkwMkgxNFY0Ljk5OTAySDE3LjU4Nkw5LjI5Mjk3IDEzLjI5MkwxMC43MDcgMTQuNzA2TDE5IDYuNDEzMDJWOS45OTkwMkgyMVYyLjk5OTAyWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBCYWRnZXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHVzZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXVxyXG4gICAgICAgIGxldCBVc2VyRmxhZ3MgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5Vc2VyRmxhZ3MpWzBdLlVzZXJGbGFnc1xyXG4gICAgICAgIGxldCBiYWRnZXMgPSBbXVxyXG4gICAgICAgIGxldCBzZXJpYWxpemVkID0gW11cclxuXHJcbiAgICAgICAgZm9yKGxldCBmbGFnTmFtZSBpbiBVc2VyRmxhZ3Mpe1xyXG4gICAgICAgICAgICBpZih1c2VyLmhhc0ZsYWcoVXNlckZsYWdzW2ZsYWdOYW1lXSkpc2VyaWFsaXplZC5wdXNoKGZsYWdOYW1lKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBmbGFnTmFtZSBvZiBzZXJpYWxpemVkKXtcclxuICAgICAgICAgICAgbGV0IHNlYXJjaGFibGUgPSBgcHJvZmlsZUJhZGdlJHtmbGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgXCIgXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSkuam9pbihcIlwiKX1gXHJcbiAgICAgICAgICAgIHNlYXJjaGFibGUgPSBzZWFyY2hhYmxlLnJlcGxhY2UoXCJIeXBlc3F1YWRPbmxpbmVcIiwgXCJIeXBlU3F1YWRPbmxpbmVcIilcclxuICAgICAgICAgICAgaWYoIXJvb3RNb2R1bGVbc2VhcmNoYWJsZV0pY29udGludWVcclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goPEJhZGdlIG5hbWU9e3NlYXJjaGFibGV9Lz4pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pe1xyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT1cInByb2ZpbGVCYWRnZVByZW1pdW1cIiAvPilcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZVdyYXBwZXJ9PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5wcm9maWxlQmFkZ2V9ICR7cm9vdE1vZHVsZTFbdGhpcy5wcm9wcy5uYW1lXX1gfT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBUaW1lc3RhbXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aW1lc3RhbXBDbGFzc30+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi8uLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfTGF5ZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmtleXVwTGlzdGVuZXIgPSB0aGlzLmtleXVwTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBrZXl1cExpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucmVmcy5yb290LnBhcmVudE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogcHJvZ3Jlc3N9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiAoMSAtIHByb2dyZXNzKX0pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIi5wdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QucmVtb3ZlKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogcHJvZ3Jlc3MgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCJbY2xhc3MqPVxcXCJsYXllci1cXFwiXVwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QuYWRkKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogKDEgLSBwcm9ncmVzcykgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJsYXllciBiZC1sYXllciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIsIGlkOiB0aGlzLnByb3BzLmlkLCByZWY6IFwicm9vdFwiLCBzdHlsZToge29wYWNpdHk6IDAsIHRyYW5zZm9ybTogXCJzY2FsZSgxLjEpIHRyYW5zbGF0ZVooMHB4KVwifX0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdG9vbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFRhYkJhclNlcGFyYXRvciBmcm9tIFwiLi4vdGFiQmFyU2VwYXJhdG9yXCI7XHJcbmltcG9ydCBUYWJCYXJIZWFkZXIgZnJvbSBcIi4uL3RhYkJhckhlYWRlclwiO1xyXG5pbXBvcnQgVGFiQmFySXRlbSBmcm9tIFwiLi4vdGFiQmFySXRlbVwiO1xyXG5cclxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vc2VydmVyQ2FyZFwiO1xyXG5pbXBvcnQgU2lkZWJhclZpZXcgZnJvbSBcIi4vc2lkZWJhclZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmpvaW4gPSB0aGlzLmpvaW4uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5HdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEd1aWxkc1wiXSk7XHJcbiAgICAgICAgdGhpcy5BdmF0YXJEZWZhdWx0cyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCJdKTtcclxuICAgICAgICB0aGlzLkludml0ZUFjdGlvbnMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTtcclxuICAgICAgICB0aGlzLlNvcnRlZEd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0U29ydGVkR3VpbGRzXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wcm9wcy5yb290SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2gocXVlcnksIGNsZWFyKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmV0Y2goYCR7c2VsZi5lbmRQb2ludH0ke3F1ZXJ5fSR7cXVlcnkgPyBcIiZzY2hlbWE9bmV3XCIgOiBcIj9zY2hlbWE9bmV3XCJ9YCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiZ2V0XCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBhd2FpdCByZXMudGV4dCgpXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VydmVyLmpvaW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcclxuICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXtzZWxmLmpvaW59Lz4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgc2VydmVycyA9IHNlbGYuc3RhdGUuc2VydmVycy5jb25jYXQoc2VydmVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvL3NlcnZlcnMudW5zaGlmdChzZWxmLmJkU2VydmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcclxuICAgICAgICAgICAgZGF0YS5uZXh0ID0gYD9mcm9tPSR7ZW5kfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIGRhdGEubmV4dCArPSBgJnRlcm09JHtzZWxmLnN0YXRlLnRlcm19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS50b3RhbDtcclxuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGBTaG93aW5nIDEtJHtlbmR9IG9mICR7ZGF0YS50b3RhbH0gcmVzdWx0cyBpbiAke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgdGl0bGUgKz0gYCBmb3IgJHtzZWxmLnN0YXRlLnRlcm19YDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWZzLnNidi5yZWZzLmNvbnRlbnRTY3JvbGxlci5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJGYWlsZWQgdG8gbG9hZCBzZXJ2ZXJzLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBqb2luKHNlcnZlckNhcmQpIHtcclxuICAgICAgICBpZiAoc2VydmVyQ2FyZC5wcm9wcy5waW5uZWQpIHJldHVybiB0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlKHNlcnZlckNhcmQucHJvcHMuaW52aXRlX2NvZGUpO1xyXG5cclxuICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmpvaW5FbmRQb2ludH0vJHtzZXJ2ZXJDYXJkLnByb3BzLnNlcnZlci5pZGVudGlmaWVyfWAse1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXJ2ZXJDYXJkLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxmLndpbmRvd09wdGlvbnM7XHJcbiAgICAgICAgb3B0aW9ucy54ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArIHdpbmRvdy5pbm5lcldpZHRoIC8gMiAtIG9wdGlvbnMud2lkdGggLyAyKTtcclxuICAgICAgICBvcHRpb25zLnkgPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIG9wdGlvbnMuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdyA9IG5ldyAod2luZG93LnJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuQnJvd3NlcldpbmRvdykob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3Q/c2NvcGVzPWd1aWxkcy5qb2luJnByZXZpb3VzVXJsPWh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy53ZWJDb250ZW50cy5vbihcImRpZC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXJsICE9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCIpIHJldHVybjtcclxuICAgICAgICAgICAgc2VsZi5qb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHNlbGYuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgd2luZG93T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB3aWR0aDogNTAwLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDU1MCxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiMyODJiMzBcIixcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiZFNlcnZlcigpIHtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQmV0dGVyRGlzY29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiNzUwMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCIyMDAwMCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBCZXR0ZXJEaXNjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLzg2MDA0NzQ0OTY2OTE0MDQ4LzI5MmU3ZjZiZmZmMmI3MWRmZDEzZTUwOGE4NTlhZWRkLndlYnBcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiMFRtZm81WmJPUkNScWJBZFwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHNlcnZlcjIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCIzMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCI1MCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBMaWdodGNvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvNzA1OTA4MzUwMjE4NjY2MTE3LzA1YTU2NTJmN2QxZDBhZTMyOGNhN2Q2ZTIzNTRhODJhLndlYnBcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiN2VGZmYyQVwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlcjIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGpvaW5FbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2ouZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3RFbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2pvaW4uZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3RcIjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCx7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAwLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IGRhdGFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyVmlldywge3JlZjogXCJzYnZcIn0sIHRoaXMuY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNpZGViYXI6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5zaWRlYmFyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5jb250ZW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvb2xzOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJwdFwiLCByZWY6IFwidG9vbHNcIiwgb25DbGljazogdGhpcy5jbG9zZX0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWRlYmFyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclwiLCBrZXk6IFwicHNcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXIgU0lERVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIiwgc3R5bGU6IHtmb250U2l6ZTogXCIxNnB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIlB1YmxpYyBTZXJ2ZXJzXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJIZWFkZXIsIHt0ZXh0OiBcIkNhdGVnb3JpZXNcIn0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckl0ZW0sIHtpZDogaW5kZXgsIG9uQ2xpY2s6IHRoaXMuY2hhbmdlQ2F0ZWdvcnksIGtleTogaW5kZXgsIHRleHQ6IHZhbHVlLCBzZWxlY3RlZDogdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ID09PSBpbmRleH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0taXRlbVwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGV4dC1pbnB1dCBmbGV4LXZlcnRpY2FsXCIsIHN0eWxlOiB7d2lkdGg6IFwiMTcycHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtyZWY6IFwic2VhcmNoaW5wdXRcIiwgb25LZXlEb3duOiB0aGlzLnNlYXJjaEtleURvd24sIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJ0ZXh0XCIsIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIHBsYWNlaG9sZGVyOiBcIlNlYXJjaC4uLlwiLCBtYXhMZW5ndGg6IFwiNTBcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaEtleURvd24oZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xyXG4gICAgICAgICAgICBxdWVyeSArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChxdWVyeSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhdGVnb3J5QnV0dG9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1wiQWxsXCIsIFwiRlBTIEdhbWVzXCIsIFwiTU1PIEdhbWVzXCIsIFwiU3RyYXRlZ3kgR2FtZXNcIiwgXCJNT0JBIEdhbWVzXCIsIFwiUlBHIEdhbWVzXCIsIFwiVGFibGV0b3AgR2FtZXNcIiwgXCJTYW5kYm94IEdhbWVzXCIsIFwiU2ltdWxhdGlvbiBHYW1lc1wiLCBcIk11c2ljXCIsIFwiQ29tbXVuaXR5XCIsIFwiTGFuZ3VhZ2VcIiwgXCJQcm9ncmFtbWluZ1wiLCBcIk90aGVyXCJdO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUNhdGVnb3J5KGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYucmVmcy5zZWFyY2hpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IGlkLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaWQgPT09IDApIHtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2goYD9jYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW2lkXX1gLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmNvbm5lY3Rpb24uc3RhdGUgPT09IDEpIHJldHVybiBzZWxmLm5vdENvbm5lY3RlZDtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtyZWY6IFwiY29udGVudFwiLCBrZXk6IFwicGNcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KSxcclxuICAgICAgICAgICAgc2VsZi5iZFNlcnZlcixcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLm1hcCgoc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtrZXk6IHNlcnZlci5pZGVudGlmaWVyLCBzZXJ2ZXI6IHNlcnZlciwgam9pbjogc2VsZi5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXh0ICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47c2VsZi5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pOyBzZWxmLnNlYXJjaChzZWxmLnN0YXRlLm5leHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsIHN0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiLCBtYXJnaW5Cb3R0b206IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmxvYWRpbmcgPyBcIkxvYWRpbmdcIiA6IFwiTG9hZCBNb3JlXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSlcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90Q29ubmVjdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7IHRleHQ6IHNlbGYuc3RhdGUudGl0bGUgfSk7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcIm5jY1wiLCByZWY6IFwiY29udGVudFwiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgICAgIFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNlbGYuY29ubmVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLCBzZWxmLmJkU2VydmVyXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImFcIixcclxuICAgICAgICAgICAgICAgIHtocmVmOiBcImh0dHBzOi8vZGlzY29yZHNlcnZlcnMuY29tXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICBcIkRpc2NvcmRzZXJ2ZXJzLmNvbVwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHtjb25uZWN0aW9ufSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uc3RhdGUgIT09IDIpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7Y29sb3I6IFwiI2I5YmJiZVwiLCBmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXHJcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7cGFkZGluZzogXCI1cHggMTBweCAwIDEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtaW5IZWlnaHQ6IFwiMjBweFwifSwgdHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCIsIG9uQ2xpY2s6IHNlbGYuY29ubmVjdH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUmVjb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG59XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlcnZlckNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCkgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaW1hZ2VFcnJvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGpvaW5lZDogdGhpcy5wcm9wcy5ndWlsZExpc3QuaW5jbHVkZXModGhpcy5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2VydmVyfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgbGV0IGNhcmRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jYXJkICYmIGUuY2FyZFByaW1hcnkpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4Q2hpbGQgJiYgZS5faG9yaXpvbnRhbFJldmVyc2UpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub1dyYXAgJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLCAvLyBjYXJkUHJpbWFyeS0xSHYtdG9cclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYCR7Y2FyZE1vZHVsZS5jYXJkfSAke2NhcmRNb2R1bGUuY2FyZFByaW1hcnl9ICR7QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0gYmQtc2VydmVyLWNhcmQke3NlcnZlci5waW5uZWQgPyBcIiBiZC1zZXJ2ZXItY2FyZC1waW5uZWRcIiA6IFwiXCJ9YH0sXHJcbiAgICAgICAgICAgIC8vIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIC8vIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAvLyB7IGNsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBmbGV4LTFPMUdLWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIGp1c3RpZnlTdGFydC0yeUlabzAgYWxpZ25TdHJldGNoLTFod3hNYSBub1dyYXAtM2p5bnY2XCIgfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7cmVmOiBcImltZ1wiLCBjbGFzc05hbWU6IFwiYmQtc2VydmVyLWltYWdlXCIsIHNyYzogc2VydmVyLmljb25VcmwsIG9uRXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKX0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5mbGV4Q2hpbGQrXCIgYmQtc2VydmVyLWNvbnRlbnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXArXCIgYmQtc2VydmVyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW5hbWVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbWVtYmVyLWNvdW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXkgYmQtc2VydmVyLWRlc2NyaXB0aW9uLWNvbnRhaW5lclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIHNjcm9sbGVyIGJkLXNlcnZlci1kZXNjcmlwdGlvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNhdGVnb3JpZXMuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gY29sb3JHcmVlbi0yOWlBS1lcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjM2FjMTVjXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVycm9yICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlcnZlci5lcnJvciAmJiAhdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTlwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIn0sIG9uQ2xpY2s6ICgpID0+IHt0aGlzLmpvaW4oKTt9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcclxuICAgICAgICAvL3RoaXMuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vc2Nyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TaWRlYmFyVmlldyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2lkZWJhciwgY29udGVudCwgdG9vbHN9ID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpIHVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclJlZ2lvbi1WRlRVa04gc2lkZWJhci1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtrZXk6IFwic2lkZWJhclNjcm9sbGVyXCIsIHJlZjogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgc2lkZWJhcjogdHJ1ZSwgZmFkZTogc2lkZWJhci5mYWRlIHx8IHRydWUsIGRhcms6IHNpZGViYXIuZGFyayB8fCB0cnVlfSwgc2lkZWJhci5jb21wb25lbnQpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRSZWdpb24tM25EdVl5IGNvbnRlbnQtcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFRyYW5zaXRpb25XcmFwLTNocU9FVyBjb250ZW50LXRyYW5zaXRpb24td3JhcFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwLTNZWlhkbSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0LTI4TVNuMCBzY3JvbGxlclRyYWNrLTFaSXBzdlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXItMjZuYzFlIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyIHNjcm9sbGVyXCIsIHJlZjogXCJjb250ZW50U2Nyb2xsZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50Q29sdW1uLTJocklZSCBjb250ZW50Q29sdW1uRGVmYXVsdC0xVlFrR00gY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSwgY29udGVudC5jb21wb25lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19SZWxvYWRJY29uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XHJcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiI2RjZGRkZVwiLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6XCJ9KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwelwifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TY3JvbGxlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL3Njcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckhvcml6b250YWwpWzBdXHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXJSZWdpb25TY3JvbGxlcilbMF1cclxuICAgICAgICBsZXQgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0ke3RoaXMucHJvcHMuZmFkZSA/IFwiIFwiK3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGUgOiBcIlwifWA7XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyQ2xhc3MgPSBzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXIrXCIgc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2lkZWJhcikgc2Nyb2xsZXJDbGFzcyArPSBgICR7c2Nyb2xsZXJNb2R1bGUyLnNpZGViYXJSZWdpb25TY3JvbGxlcn0gc2lkZWJhci1yZWdpb24tc2Nyb2xsZXJgXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY29udGVudENvbHVtbikge1xyXG4gICAgICAgICAgICBzY3JvbGxlckNsYXNzICs9IFwiIFwiK3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXIrXCIgY29udGVudC1yZWdpb24tc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcH0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCAgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3R9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVHJhY2t9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qge2NoaWxkcmVufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJzY3JvbGxlcndyYXBcIiwgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2tleTogXCJzY3JvbGxlclwiLCByZWY6IFwic2Nyb2xsZXJcIiwgY2xhc3NOYW1lOiBzY3JvbGxlckNsYXNzfSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLCB7Y2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XHJcbiAqL1xyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uQ2hhbmdlID09IFwiZnVuY3Rpb25cIikgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IGZsZXggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5XcmFwICYmIGUuZGVmYXVsdC5EaXJlY3Rpb24gJiYgZS5kZWZhdWx0LkNoaWxkKVswXS5kZWZhdWx0XHJcbiAgICAgICAgbGV0IG5hdGl2ZVNlbGVjdCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlNlbGVjdFRlbXBXcmFwcGVyXCIpWzBdLmRlZmF1bHRcclxuICAgICAgICByZXR1cm4gKDxmbGV4IGRpcmVjdGlvbj17ZmxleC5EaXJlY3Rpb24uSE9SSVpPTlRBTH0gYWxpZ249e2ZsZXguQWxpZ24uQ0VOVEVSfT5cclxuICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KG5hdGl2ZVNlbGVjdCwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9KSl9XHJcbiAgICAgICAgICAgIDwvZmxleD4pLypcclxuICAgICAgICByZXR1cm4gQkRGREIuUmVhY3RVdGlscy5jcmVhdGVFbGVtZW50KEludGVybmFsQ29tcG9uZW50cy5MaWJyYXJ5Q29tcG9uZW50cy5GbGV4LCB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogQkRGREIuZGlzQ04uc2VsZWN0d3JhcHBlcixcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiBJbnRlcm5hbENvbXBvbmVudHMuTGlicmFyeUNvbXBvbmVudHMuRmxleC5EaXJlY3Rpb24uSE9SSVpPTlRBTCxcclxuICAgICAgICAgICAgYWxpZ246IEludGVybmFsQ29tcG9uZW50cy5MaWJyYXJ5Q29tcG9uZW50cy5GbGV4LkFsaWduLkNFTlRFUixcclxuICAgICAgICAgICAgY2hpbGRyZW46IEJERkRCLlJlYWN0VXRpbHMuY3JlYXRlRWxlbWVudChJbnRlcm5hbENvbXBvbmVudHMuTmF0aXZlU3ViQ29tcG9uZW50cy5TZWxlY3QsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH0pOyovXHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vc3dpdGNoXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NHcm91cCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGl0bGUsIHNldHRpbmdzLCBidXR0b259ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBidXR0b25Db21wb25lbnQgPSBidXR0b24gPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge2tleTogXCJ0aXRsZS1idXR0b25cIiwgY2xhc3NOYW1lOiBcImJkLXBmYnRuXCIsIG9uQ2xpY2s6IGJ1dHRvbi5vbkNsaWNrfSwgYnV0dG9uLnRpdGxlKSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRpdGxlfSksXHJcbiAgICAgICAgICAgICAgICBidXR0b25Db21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXSwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGlkLCBjaGVja2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICAgICAgICB9KV07XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1BhbmVsIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXR0aW5nc30gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aGlzLnByb3BzLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYnV0dG9uICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogdGhpcy5wcm9wcy5idXR0b24ub25DbGlja30sIHRoaXMucHJvcHMuYnV0dG9uLnRpdGxlKSxcclxuICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXSwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGlkLCBjaGVja2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF0ubWFyZ2luVG9wNjB9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4vdGFiQmFyU2VwYXJhdG9yXCI7XHJcbmltcG9ydCBUYWJCYXJIZWFkZXIgZnJvbSBcIi4vdGFiQmFySGVhZGVyXCI7XHJcbmltcG9ydCBUYWJCYXJJdGVtIGZyb20gXCIuL3RhYkJhckl0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TaWRlQmFyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2kgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2NsYXNzKj1zaWRlLV0gPiBbY2xhc3MqPXNlbGVjdGVkXVwiKTtcclxuICAgICAgICBpZiAoc2kpIHRoaXMuc2NuID0gc2kuY2xhc3NOYW1lO1xyXG4gICAgICAgIGNvbnN0IG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltjbGFzcyo9c2lkZS1dID4gW2NsYXNzKj0naXRlbS0nXTpub3QoW2NsYXNzKj1zZWxlY3RlZF0pXCIpO1xyXG4gICAgICAgIGlmIChucykgdGhpcy5uc2NuID0gbnMuY2xhc3NOYW1lO1xyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2NsYXNzKj0nc2lkZS0nXSA+IFtjbGFzcyo9J2l0ZW0tJ11cIik7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhYnMpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IG51bGxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkID0gdGhpcy5zZXRTZWxlY3RlZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogbnVsbCxcclxuICAgICAgICAgICAgaXRlbXM6IHNlbGYucHJvcHMuaXRlbXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBpbml0aWFsU2VsZWN0aW9uID0gc2VsZi5wcm9wcy5pdGVtcy5maW5kKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5zZWxlY3RlZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlbGVjdGVkID0gaW5pdGlhbFNlbGVjdGlvbi5pZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHtoZWFkZXJUZXh0fSA9IHNlbGYucHJvcHM7XHJcbiAgICAgICAgY29uc3Qge2l0ZW1zLCBzZWxlY3RlZH0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogaGVhZGVyVGV4dCwgYnV0dG9uOiB0aGlzLnByb3BzLmhlYWRlckJ1dHRvbn0pLFxyXG4gICAgICAgICAgICBpdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7aWQsIHRleHR9ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySXRlbSwge2tleTogaWQsIHNlbGVjdGVkOiBzZWxlY3RlZCA9PT0gaWQsIHRleHQ6IHRleHQsIGlkOiBpZCwgb25DbGljazogc2VsZi5vbkNsaWNrfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZChlKSB7XHJcbiAgICAgICAgZS50YXJnZXQuY2xhc3NOYW1lID0gdGhpcy5zY247XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltjbGFzcyo9c2lkZV0gPiBbY2xhc3MqPXNlbGVjdGVkXVwiKTtcclxuICAgICAgICBpZiAoc2kpIHtcclxuICAgICAgICAgICAgc2kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc2V0U2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBzaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zZXRTZWxlY3RlZCk7XHJcbiAgICAgICAgICAgIHNpLmNsYXNzTmFtZSA9IHRoaXMubnNjbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkOiBudWxsfSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWQ6IGlkfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHRoaXMucHJvcHMub25DbGljayhpZCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RleHQsIGluZm99ID0gdGhpcy5wcm9wcy5kYXRhO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtdmVydGljYWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcCB1aS1zd2l0Y2gtaXRlbVwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LWhvcml6b250YWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMyBtYXJnaW4tcmVzZXQgbWFyZ2luLXJlc2V0IHVpLWZsZXgtY2hpbGRcIn0sIHRleHQpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRleHQgc3R5bGUtZGVzY3JpcHRpb24gbWFyZ2luLXRvcC00XCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sIGluZm8pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGFiQmFySGVhZGVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sIHRoaXMucHJvcHMudGV4dCwgdGhpcy5wcm9wcy5idXR0b24pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMucHJvcHMuc2VsZWN0ZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgdWktdGFiLWJhci1pdGVtJHt0aGlzLnByb3BzLnNlbGVjdGVkID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKHRoaXMucHJvcHMuaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGFiQmFyU2VwYXJhdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItc2VwYXJhdG9yIG1hcmdpbi10b3AtOCBtYXJnaW4tYm90dG9tLThcIn0pO1xyXG4gICAgfVxyXG59IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCJcclxuY29uc3QgUmVhY3QgPSBCRFYyLnJlYWN0XHJcblxyXG5jb25zdCBpbnRlcnZhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5JbnRlcnZhbClbMF1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wb25lbnQsIE1lc3NhZ2VzKSB7XHJcbiAgICBjbGFzcyBUaW1lUmVuZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBuZXcgaW50ZXJ2YWxNb2R1bGUxLkludGVydmFsKClcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsLnN0YXJ0KDFlMywgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoc2VsZi5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsLnN0b3AoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50RGlkVXBkYXRlKGFjdGl2aXR5KXtcclxuICAgICAgICAgICAgaWYoYWN0aXZpdHkudGltZXN0YW1wcy5lbmQgPT09IHRoaXMucHJvcHMudGltZXN0YW1wcy5lbmQgJiYgYWN0aXZpdHkudGltZXN0YW1wcy5zdGFydCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLnN0YXJ0KXJldHVyblxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldFVwZGF0ZWRUaW1lKCl7XHJcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXBzID0gdGhpcy5wcm9wcy50aW1lc3RhbXBzXHJcbiAgICAgICAgICAgIGxldCBub3cgPSBEYXRlLm5vdygpIC8gMWUzO1xyXG4gICAgICAgICAgICBpZihudWxsICE9IHRpbWVzdGFtcHMuZW5kKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYobm93LCBjaGVja1VuaXgodGltZXN0YW1wcy5lbmQpIC8gMWUzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5zdGFydCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaWZmKGNoZWNrVW5peCh0aW1lc3RhbXBzLnN0YXJ0KSAvIDFlMywgbm93KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogMCxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IDAsXHJcbiAgICAgICAgICAgICAgICBzZWNvbmRzOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlclRpbWUobnVtYmVyLCByZW1vdmVaZXJvKXtcclxuICAgICAgICAgICAgaWYocmVtb3ZlWmVybyA9PT0gdW5kZWZpbmVkKXJlbW92ZVplcm8gPSBmYWxzZVxyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvICYmIG51bWJlciA8PSAwKXJldHVybiAtMVxyXG4gICAgICAgICAgICBpZihudW1iZXIgPCAxMClyZXR1cm4gXCIwXCIrbnVtYmVyXHJcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldERpZmYodGltZXN0YW1wLCBub3cpe1xyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBNYXRoLm1heChub3cgLSB0aW1lc3RhbXAsIDApXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gTWF0aC5mbG9vcihob3VycykgJSA2MFxyXG4gICAgICAgICAgICBsZXQgbWludXRlcyA9IE1hdGguZmxvb3IoaG91cnMgLyA2MCkgJSA2MFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IE1hdGguZmxvb3IoaG91cnMgLyAzNjAwKSAlIDI0LFxyXG4gICAgICAgICAgICAgICAgbWludXRlcyxcclxuICAgICAgICAgICAgICAgIHNlY29uZHNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IHRoaXMucHJvcHNcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSBwcm9wcy50aW1lc3RhbXBzXHJcblxyXG4gICAgICAgICAgICBsZXQgdXNlZFByb3BzID0gZnVuY3Rpb24ocHJvcHMsIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBwcm9wcykgcmV0dXJuIHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXBzID0ge31cclxuICAgICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXNbaV1cclxuICAgICAgICAgICAgICAgICAgICBpZighaXRlbXMuaW5kZXhPZihrZXkpID49IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzW2tleV0gPSBwcm9wc1trZXldXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aW1lc3RhbXBzXHJcbiAgICAgICAgICAgIH0ocHJvcHMsIFtcInRpbWVzdGFtcHNcIl0pXHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlXHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IHN0YXRlLmhvdXJzXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gc3RhdGUubWludXRlc1xyXG4gICAgICAgICAgICBsZXQgc2Vjb25kcyA9IHN0YXRlLnNlY29uZHNcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogdGhpcy5yZW5kZXJUaW1lKGhvdXJzLCAhMCksXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzOiB0aGlzLnJlbmRlclRpbWUobWludXRlcyksXHJcbiAgICAgICAgICAgICAgICBzZWNvbmRzOiB0aGlzLnJlbmRlclRpbWUoc2Vjb25kcylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYodGltZXN0YW1wcy5lbmQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9FTkQuZm9ybWF0KGRhdGEpXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLnN0YXJ0ICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgdXNlZFByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfU1RBUlQuZm9ybWF0KGRhdGEpXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBUaW1lUmVuZGVyXHJcbn07XHJcblxyXG5mdW5jdGlvbiBjaGVja1VuaXgoZSkge1xyXG4gICAgcmV0dXJuIChcIlwiICsgZSkubGVuZ3RoIDwgMTMgPyAxZTMgKiBlIDogZVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Ub29scyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgdG9vbHNNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b29sc0NvbnRhaW5lcilbMF1cclxuICAgICAgICBsZXQgY29udGFpbmVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGFpbmVyICYmIGUuY2xvc2VCdXR0b24gJiYgZS5jbG9zZUJ1dHRvbkJvbGQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInRvb2xzLWNvbnRhaW5lciBcIit0b29sc01vZHVsZS50b29sc0NvbnRhaW5lcn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInRvb2xzIFwiK3Rvb2xzTW9kdWxlLnRvb2xzfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjb250YWluZXJNb2R1bGUuY29udGFpbmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJidG4tY2xvc2UgXCIrY29udGFpbmVyTW9kdWxlLmNsb3NlQnV0dG9uLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJlc2MtdGV4dCBcIitjb250YWluZXJNb2R1bGUua2V5YmluZH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRVNDXCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNsb3NlQnV0dG9uICYmIGUua2V5YmluZEJvbGQpWzBdLmNsb3NlQnV0dG9uLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKGNsb3NlQnV0dG9uKSBjbG9zZUJ1dHRvbi5jbGljaygpO1xyXG4gICAgfVxyXG59IiwiLyoqXHJcbiAqIFRvb2x0aXAgdGhhdCBhdXRvbWF0aWNhbGx5IHNob3cgYW5kIGhpZGUgdGhlbXNlbHZlcyBvbiBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cy5cclxuICogV2lsbCBhbHNvIHJlbW92ZSB0aGVtc2VsdmVzIGlmIHRoZSBub2RlIHRvIHdhdGNoIGlzIHJlbW92ZWQgZnJvbSBET00gdGhyb3VnaFxyXG4gKiBhIE11dGF0aW9uT2JzZXJ2ZXIuXHJcbiAqXHJcbiAqIE5vdGUgdGhpcyBpcyBub3QgdXNpbmcgRGlzY29yZCdzIGludGVybmFscyBidXQgbm9ybWFsIERPTSBtYW5pcHVsYXRpb24gYW5kIGVtdWxhdGVzXHJcbiAqIERpc2NvcmQncyBvd24gdG9vbHRpcHMgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS5cclxuICpcclxuICogQG1vZHVsZSBFbXVsYXRlZFRvb2x0aXBcclxuICogQHZlcnNpb24gMC4wLjFcclxuICovXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG4vLzxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGlzYWJsZWRQb2ludGVyRXZlbnRzLTFwdGdUQlwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAyMzdweDsgYm90dG9tOiA1MXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcERpc2FibGVQb2ludGVyRXZlbnRzLTNlYUJHTlwiIHN0eWxlPVwib3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lO1wiPlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLXCI+PC9kaXY+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwQ29udGVudC1icVZMV0tcIj5Vc2VyIFNldHRpbmdzPC9kaXY+XHJcbi8vXHQ8L2Rpdj5cclxuLy88L2Rpdj5cclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZY1wiIHN0eWxlPVwidG9wOiA4NjBweDsgbGVmdDogNjMyLjVweDtcIj5cclxuLy9cdDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyB0b29sdGlwQmxhY2stUFBHNDd6IHRvb2x0aXBUb3AtWEREU3h4XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0Q2hhbmdlbG9nXHJcbi8vXHQ8L2Rpdj5cclxuLy88L2Rpdj5cclxubGV0IFRvb2x0aXBDbGFzc2VzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBDbGFzc2VzKCl7XHJcblx0aWYoVG9vbHRpcENsYXNzZXMpcmV0dXJuIFRvb2x0aXBDbGFzc2VzXHJcblx0cmV0dXJuIFRvb2x0aXBDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ0b29sdGlwXCIsIFwidG9vbHRpcEJsYWNrXCIpO1xyXG59XHJcbmxldCBUb29sdGlwTGF5ZXJzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBMYXllcnMoKXtcclxuXHRpZihUb29sdGlwTGF5ZXJzKXJldHVybiBUb29sdGlwTGF5ZXJzXHJcblx0cmV0dXJuIFRvb2x0aXBMYXllcnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImxheWVyXCIsIFwibGF5ZXJDb250YWluZXJcIik7XHJcbn1cclxuXHJcbmNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIGNvbnN0IHVwcGVyQ2FzZSA9IHNpZGVPckNvbG9yWzBdLnRvVXBwZXJDYXNlKCkgKyBzaWRlT3JDb2xvci5zbGljZSgxKTtcclxuICAgIGNvbnN0IHRvb2x0aXBDbGFzcyA9IGdldFRvb2x0aXBDbGFzc2VzKClbYHRvb2x0aXAke3VwcGVyQ2FzZX1gXTtcclxuICAgIGlmICh0b29sdGlwQ2xhc3MpIHJldHVybiB0b29sdGlwQ2xhc3M7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGNsYXNzRXhpc3RzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIHJldHVybiBnZXRDbGFzcyhzaWRlT3JDb2xvcikgPyB0cnVlIDogZmFsc2U7XHJcbn07XHJcblxyXG5jb25zdCB0b1B4ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1weGA7XHJcbn07XHJcblxyXG4vKiA8ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljIGRhLWxheWVyXCIgc3R5bGU9XCJsZWZ0OiAyMzQuNXB4OyBib3R0b206IDUxcHg7XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgZGEtdG9vbHRpcCB0b29sdGlwVG9wLVhERFN4eCB0b29sdGlwQmxhY2stUFBHNDd6XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlySyBkYS10b29sdGlwUG9pbnRlclwiPjwvZGl2PlxyXG4gICAgICAgIFVzZXIgU2V0dGluZ3NcclxuICAgIDwvZGl2PlxyXG48L2Rpdj4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtdWxhdGVkVG9vbHRpcCB7XHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAY29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxqUXVlcnkpfSBub2RlIC0gRE9NIG5vZGUgdG8gbW9uaXRvciBhbmQgc2hvdyB0aGUgdG9vbHRpcCBvblxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXAgLSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9vbHRpcFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgdG9vbHRpcFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1ibGFja10gLSBjb3JyZWxhdGVzIHRvIHRoZSBkaXNjb3JkIHN0eWxpbmcvY29sb3JzIChibGFjaywgYnJhbmQsIGdyZWVuLCBncmV5LCByZWQsIHllbGxvdylcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2lkZT10b3BdIC0gY2FuIGJlIGFueSBvZiB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRcclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnByZXZlbnRGbGlwPWZhbHNlXSAtIHByZXZlbnRzIG1vdmluZyB0aGUgdG9vbHRpcCB0byB0aGUgb3Bwb3NpdGUgc2lkZSBpZiBpdCBpcyB0b28gYmlnIG9yIGdvZXMgb2Zmc2NyZWVuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVkPWZhbHNlXSAtIHdoZXRoZXIgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIGZyb20gc2hvd2luZyBvbiBob3ZlclxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKG5vZGUsIHRleHQsIG9wdGlvbnMgPSB7fSkge1xyXG5cdFx0Y29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgcHJldmVudEZsaXAgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZX0gPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5ub2RlID0gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0dGhpcy5zaWRlID0gc2lkZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMucHJldmVudEZsaXAgPSBwcmV2ZW50RmxpcDtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmICghY2xhc3NFeGlzdHModGhpcy5zaWRlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU2lkZSAke3RoaXMuc2lkZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc3R5bGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTdHlsZSAke3RoaXMuc3R5bGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0XHJcblx0XHR0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBMYXllcnMoKS5sYXllciArIFwiIFwiICsgZ2V0VG9vbHRpcExheWVycygpLmRpc2FibGVkUG9pbnRlckV2ZW50cztcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblxyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwQ29udGVudFxyXG5cclxuXHRcdGNvbnN0IHBvaW50ZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHBvaW50ZXJFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcFBvaW50ZXI7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQocG9pbnRlckVsZW1lbnQpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQodGhpcy5sYWJlbEVsZW1lbnQpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLnRvb2x0aXBFbGVtZW50KTtcclxuXHJcblx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNob3coKTtcclxuXHJcblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG5cdFx0XHRcdG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcblx0XHRcdFx0XHRjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2YodGhpcy5ub2RlKSA+IC0xO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnModGhpcy5ub2RlKSk7XHJcblx0XHRcdFx0XHRpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoKSA9PiB7XHJcblx0XHRcdHRoaXMuaGlkZSgpO1xyXG5cdFx0fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhaW5lciB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIGJlIGFwcGVuZGVkLiAqL1xyXG4gICAgZ2V0IGNvbnRhaW5lcigpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUucG9wb3V0cylbMF0ucG9wb3V0cy5zcGxpdChcIiBcIilbMF0rXCIgfiAuXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJDb250YWluZXIpWzBdLmxheWVyQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXSk7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYWJvdmUgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QWJvdmUoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGJlbG93IHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0JlbG93KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgKyB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IFV0aWxzLnNjcmVlbkhlaWdodDsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiB0byB0aGUgbGVmdCBvZiB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dMZWZ0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPj0gMDsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiB0byB0aGUgcmlnaHQgb2YgdGhlIGVsZW1lbnQgKi9cclxuXHRnZXQgY2FuU2hvd1JpZ2h0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPD0gVXRpbHMuc2NyZWVuV2lkdGg7IH1cclxuXHJcbiAgICAvKiogSGlkZXMgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlbGVhdmUuICovXHJcblx0aGlkZSgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XHJcblx0fVxyXG5cclxuICAgIC8qKiBTaG93cyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VlbnRlci4gV2lsbCBhdHRlbXB0IHRvIGZsaXAgaWYgcG9zaXRpb24gd2FzIHdyb25nLiAqL1xyXG5cdHNob3coKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHRcdHRoaXMubGFiZWxFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5sYWJlbDtcclxuXHRcdHRoaXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmVsZW1lbnQpO1xyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJ0b3BcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93QWJvdmUgfHwgKCF0aGlzLmNhblNob3dBYm92ZSAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93QWJvdmUoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJib3R0b21cIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93QmVsb3cgfHwgKCF0aGlzLmNhblNob3dCZWxvdyAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93QmVsb3coKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJsZWZ0XCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0xlZnQgfHwgKCF0aGlzLmNhblNob3dMZWZ0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dMZWZ0KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93UmlnaHQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwicmlnaHRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93UmlnaHQgfHwgKCF0aGlzLmNhblNob3dSaWdodCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93UmlnaHQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dMZWZ0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGFib3ZlIHRoZSBub2RlLiAqL1xyXG5cdHNob3dBYm92ZSgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInRvcFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAtIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBiZWxvdyB0aGUgbm9kZS4gKi9cclxuXHRzaG93QmVsb3coKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJib3R0b21cIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgKyAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIGxlZnQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd0xlZnQoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJsZWZ0XCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAtIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlclZlcnRpY2FsbHkoKTtcclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIHJpZ2h0IG9mIHRoZSBub2RlLiAqL1xyXG5cdHNob3dSaWdodCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInJpZ2h0XCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlclZlcnRpY2FsbHkoKTtcclxuXHR9XHJcblxyXG5cdGNlbnRlckhvcml6b250YWxseSgpIHtcclxuICAgICAgICBjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyAodGhpcy5ub2RlLm9mZnNldFdpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC8gMikpKTtcclxuXHR9XHJcblxyXG5cdGNlbnRlclZlcnRpY2FsbHkoKSB7XHJcblx0XHRjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArICh0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0IC8gMik7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKSkpO1xyXG5cdH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCB0ZXh0ID0gXCJcIn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWtkaXJwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVxdWVzdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyaW1yYWZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwieWF1emxcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3JlYWN0RGV2VG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BY2NvdW50SW5mb3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wcmVzZW5jZVNldHRpbmdzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NlcnZlckNhcmQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NpZGViYXJWaWV3LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcmVsb2FkSWNvbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Njcm9sbGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlbGVjdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc3dpdGNoLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFySGVhZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFySXRlbS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhclNlcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RpbWVzdGFtcFJlbmRlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXBXcmFwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkveFN2Zy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImV2ZW50c1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJmc1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJta2RpcnBcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJyZXF1ZXN0XCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJMQ0NoYW5lbG9nIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwidGl0bGUiLCJpdGVtcyIsImltYWdlIiwic3VidGl0bGUiLCJyZW1vdGUiLCJnZXRHbG9iYWwiLCJ2ZXJzaW9uIiwiZm9vdGVyIiwiVGV4dEVsZW1lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImZpbmRCeURpc3BsYXlOYW1lIiwiTW9kYWxTdGFjayIsImZpbmRCeVByb3BzIiwiQW5jaG9yIiwiZmluZCIsIm0iLCJkaXNwbGF5TmFtZSIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJjbGljayIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicG9wIiwiQkRWMiIsImpvaW5MQyIsInN1cHBvcnRMaW5rIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50Iiwib25DbGljayIsImNsYXNzTmFtZSIsInNpemUiLCJTaXplcyIsIlNNQUxMIiwiY29sb3IiLCJDb2xvcnMiLCJTVEFOREFSRCIsImJiZENoYW5nZWxvZyIsInR5cGUiLCJzZXR0aW5ncyIsImlkIiwiaW5mbyIsImltcGxlbWVudGVkIiwiaGlkZGVuIiwiY2F0IiwiY2F0ZWdvcnkiLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwiYmRwbHVnaW5FcnJvcnMiLCJiZHRoZW1lRXJyb3JzIiwiYmRDb25maWciLCJPYmplY3QiLCJjcmVhdGUiLCJCZXR0ZXJEaXNjb3JkQ29uZmlnIiwiYmR0aGVtZXMiLCJiZHBsdWdpbnMiLCJwbHVnaW5Db29raWUiLCJ0aGVtZUNvb2tpZSIsImxvY2FsU3RvcmFnZUZpeCIsImxvYWRpbmdJY29uIiwiZGVwcmVjYXRlR2xvYmFsIiwia2V5IiwidmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsIlV0aWxzIiwid2FybiIsImdsb2JhbEtleXMiLCJrZXlzIiwiR2xvYmFscyIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwic2V0Q29uZmlnIiwiaW5pdCIsInJlcXVpcmUiLCJ2MkxvYWRlciIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwiY29udGVudFdpbmRvd0dldHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkhUTUxJRnJhbWVFbGVtZW50IiwicHJvdG90eXBlIiwiY29udGVudFdpbmRvdyIsIlJlZmxlY3QiLCJhcHBseSIsImFyZ3VtZW50cyIsIlByb3h5Iiwib2JqIiwicHJvcCIsInVuZGVmaW5lZCIsInZhbCIsImJpbmQiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIkZ1bmN0aW9uIiwib09wZW4iLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiVEZIb3VyIiwiaW5qZWN0MjRIb3VyIiwiY2FuY2VsMjRIb3VyIiwidHdlbHZlSG91ciIsIlJlZ0V4cCIsImNvbnZlcnQiLCJkYXRhIiwibWF0Y2hlZCIsInJldHVyblZhbHVlIiwibWF0Y2giLCJsZW5ndGgiLCJyZXBsYWNlIiwicGFkU3RhcnQiLCJwYXJzZUludCIsImNhbmNlbENvenkiLCJtb25rZXlQYXRjaCIsIlRpbWVGb3JtYXR0ZXIiLCJhZnRlciIsImNhbmNlbENvbXBhY3QiLCJyZW1vdmUyNEhvdXIiLCJkaXNwYXRjaGVyIiwiTGlnaHRjb3JkIiwiRGlzY29yZE1vZHVsZXMiLCJDaGFubmVsTW9kdWxlIiwiQkRNb2R1bGVzIiwiZSIsImRlZmF1bHQiLCJnZXRDaGFubmVsIiwiaGFzQ2hhbm5lbCIsInJlbGF0aW9uU2hpcE1vZHVsZSIsImFkZFJlbGF0aW9uc2hpcCIsIkRNTW9kdWxlIiwiY2xvc2VQcml2YXRlQ2hhbm5lbCIsImJsb2NrZWQiLCJ1c2VyTW9kdWxlIiwiZ2V0Q3VycmVudFVzZXIiLCJBbnRpQm90RE0iLCJhbnRpRE0iLCJlbmFibGVkIiwiZW5hYmxlIiwic3Vic2NyaWJlIiwiZGlzYWJsZSIsInVuc3Vic2NyaWJlIiwiZXYiLCJtZXNzYWdlIiwiYXV0aG9yIiwiYm90IiwiZ3VpbGRfaWQiLCJjaGFubmVsIiwiY2hhbm5lbF9pZCIsInNjYW5NZXNzYWdlIiwic2hvd1RvYXN0IiwidXNlcm5hbWUiLCJkaXNjcmltaW5hdG9yIiwibG9jYXRpb24iLCJ0ZXN0IiwiY29udGVudCIsIkVtYmVkc0NvbnRhaW5zIiwic2VhcmNoIiwiZW1iZWRzIiwibWFwIiwiZW1iZWQiLCJ0ZXh0IiwiZmllbGRzIiwibmFtZSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJwcm9jZXNzIiwiQ3VzdG9tUmljaFByZXNlbmNlIiwiZ2FtZSIsImZvcm1hdGVkR2FtZSIsImFwcGxpY2F0aW9uX2lkIiwiZGV0YWlscyIsInN0YXRlIiwidGltZXN0YW1wcyIsInN0YXJ0IiwiYXNzZXRzIiwibGFyZ2VfaW1hZ2UiLCJzbWFsbF9pbWFnZSIsInNlbmRHYW1lIiwiTE9DQUxfQUNUSVZJVFlfVVBEQVRFIiwiYWN0aXZpdHkiLCJjb25zb2xlIiwibG9nIiwic2V0IiwiZmV0Y2hBc3NldHMiLCJhcHBsaWNhdGlvbklkIiwiZ2V0QXNzZXRzIiwiRXJyb3IiLCJSZWFjdERPTSIsIlJlYWN0RG9tIiwiUmVhY3RDb21wb25lbnQiLCJXaW5kb3dDb25maWdGaWxlIiwiZW1vdGVzIiwic2NyZWVuV2lkdGgiLCJNYXRoIiwibWF4IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lcldpZHRoIiwic2NyZWVuSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwiaW5qZWN0Q1NTIiwiY3NzIiwiRE9NIiwiYWRkU3R5bGUiLCJlc2NhcGVJRCIsImNsZWFyQ1NTIiwicmVtb3ZlU3R5bGUiLCJsaW5rSlMiLCJhZGRTY3JpcHQiLCJ1bmxpbmtKUyIsInJlbW92ZVNjcmlwdCIsImdldFBsdWdpbiIsImhhc093blByb3BlcnR5IiwicGx1Z2luIiwiZ2V0Q29yZSIsIm1haW5Db3JlIiwiYWxlcnQiLCJzaG93Q29uZmlybWF0aW9uTW9kYWwiLCJjYW5jZWxUZXh0Iiwib3B0aW9ucyIsImZpbmRNb2R1bGUiLCJmaWx0ZXIiLCJmaW5kQWxsTW9kdWxlcyIsImZpbmRBbGwiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZmluZEJ5VW5pcXVlUHJvcGVydGllcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJmaW5kQnlQcm90b3R5cGVzIiwiZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkV2ZW50RW1pdHRlciIsImV2ZW50TmFtZSIsImFyZ3MiLCJlbWl0Iiwib2ZmIiwiZXZlbnRBY3Rpb24iLCJyZW1vdmVMaXN0ZW5lciIsInNlbGVjdG9ycyIsInJlbW92ZURhIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwicHVzaCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidXNlclNldHRpbmdzQWNjb3VudCIsInZpZXdCb2R5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJpc05hTiIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9fZXNNb2R1bGUiLCJiYXNlQ2xhc3NOYW1lIiwic3BsaXQiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJyZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImFzc2lnbiIsInJlbW92ZUNvbG9yZWRUZXh0IiwiY2xhc3NOYW1lTWFya3VwIiwibWFya3VwIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwidGltZUNhY2hlIiwid2F0Y2hlcnMiLCJnZXRDb250ZW50UmVxdWlyZSIsInBsdWdpbnNGb2xkZXIiLCJfcGx1Z2luc0ZvbGRlciIsInJlYWxwYXRoU3luYyIsImRhdGFQYXRoIiwidGhlbWVzRm9sZGVyIiwiX3RoZW1lc0ZvbGRlciIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsImlzRW1wdHkiLCJleHBvcnRzIiwibWFrZVBsYWNlaG9sZGVyUGx1Z2luIiwiZ2V0TmFtZSIsImdldEF1dGhvciIsImdldERlc2NyaXB0aW9uIiwic291cmNlIiwid2Vic2l0ZSIsImxvYWRDb250ZW50IiwiZmlsZSIsInN0YWNrIiwidW5sb2FkQ29udGVudCIsImNhY2hlIiwiaXNMb2FkZWQiLCJyZWxvYWRDb250ZW50IiwiY2FudFVubG9hZCIsImxvYWROZXdDb250ZW50IiwiYmFzZWRpciIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJjb250ZW50TGlzdCIsInZhbHVlcyIsInJlbW92ZWQiLCJmIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJsb2FkUGx1Z2lucyIsImxvYWRUaGVtZXMiLCJjb25maWciLCJmbGF0IiwiRUQiLCJXZWJTb2NrZXQiLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uVXBkYXRlRmFpbGVkIiwiZGlkVXBkYXRlIiwidXBkYXRlSW5qZWN0b3IiLCJyZWxhdW5jaCIsImV4aXQiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJhdG9iIiwiYWRkRXZlbnRMaXN0ZW5lciIsIlBsdWdpbkNlcnRpZmllciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJwcmV2aW91c1ZlcnNpb24iLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJlbW9qaU1vZHVsZSIsIkVtb2ppTW9kdWxlIiwicGF0Y2hTb2NpYWwiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInBhdGNoTWVzc2FnZUhlYWRlciIsInBhdGNoTWVtYmVyTGlzdCIsInBhdGNoQXR0YWNobWVudCIsImhhdmVJbnN0YWxsZWREZWZhdWx0Iiwib25DbG9zZSIsImxvZ28iLCJpbm5lckhUTUwiLCJ0aW1lc0NoZWNrZWQiLCJ3cmFwcGVyIiwiZ3VpbGRDbGFzc2VzIiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwiZGVmZXJMb2FkZWQiLCJyZWFkeVN0YXRlIiwiaW5qZWN0RXh0ZXJuYWxzIiwib3JpZ2luYWwiLCJnZXRTZXR0aW5nR3JvdXAiLCJzYXZlU2V0dGluZ3MiLCJsb2FkU2V0dGluZ3MiLCJzZXR0aW5nIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwic2V0QXR0cmlidXRlIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW5kZXJTaWRlYmFyIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJsaW5rIiwiaHJlZiIsInRhcmdldCIsIkxpZ2h0Y29yZExvZ28iLCJCRExvZ28iLCJjbGFzc05hbWVDb2xvck11dGVkIiwic2l6ZXMiLCJjbGFzc05hbWVWZXJzaW9uSGFzaCIsImNvbG9yTXV0ZWQiLCJzaXplMzIiLCJ2ZXJzaW9uSGFzaCIsImhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInV1aWR2NCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImRpc3BsYXkiLCJhcHBseUJhZGdlcyIsInVzZXIiLCJjaGF0IiwibmV4dFRpY2siLCJkaXYiLCJjaGlsZE5vZGVzIiwiZGlzdGFudCIsImdldEJhZGdlcyIsInRoZW4iLCJiYWRnZXMiLCJzdmciLCJ3aWR0aCIsInNjb3BlcyIsInNjb3BlIiwiY29tcG9uZW50IiwiZGl2MiIsInJlYWN0RG9tIiwicmVuZGVyIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJyZW5kZXJEZWNvcmF0b3JzIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwicGFyc2UiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwic2V0U2V0dGluZ0dyb3VwIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic2VsZWN0b3IiLCJnZXRTZWxlY3RvciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJjb250ZXh0TWVudSIsImF0dGFjaCIsImNtIiwicXVlcnkiLCJjb250YWluZXIiLCJjbVdyYXAiLCJhcHBlbmQiLCJ0b3AiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJ6SW5kZXgiLCJyZW1vdmVDTSIsImtleUNvZGUiLCJjbWciLCJpdGVtR3JvdXAiLCJjbWkiLCJpdGVtIiwiY2xpY2thYmxlIiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5Iiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwiZGVsZXRlIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJBcGkiLCJBdXRob3JpemF0aW9uIiwianNvbiIsImNhdGNoIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsInJlc3BvbnNlQm9keSIsInByb21pc2UiLCJ1c2VyX2lkIiwicm91dGUiLCJyZWplY3QiLCJMaWdodGNvcmRFcnJvciIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiTGlnaHRjb3JkVXNlckJhZGdlIiwiQnVnSHVudGVyQmFkZ2UiLCJoZWFkIiwic2NyaXB0Iiwic3JjIiwib25sb2FkIiwiYW5pbWF0ZSIsInRpbWluZyIsIl8iLCJ1cGRhdGUiLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpbWUiLCJ0aW1lRnJhY3Rpb24iLCJwcm9ncmVzcyIsIlEiLCJwYXJzZUhUTUwiLCJpc0hUTUwiLCJOb2RlTGlzdCIsInNvbWUiLCJuIiwibm9kZVR5cGUiLCJiYXNlRWxlbWVudCIsInF1ZXJ5QWxsIiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwiZmluZEluZGV4IiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImVsZW1lbnRzIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsImVuc3VyZUV4cG9ydGVkIiwiY2FsbCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uSG92ZXIiLCJSIiwicHJlZml4IiwiVGl0bGUiLCJFbW9qaUZpbHRlck1vZHVsZSIsImlzRW1vamlEaXNhYmxlZCIsImlzVXNhYmxlIiwidXNhYmxlIiwic3Vycm9nYXRlcyIsImRpdmVyc2l0eSIsImRlYnVnIiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJjaGVja1ZpcnVzZXMiLCJpc0hhcm1mdWwiLCJrZXl3b3JkIiwib29mIiwibm9fY29tbWVudHMiLCJyZWdleHBzIiwicmVnZXgiLCJzdXNwZWN0IiwiaGFzaFRvVXJsIiwiaGFybSIsInJlbmRlclRvRWxlbWVudHMiLCJuZXh0SGFzaCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsInVzZXJBZ2VudCIsInJlc3VsdCIsImNyeXB0byIsIkJ1ZmZlciIsImFsbG9jIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwiZmxvd2VyU3Rhck1vZHVsZSIsImZsb3dlclN0YXJDb250YWluZXIiLCJjaGlsZE1vZHVsZSIsImNoaWxkQ29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJuZXh0Tm9kZSIsImRhbmdlciIsIm9uQ2FuY2VsIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwiZmxvd2VyU3RhciIsInN0cm9rZSIsIlBsdWdpbk1vZHVsZSIsImxvYWRQbHVnaW5EYXRhIiwibG9hZCIsInNhdmVQbHVnaW5EYXRhIiwiY2hhbm5lbFN3aXRjaCIsInN0YXJ0UGx1Z2luIiwic3RvcFBsdWdpbiIsImVuYWJsZVBsdWdpbiIsImRpc2FibGVQbHVnaW4iLCJ0b2dnbGVQbHVnaW4iLCJwIiwiZmlsZW5hbWVPck5hbWUiLCJiZHBsdWdpbiIsImVkaXQiLCJvcGVuSXRlbSIsInVwZGF0ZVBsdWdpbkxpc3QiLCJzYXZlZCIsIm5ld01lc3NhZ2UiLCJvbk1lc3NhZ2UiLCJvblN3aXRjaCIsIlYyX1B1YmxpY1NlcnZlcnMiLCJfYXBwZW5kQnV0dG9uIiwiTGF5ZXIiLCJyb290SWQiLCJWMkNfUHVibGljU2VydmVycyIsInJvb3QiLCJfcm9vdCIsImluamVjdFJvb3QiLCJjbGFzc05hbWVMYXllcnMiLCJsYXllcnMiLCJidXR0b24iLCJidG4iLCJjaXJjbGVCdXR0b25NYXNrIiwiY2xhc3NOYW1lU2Nyb2xsZXIiLCJzY3JvbGxlciIsInNjcm9sbGJhcldpZHRoIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwicmVhY3REZXZUb29scyIsImV4dGVuc2lvblBhdGgiLCJwbGF0Zm9ybSIsImVudiIsIkxPQ0FMQVBQREFUQSIsIkhPTUUiLCJ2ZXJzaW9ucyIsImlzRXh0ZW5zaW9uSW5zdGFsbGVkIiwicmVtb3ZlRGV2VG9vbHNFeHRlbnNpb24iLCJkaWRJbnN0YWxsIiwiYWRkRGV2VG9vbHNFeHRlbnNpb24iLCJzZXRJbW1lZGlhdGUiLCJpc0RldlRvb2xzT3BlbmVkIiwiVjJfU2V0dGluZ3NQYW5lbCIsInNpZGVCYXJPbkNsaWNrIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwic2hvd09yaWdpbmFsIiwiY2xhc3NTaWRlYmFyIiwiY29udGVudFJlZ2lvbiIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsImxpZ2h0Y29yZFNldHRpbmdzIiwiUHJlc2VuY2VTZXR0aW5ncyIsIk1zZ0xvZ1NldHRpbmdzIiwicmVuZGVyQ29yZVNldHRpbmdzIiwicmVuZGVyQ3VzdG9tQ3NzRWRpdG9yIiwicmVuZGVyQWRkb25QYW5lIiwicmVuZGVyTGlnaHRjb3JkU2V0dGluZ3MiLCJyZW5kZXJQcmVzZW5jZVNldHRpbmdzIiwicmVuZGVyQWNjb3VudEluZm9zIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiY2FsbFJpbmdpbmdCZWF0Iiwic2V0dGluZ3NTdG9yZSIsInNob3dDdXJyZW50R2FtZSIsInVwZGF0ZVJlbW90ZVNldHRpbmdzIiwiZ2V0Q3VycmVudFdpbmRvdyIsInNldEFsd2F5c09uVG9wIiwiQW50aUFkRE0iLCJibHVyUHJpdmF0ZSIsInRhYnMiLCJjb3JlQ29tcG9uZW50IiwiU2Nyb2xsZXIiLCJjb250ZW50Q29sdW1uIiwiZmFkZSIsImRhcmsiLCJTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiVG9vbHMiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzIiwiQWNjb3VudEluZm9zQ29tcG9uZW50IiwiVjJDX0FjY291bnRJbmZvcyIsImN1c3RvbUNzc0NvbXBvbmVudCIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIm9yaWdpbmFsUmVuZGVyIiwiZW51bWVyYWJsZSIsIkNhcmRMaXN0Iiwib25DbGlja0xpZ2h0Y29yZCIsIkxDaXRlbXMiLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwiY2hhbmdlbG9nQnV0dG9uTEMiLCJTaWRlQmFyIiwiaGVhZGVyVGV4dCIsImhlYWRlckJ1dHRvbiIsImNoYW5nZUxvZyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lIiwidW5lc2NhcGUiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwidGVtcFJldCIsIl9fbW9ua2V5UGF0Y2hlZCIsImRpc2Nvbm5lY3QiLCJoYXNOb3RpY2UiLCJtZW1iZXJsaXN0IiwibWVtYmVyc1dyYXAiLCJmb3JtIiwicmlnaHQiLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwibW9kYWwiLCJpbm5lciIsImhpZGVPbkZ1bGxzY3JlZW4iLCJoZWFkZXJNb2R1bGUiLCJoZWFkZXIiLCJyZXNwb25zaXZlV2lkdGhNb2JpbGUiLCJmb290ZXIyTW9kdWxlIiwiZm9jdXNMb2NrIiwiYmFja2Ryb3AiLCJiYWNrZHJvcFdpdGhMYXllciIsImNsb3NpbmdMaXN0ZW5lcnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZUVycm9ycyIsImdlbmVyYXRlVGFiIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJtYXJnaW5Ub3AiLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiam9pbkJEMiIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiQmV0dGVyRGlzY29yZCIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJwcm94eSIsImZ1bmMiLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsInByb2ZpbE1vZHVsZSIsImZldGNoTXV0dWFsRnJpZW5kcyIsImNvbnRlbnRNb2R1bGUiLCJtYXJnaW5Nb2R1bGUyIiwiZGVmYXVsdE1hcmdpbmg1IiwiY29sb3JNb2R1bGUiLCJjb2xvclN0YW5kYXJkIiwic2l6ZU1vZHVsZSIsInNjcm9sbGJhck1vZHVsZTEiLCJzY3JvbGxiYXJHaG9zdEhhaXJsaW5lIiwiR3VpbGRNb2R1bGUiLCJnZXRSZWxhdGlvbnNoaXBzIiwic2Vzc2lvbk1vZHVsZSIsImdldFNlc3Npb25zIiwiY29udGVudENvbHVtbkRlZmF1bHQiLCJwYWRkaW5nIiwic2l6ZTE0IiwiaDUiLCJnZXRQcm9maWxlVmFsdWUiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0U2Vzc2lvblZhbHVlIiwibWFyZ2luQm90dG9tMjAiLCJzZXNzaW9uc1JhdyIsInNlc3Npb25zIiwic2Vzc2lvbklkIiwiY2xpZW50SW5mbyIsIm9zIiwiY2xpZW50IiwiYWN0aXZlIiwiYWN0aXZpdGllcyIsInJlcGVhdCIsImNyZWF0ZWRBdCIsImF2YXRhciIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZsYWdzIiwiaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiIsImVtYWlsIiwibWZhRW5hYmxlZCIsIm1vYmlsZSIsInBob25lIiwidmVyaWZpZWQiLCJyZWxhdGlvbnMiLCJmcmllbmRzIiwiaXNGcmllbmQiLCJpc0Jsb2NrZWQiLCJoaWdodGxpZ2h0SlMiLCJoaWdobGlnaHQiLCJtZXNzYWdlTW9kdWxlMSIsIm1lc3NhZ2VNb2R1bGUyIiwiQ29kZUNvbnRlbnQiLCJfX2h0bWwiLCJsYW5ndWFnZSIsIm1hcmdpbkJvdHRvbTgiLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInNldFN0YXRlIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwibGlua3MiLCJpbnZpdGUiLCJ0ZXN0ZXIiLCJkb25hdGUiLCJwYXRyZW9uIiwiZGlzYWJsZWQiLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJTd2l0Y2giLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9wZW5Gb2xkZXIiLCJzaG91bGREZWxldGUiLCJjb25maXJtRGVsZXRlIiwic29ydE9wdGlvbnMiLCJkaXJlY3Rpb25zIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJnZXRQcm9wcyIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJlZCIsInJlZnJlc2hJY29uIiwiZm9yY2VVcGRhdGUiLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsImVuYWJsZWRDbGFzcyIsImNoZWNrZWRDbGFzcyIsIlYyQ19Db250ZW50Q29sdW1uIiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNlc3Npb24iLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJhZGl1cyIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwibWFyZ2luTGVmdCIsImFyZyIsImdldFZhbHVlIiwiYnRvYSIsImRyb290IiwiaW5qZWN0RGV0YWNoZWRSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJkYXRhU3RvcmUiLCJwcmV2aWV3IiwiaXNmZXRjaGluZyIsImRlZmF1bHRTZXR0aW5nIiwiUlBDUHJvcHMiLCJhc3NldCIsInVwZGF0ZVByZXZpZXciLCJhcnJheSIsIm9oZ29kb2hmdWNrIiwiYWN0aXZhdGUiLCJJbnB1dFRleHQiLCJyb3dNb2R1bGUiLCJyZW1vdmVLZXliaW5kIiwibWFyZ2luTW9kdWxlIiwiZmxleE1vZHVsZSIsIl9ob3Jpem9udGFsIiwiaW5wdXRNb2R1bGUiLCJpbnB1dE1pbmkiLCJzaXplTW9kdWxlMiIsInNpemUxNiIsInNpemUyMCIsInJvdyIsImZsZXhDaGlsZCIsImlucHV0V3JhcHBlciIsImlucHV0RGVmYXVsdCIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIklucHV0TnVtYmVyIiwiZXVoTW9kdWxlMSIsImNvbG9yVHJhbnNwYXJlbnQiLCJuZXdWYWx1ZSIsImJ1dHRvbldyYXBwZXIiLCJsb29rRmlsbGVkIiwiY29sb3JCcmFuZCIsInNpemVTbWFsbCIsImZsZXgiLCJjbGlwYm9hcmQiLCJjb250ZW50cyIsIklucHV0Q2hvaWNlIiwiY2hvaWNlcyIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiY2hhbmdlVGFiIiwidGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImF2YXRhclVSTCIsImdldEF2YXRhclVSTCIsInJvb3RNb2R1bGUxIiwiZmxleE1vZHVsZTEiLCJzdHlsaW5nTW9kdWxlMSIsIm5hbWVUYWdNb2R1bGUxIiwiYWN0aXZpdHlNb2R1bGUxIiwidGV4dE1vZHVsZTEiLCJzaXplTW9kdWxlMSIsInNjcm9sbGVyTW9kdWxlMSIsIm5vdGVNb2R1bGUxIiwicHJvdGlwTW9kdWxlMSIsImNvbG9yTW9kdWxlMSIsImF2YXRhck1vZHVsZTEiLCJ1c2VyUG9wb3V0IiwidmVydGljYWwiLCJhbGlnblN0cmV0Y2giLCJzdHJlYW1lck1vZGVFbmFibGVkQnRuIiwiYWN0aXZpdHlVc2VyUG9wb3V0IiwibXV0ZWQiLCJ0aGVtZUdob3N0SGFpcmxpbmVDaGFubmVscyIsIm5vdGUiLCJwcm8iLCJpbmxpbmUiLCJ0aW1lc3RhbXBDbGFzcyIsInRpbWVzdGFtcCIsImhlYWRlclBsYXlpbmciLCJqdXN0aWZ5Q2VudGVyIiwiYWxpZ25DZW50ZXIiLCJub1dyYXAiLCJoZWFkZXJUb3AiLCJhdmF0YXJXcmFwcGVyTm9ybWFsIiwiYXZhdGFySGludCIsImF2YXRhckhpbnRJbm5lciIsIlZJRVdfUFJPRklMRSIsImhvcml6b250YWwiLCJqdXN0aWZ5U3RhcnQiLCJoZWFkZXJUYWdOb05pY2tuYW1lIiwibmFtZVRhZyIsImhlYWRlclRhZ1VzZXJuYW1lTm9OaWNrbmFtZSIsImhlYWRlclRleHROb3JtYWwiLCJVU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HIiwiYm9keU5vcm1hbCIsImltYWdlcyIsImFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0IiwiYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCIsImFzc2V0c1NtYWxsSW1hZ2VVc2VyUG9wb3V0IiwiY29udGVudEltYWdlc1VzZXJQb3BvdXQiLCJuYW1lTm9ybWFsIiwiYWN0aXZpdHlOYW1lIiwidGltZUNvbXBvbmVudCIsInRpbWVzdGFtcFJlbmRlciIsIlRpbWVzdGFtcCIsImVuZCIsInNjcm9sbGVyV3JhcCIsInNjcm9sbGVyVGhlbWVkIiwidGhlbWVHaG9zdEhhaXJsaW5lIiwic2Nyb2xsZXJGYWRlIiwiYm9keUlubmVyIiwiYm9keVRpdGxlIiwiTk9URSIsIk5PVEVfUExBQ0VIT0xERVIiLCJwcm90aXAiLCJQSU5ORURfTUVTU0FHRVNfUFJPX1RJUCIsInRpcCIsIkNPTlRFWFRfTUVOVV9ISU5UIiwiU3RhdHVzIiwiZ2V0UHJlc2VuY2UiLCJ0b3BTZWN0aW9uU3RyZWFtaW5nIiwiYWN0aXZpdHlQcm9maWxlIiwidG9wU2VjdGlvblBsYXlpbmciLCJoZWFkZXJJbmZvIiwicHJvZmlsZUJhZGdlcyIsImhlYWRlckZpbGwiLCJhc3NldHNMYXJnZUltYWdlUHJvZmlsZSIsImFzc2V0c0xhcmdlTWFza1Byb2ZpbGUiLCJhc3NldHNTbWFsbEltYWdlUHJvZmlsZSIsImNvbnRlbnRJbWFnZXNQcm9maWxlIiwidXNlckluZm9TZWN0aW9uIiwidXNlckluZm9TZWN0aW9uSGVhZGVyIiwiQ29ubmVjdGVkQWNjb3VudHMiLCJhY2NvdW50cyIsIkFjY291bnRNb2R1bGUxIiwiZ2V0QWNjb3VudHMiLCJhY2NzIiwidmlzaWJpbGl0eSIsImFjYyIsImNvbm5lY3RlZEFjY291bnRzIiwiQ29ubmVjdGVkQWNjb3VudCIsImZsb3dlck1vZHVsZTEiLCJhbmNob3JNb2R1bGUxIiwiU29jaWFsQ29uc3RhbnRzIiwiY29uc3RhbnRzU29jaWFsIiwiY29ubmVjdGVkQWNjb3VudCIsImNvbm5lY3RlZEFjY291bnRJY29uIiwid2hpdGUiLCJncmV5IiwiY29ubmVjdGVkQWNjb3VudE5hbWVJbm5lciIsImNvbm5lY3RlZEFjY291bnROYW1lIiwiY29ubmVjdGVkQWNjb3VudFZlcmlmaWVkSWNvbiIsImNvbm5lY3RlZEFjY291bnRPcGVuSWNvbiIsIkJhZGdlcyIsInJvb3RNb2R1bGUiLCJVc2VyRmxhZ3MiLCJzZXJpYWxpemVkIiwiZmxhZ05hbWUiLCJoYXNGbGFnIiwic2VhcmNoYWJsZSIsIkJhZGdlIiwicHJvZmlsZUJhZGdlV3JhcHBlciIsInByb2ZpbGVCYWRnZSIsIlYyQ19MYXllciIsImtleXVwTGlzdGVuZXIiLCJ0cmFuc2Zvcm0iLCJjb21wb25lbnRXaWxsTW91bnQiLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJsb2FkaW5nIiwic2VydmVycyIsImNvbm5lY3Rpb24iLCJmZXRjaCIsInNlcnZlciIsImpvaW5lZCIsInRlcm0iLCJjYXRlZ29yeUJ1dHRvbnMiLCJ0b3RhbCIsInNidiIsImNvbnRlbnRTY3JvbGxlciIsInNlcnZlckNhcmQiLCJwaW5uZWQiLCJhY2NlcHRJbnZpdGUiLCJpbnZpdGVfY29kZSIsImpvaW5FbmRQb2ludCIsImlkZW50aWZpZXIiLCJjcmVkZW50aWFscyIsIndpbmRvd09wdGlvbnMiLCJzY3JlZW5YIiwic2NyZWVuWSIsImpvaW5XaW5kb3ciLCJsb2FkVVJMIiwiYmFja2dyb3VuZENvbG9yIiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJTaWRlYmFyVmlldyIsInRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtYXJnaW5Cb3R0b20iLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiVjJDX1NpZGViYXJWaWV3IiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TY3JvbGxlciIsInNjcm9sbGVySG9yaXpvbnRhbCIsInNjcm9sbGVyTW9kdWxlMiIsInNpZGViYXJSZWdpb25TY3JvbGxlciIsIndyYXBwZXJDbGFzcyIsInNjcm9sbGVyQ2xhc3MiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXIiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwIiwidGhlbWVHaG9zdCIsInNjcm9sbGVyVHJhY2siLCJWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsInNlY3Rpb24iLCJTZXR0aW5nc0dyb3VwIiwiaGFuZGxlQ2hhbmdlIiwiV3JhcCIsIkRpcmVjdGlvbiIsIm5hdGl2ZVNlbGVjdCIsIkhPUklaT05UQUwiLCJBbGlnbiIsIkNFTlRFUiIsIlYyQ19TZXR0aW5nc0dyb3VwIiwiYnV0dG9uQ29tcG9uZW50IiwiVjJDX1NldHRpbmdzUGFuZWwiLCJWMkNfU2V0dGluZ3NUaXRsZSIsIm1hcmdpblRvcDYwIiwiVjJDX1NpZGVCYXIiLCJzaSIsInNjbiIsIm5zIiwibnNjbiIsInNldFNlbGVjdGVkIiwiaW5pdGlhbFNlbGVjdGlvbiIsIlN3aXRjaEl0ZW0iLCJWMkNfVGFiQmFySGVhZGVyIiwiVjJDX1RhYkJhckl0ZW0iLCJWMkNfVGFiQmFyU2VwYXJhdG9yIiwiaW50ZXJ2YWxNb2R1bGUxIiwiSW50ZXJ2YWwiLCJUaW1lUmVuZGVyIiwiUHVyZUNvbXBvbmVudCIsIl9pbnRlcnZhbCIsImdldFVwZGF0ZWRUaW1lIiwiZ2V0RGlmZiIsImNoZWNrVW5peCIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiLCJyZW5kZXJUaW1lIiwibnVtYmVyIiwicmVtb3ZlWmVybyIsInVzZWRQcm9wcyIsIlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORCIsIlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX1NUQVJUIiwiVjJDX1Rvb2xzIiwidG9vbHNNb2R1bGUiLCJ0b29sc0NvbnRhaW5lciIsImNvbnRhaW5lck1vZHVsZSIsImNsb3NlQnV0dG9uIiwiY2xvc2VCdXR0b25Cb2xkIiwia2V5YmluZCIsImtleWJpbmRCb2xkIiwiVG9vbHRpcENsYXNzZXMiLCJnZXRUb29sdGlwQ2xhc3NlcyIsIlRvb2x0aXBMYXllcnMiLCJnZXRUb29sdGlwTGF5ZXJzIiwiZ2V0Q2xhc3MiLCJzaWRlT3JDb2xvciIsInVwcGVyQ2FzZSIsInRvb2x0aXBDbGFzcyIsImNsYXNzRXhpc3RzIiwidG9QeCIsIkVtdWxhdGVkVG9vbHRpcCIsInByZXZlbnRGbGlwIiwidG9vbHRpcEVsZW1lbnQiLCJ0b29sdGlwIiwibGFiZWxFbGVtZW50IiwidG9vbHRpcENvbnRlbnQiLCJwb2ludGVyRWxlbWVudCIsInRvb2x0aXBQb2ludGVyIiwicG9wb3V0cyIsImxheWVyQ29udGFpbmVyIiwiY2FuU2hvd0Fib3ZlIiwiY2FuU2hvd0JlbG93IiwiY2FuU2hvd0xlZnQiLCJjYW5TaG93UmlnaHQiLCJfY2xhc3NOYW1lIiwic2hvd0Fib3ZlIiwic2hvd0JlbG93Iiwic2hvd0xlZnQiLCJzaG93UmlnaHQiLCJjZW50ZXJIb3Jpem9udGFsbHkiLCJjZW50ZXJWZXJ0aWNhbGx5Iiwibm9kZWNlbnRlciIsImZpbmRET01Ob2RlIiwiVjJDX1hTdmciXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0NBR0E7O0FBQ08sTUFBTUEscUJBQXFCLEdBQUcsU0FBOUI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBSUMsTUFBTSxDQUFDQyxhQUFQLElBQXdCRCxNQUFNLENBQUNDLGFBQVAsQ0FBcUJDLFNBQTdDLElBQTBERixNQUFNLENBQUNDLGFBQVAsQ0FBcUJDLFNBQXJCLENBQStCQyxVQUF6RixJQUF1R0gsTUFBTSxDQUFDQyxhQUFQLENBQXFCQyxTQUFyQixDQUErQkMsVUFBL0IsRUFBeEcsSUFBd0osU0FBdEw7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxPQUE1QjtBQUNBLE1BQU1DLFVBQVUsR0FBRyxPQUFuQjtBQUNBLE1BQU1DLFVBQVUsR0FBRztBQUN0QkMsYUFBVyxFQUFFLHVCQURTO0FBRXRCQyxTQUFPLEVBQUUsQ0FDTDtBQUNJQyxTQUFLLEVBQUUsYUFEWDtBQUVJQyxTQUFLLEVBQUUsQ0FDSCw4QkFERyxFQUVILCtJQUZHO0FBRlgsR0FESyxDQUZhO0FBV3RCQyxPQUFLLEVBQUUsaUNBWGU7QUFZdEJGLE9BQUssRUFBRSxXQVplO0FBYXRCRyxVQUFRLEVBQUUsTUFBSUMsK0NBQU0sQ0FBQ0MsU0FBUCxDQUFpQixXQUFqQixFQUE4QkMsT0FidEI7QUFjdEJDLFFBQU0sRUFBRyxZQUFVO0FBQ2YsVUFBTUMsV0FBVyxHQUFHQywrREFBYyxDQUFDQyxpQkFBZixDQUFpQyxNQUFqQyxDQUFwQjtBQUNBLFVBQU1DLFVBQVUsR0FBR0YsK0RBQWMsQ0FBQ0csV0FBZixDQUEyQixNQUEzQixFQUFtQyxRQUFuQyxFQUE2QyxLQUE3QyxFQUFvRCxZQUFwRCxDQUFuQjtBQUNBLFFBQUcsQ0FBQ0osV0FBRCxJQUFnQixDQUFDRyxVQUFwQixFQUErQixPQUFPLElBQVA7QUFFL0IsVUFBTUUsTUFBTSxHQUFHSiwrREFBYyxDQUFDSyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsVUFBTUMsYUFBYSxHQUFHUiwrREFBYyxDQUFDRyxXQUFmLENBQTJCLHdCQUEzQixLQUF3RDtBQUFDTSxZQUFNLEVBQUUsZUFBVDtBQUEwQkMsNEJBQXNCLEVBQUU7QUFBbEQsS0FBOUU7O0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUlDLEtBQUQsSUFBVztBQUNqQ0EsV0FBSyxDQUFDQyxjQUFOO0FBQ0FELFdBQUssQ0FBQ0UsZUFBTjtBQUNBWixnQkFBVSxDQUFDYSxHQUFYO0FBQ0FDLHlEQUFJLENBQUNDLE1BQUw7QUFDSCxLQUxEOztBQU1BLFVBQU1DLFdBQVcsR0FBR2QsTUFBTSxHQUFHWSxtREFBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJoQixNQUF6QixFQUFpQztBQUFDaUIsYUFBTyxFQUFFVjtBQUFWLEtBQWpDLEVBQStELDBCQUEvRCxDQUFILEdBQWdHSyxtREFBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUIsR0FBekIsRUFBOEI7QUFBQ0UsZUFBUyxFQUFHLEdBQUVkLGFBQWEsQ0FBQ0MsTUFBTyxJQUFHRCxhQUFhLENBQUNFLHNCQUF1QixFQUE1RTtBQUErRVcsYUFBTyxFQUFFVjtBQUF4RixLQUE5QixFQUEwSSwwQkFBMUksQ0FBMUg7QUFDQSxXQUFPSyxtREFBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJyQixXQUF6QixFQUFzQztBQUFDd0IsVUFBSSxFQUFFeEIsV0FBVyxDQUFDeUIsS0FBWixDQUFrQkMsS0FBekI7QUFBZ0NDLFdBQUssRUFBRTNCLFdBQVcsQ0FBQzRCLE1BQVosQ0FBbUJDO0FBQTFELEtBQXRDLEVBQTJHLGdCQUEzRyxFQUE2SFYsV0FBN0gsQ0FBUDtBQUNILEdBZk87QUFkYyxDQUFuQjtBQStCQSxNQUFNVyxZQUFZLEdBQUc7QUFDeEJ4QyxhQUFXLEVBQUUsa0JBRFc7QUFFeEJDLFNBQU8sRUFBRSxDQUNMO0FBQ0lDLFNBQUssRUFBRSxhQURYO0FBRUlDLFNBQUssRUFBRSxDQUNILGdHQURHLEVBRUgsdUhBRkcsRUFHSCxrR0FIRztBQUZYLEdBREssRUFTTDtBQUNJRCxTQUFLLEVBQUUsV0FEWDtBQUVJdUMsUUFBSSxFQUFFLE9BRlY7QUFHSXRDLFNBQUssRUFBRSxDQUNILHNEQURHO0FBSFgsR0FUSztBQUZlLENBQXJCO0FBcUJBLE1BQU11QyxRQUFRLEdBQUc7QUFDcEIsNEJBQThCO0FBQUNDLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsRUFBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLElBQXpHO0FBQWdIQyxPQUFHLEVBQUU7QUFBckgsR0FEVjtBQUVwQiw0QkFBOEI7QUFBQ0osTUFBRSxFQUFFLFdBQUw7QUFBa0JDLFFBQUksRUFBRSxFQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsSUFBekc7QUFBZ0hDLE9BQUcsRUFBRTtBQUFySCxHQUZWO0FBR3BCLHdCQUE4QjtBQUFDSixNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLG1DQUF4QjtBQUE2RUMsZUFBVyxFQUFFLEtBQTFGO0FBQWtHQyxVQUFNLEVBQUUsS0FBMUc7QUFBaUhDLE9BQUcsRUFBRTtBQUF0SCxHQUhWOztBQUtwQjs7QUFDQTtBQUNBLG9CQUE4QjtBQUFDSixNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLCtCQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBUFY7QUFRcEIsa0JBQThCO0FBQUNMLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsZ0RBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxLQUF6RztBQUFnSEMsT0FBRyxFQUFFLE1BQXJIO0FBQTZIQyxZQUFRLEVBQUU7QUFBdkksR0FSVjtBQVNwQixnQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBa0JDLFFBQUksRUFBRSxzQkFBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLEtBQXpHO0FBQWdIQyxPQUFHLEVBQUUsTUFBckg7QUFBNkhDLFlBQVEsRUFBRTtBQUF2SSxHQVRWO0FBVXBCLG1CQUE4QjtBQUFDTCxNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLCtCQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBVlY7QUFXcEIsZUFBOEI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBa0JDLFFBQUksRUFBRSw0Q0FBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLEtBQXpHO0FBQWdIQyxPQUFHLEVBQUUsTUFBckg7QUFBNkhDLFlBQVEsRUFBRTtBQUF2SSxHQVhWO0FBWXBCLHNCQUE4QjtBQUFDTCxNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLG1EQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBWlY7QUFhcEIsd0JBQThCO0FBQUNMLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsMENBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxLQUF6RztBQUFnSEMsT0FBRyxFQUFFLE1BQXJIO0FBQTZIQyxZQUFRLEVBQUU7QUFBdkksR0FiVjtBQWNwQixrQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBa0JDLFFBQUksRUFBRSx3Q0FBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLEtBQXpHO0FBQWdIQyxPQUFHLEVBQUUsTUFBckg7QUFBNkhDLFlBQVEsRUFBRTtBQUF2SSxHQWRWO0FBZXBCLHVCQUE4QjtBQUFDTCxNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLDhGQUF4QjtBQUF3SEMsZUFBVyxFQUFFLElBQXJJO0FBQTRJQyxVQUFNLEVBQUUsS0FBcEo7QUFBMkpDLE9BQUcsRUFBRSxNQUFoSztBQUF3S0MsWUFBUSxFQUFFO0FBQWxMLEdBZlY7O0FBaUJwQjtBQUNBLHlCQUE4QjtBQUFDTCxNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLHdDQUF4QjtBQUFrRUMsZUFBVyxFQUFFLElBQS9FO0FBQXNGQyxVQUFNLEVBQUUsS0FBOUY7QUFBcUdDLE9BQUcsRUFBRSxNQUExRztBQUFrSEMsWUFBUSxFQUFFO0FBQTVILEdBbEJWO0FBbUJwQixpQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFdBQUw7QUFBa0JDLFFBQUksRUFBRSxzREFBeEI7QUFBZ0ZDLGVBQVcsRUFBRSxJQUE3RjtBQUFvR0MsVUFBTSxFQUFFLEtBQTVHO0FBQW1IQyxPQUFHLEVBQUUsTUFBeEg7QUFBZ0lDLFlBQVEsRUFBRTtBQUExSSxHQW5CVjtBQW9CcEIsd0JBQThCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsc0ZBQXhCO0FBQWdIQyxlQUFXLEVBQUUsSUFBN0g7QUFBb0lDLFVBQU0sRUFBRSxLQUE1STtBQUFtSkMsT0FBRyxFQUFFLE1BQXhKO0FBQWdLQyxZQUFRLEVBQUU7QUFBMUssR0FwQlY7QUFxQnBCLHVCQUE4QjtBQUFDTCxNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLDhEQUF4QjtBQUF3RkMsZUFBVyxFQUFFLElBQXJHO0FBQTRHQyxVQUFNLEVBQUUsS0FBcEg7QUFBMkhDLE9BQUcsRUFBRSxNQUFoSTtBQUF3SUMsWUFBUSxFQUFFO0FBQWxKLEdBckJWOztBQXVCcEI7QUFDQSxvQkFBNkI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBaUJDLFFBQUksRUFBRSx1QkFBdkI7QUFBZ0RDLGVBQVcsRUFBRSxJQUE3RDtBQUFtRUMsVUFBTSxFQUFFLEtBQTNFO0FBQWtGQyxPQUFHLEVBQUUsTUFBdkY7QUFBK0ZDLFlBQVEsRUFBRTtBQUF6RyxHQXhCVDtBQXlCcEIsbUJBQXFCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsZ0ZBQXhCO0FBQTBHQyxlQUFXLEVBQUUsSUFBdkg7QUFBNkhDLFVBQU0sRUFBRSxLQUFySTtBQUE0SUMsT0FBRyxFQUFFLE1BQWpKO0FBQXlKQyxZQUFRLEVBQUU7QUFBbkssR0F6QkQ7QUEwQnBCLG9CQUFzQjtBQUFDTCxNQUFFLEVBQUUsZUFBTDtBQUFzQkMsUUFBSSxFQUFFLDRGQUE1QjtBQUEwSEMsZUFBVyxFQUFFLElBQXZJO0FBQThJQyxVQUFNLEVBQUUsSUFBdEo7QUFBNEpDLE9BQUcsRUFBRSxNQUFqSztBQUF5S0MsWUFBUSxFQUFFO0FBQW5MLEdBMUJGOztBQTRCcEI7QUFDQSwyQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFlBQUw7QUFBb0JDLFFBQUksRUFBRSwrQ0FBMUI7QUFBMkVDLGVBQVcsRUFBRSxLQUF4RjtBQUErRkMsVUFBTSxFQUFFLEtBQXZHO0FBQThHQyxPQUFHLEVBQUUsV0FBbkg7QUFBZ0lDLFlBQVEsRUFBRTtBQUExSSxHQTdCVjtBQThCcEIsaUNBQThCO0FBQUNMLE1BQUUsRUFBRSxhQUFMO0FBQW9CQyxRQUFJLEVBQUUsaUVBQTFCO0FBQTZGQyxlQUFXLEVBQUUsSUFBMUc7QUFBZ0hDLFVBQU0sRUFBRSxLQUF4SDtBQUErSEMsT0FBRyxFQUFFLFdBQXBJO0FBQWlKQyxZQUFRLEVBQUU7QUFBM0osR0E5QlY7QUErQnBCLHVCQUE4QjtBQUFDTCxNQUFFLEVBQUUsYUFBTDtBQUFvQkMsUUFBSSxFQUFFLHdDQUExQjtBQUFvRUMsZUFBVyxFQUFFLElBQWpGO0FBQXVGQyxVQUFNLEVBQUUsS0FBL0Y7QUFBc0dDLE9BQUcsRUFBRSxXQUEzRztBQUF3SEMsWUFBUSxFQUFFO0FBQWxJLEdBL0JWO0FBZ0NwQix1QkFBOEI7QUFBQ0wsTUFBRSxFQUFFLGFBQUw7QUFBb0JDLFFBQUksRUFBRSxxSkFBMUI7QUFBaUxDLGVBQVcsRUFBRSxJQUE5TDtBQUFvTUMsVUFBTSxFQUFFLEtBQTVNO0FBQW1OQyxPQUFHLEVBQUUsV0FBeE47QUFBcU9DLFlBQVEsRUFBRTtBQUEvTyxHQWhDVjtBQWlDcEIsY0FBOEI7QUFBQ0wsTUFBRSxFQUFFLGFBQUw7QUFBb0JDLFFBQUksRUFBRSxrRUFBMUI7QUFBOEZDLGVBQVcsRUFBRSxJQUEzRztBQUFpSEMsVUFBTSxFQUFFLEtBQXpIO0FBQWdJQyxPQUFHLEVBQUUsV0FBckk7QUFBa0pDLFlBQVEsRUFBRTtBQUE1SixHQWpDVjtBQWtDcEIsOEJBQThCO0FBQUNMLE1BQUUsRUFBRSxhQUFMO0FBQW9CQyxRQUFJLEVBQUUsd0VBQTFCO0FBQW9HQyxlQUFXLEVBQUUsSUFBakg7QUFBdUhDLFVBQU0sRUFBRSxLQUEvSDtBQUFzSUMsT0FBRyxFQUFFLFdBQTNJO0FBQXdKQyxZQUFRLEVBQUU7QUFBbEssR0FsQ1Y7O0FBb0NwQjtBQUNBLG1CQUE4QjtBQUFDTCxNQUFFLEVBQUUsYUFBTDtBQUFvQkMsUUFBSSxFQUFFLHlGQUExQjtBQUFxSEMsZUFBVyxFQUFFLElBQWxJO0FBQXdJQyxVQUFNLEVBQUUsS0FBaEo7QUFBdUpDLE9BQUcsRUFBRSxXQUE1SjtBQUF5S0MsWUFBUSxFQUFFO0FBQW5MLEdBckNWOztBQXVDcEI7QUFDQSxZQUE4QjtBQUFDTCxNQUFFLEVBQUUsc0JBQUw7QUFBNkJDLFFBQUksRUFBRSw0QkFBbkM7QUFBaUVDLGVBQVcsRUFBRSxJQUE5RTtBQUFvRkMsVUFBTSxFQUFFLEtBQTVGO0FBQW1HQyxPQUFHLEVBQUU7QUFBeEc7QUF4Q1YsQ0FBakI7QUEyQ0EsTUFBTUUsYUFBYSxHQUFHO0FBQ3pCLGNBQVksSUFEYTtBQUV6QixjQUFZLEtBRmE7QUFHekIsY0FBWSxLQUhhO0FBSXpCLGNBQVksS0FKYTtBQUt6QixjQUFZLElBTGE7QUFNekIsY0FBWSxLQU5hO0FBT3pCLGNBQVksS0FQYTtBQVF6QixjQUFZLElBUmE7QUFTekIsY0FBWSxJQVRhO0FBVXpCLGNBQVksSUFWYTtBQVd6QixjQUFZLElBWGE7QUFZekIsY0FBWSxLQVphO0FBYXpCLGNBQVksSUFiYTtBQWN6QixjQUFZLElBZGE7QUFlekIsY0FBWSxLQWZhO0FBZ0J6QixjQUFZLElBaEJhO0FBaUJ6QixjQUFZLEtBakJhO0FBa0J6QixlQUFhLEtBbEJZO0FBbUJ6QixlQUFhLEtBbkJZO0FBb0J6QixjQUFZLElBcEJhO0FBcUJ6QixlQUFhLEtBckJZO0FBc0J6QixlQUFhLElBdEJZO0FBdUJ6QixlQUFhLElBdkJZO0FBd0J6QixlQUFhLElBeEJZO0FBeUJ6QixlQUFhLElBekJZO0FBMEJ6QixlQUFhLElBMUJZO0FBMkJ6QixlQUFhLEtBM0JZO0FBNEJ6QixlQUFhLElBNUJZO0FBNkJ6QixlQUFhLEtBN0JZO0FBOEJ6QixlQUFhLEtBOUJZO0FBK0J6QixlQUFhLElBL0JZO0FBZ0N6QixtQkFBaUIsS0FoQ1E7QUFpQ3pCLGlCQUFlLEtBakNVO0FBa0N6QixpQkFBZSxJQWxDVTtBQW1DekIsMEJBQXdCLEtBbkNDO0FBb0N6QixpQkFBZSxLQXBDVTtBQXFDekIsaUJBQWUsS0FyQ1U7QUFzQ3pCLGlCQUFlLElBdENVO0FBdUN6QixpQkFBZTtBQXZDVSxDQUF0QjtBQTJDQSxNQUFNQyxjQUFjLEdBQUcsRUFBdkI7QUFFQSxNQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxNQUFNQyxVQUFVLEdBQUc7QUFDdEIsVUFBUSxXQURjO0FBRXRCLG9CQUFrQixvQkFGSTtBQUd0QixXQUFTLGtCQUhhO0FBSXRCLGFBQVcsa0JBSlc7QUFLdEIsc0JBQW9CQyxJQUFJLENBQUNDLEdBQUwsRUFMRTtBQU10QixrQkFBZ0IsSUFOTTtBQU90QixrQkFBZ0I7QUFQTSxDQUFuQjtBQVVBLE1BQU1DLGNBQWMsR0FBRyxFQUF2QjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxFQUF0QixDLENBQTBCOztBQUUxQixNQUFNQyxRQUFRLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjQyxtQkFBZCxDQUFqQjtBQUVBLE1BQU1DLFFBQVEsR0FBRyxFQUFqQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxFQUFsQjtBQUVBLE1BQU1DLFlBQVksR0FBRyxFQUFyQjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxFQUFwQixDOzs7Ozs7Ozs7Ozs7QUN6S1A7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0FDLGdFQUFlO0FBQ2ZDLDREQUFXOztBQUVYLE1BQU1DLGVBQWUsR0FBRyxDQUFDQyxHQUFELEVBQU1DLEtBQU4sS0FBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FYLFFBQU0sQ0FBQ1ksY0FBUCxDQUFzQjdFLE1BQXRCLEVBQThCMkUsR0FBOUIsRUFBbUM7QUFDL0JHLE9BQUcsR0FBRztBQUNGQyw0REFBSyxDQUFDQyxJQUFOLENBQVcsbUJBQVgsRUFBaUMsSUFBR0wsR0FBSSw4REFBeEM7QUFDQSxhQUFPQyxLQUFQO0FBQ0g7O0FBSjhCLEdBQW5DO0FBTUgsQ0FoQkQ7O0FBbUJBO0FBRUEsTUFBTUssVUFBVSxHQUFHaEIsTUFBTSxDQUFDaUIsSUFBUCxDQUFZQyxzQ0FBWixDQUFuQjs7QUFDQSxLQUFLLE1BQU1SLEdBQVgsSUFBa0JNLFVBQWxCLEVBQThCUCxlQUFlLENBQUNDLEdBQUQsRUFBTVEsc0NBQU8sQ0FBQ1IsR0FBRCxDQUFiLENBQWY7O0FBRzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUFELGVBQWUsQ0FBQyxNQUFELEVBQVN4QyxtREFBVCxDQUFmO0FBQ0F3QyxlQUFlLENBQUMsY0FBRCxFQUFpQlUsNkRBQWpCLENBQWY7QUFDQVYsZUFBZSxDQUFDLGFBQUQsRUFBZ0JXLDREQUFoQixDQUFmO0FBQ0FYLGVBQWUsQ0FBQyxPQUFELEVBQVVLLHNEQUFWLENBQWY7QUFDQUwsZUFBZSxDQUFDLFVBQUQsRUFBYVkseURBQWIsQ0FBZjtBQUNBWixlQUFlLENBQUMsZUFBRCxFQUFrQmEsOERBQWxCLENBQWY7QUFDQWIsZUFBZSxDQUFDLFdBQUQsRUFBY2MsMkRBQWQsQ0FBZjtBQUNBZCxlQUFlLENBQUMsZ0JBQUQsRUFBbUJlLGdFQUFuQixDQUFmO0FBQ0FmLGVBQWUsQ0FBQyxpQkFBRCxFQUFvQmdCLGlFQUFwQixDQUFmO0FBRUExRixNQUFNLENBQUMyRixLQUFQLEdBQWVBLHNEQUFmO0FBRUE7QUFDQWpCLGVBQWUsQ0FBQyxVQUFELEVBQWFrQixzREFBYixDQUFmO0FBQ2UsTUFBTUMsV0FBTixDQUFrQjtBQUM3QkMsYUFBVyxDQUFDOUIsUUFBRCxFQUFXO0FBQ2xCNEIsMERBQUksQ0FBQ0csU0FBTCxDQUFlL0IsUUFBZjtBQUNIOztBQUVEZ0MsTUFBSSxHQUFHO0FBQ0g7QUFDQUosMERBQUksQ0FBQ0ksSUFBTDtBQUNIOztBQVI0QixDLENBV2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQUMsbUJBQU8sQ0FBQyx3QkFBRCxDQUFQLEMsQ0FBa0IsNkM7Ozs7Ozs7Ozs7OztBQ3JHbEI7QUFBZSxxRUFBTTtBQUNqQixRQUFNQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQzdELGFBQVQsQ0FBdUIsS0FBdkIsQ0FBakI7QUFDQTRELFVBQVEsQ0FBQzFELFNBQVQsR0FBcUIsYUFBckI7QUFDQTBELFVBQVEsQ0FBQ3pGLEtBQVQsR0FBaUIsMEJBQWpCO0FBQ0EwRixVQUFRLENBQUNDLElBQVQsQ0FBY0MsV0FBZCxDQUEwQkgsUUFBMUI7QUFDSCxDQUxELEU7Ozs7Ozs7Ozs7OztBQ0FBO0FBQWUsMkVBQVc7QUFDdEIsUUFBTUksbUJBQW1CLEdBQUdyQyxNQUFNLENBQUNzQyx3QkFBUCxDQUFnQ0MsaUJBQWlCLENBQUNDLFNBQWxELEVBQTZELGVBQTdELEVBQThFM0IsR0FBMUc7QUFDQWIsUUFBTSxDQUFDWSxjQUFQLENBQXNCMkIsaUJBQWlCLENBQUNDLFNBQXhDLEVBQW1ELGVBQW5ELEVBQW9FO0FBQ2hFM0IsT0FBRyxFQUFFLFlBQVk7QUFDYixZQUFNNEIsYUFBYSxHQUFHQyxPQUFPLENBQUNDLEtBQVIsQ0FBY04sbUJBQWQsRUFBbUMsSUFBbkMsRUFBeUNPLFNBQXpDLENBQXRCO0FBQ0EsYUFBTyxJQUFJQyxLQUFKLENBQVVKLGFBQVYsRUFBeUI7QUFDNUJILGdDQUF3QixFQUFFLFVBQVNRLEdBQVQsRUFBY0MsSUFBZCxFQUFvQjtBQUMxQyxjQUFJQSxJQUFJLEtBQUssY0FBYixFQUE2QixPQUFPQyxTQUFQO0FBQzdCLGlCQUFPaEQsTUFBTSxDQUFDc0Msd0JBQVAsQ0FBZ0NRLEdBQWhDLEVBQXFDQyxJQUFyQyxDQUFQO0FBQ0gsU0FKMkI7QUFLNUJsQyxXQUFHLEVBQUUsVUFBU2lDLEdBQVQsRUFBY0MsSUFBZCxFQUFvQjtBQUNyQixjQUFJQSxJQUFJLEtBQUssY0FBYixFQUE2QixPQUFPLElBQVA7QUFDN0IsZ0JBQU1FLEdBQUcsR0FBR0gsR0FBRyxDQUFDQyxJQUFELENBQWY7QUFDQSxjQUFJLE9BQU9FLEdBQVAsS0FBZSxVQUFuQixFQUErQixPQUFPQSxHQUFHLENBQUNDLElBQUosQ0FBU0osR0FBVCxDQUFQO0FBQy9CLGlCQUFPRyxHQUFQO0FBQ0g7QUFWMkIsT0FBekIsQ0FBUDtBQVlIO0FBZitELEdBQXBFLEVBRnNCLENBb0J0Qjs7QUFDQWpELFFBQU0sQ0FBQ1ksY0FBUCxDQUFzQjhCLE9BQXRCLEVBQStCLE9BQS9CLEVBQXdDO0FBQUMvQixTQUFLLEVBQUUrQixPQUFPLENBQUNDLEtBQWhCO0FBQXVCUSxZQUFRLEVBQUUsS0FBakM7QUFBd0NDLGdCQUFZLEVBQUU7QUFBdEQsR0FBeEM7QUFDQXBELFFBQU0sQ0FBQ1ksY0FBUCxDQUFzQnlDLFFBQVEsQ0FBQ2IsU0FBL0IsRUFBMEMsTUFBMUMsRUFBa0Q7QUFBQzdCLFNBQUssRUFBRTBDLFFBQVEsQ0FBQ2IsU0FBVCxDQUFtQlUsSUFBM0I7QUFBaUNDLFlBQVEsRUFBRSxLQUEzQztBQUFrREMsZ0JBQVksRUFBRTtBQUFoRSxHQUFsRDtBQUVBLFFBQU1FLEtBQUssR0FBR0MsY0FBYyxDQUFDZixTQUFmLENBQXlCZ0IsSUFBdkM7O0FBQ0FELGdCQUFjLENBQUNmLFNBQWYsQ0FBeUJnQixJQUF6QixHQUFnQyxZQUFXO0FBQ3ZDLFVBQU1DLEdBQUcsR0FBR2IsU0FBUyxDQUFDLENBQUQsQ0FBckI7QUFDQSxRQUFJYSxHQUFHLENBQUNDLFdBQUosR0FBa0JDLFFBQWxCLENBQTJCLGNBQTNCLENBQUosRUFBZ0QsT0FBTyxJQUFQO0FBQ2hELFdBQU9qQixPQUFPLENBQUNDLEtBQVIsQ0FBY1csS0FBZCxFQUFxQixJQUFyQixFQUEyQlYsU0FBM0IsQ0FBUDtBQUNILEdBSkQ7QUFLSCxDOzs7Ozs7Ozs7Ozs7QUM5QkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNZ0IsTUFBTixDQUFhO0FBQzVCQyxjQUFZLEdBQUc7QUFDWCxRQUFJLEtBQUtDLFlBQVQsRUFBdUI7QUFFdkIsVUFBTUMsVUFBVSxHQUFHLElBQUlDLE1BQUosQ0FBWSxxQ0FBWixDQUFuQjs7QUFDQSxVQUFNQyxPQUFPLEdBQUlDLElBQUQsSUFBVTtBQUN0QixVQUFJLENBQUMxRSx3REFBYyxDQUFDLFVBQUQsQ0FBbkIsRUFBaUM7QUFDakMsWUFBTTJFLE9BQU8sR0FBR0QsSUFBSSxDQUFDRSxXQUFMLENBQWlCQyxLQUFqQixDQUF1Qk4sVUFBdkIsQ0FBaEI7QUFDQSxVQUFJLENBQUNJLE9BQUQsSUFBWUEsT0FBTyxDQUFDRyxNQUFSLEtBQW1CLENBQW5DLEVBQXNDO0FBQ3RDLFVBQUlILE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFuQixFQUF5QixPQUFPRCxJQUFJLENBQUNFLFdBQUwsR0FBbUJGLElBQUksQ0FBQ0UsV0FBTCxDQUFpQkcsT0FBakIsQ0FBeUJKLE9BQU8sQ0FBQyxDQUFELENBQWhDLEVBQXNDLEdBQUVBLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFmLEdBQXNCLElBQXRCLEdBQTZCQSxPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdLLFFBQVgsQ0FBb0IsQ0FBcEIsRUFBdUIsR0FBdkIsQ0FBNEIsSUFBR0wsT0FBTyxDQUFDLENBQUQsQ0FBSSxFQUEvRyxDQUExQjtBQUN6QixhQUFPRCxJQUFJLENBQUNFLFdBQUwsR0FBbUJGLElBQUksQ0FBQ0UsV0FBTCxDQUFpQkcsT0FBakIsQ0FBeUJKLE9BQU8sQ0FBQyxDQUFELENBQWhDLEVBQXNDLEdBQUVBLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFmLEdBQXNCLElBQXRCLEdBQTZCTSxRQUFRLENBQUNOLE9BQU8sQ0FBQyxDQUFELENBQVIsQ0FBUixHQUF1QixFQUFHLElBQUdBLE9BQU8sQ0FBQyxDQUFELENBQUksRUFBN0csQ0FBMUI7QUFDSCxLQU5EOztBQVFBLFVBQU1PLFVBQVUsR0FBRzVELDhDQUFLLENBQUM2RCxXQUFOLENBQWtCMUcsMkNBQUksQ0FBQzJHLGFBQXZCLEVBQXNDLGdCQUF0QyxFQUF3RDtBQUFDQyxXQUFLLEVBQUVaO0FBQVIsS0FBeEQsQ0FBbkIsQ0FaVyxDQVltRjs7QUFDOUYsVUFBTWEsYUFBYSxHQUFHaEUsOENBQUssQ0FBQzZELFdBQU4sQ0FBa0IxRywyQ0FBSSxDQUFDMkcsYUFBdkIsRUFBc0MsWUFBdEMsRUFBb0Q7QUFBQ0MsV0FBSyxFQUFFWjtBQUFSLEtBQXBELENBQXRCLENBYlcsQ0Fha0Y7O0FBQzdGLFNBQUtILFlBQUwsR0FBb0IsTUFBTTtBQUFDWSxnQkFBVTtBQUFJSSxtQkFBYTtBQUFJLEtBQTFELENBZFcsQ0FjaUQ7O0FBQy9EOztBQUVEQyxjQUFZLEdBQUc7QUFDWCxRQUFJLEtBQUtqQixZQUFULEVBQXVCLEtBQUtBLFlBQUw7QUFDMUI7O0FBcEIyQixDQUFqQixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ0pBO0FBQUE7QUFBQTtBQUVBLE1BQU1rQixVQUFVLEdBQUdqSixNQUFNLENBQUNrSixTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0YsVUFBbkQ7QUFDQSxNQUFNRyxhQUFhLEdBQUdDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxVQUF2QixJQUFxQ0YsQ0FBQyxDQUFDQyxPQUFGLENBQVVFLFVBQWxFLEVBQThFLENBQTlFLEVBQWlGRixPQUF2RztBQUNBLElBQUlHLGtCQUFrQixHQUFHTCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVUksZUFBMUMsRUFBMkQsQ0FBM0QsQ0FBekI7QUFDQSxJQUFJQyxRQUFRLEdBQUdQLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVTSxtQkFBMUMsRUFBK0QsQ0FBL0QsQ0FBZjtBQUVBLE1BQU1DLE9BQU8sR0FBRyxFQUFoQjtBQUVBLElBQUlDLFVBQVUsR0FBR1YsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVTLGNBQTFDLEVBQTBELENBQTFELENBQWpCOztBQUNBLFNBQVNBLGNBQVQsR0FBeUI7QUFDckIsTUFBR0QsVUFBSCxFQUFjLE9BQU9BLFVBQVUsQ0FBQ1IsT0FBWCxDQUFtQlMsY0FBbkIsRUFBUDtBQUNkLFNBQU8sSUFBUDtBQUNIOztBQUVjLG1FQUFJLE1BQU1DLFNBQU4sQ0FBZ0I7QUFDL0JuRSxhQUFXLEdBQUU7QUFDVCxTQUFLb0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWS9DLElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNBLFNBQUtnRCxPQUFMLEdBQWUsS0FBZjtBQUNIOztBQUVEQyxRQUFNLEdBQUU7QUFDSixRQUFHLEtBQUtELE9BQVIsRUFBZ0I7QUFDaEIsU0FBS0EsT0FBTCxHQUFlLElBQWY7QUFFQWxCLGNBQVUsQ0FBQ29CLFNBQVgsQ0FBcUIsZ0JBQXJCLEVBQXVDLEtBQUtILE1BQTVDO0FBQ0g7O0FBRURJLFNBQU8sR0FBRTtBQUNMLFFBQUcsQ0FBQyxLQUFLSCxPQUFULEVBQWlCO0FBQ2pCLFNBQUtBLE9BQUwsR0FBZSxLQUFmO0FBRUFsQixjQUFVLENBQUNzQixXQUFYLENBQXVCLGdCQUF2QixFQUF5QyxLQUFLTCxNQUE5QztBQUNIOztBQUVEQSxRQUFNLENBQUNNLEVBQUQsRUFBSTtBQUNOLFFBQUcsQ0FBQ0EsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0JDLEdBQXRCLEVBQTBCO0FBQzFCLFFBQUdILEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCeEgsRUFBbEIsS0FBeUI4RyxjQUFjLEdBQUc5RyxFQUE3QyxFQUNBLElBQUdzSCxFQUFFLENBQUNDLE9BQUgsQ0FBV0csUUFBZCxFQUF1QjtBQUV2QixVQUFNQyxPQUFPLEdBQUd6QixhQUFhLENBQUNJLFVBQWQsQ0FBeUJnQixFQUFFLENBQUNDLE9BQUgsQ0FBV0ssVUFBcEMsQ0FBaEI7QUFDQSxRQUFHLENBQUNELE9BQUosRUFBWSxPQU5OLENBTWE7O0FBRW5CLFFBQUdBLE9BQU8sQ0FBQzdILElBQVIsS0FBaUIsQ0FBcEIsRUFBc0I7QUFFdEIsUUFBRzhHLE9BQU8sQ0FBQ1UsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0J4SCxFQUFuQixDQUFWLEVBQWlDLE9BVjNCLENBVWtDOztBQUV4QyxRQUFHNkgsV0FBVyxDQUFDUCxFQUFFLENBQUNDLE9BQUosQ0FBZCxFQUEyQjtBQUN2QlgsYUFBTyxDQUFDVSxFQUFFLENBQUNDLE9BQUgsQ0FBV0MsTUFBWCxDQUFrQnhILEVBQW5CLENBQVAsR0FBZ0MsSUFBaEM7QUFDQTZCLG9EQUFLLENBQUNpRyxTQUFOLENBQWlCLHNCQUFxQlIsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0JPLFFBQVMsSUFBR1QsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0JRLGFBQWMsRUFBcEcsRUFBdUc7QUFDbkcsZ0JBQVE7QUFEMkYsT0FBdkc7QUFHQSxVQUFHLENBQUN4QixrQkFBSixFQUF1QkEsa0JBQWtCLEdBQUdMLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVSSxlQUExQyxFQUEyRCxDQUEzRCxDQUFyQjtBQUN2QkQsd0JBQWtCLENBQUNILE9BQW5CLENBQTJCSSxlQUEzQixDQUEyQ2EsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0J4SCxFQUE3RCxFQUFpRTtBQUM3RGlJLGdCQUFRLEVBQUU7QUFEbUQsT0FBakUsRUFFRyxDQUZIO0FBR0EsVUFBRyxDQUFDdkIsUUFBSixFQUFhQSxRQUFRLEdBQUdQLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVTSxtQkFBMUMsRUFBK0QsQ0FBL0QsQ0FBWDtBQUNiRCxjQUFRLENBQUNMLE9BQVQsQ0FBaUJNLG1CQUFqQixDQUFxQ2dCLE9BQU8sQ0FBQzNILEVBQTdDLEVBQWlELEtBQWpEO0FBQ0g7QUFDSjs7QUE1QzhCLENBQXBCLEVBQWY7O0FBK0NBLFNBQVM2SCxXQUFULENBQXFCTixPQUFyQixFQUE2QjtBQUN6QixNQUFHLGtFQUFrRVcsSUFBbEUsQ0FBdUVYLE9BQU8sQ0FBQ1ksT0FBL0UsQ0FBSCxFQUEyRixPQUFPLElBQVA7QUFDM0YsTUFBR0MsY0FBYyxDQUFDYixPQUFELEVBQVUsYUFBVixDQUFkLElBQTBDYSxjQUFjLENBQUNiLE9BQUQsRUFBVSxxQkFBVixDQUF4RCxJQUE0RmEsY0FBYyxDQUFDYixPQUFELEVBQVUsd0JBQVYsQ0FBN0csRUFBaUosT0FBTyxJQUFQO0FBRWpKLFNBQU8sS0FBUDtBQUNIOztBQUNELFNBQVNhLGNBQVQsQ0FBd0JiLE9BQXhCLEVBQWlDYyxNQUFqQyxFQUF3QztBQUNwQyxNQUFJQyxNQUFNLEdBQUdmLE9BQU8sQ0FBQ2UsTUFBckI7QUFDQSxNQUFHQSxNQUFNLENBQUNqRCxNQUFQLEtBQWtCLENBQXJCLEVBQXVCLE9BQU8sS0FBUDtBQUN2QixTQUFPaUQsTUFBTSxDQUFDQyxHQUFQLENBQVdDLEtBQUssSUFBSTtBQUN2QixRQUFHQSxLQUFLLENBQUMxSSxJQUFOLEtBQWUsTUFBbEIsRUFBeUIsT0FBTyxLQUFQO0FBQ3pCLFFBQUcsQ0FBQzBJLEtBQUssQ0FBQ2pMLEtBQU4sSUFBZSxFQUFoQixFQUFvQm1ILFFBQXBCLENBQTZCMkQsTUFBN0IsQ0FBSCxFQUF3QyxPQUFPLElBQVA7QUFDeEMsUUFBRyxDQUFDRyxLQUFLLENBQUNuTCxXQUFOLElBQXFCLEVBQXRCLEVBQTBCcUgsUUFBMUIsQ0FBbUMyRCxNQUFuQyxDQUFILEVBQThDLE9BQU8sSUFBUDtBQUM5QyxRQUFHLENBQUMsQ0FBQ0csS0FBSyxDQUFDMUssTUFBTixJQUFnQixFQUFqQixLQUF3QjBLLEtBQUssQ0FBQzFLLE1BQU4sQ0FBYTJLLElBQXJDLElBQTZDLEVBQTlDLEVBQWtEL0QsUUFBbEQsQ0FBMkQyRCxNQUEzRCxDQUFILEVBQXNFLE9BQU8sSUFBUDtBQUN0RSxRQUFHRyxLQUFLLENBQUNFLE1BQU4sQ0FBYUgsR0FBYixDQUFpQm5DLENBQUMsSUFBSTtBQUNyQixhQUFPQSxDQUFDLENBQUMxRSxLQUFGLENBQVFnRCxRQUFSLENBQWlCMkQsTUFBakIsS0FBNEJqQyxDQUFDLENBQUN1QyxJQUFGLENBQU9qRSxRQUFQLENBQWdCMkQsTUFBaEIsQ0FBbkM7QUFDSCxLQUZFLEVBRUEzRCxRQUZBLENBRVMsSUFGVCxDQUFILEVBRWtCLE9BQU8sSUFBUDtBQUNsQixXQUFPLEtBQVA7QUFFSCxHQVZNLEVBVUpBLFFBVkksQ0FVSyxJQVZMLENBQVA7QUFXSCxDOzs7Ozs7Ozs7Ozs7QUNsRkQ7QUFBQTtBQUFBO0FBRUEsTUFBTXFCLFVBQVUsR0FBR0ksU0FBUyxDQUFDdkUsR0FBVixDQUFjdEQsQ0FBQyxJQUFFQSxDQUFDLENBQUNzSyxVQUFGLElBQWN0SyxDQUFDLENBQUMrSCxPQUFoQixJQUF5Qi9ILENBQUMsQ0FBQytILE9BQUYsQ0FBVXdDLFFBQXBELEVBQThELENBQTlELEVBQWlFeEMsT0FBcEY7QUFDQSxNQUFNeUMsV0FBVyxHQUFHM0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjdEQsQ0FBQyxJQUFFQSxDQUFDLENBQUN3SyxXQUFuQixFQUFnQyxDQUFoQyxFQUFtQ0EsV0FBdkQ7QUFFQSxNQUFNQyxRQUFRLEdBQUcsd0JBQWpCO0FBQ0EsTUFBTUMsR0FBRyxHQUFHQyxPQUFPLENBQUNELEdBQXBCO0FBRWUsbUVBQUksTUFBTUUsa0JBQU4sQ0FBeUI7QUFDeEN0RyxhQUFXLEdBQUU7QUFDVCxTQUFLcUUsT0FBTCxHQUFlLEtBQWY7QUFFQSxTQUFLa0MsSUFBTCxHQUFZM0kscURBQVo7QUFDSDs7QUFFRCxNQUFJNEksWUFBSixHQUFrQjtBQUNkLFFBQUcsQ0FBQyxLQUFLRCxJQUFULEVBQWMsT0FBTyxJQUFQO0FBQ2QsUUFBRyxLQUFLbEMsT0FBTCxLQUFpQixLQUFwQixFQUEwQixPQUFPLElBQVA7QUFDMUIsUUFBSWtDLElBQUksR0FBRztBQUNQUixVQUFJLEVBQUUsS0FBS1EsSUFBTCxDQUFVUixJQUFWLElBQWtCbEksb0RBQVUsQ0FBQ2tJLElBRDVCO0FBRVBVLG9CQUFjLEVBQUUsS0FBS0YsSUFBTCxDQUFVRSxjQUFWLElBQTRCNUksb0RBQVUsQ0FBQzRJLGNBRmhEO0FBR1BDLGFBQU8sRUFBRSxLQUFLSCxJQUFMLENBQVVHLE9BQVYsSUFBcUJ2RixTQUh2QjtBQUlQd0YsV0FBSyxFQUFFLEtBQUtKLElBQUwsQ0FBVUksS0FBVixJQUFtQnhGLFNBSm5CO0FBS1B5RixnQkFBVSxFQUFFLEtBQUtMLElBQUwsQ0FBVSxrQkFBVixJQUFnQztBQUN4Q00sYUFBSyxFQUFFLEtBQUtOLElBQUwsQ0FBVSxrQkFBVjtBQURpQyxPQUFoQyxHQUVScEYsU0FQRztBQVFQMkYsWUFBTSxFQUFFLEtBQUtQLElBQUwsQ0FBVSxjQUFWLElBQTRCO0FBQ2hDUSxtQkFBVyxFQUFFLEtBQUtSLElBQUwsQ0FBVSxjQUFWLENBRG1CO0FBRWhDUyxtQkFBVyxFQUFFLEtBQUtULElBQUwsQ0FBVSxjQUFWLEtBQTZCcEY7QUFGVixPQUE1QixHQUdKQTtBQVhHLEtBQVg7QUFhQSxXQUFPb0YsSUFBUDtBQUNIOztBQUVEVSxVQUFRLEdBQUU7QUFDTjlELGNBQVUsQ0FBQzhDLFFBQVgsQ0FBb0I7QUFDaEIvSSxVQUFJLEVBQUVnSixXQUFXLENBQUNnQixxQkFERjtBQUVoQmYsY0FGZ0I7QUFHaEJDLFNBSGdCO0FBSWhCZSxjQUFRLEVBQUUsS0FBS1g7QUFKQyxLQUFwQjtBQU1IOztBQUVEbEMsUUFBTSxHQUFHO0FBQ0wsUUFBRyxLQUFLRCxPQUFSLEVBQWdCO0FBQ2hCLFNBQUtBLE9BQUwsR0FBZSxJQUFmO0FBQ0ErQyxXQUFPLENBQUNDLEdBQVIsQ0FBWSw4QkFBWjtBQUVBLFNBQUtDLEdBQUwsQ0FBUzFKLHFEQUFXLElBQUlPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjUCxvREFBZCxDQUF4QjtBQUVBLFNBQUtvSixRQUFMO0FBQ0g7O0FBRUR6QyxTQUFPLEdBQUc7QUFDTixRQUFHLENBQUMsS0FBS0gsT0FBVCxFQUFpQjtBQUNqQixTQUFLQSxPQUFMLEdBQWUsS0FBZjtBQUNBK0MsV0FBTyxDQUFDQyxHQUFSLENBQVksK0JBQVo7QUFFQSxTQUFLSixRQUFMO0FBQ0g7O0FBRUQsUUFBTU0sV0FBTixDQUFrQkMsYUFBbEIsRUFBZ0M7QUFDNUIsUUFBSVYsTUFBTSxHQUFHLE1BQU12RCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2lFLFNBQXJCLEVBQWdDLENBQWhDLEVBQW1DQSxTQUFuQyxDQUE2Q0QsYUFBN0MsQ0FBbkI7O0FBQ0EsUUFBR1YsTUFBTSxDQUFDM0YsU0FBUCxJQUFvQixPQUFPMkYsTUFBTSxDQUFDM0YsU0FBZCxLQUE0QixRQUFuRCxFQUE0RDtBQUN4RCxZQUFNLElBQUl1RyxLQUFKLENBQVUscUJBQVYsQ0FBTjtBQUNIOztBQUNELFdBQU9aLE1BQVA7QUFDSDs7QUFFRFEsS0FBRyxDQUFDSCxRQUFELEVBQVU7QUFDVCxTQUFLWixJQUFMLEdBQVlZLFFBQVo7QUFFQSxTQUFLRixRQUFMO0FBQ0g7O0FBakV1QyxDQUE3QixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ1JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTXBILEtBQUssR0FBRztBQUNWLE1BQUl0RCxLQUFKLEdBQVk7QUFBRSxXQUFPSCwyQ0FBSSxDQUFDRyxLQUFaO0FBQW9CLEdBRHhCOztBQUVWLE1BQUlvTCxRQUFKLEdBQWU7QUFBRSxXQUFPdkwsMkNBQUksQ0FBQ3dMLFFBQVo7QUFBdUIsR0FGOUI7O0FBR1YsTUFBSUMsY0FBSixHQUFxQjtBQUFDLFdBQU96TCwyQ0FBSSxDQUFDeUwsY0FBWjtBQUE0QixHQUh4Qzs7QUFJVixNQUFJQyxnQkFBSixHQUF1QjtBQUFDLFdBQU83SSw4Q0FBSyxDQUFDNkksZ0JBQWI7QUFBK0IsR0FKN0M7O0FBS1YsTUFBSTNLLFFBQUosR0FBZTtBQUFDLFdBQU9BLGtEQUFQO0FBQWlCLEdBTHZCOztBQU1WLE1BQUk0SyxNQUFKLEdBQWE7QUFBQyxXQUFPLEVBQVA7QUFBVSxHQU5kOztBQU1nQjtBQUMxQixNQUFJQyxXQUFKLEdBQWtCO0FBQUUsV0FBT0MsSUFBSSxDQUFDQyxHQUFMLENBQVM3SCxRQUFRLENBQUM4SCxlQUFULENBQXlCQyxXQUFsQyxFQUErQ2xPLE1BQU0sQ0FBQ21PLFVBQVAsSUFBcUIsQ0FBcEUsQ0FBUDtBQUFnRixHQVAxRjs7QUFRVixNQUFJQyxZQUFKLEdBQW1CO0FBQUUsV0FBT0wsSUFBSSxDQUFDQyxHQUFMLENBQVM3SCxRQUFRLENBQUM4SCxlQUFULENBQXlCSSxZQUFsQyxFQUFnRHJPLE1BQU0sQ0FBQ3NPLFdBQVAsSUFBc0IsQ0FBdEUsQ0FBUDtBQUFrRjs7QUFSN0YsQ0FBZDs7QUFXQTNJLEtBQUssQ0FBQzRJLHVCQUFOLEdBQWdDLFlBQVc7QUFDdkMsU0FBT3hKLDhDQUFLLENBQUN3Six1QkFBTixFQUFQO0FBQ0gsQ0FGRDs7QUFJQTVJLEtBQUssQ0FBQzZJLG1CQUFOLEdBQTRCLFVBQVM3SixHQUFULEVBQWM7QUFDdEMsU0FBT0ksOENBQUssQ0FBQ3lKLG1CQUFOLENBQTBCN0osR0FBMUIsQ0FBUDtBQUNILENBRkQ7O0FBSUFnQixLQUFLLENBQUM4SSxtQkFBTixHQUE0QixVQUFTOUosR0FBVCxFQUFjQyxLQUFkLEVBQXFCO0FBQzdDLFNBQU9HLDhDQUFLLENBQUMwSixtQkFBTixDQUEwQjlKLEdBQTFCLEVBQStCQyxLQUEvQixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTtBQUNBOzs7QUFDQWUsS0FBSyxDQUFDK0ksU0FBTixHQUFrQixVQUFVeEwsRUFBVixFQUFjeUwsR0FBZCxFQUFtQjtBQUNqQ0MsbURBQUcsQ0FBQ0MsUUFBSixDQUFhRCxpREFBRyxDQUFDRSxRQUFKLENBQWE1TCxFQUFiLENBQWIsRUFBK0J5TCxHQUEvQjtBQUNILENBRkQsQyxDQUlBO0FBQ0E7OztBQUNBaEosS0FBSyxDQUFDb0osUUFBTixHQUFpQixVQUFVN0wsRUFBVixFQUFjO0FBQzNCMEwsbURBQUcsQ0FBQ0ksV0FBSixDQUFnQkosaURBQUcsQ0FBQ0UsUUFBSixDQUFhNUwsRUFBYixDQUFoQjtBQUNILENBRkQsQyxDQUlBO0FBQ0E7QUFDQTs7O0FBQ0F5QyxLQUFLLENBQUNzSixNQUFOLEdBQWUsVUFBVS9MLEVBQVYsRUFBY3dFLEdBQWQsRUFBbUI7QUFDOUJrSCxtREFBRyxDQUFDTSxTQUFKLENBQWNOLGlEQUFHLENBQUNFLFFBQUosQ0FBYTVMLEVBQWIsQ0FBZCxFQUFnQ3dFLEdBQWhDO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTs7O0FBQ0EvQixLQUFLLENBQUN3SixRQUFOLEdBQWlCLFVBQVVqTSxFQUFWLEVBQWM7QUFDM0IwTCxtREFBRyxDQUFDUSxZQUFKLENBQWlCUixpREFBRyxDQUFDRSxRQUFKLENBQWE1TCxFQUFiLENBQWpCO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTs7O0FBQ0F5QyxLQUFLLENBQUMwSixTQUFOLEdBQWtCLFVBQVV4RCxJQUFWLEVBQWdCO0FBQzlCLE1BQUl4SCxtREFBUyxDQUFDaUwsY0FBVixDQUF5QnpELElBQXpCLENBQUosRUFBb0M7QUFDaEMsV0FBT3hILG1EQUFTLENBQUN3SCxJQUFELENBQVQsQ0FBZ0IwRCxNQUF2QjtBQUNIOztBQUNELFNBQU8sSUFBUDtBQUNILENBTEQsQyxDQU9BOzs7QUFDQTVKLEtBQUssQ0FBQzZKLE9BQU4sR0FBZ0IsWUFBWTtBQUN4QnpLLGdEQUFLLENBQUNDLElBQU4sQ0FBVyxvQkFBWCxFQUFrQyxxREFBbEM7QUFDQSxTQUFPeUssNkNBQVA7QUFDSCxDQUhEO0FBS0E7Ozs7Ozs7QUFLQTlKLEtBQUssQ0FBQytKLEtBQU4sR0FBYyxVQUFValAsS0FBVixFQUFpQjRLLE9BQWpCLEVBQTBCO0FBQ3BDLFNBQU90Ryw4Q0FBSyxDQUFDNEsscUJBQU4sQ0FBNEJsUCxLQUE1QixFQUFtQzRLLE9BQW5DLEVBQTRDO0FBQUN1RSxjQUFVLEVBQUU7QUFBYixHQUE1QyxDQUFQO0FBQ0gsQ0FGRDtBQUlBOzs7Ozs7Ozs7Ozs7Ozs7QUFhQWpLLEtBQUssQ0FBQ2dLLHFCQUFOLEdBQThCLFVBQVVsUCxLQUFWLEVBQWlCNEssT0FBakIsRUFBMEJ3RSxPQUFPLEdBQUcsRUFBcEMsRUFBd0M7QUFDbEUsU0FBTzlLLDhDQUFLLENBQUM0SyxxQkFBTixDQUE0QmxQLEtBQTVCLEVBQW1DNEssT0FBbkMsRUFBNEN3RSxPQUE1QyxDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBbEssS0FBSyxDQUFDcUYsU0FBTixHQUFrQixVQUFTSyxPQUFULEVBQWtCd0UsT0FBTyxHQUFHLEVBQTVCLEVBQWdDO0FBQzlDOUssZ0RBQUssQ0FBQ2lHLFNBQU4sQ0FBZ0JLLE9BQWhCLEVBQXlCd0UsT0FBekI7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FsSyxLQUFLLENBQUNtSyxVQUFOLEdBQW1CLFVBQVNDLE1BQVQsRUFBaUI7QUFDaEMsU0FBTzdOLDJDQUFJLENBQUNoQixjQUFMLENBQW9CSyxJQUFwQixDQUF5QndPLE1BQXpCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FwSyxLQUFLLENBQUNxSyxjQUFOLEdBQXVCLFVBQVNELE1BQVQsRUFBaUI7QUFDcEMsU0FBTzdOLDJDQUFJLENBQUNoQixjQUFMLENBQW9CK08sT0FBcEIsQ0FBNEJGLE1BQTVCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FwSyxLQUFLLENBQUN1SyxpQkFBTixHQUEwQixVQUFTLEdBQUdDLEtBQVosRUFBbUI7QUFDekMsU0FBT2pPLDJDQUFJLENBQUNoQixjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDRCxLQUEzQyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQXhLLEtBQUssQ0FBQzBLLHNCQUFOLEdBQStCLFVBQVMsR0FBR0MsTUFBWixFQUFvQjtBQUMvQyxTQUFPcE8sMkNBQUksQ0FBQ2hCLGNBQUwsQ0FBb0JxUCxnQkFBcEIsQ0FBcUNELE1BQXJDLENBQVA7QUFDSCxDQUZEOztBQUlBM0ssS0FBSyxDQUFDNkssdUJBQU4sR0FBZ0MsVUFBUzNFLElBQVQsRUFBZTtBQUMzQyxTQUFPM0osMkNBQUksQ0FBQ2hCLGNBQUwsQ0FBb0JDLGlCQUFwQixDQUFzQzBLLElBQXRDLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FsRyxLQUFLLENBQUM4SyxtQkFBTixHQUE0QixVQUFTQyxJQUFULEVBQWU7QUFDdkMsTUFBSSxFQUFFQSxJQUFJLFlBQVkxUSxNQUFNLENBQUMyUSxNQUF6QixLQUFvQyxFQUFFRCxJQUFJLFlBQVlFLE9BQWxCLENBQXhDLEVBQW9FLE9BQU8zSixTQUFQO0FBQ3BFLE1BQUl5SixJQUFJLFlBQVlDLE1BQXBCLEVBQTRCRCxJQUFJLEdBQUdBLElBQUksQ0FBQyxDQUFELENBQVg7QUFDNUIsU0FBT3hPLDJDQUFJLENBQUN1TyxtQkFBTCxDQUF5QkMsSUFBekIsQ0FBUDtBQUNILENBSkQsQyxDQU1BOzs7QUFDQS9LLEtBQUssQ0FBQ2tMLFFBQU4sR0FBaUIsVUFBU0MsVUFBVCxFQUFxQm5NLEdBQXJCLEVBQTBCO0FBQ3ZDLFNBQU9hLGtEQUFTLENBQUN1TCxhQUFWLENBQXdCRCxVQUF4QixFQUFvQ25NLEdBQXBDLENBQVA7QUFDSCxDQUZEOztBQUlBZ0IsS0FBSyxDQUFDcUwsT0FBTixHQUFnQnJMLEtBQUssQ0FBQ2tMLFFBQXRCLEMsQ0FFQTs7QUFDQWxMLEtBQUssQ0FBQ3NMLFFBQU4sR0FBaUIsVUFBU0gsVUFBVCxFQUFxQm5NLEdBQXJCLEVBQTBCd0QsSUFBMUIsRUFBZ0M7QUFDN0MsU0FBTzNDLGtEQUFTLENBQUMwTCxhQUFWLENBQXdCSixVQUF4QixFQUFvQ25NLEdBQXBDLEVBQXlDd0QsSUFBekMsQ0FBUDtBQUNILENBRkQ7O0FBSUF4QyxLQUFLLENBQUN3TCxPQUFOLEdBQWdCeEwsS0FBSyxDQUFDc0wsUUFBdEIsQyxDQUVBOztBQUNBdEwsS0FBSyxDQUFDeUwsVUFBTixHQUFtQixVQUFTTixVQUFULEVBQXFCbk0sR0FBckIsRUFBMEI7QUFDekMsU0FBT2Esa0RBQVMsQ0FBQzZMLGdCQUFWLENBQTJCUCxVQUEzQixFQUF1Q25NLEdBQXZDLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FnQixLQUFLLENBQUNpRCxXQUFOLEdBQW9CLFVBQVMwSSxJQUFULEVBQWVDLFVBQWYsRUFBMkIxQixPQUEzQixFQUFvQztBQUNwRCxTQUFPOUssOENBQUssQ0FBQzZELFdBQU4sQ0FBa0IwSSxJQUFsQixFQUF3QkMsVUFBeEIsRUFBb0MxQixPQUFwQyxDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBbEssS0FBSyxDQUFDNkwsU0FBTixHQUFrQixVQUFTZCxJQUFULEVBQWVlLFFBQWYsRUFBeUI7QUFDdkMsU0FBTzFNLDhDQUFLLENBQUN5TSxTQUFOLENBQWdCZCxJQUFoQixFQUFzQmUsUUFBdEIsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQTlMLEtBQUssQ0FBQytMLGNBQU4sR0FBdUIsVUFBU0MsTUFBVCxFQUFpQmxILE9BQWpCLEVBQTBCO0FBQzdDLFNBQU8xRiw4Q0FBSyxDQUFDMk0sY0FBTixDQUFxQkMsTUFBckIsRUFBNkJsSCxPQUE3QixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBOUUsS0FBSyxDQUFDaU0sUUFBTixHQUFpQixVQUFTekosSUFBVCxFQUFlO0FBQzVCLFNBQU9wRCw4Q0FBSyxDQUFDNk0sUUFBTixDQUFlekosSUFBZixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXhDLEtBQUssQ0FBQ2tNLGVBQU4sR0FBd0IsVUFBU2hHLElBQVQsRUFBZTtBQUNuQyxTQUFPLENBQUMsQ0FBQ3ZILHNEQUFZLENBQUN1SCxJQUFELENBQXJCO0FBQ0gsQ0FGRDs7QUFJQWxHLEtBQUssQ0FBQ21NLGNBQU4sR0FBdUIsVUFBU2pHLElBQVQsRUFBZTtBQUNsQyxTQUFPLENBQUMsQ0FBQ3RILHFEQUFXLENBQUNzSCxJQUFELENBQXBCO0FBQ0gsQ0FGRDs7QUFJQWxHLEtBQUssQ0FBQ29NLGdCQUFOLEdBQXlCLFVBQVM3TyxFQUFULEVBQWE7QUFDbEMsU0FBTyxDQUFDLENBQUNPLHdEQUFjLENBQUNQLEVBQUQsQ0FBdkI7QUFDSCxDQUZEOztBQUlBeUMsS0FBSyxDQUFDcU0sYUFBTixHQUFzQixVQUFTOU8sRUFBVCxFQUFhO0FBQy9CLFNBQU9xQyxzREFBYSxDQUFDME0sUUFBZCxDQUF1Qi9PLEVBQXZCLEVBQTJCLElBQTNCLENBQVA7QUFDSCxDQUZEOztBQUlBeUMsS0FBSyxDQUFDdU0sY0FBTixHQUF1QixVQUFTaFAsRUFBVCxFQUFhO0FBQ2hDLFNBQU9xQyxzREFBYSxDQUFDME0sUUFBZCxDQUF1Qi9PLEVBQXZCLEVBQTJCLEtBQTNCLENBQVA7QUFDSCxDQUZEOztBQUlBeUMsS0FBSyxDQUFDd00sYUFBTixHQUFzQixVQUFTalAsRUFBVCxFQUFhO0FBQy9CLFNBQU9xQyxzREFBYSxDQUFDME0sUUFBZCxDQUF1Qi9PLEVBQXZCLEVBQTJCLENBQUNPLHdEQUFjLENBQUNQLEVBQUQsQ0FBMUMsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQXlDLEtBQUssQ0FBQ3lNLFNBQU4sR0FBa0IsVUFBU3pOLEdBQVQsRUFBYztBQUM1QixTQUFPYSxrREFBUyxDQUFDNE0sU0FBVixDQUFvQnpOLEdBQXBCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FnQixLQUFLLENBQUMwTSxTQUFOLEdBQWtCLFVBQVMxTixHQUFULEVBQWN3RCxJQUFkLEVBQW9CO0FBQ2xDLFNBQU8zQyxrREFBUyxDQUFDNk0sU0FBVixDQUFvQjFOLEdBQXBCLEVBQXlCd0QsSUFBekIsQ0FBUDtBQUNILENBRkQ7O0FBTUEsTUFBTW1LLFlBQVksR0FBRyxDQUFDQyxNQUFELEVBQVNDLElBQVQsRUFBZUMsT0FBZixLQUEyQixJQUFJLE1BQU1DLFFBQU4sQ0FBZTtBQUUvRCxNQUFJQyxNQUFKLEdBQWE7QUFBQyxXQUFPRixPQUFPLENBQUNFLE1BQWY7QUFBdUI7O0FBRXJDQyxXQUFTLENBQUMvRyxJQUFELEVBQU87QUFDWixXQUFPLENBQUMsQ0FBQzBHLE1BQU0sQ0FBQzFHLElBQUQsQ0FBZjtBQUNIOztBQUVEekIsUUFBTSxDQUFDeUIsSUFBRCxFQUFPO0FBQ1QsV0FBTzRHLE9BQU8sQ0FBQ3JJLE1BQVIsQ0FBZXlCLElBQWYsQ0FBUDtBQUNIOztBQUVEdkIsU0FBTyxDQUFDdUIsSUFBRCxFQUFPO0FBQ1YsV0FBTzRHLE9BQU8sQ0FBQ25JLE9BQVIsQ0FBZ0J1QixJQUFoQixDQUFQO0FBQ0g7O0FBRURnSCxRQUFNLENBQUNoSCxJQUFELEVBQU87QUFDVCxRQUFJMEcsTUFBTSxDQUFDMUcsSUFBRCxDQUFWLEVBQWtCLEtBQUt2QixPQUFMLENBQWF1QixJQUFiLEVBQWxCLEtBQ0ssS0FBS3pCLE1BQUwsQ0FBWXlCLElBQVo7QUFDUjs7QUFFRGlILFFBQU0sQ0FBQ2pILElBQUQsRUFBTztBQUNULFdBQU80RyxPQUFPLENBQUNLLE1BQVIsQ0FBZWpILElBQWYsQ0FBUDtBQUNIOztBQUVEL0csS0FBRyxDQUFDK0csSUFBRCxFQUFPO0FBQ04sUUFBSTJHLElBQUksQ0FBQ2xELGNBQUwsQ0FBb0J6RCxJQUFwQixDQUFKLEVBQStCO0FBQzNCLFVBQUkyRyxJQUFJLENBQUMzRyxJQUFELENBQUosQ0FBVzBELE1BQWYsRUFBdUIsT0FBT2lELElBQUksQ0FBQzNHLElBQUQsQ0FBSixDQUFXMEQsTUFBbEI7QUFDdkIsYUFBT2lELElBQUksQ0FBQzNHLElBQUQsQ0FBWDtBQUNIOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQUVEa0gsUUFBTSxHQUFHO0FBQ0wsV0FBTzlPLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWXNOLElBQVosRUFBa0IvRyxHQUFsQixDQUFzQnVILENBQUMsSUFBSSxLQUFLbE8sR0FBTCxDQUFTa08sQ0FBVCxDQUEzQixFQUF3Q2pELE1BQXhDLENBQStDa0QsQ0FBQyxJQUFJQSxDQUFwRCxDQUFQO0FBQ0g7O0FBbkM4RCxDQUFuQixFQUFoRDs7QUFzQ0F0TixLQUFLLENBQUN1TixPQUFOLEdBQWdCWixZQUFZLENBQUNoTyxzREFBRCxFQUFlRCxtREFBZixFQUEwQmUscURBQTFCLENBQTVCO0FBQ0FPLEtBQUssQ0FBQ3dOLE1BQU4sR0FBZWIsWUFBWSxDQUFDL04scURBQUQsRUFBY0gsa0RBQWQsRUFBd0JpQixvREFBeEIsQ0FBM0I7QUFFZU0sb0VBQWYsRTs7Ozs7Ozs7Ozs7O0FDM1BBO0FBQUE7QUFDQSxNQUFNeU4sWUFBWSxHQUFHbk4sbUJBQU8sQ0FBQyxzQkFBRCxDQUE1Qjs7QUFDZSxtRUFBSSxNQUFNWCxRQUFOLFNBQXVCOE4sWUFBdkIsQ0FBb0M7QUFDbkRySCxVQUFRLENBQUNzSCxTQUFELEVBQVksR0FBR0MsSUFBZixFQUFxQjtBQUFDLFNBQUtDLElBQUwsQ0FBVUYsU0FBVixFQUFxQixHQUFHQyxJQUF4QjtBQUErQjs7QUFDN0RFLEtBQUcsQ0FBQ0gsU0FBRCxFQUFZSSxXQUFaLEVBQXlCO0FBQUMsU0FBS0MsY0FBTCxDQUFvQkwsU0FBcEIsRUFBK0JJLFdBQS9CO0FBQTZDOztBQUZ2QixDQUF4QyxFQUFmLEU7Ozs7Ozs7Ozs7OztBQ0ZBO0FBQUE7QUFBQTtBQUFBOzs7QUFJQTtBQUNBO0FBRUEsSUFBSUUsU0FBSjtBQUNBLE1BQU1DLFFBQVEsR0FBRzdPLDhDQUFLLENBQUM2TyxRQUF2Qjs7QUFDQSxTQUFTQyxZQUFULEdBQXVCO0FBQ25CLE1BQUlDLG1CQUFtQixHQUFHekssU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN3SyxtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBMUI7QUFDQSxNQUFHLENBQUNBLG1CQUFKLEVBQXdCLE9BQU8sSUFBUDtBQUN4QixNQUFJQyxnQkFBZ0IsR0FBR0gsUUFBUSxDQUFDRSxtQkFBbUIsQ0FBQ0EsbUJBQXJCLENBQS9CO0FBQ0EsTUFBSUUsT0FBTyxHQUFHLEVBQWQ7QUFDQUEsU0FBTyxDQUFDQyxJQUFSLENBQWMsZUFBY0YsZ0JBQWlCLG1CQUFrQkgsUUFBUSxDQUFDdkssU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMvSSxXQUFGLElBQWlCLE9BQU8rSSxDQUFDLENBQUMvSSxXQUFULEtBQXlCLFFBQTFDLElBQXNEK0ksQ0FBQyxDQUFDL0ksV0FBRixDQUFjcUgsUUFBZCxDQUF1QixVQUF2QixDQUF6RSxFQUE2RyxDQUE3RyxFQUFnSHJILFdBQWpILENBQThILEVBQXJNO0FBQ0F5VCxTQUFPLENBQUNDLElBQVIsQ0FBYyxlQUFjRixnQkFBaUIsS0FBSUgsUUFBUSxDQUFDdkssU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0SyxnQkFBckIsRUFBdUMsQ0FBdkMsRUFBMENBLGdCQUEzQyxDQUE2RCxLQUFJTixRQUFRLENBQUN2SyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzZLLE9BQUYsSUFBYTdLLENBQUMsQ0FBQzhLLGtCQUFsQyxFQUFzRCxDQUF0RCxFQUF5REQsT0FBMUQsQ0FBbUUsRUFBck07QUFDQUgsU0FBTyxDQUFDQyxJQUFSLENBQWMsZUFBY0YsZ0JBQWlCLEtBQUlILFFBQVEsQ0FBQ3ZLLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDK0ssbUJBQXJCLEVBQTBDLENBQTFDLEVBQTZDQSxtQkFBOUMsQ0FBbUUsdUNBQXNDVCxRQUFRLENBQUN2SyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dMLFFBQXJCLEVBQStCLENBQS9CLEVBQWtDQSxRQUFuQyxDQUE2QyxFQUF2TjtBQUNBLFNBQU9OLE9BQVA7QUFDSDs7QUFFYyxtRUFBSSxNQUFNTyxXQUFOLENBQWtCO0FBQ2pDek8sYUFBVyxHQUFFO0FBQ1QsU0FBS3FFLE9BQUwsR0FBZSxLQUFmO0FBQ0g7O0FBRURDLFFBQU0sR0FBRTtBQUNKLFFBQUcsS0FBS0QsT0FBUixFQUFnQjtBQUNoQixTQUFLQSxPQUFMLEdBQWUsSUFBZjtBQUNBd0osYUFBUyxHQUFHQSxTQUFTLElBQUlFLFlBQVksRUFBckM7QUFFQSxRQUFHLENBQUNGLFNBQUosRUFBY3pHLE9BQU8sQ0FBQ3NILEtBQVIsQ0FBYyxJQUFJaEgsS0FBSixDQUFVLHlEQUFWLENBQWQ7QUFDZGlILHFEQUFRLENBQUM1RixRQUFULENBQWtCLGFBQWxCLEVBQWtDO0VBQ3hDOEUsU0FBUyxDQUFDLENBQUQsQ0FBSSxLQUFJQSxTQUFTLENBQUMsQ0FBRCxDQUFJLEtBQUlBLFNBQVMsQ0FBQyxDQUFELENBQUk7Ozs7OztFQU0vQ0EsU0FBUyxDQUFDLENBQUQsQ0FBSSxXQUFVQSxTQUFTLENBQUMsQ0FBRCxDQUFJLFdBQVVBLFNBQVMsQ0FBQyxDQUFELENBQUk7Ozs7RUFQckQ7QUFZSDs7QUFFRHJKLFNBQU8sR0FBRTtBQUNMLFFBQUcsQ0FBQyxLQUFLSCxPQUFULEVBQWlCO0FBQ2pCLFNBQUtBLE9BQUwsR0FBZSxLQUFmO0FBQ0FzSyxxREFBUSxDQUFDekYsV0FBVCxDQUFxQixhQUFyQjtBQUNIOztBQTdCZ0MsQ0FBdEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNwQkE7QUFBQTtBQUFBO0FBRUEsTUFBTTBGLGdCQUFnQixHQUFHLElBQXpCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLElBQUkxTSxNQUFKLENBQVksT0FBTXlNLGdCQUFpQixzREFBbkMsQ0FBbEI7QUFFZSxtRUFBSSxNQUFNaFAsZUFBTixDQUFzQjtBQUVyQ2tQLE1BQUksR0FBRztBQUNILFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ3RCLFNBQUtDLG1CQUFMLENBQXlCNVQsdURBQWMsQ0FBQytPLE9BQWYsQ0FBdUIsS0FBSzhFLFlBQUwsQ0FBa0I1TixJQUFsQixDQUF1QixJQUF2QixDQUF2QixDQUF6QjtBQUNBLFNBQUs2TixhQUFMLENBQW1CN08sUUFBUSxDQUFDOE8sYUFBVCxDQUF1QixZQUF2QixDQUFuQjtBQUNBLFNBQUtKLFVBQUwsR0FBa0IsS0FBbEI7QUFDSDs7QUFFRGxJLE9BQUssR0FBRztBQUNKLFFBQUksS0FBS2tJLFVBQVQsRUFBcUI7QUFDckIsU0FBS0ssaUJBQUwsQ0FBdUJoVSx1REFBYyxDQUFDK08sT0FBZixDQUF1QixLQUFLOEUsWUFBTCxDQUFrQjVOLElBQWxCLENBQXVCLElBQXZCLENBQXZCLENBQXZCO0FBQ0EsU0FBS2dPLGdCQUFMLENBQXNCaFAsUUFBUSxDQUFDOE8sYUFBVCxDQUF1QixZQUF2QixDQUF0QjtBQUNBLFNBQUtKLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLTyxlQUFMO0FBQ0g7O0FBRURGLG1CQUFpQixDQUFDRyxPQUFELEVBQVU7QUFDdkIsU0FBSyxNQUFNQyxNQUFYLElBQXFCRCxPQUFyQixFQUE4QjtBQUMxQixXQUFLRSxnQkFBTCxDQUFzQmIsZ0JBQXRCLEVBQXdDWSxNQUF4QztBQUNIO0FBQ0o7O0FBRURSLHFCQUFtQixDQUFDTyxPQUFELEVBQVU7QUFDekIsU0FBSyxNQUFNQyxNQUFYLElBQXFCRCxPQUFyQixFQUE4QjtBQUMxQixXQUFLRyxrQkFBTCxDQUF3QmQsZ0JBQXhCLEVBQTBDWSxNQUExQztBQUNIO0FBQ0o7O0FBRURHLGNBQVksQ0FBQzdRLEtBQUQsRUFBUTtBQUNoQixRQUFJLENBQUM4USxLQUFLLENBQUM5USxLQUFELENBQVYsRUFBbUIsT0FBTyxJQUFQO0FBQ25CLFFBQUlBLEtBQUssQ0FBQytRLFFBQU4sQ0FBZSxJQUFmLEtBQXdCL1EsS0FBSyxDQUFDK1EsUUFBTixDQUFlLElBQWYsQ0FBeEIsSUFBZ0QvUSxLQUFLLENBQUMrUSxRQUFOLENBQWUsSUFBZixDQUFoRCxJQUF3RS9RLEtBQUssQ0FBQytRLFFBQU4sQ0FBZSxJQUFmLENBQTVFLEVBQWtHLE9BQU8sSUFBUDtBQUNsRyxRQUFJL1EsS0FBSyxDQUFDZ1IsVUFBTixDQUFpQixpQkFBakIsQ0FBSixFQUF5QyxPQUFPLElBQVA7QUFDekMsUUFBSWhSLEtBQUssQ0FBQ2dSLFVBQU4sQ0FBaUIsR0FBakIsTUFBMEJoUixLQUFLLENBQUMyRCxNQUFOLElBQWdCLENBQWhCLElBQXFCM0QsS0FBSyxDQUFDMkQsTUFBTixJQUFnQixDQUEvRCxDQUFKLEVBQXVFLE9BQU8sSUFBUDtBQUN2RSxRQUFJM0QsS0FBSyxDQUFDZ0QsUUFBTixDQUFlLE9BQWYsS0FBMkJoRCxLQUFLLENBQUNnRCxRQUFOLENBQWUsTUFBZixDQUEvQixFQUF1RCxPQUFPLElBQVA7QUFDdkQsV0FBTyxLQUFQO0FBQ0g7O0FBRURtTixjQUFZLENBQUNPLE1BQUQsRUFBUztBQUNqQixRQUFJLE9BQU9BLE1BQVAsS0FBa0IsUUFBbEIsSUFBOEJPLEtBQUssQ0FBQ0MsT0FBTixDQUFjUixNQUFkLENBQWxDLEVBQXlELE9BQU8sS0FBUDtBQUN6RCxRQUFJQSxNQUFNLENBQUNTLFVBQVgsRUFBdUIsT0FBTyxLQUFQO0FBQ3ZCLFFBQUksQ0FBQzlSLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWW9RLE1BQVosRUFBb0IvTSxNQUF6QixFQUFpQyxPQUFPLEtBQVA7O0FBQ2pDLFNBQUssTUFBTXlOLGFBQVgsSUFBNEJWLE1BQTVCLEVBQW9DO0FBQ2hDLFlBQU0xUSxLQUFLLEdBQUcwUSxNQUFNLENBQUNVLGFBQUQsQ0FBcEI7QUFDQSxVQUFJLE9BQU9wUixLQUFQLEtBQWlCLFFBQXJCLEVBQStCLE9BQU8sS0FBUDtBQUMvQixVQUFJLEtBQUs2USxZQUFMLENBQWtCN1EsS0FBbEIsQ0FBSixFQUE4QjtBQUM5QixVQUFJQSxLQUFLLENBQUNxUixLQUFOLENBQVksR0FBWixFQUFpQjFOLE1BQWpCLEtBQTRCLENBQWhDLEVBQW1DLE9BQU8sS0FBUDtBQUNuQyxVQUFJLENBQUNvTSxTQUFTLENBQUN2SixJQUFWLENBQWV4RyxLQUFLLENBQUNxUixLQUFOLENBQVksR0FBWixFQUFpQixDQUFqQixDQUFmLENBQUwsRUFBMEMsT0FBTyxLQUFQO0FBQzdDOztBQUVELFdBQU8sSUFBUDtBQUNIOztBQUVEVixrQkFBZ0IsQ0FBQ1csYUFBRCxFQUFnQkMsVUFBaEIsRUFBNEI7QUFDeEMsU0FBSyxNQUFNSCxhQUFYLElBQTRCRyxVQUE1QixFQUF3QztBQUNwQyxZQUFNdlIsS0FBSyxHQUFHdVIsVUFBVSxDQUFDSCxhQUFELENBQXhCO0FBQ0EsVUFBSSxLQUFLUCxZQUFMLENBQWtCN1EsS0FBbEIsQ0FBSixFQUE4QjtBQUM5QixZQUFNd1IsU0FBUyxHQUFHeFIsS0FBSyxDQUFDcVIsS0FBTixDQUFZLEdBQVosQ0FBbEI7O0FBQ0EsV0FBSyxNQUFNSSxXQUFYLElBQTBCRCxTQUExQixFQUFxQztBQUNqQyxjQUFNOU4sS0FBSyxHQUFHK04sV0FBVyxDQUFDL04sS0FBWixDQUFrQnFNLFNBQWxCLENBQWQ7QUFDQSxZQUFJLENBQUNyTSxLQUFELElBQVUsQ0FBQ0EsS0FBSyxDQUFDQyxNQUFqQixJQUEyQkQsS0FBSyxDQUFDQyxNQUFOLEdBQWUsQ0FBOUMsRUFBaUQsU0FGaEIsQ0FFMEI7O0FBQzNELGNBQU0rTixTQUFTLEdBQUdoTyxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVMyTixLQUFULENBQWUsR0FBZixFQUFvQnhLLEdBQXBCLENBQXdCLENBQUM4SyxDQUFELEVBQUlDLENBQUosS0FBVUEsQ0FBQyxHQUFHRCxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtFLFdBQUwsS0FBcUJGLENBQUMsQ0FBQ0csS0FBRixDQUFRLENBQVIsQ0FBeEIsR0FBcUNILENBQXhFLEVBQTJFSSxJQUEzRSxDQUFnRixFQUFoRixDQUFsQjtBQUNBUixrQkFBVSxDQUFDSCxhQUFELENBQVYsSUFBOEIsSUFBR0UsYUFBYyxJQUFHSSxTQUFVLEVBQTVEO0FBQ0g7QUFDSjtBQUNKOztBQUVEZCxvQkFBa0IsQ0FBQ1UsYUFBRCxFQUFnQkMsVUFBaEIsRUFBNEI7QUFDMUMsU0FBSyxNQUFNSCxhQUFYLElBQTRCRyxVQUE1QixFQUF3QztBQUNwQyxZQUFNdlIsS0FBSyxHQUFHdVIsVUFBVSxDQUFDSCxhQUFELENBQXhCO0FBQ0EsVUFBSSxLQUFLUCxZQUFMLENBQWtCN1EsS0FBbEIsQ0FBSixFQUE4QjtBQUM5QixVQUFJZ1MsU0FBUyxHQUFHLEVBQWhCO0FBQ0EsWUFBTVIsU0FBUyxHQUFHeFIsS0FBSyxDQUFDcVIsS0FBTixDQUFZLEdBQVosQ0FBbEI7O0FBQ0EsV0FBSyxNQUFNSSxXQUFYLElBQTBCRCxTQUExQixFQUFxQztBQUNqQyxZQUFJQyxXQUFXLENBQUNULFVBQVosQ0FBd0IsR0FBRU0sYUFBYyxHQUF4QyxDQUFKLEVBQWlEO0FBQ2pEVSxpQkFBUyxJQUFLLElBQUdQLFdBQVksRUFBN0I7QUFDSDs7QUFDREYsZ0JBQVUsQ0FBQ0gsYUFBRCxDQUFWLEdBQTRCWSxTQUFTLENBQUNDLElBQVYsRUFBNUI7QUFDSDtBQUNKOztBQUVEMUIsa0JBQWdCLENBQUMyQixPQUFELEVBQVU7QUFDdEIsUUFBSSxFQUFFQSxPQUFPLFlBQVlsRyxPQUFyQixDQUFKLEVBQW1DO0FBQ25DLFVBQU1tRyxPQUFPLEdBQUdELE9BQU8sQ0FBQ1YsU0FBeEI7O0FBQ0EsU0FBSyxJQUFJWSxDQUFDLEdBQUcsQ0FBUixFQUFXQyxJQUFJLEdBQUdGLE9BQU8sQ0FBQ3hPLE1BQS9CLEVBQXVDeU8sQ0FBQyxHQUFHQyxJQUEzQyxFQUFpREQsQ0FBQyxFQUFsRCxFQUFzRDtBQUNsRCxVQUFJLENBQUNyQyxTQUFTLENBQUN2SixJQUFWLENBQWUyTCxPQUFPLENBQUNDLENBQUQsQ0FBdEIsQ0FBTCxFQUFpQztBQUNqQyxZQUFNMU8sS0FBSyxHQUFHeU8sT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBVzFPLEtBQVgsQ0FBaUJxTSxTQUFqQixFQUE0QixDQUE1QixDQUFkO0FBQ0EsWUFBTXVDLFFBQVEsR0FBRzVPLEtBQUssQ0FBQzJOLEtBQU4sQ0FBWSxHQUFaLEVBQWlCeEssR0FBakIsQ0FBcUIsQ0FBQzhLLENBQUQsRUFBSUMsQ0FBSixLQUFVQSxDQUFDLEdBQUdELENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS0UsV0FBTCxLQUFxQkYsQ0FBQyxDQUFDRyxLQUFGLENBQVEsQ0FBUixDQUF4QixHQUFxQ0gsQ0FBckUsRUFBd0VJLElBQXhFLENBQTZFLEVBQTdFLENBQWpCO0FBQ0FHLGFBQU8sQ0FBQ1YsU0FBUixDQUFrQmUsR0FBbEIsQ0FBdUIsR0FBRXpDLGdCQUFpQixJQUFHd0MsUUFBUyxFQUF0RDtBQUNIOztBQUNELFNBQUssTUFBTUUsS0FBWCxJQUFvQk4sT0FBTyxDQUFDTyxRQUE1QixFQUFzQyxLQUFLbEMsZ0JBQUwsQ0FBc0JpQyxLQUF0QjtBQUN6Qzs7QUFFRHBDLGVBQWEsQ0FBQzhCLE9BQUQsRUFBVTtBQUNuQixRQUFJLEVBQUVBLE9BQU8sWUFBWWxHLE9BQXJCLENBQUosRUFBbUM7QUFDbkMsUUFBSWtHLE9BQU8sQ0FBQ08sUUFBUixJQUFvQlAsT0FBTyxDQUFDTyxRQUFSLENBQWlCOU8sTUFBekMsRUFBaUQsS0FBS3lNLGFBQUwsQ0FBbUI4QixPQUFPLENBQUNPLFFBQVIsQ0FBaUIsQ0FBakIsQ0FBbkI7QUFDakQsUUFBSVAsT0FBTyxDQUFDUSxrQkFBWixFQUFnQyxLQUFLdEMsYUFBTCxDQUFtQjhCLE9BQU8sQ0FBQ1Esa0JBQTNCO0FBQ2hDLFVBQU1QLE9BQU8sR0FBR0QsT0FBTyxDQUFDVixTQUF4QjtBQUNBLFVBQU1tQixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJUCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxPQUFPLENBQUN4TyxNQUE1QixFQUFvQ3lPLENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBSUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBV3BCLFVBQVgsQ0FBdUIsR0FBRWxCLGdCQUFpQixHQUExQyxDQUFKLEVBQW1ENkMsUUFBUSxDQUFDdEQsSUFBVCxDQUFjOEMsT0FBTyxDQUFDQyxDQUFELENBQXJCO0FBQ3REOztBQUNERixXQUFPLENBQUNWLFNBQVIsQ0FBa0JvQixNQUFsQixDQUF5QixHQUFHRCxRQUE1QjtBQUNIOztBQUVEbkMsaUJBQWUsR0FBRztBQUNkLFVBQU1xQyxRQUFRLEdBQUdDLFlBQVksQ0FBQ2pSLFNBQWIsQ0FBdUJnUixRQUF4Qzs7QUFDQUMsZ0JBQVksQ0FBQ2pSLFNBQWIsQ0FBdUJnUixRQUF2QixHQUFrQyxVQUFTRSxLQUFULEVBQWdCO0FBQzlDO0FBQ0EsYUFBT2hSLE9BQU8sQ0FBQ0MsS0FBUixDQUFjNlEsUUFBZCxFQUF3QixJQUF4QixFQUE4QixDQUFDRSxLQUFLLENBQUMxQixLQUFOLENBQVksR0FBWixFQUFpQixDQUFqQixDQUFELENBQTlCLENBQVAsQ0FGOEMsQ0FHOUM7QUFDSCxLQUpEOztBQU1BLFVBQU1rQixHQUFHLEdBQUdPLFlBQVksQ0FBQ2pSLFNBQWIsQ0FBdUIwUSxHQUFuQzs7QUFDQU8sZ0JBQVksQ0FBQ2pSLFNBQWIsQ0FBdUIwUSxHQUF2QixHQUE2QixVQUFTLEdBQUdTLE1BQVosRUFBb0I7QUFDN0MsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxNQUFNLENBQUNyUCxNQUEzQixFQUFtQ3NQLENBQUMsRUFBcEMsRUFBd0M7QUFDcENELGNBQU0sQ0FBQ0MsQ0FBRCxDQUFOLEdBQVlELE1BQU0sQ0FBQ0MsQ0FBRCxDQUFOLENBQVU1QixLQUFWLENBQWdCLEdBQWhCLEVBQXFCLENBQXJCLENBQVo7QUFDSDs7QUFDRCxhQUFPdFAsT0FBTyxDQUFDQyxLQUFSLENBQWN1USxHQUFkLEVBQW1CLElBQW5CLEVBQXlCUyxNQUF6QixDQUFQO0FBQ0gsS0FMRDs7QUFPQSxVQUFNSixNQUFNLEdBQUdFLFlBQVksQ0FBQ2pSLFNBQWIsQ0FBdUIrUSxNQUF0Qzs7QUFDQUUsZ0JBQVksQ0FBQ2pSLFNBQWIsQ0FBdUIrUSxNQUF2QixHQUFnQyxVQUFTLEdBQUdJLE1BQVosRUFBb0I7QUFDaEQsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxNQUFNLENBQUNyUCxNQUEzQixFQUFtQ3NQLENBQUMsRUFBcEMsRUFBd0M7QUFDcENELGNBQU0sQ0FBQ0MsQ0FBRCxDQUFOLEdBQVlELE1BQU0sQ0FBQ0MsQ0FBRCxDQUFOLENBQVU1QixLQUFWLENBQWdCLEdBQWhCLEVBQXFCLENBQXJCLENBQVo7QUFDSDs7QUFDRCxhQUFPdFAsT0FBTyxDQUFDQyxLQUFSLENBQWM0USxNQUFkLEVBQXNCLElBQXRCLEVBQTRCSSxNQUE1QixDQUFQO0FBQ0gsS0FMRDtBQU1IOztBQWhJb0MsQ0FBMUIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1FLFdBQU4sQ0FBa0I7QUFDakNDLG1CQUFpQixHQUFHO0FBQ2hCLFFBQUksS0FBS0MsaUJBQVQsRUFBNEI7QUFDNUIsUUFBSSxDQUFDOVYsMkNBQUksQ0FBQytWLGdCQUFWLEVBQTRCO0FBRTVCLFNBQUtELGlCQUFMLEdBQXlCalQsOENBQUssQ0FBQzZELFdBQU4sQ0FBa0IxRywyQ0FBSSxDQUFDK1YsZ0JBQXZCLEVBQXlDLFNBQXpDLEVBQW9EO0FBQUNDLFlBQU0sRUFBRy9QLElBQUQsSUFBVTtBQUM1RixjQUFNZ0ksS0FBSyxHQUFHaEksSUFBSSxDQUFDZ1EsZUFBTCxDQUFxQixDQUFyQixDQUFkO0FBQ0EsWUFBSSxDQUFDaEksS0FBRCxJQUFVLENBQUNBLEtBQUssQ0FBQ2lJLHNCQUFyQixFQUE2QztBQUM3QyxjQUFNQyxjQUFjLEdBQUdsSSxLQUFLLENBQUNpSSxzQkFBN0I7QUFFQSxZQUFJLENBQUNDLGNBQWMsQ0FBQ3JWLElBQWhCLElBQXdCLENBQUNxVixjQUFjLENBQUNyVixJQUFmLENBQW9CQSxJQUE3QyxJQUFxRHFWLGNBQWMsQ0FBQ3JWLElBQWYsQ0FBb0JBLElBQXBCLENBQXlCdkIsV0FBekIsSUFBd0MsZ0JBQWpHLEVBQW1IO0FBQ25ILGNBQU02VyxZQUFZLEdBQUdELGNBQWMsQ0FBQ3JWLElBQWYsQ0FBb0JBLElBQXpDO0FBQ0EsWUFBSXNWLFlBQVksQ0FBQ0MsZ0JBQWpCLEVBQW1DLE9BUHlELENBT2pEOztBQUMzQ0Ysc0JBQWMsQ0FBQ3JWLElBQWYsQ0FBb0JBLElBQXBCLEdBQTJCLFVBQVNtTixLQUFULEVBQWdCO0FBQ3ZDLGdCQUFNOUgsV0FBVyxHQUFHaVEsWUFBWSxDQUFDbkksS0FBRCxDQUFoQztBQUNBLGdCQUFNcUksU0FBUyxHQUFHL1Usd0RBQWMsQ0FBQyxVQUFELENBQWQsR0FBNkIwTSxLQUFLLENBQUMxRixPQUFOLENBQWNnTyxXQUFkLElBQTZCLEVBQTFELEdBQStELEVBQWpGO0FBQ0FwUSxxQkFBVyxDQUFDOEgsS0FBWixDQUFrQnVJLEtBQWxCLEdBQTBCO0FBQUM5VixpQkFBSyxFQUFFNFY7QUFBUixXQUExQjtBQUNBLGlCQUFPblEsV0FBUDtBQUNILFNBTEQ7O0FBT0FnUSxzQkFBYyxDQUFDclYsSUFBZixDQUFvQkEsSUFBcEIsQ0FBeUJ1VixnQkFBekIsR0FBNENELFlBQTVDO0FBQ0FyVSxjQUFNLENBQUMwVSxNQUFQLENBQWNOLGNBQWMsQ0FBQ3JWLElBQWYsQ0FBb0JBLElBQWxDLEVBQXdDc1YsWUFBeEM7QUFDSDtBQWpCNEUsS0FBcEQsQ0FBekI7QUFrQkg7O0FBRURNLG1CQUFpQixHQUFHO0FBQ2hCLFFBQUlDLGVBQWUsR0FBR3hQLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd1AsTUFBckIsRUFBNkIsQ0FBN0IsRUFBZ0NBLE1BQXREO0FBQ0EzUyxZQUFRLENBQUM0UyxnQkFBVCxDQUEwQixNQUFJRixlQUFlLENBQUM1QyxLQUFoQixDQUFzQixHQUF0QixFQUEyQixDQUEzQixDQUE5QixFQUE2RCtDLE9BQTdELENBQXFFQyxJQUFJLElBQUk7QUFDekVBLFVBQUksQ0FBQ1AsS0FBTCxDQUFXUSxXQUFYLENBQXVCLE9BQXZCLEVBQWdDLEVBQWhDO0FBQ0gsS0FGRDtBQUdIOztBQTlCZ0MsQ0FBdEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNKQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBTUMsdUJBQXVCLEdBQUduWixNQUFNLENBQUNpRyxPQUF2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1tVCxJQUFJLEdBQUduVCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1vVCxFQUFFLEdBQUdwVCxtQkFBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0EsTUFBTXFULE1BQU0sR0FBR3JULG1CQUFPLENBQUMsc0JBQUQsQ0FBUCxDQUFrQnFULE1BQWpDOztBQUNBQSxNQUFNLENBQUNDLFdBQVAsQ0FBbUJ0RixJQUFuQixDQUF3Qm1GLElBQUksQ0FBQ0ksT0FBTCxDQUFhdlQsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CcEYsTUFBcEIsQ0FBMkI0WSxHQUEzQixDQUErQkMsVUFBL0IsRUFBYixFQUEwRCxjQUExRCxDQUF4Qjs7QUFDQSxNQUFNQyxTQUFOLFNBQXdCbk0sS0FBeEIsQ0FBOEI7QUFDMUIxSCxhQUFXLENBQUMyRSxPQUFELEVBQVU7QUFDakIsVUFBTUEsT0FBTjtBQUNBLFNBQUtvQixJQUFMLEdBQVksV0FBWjtBQUNIOztBQUp5Qjs7QUFNOUIsTUFBTStOLGlCQUFpQixHQUFHTixNQUFNLENBQUNPLFdBQVAsQ0FBbUIsS0FBbkIsQ0FBMUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR1IsTUFBTSxDQUFDTyxXQUFQLENBQW1CLE1BQW5CLElBQTZCUCxNQUFNLENBQUNPLFdBQVAsQ0FBbUIsTUFBbkIsQ0FBN0IsR0FBMEQsTUFBTTtBQUFDLFNBQU8sSUFBUDtBQUFhLENBQXpHO0FBQ0EsTUFBTUUsVUFBVSxHQUFHLCtDQUFuQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxNQUF2QjtBQUdlLG1FQUFJLE1BQU12VSxjQUFOLENBQXFCO0FBRXBDSyxhQUFXLEdBQUc7QUFDVixTQUFLbVUsU0FBTCxHQUFpQixFQUFqQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQVosVUFBTSxDQUFDTyxXQUFQLENBQW1CLEtBQW5CLElBQTRCLEtBQUtNLGlCQUFMLENBQXVCLFFBQXZCLENBQTVCO0FBQ0FiLFVBQU0sQ0FBQ08sV0FBUCxDQUFtQixNQUFuQixJQUE2QixLQUFLTSxpQkFBTCxDQUF1QixPQUF2QixDQUE3QjtBQUNIOztBQUVELE1BQUlDLGFBQUosR0FBb0I7QUFBQyxXQUFPLEtBQUtDLGNBQUwsS0FBd0IsS0FBS0EsY0FBTCxHQUFzQmhCLEVBQUUsQ0FBQ2lCLFlBQUgsQ0FBZ0JsQixJQUFJLENBQUNJLE9BQUwsQ0FBYXhWLGtEQUFRLENBQUN1VyxRQUFULEdBQW9CLFVBQWpDLENBQWhCLENBQTlDLENBQVA7QUFBcUg7O0FBQzFJLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtDLGFBQUwsS0FBdUIsS0FBS0EsYUFBTCxHQUFxQnBCLEVBQUUsQ0FBQ2lCLFlBQUgsQ0FBZ0JsQixJQUFJLENBQUNJLE9BQUwsQ0FBYXhWLGtEQUFRLENBQUN1VyxRQUFULEdBQW9CLFNBQWpDLENBQWhCLENBQTVDLENBQVA7QUFBa0g7O0FBRXRJRyxjQUFZLENBQUNDLFdBQUQsRUFBYztBQUN0QixRQUFJLEtBQUtULFFBQUwsQ0FBY1MsV0FBZCxDQUFKLEVBQWdDO0FBQ2hDLFVBQU1DLFFBQVEsR0FBR0QsV0FBVyxLQUFLLFFBQWpDO0FBQ0EsVUFBTUUsVUFBVSxHQUFHRCxRQUFRLEdBQUcsS0FBS1IsYUFBUixHQUF3QixLQUFLSSxZQUF4RDtBQUNBLFVBQU1NLFVBQVUsR0FBR0YsUUFBUSxHQUFHLFlBQUgsR0FBa0IsWUFBN0M7QUFDQSxTQUFLVixRQUFMLENBQWNTLFdBQWQsSUFBNkJ0QixFQUFFLENBQUMwQixLQUFILENBQVNGLFVBQVQsRUFBcUI7QUFBQ0csZ0JBQVUsRUFBRTtBQUFiLEtBQXJCLEVBQTBDLE9BQU9DLFNBQVAsRUFBa0JDLFFBQWxCLEtBQStCO0FBQ2xHLFVBQUksQ0FBQ0QsU0FBRCxJQUFjLENBQUNDLFFBQWYsSUFBMkIsQ0FBQ0EsUUFBUSxDQUFDdkYsUUFBVCxDQUFrQm1GLFVBQWxCLENBQWhDLEVBQStEO0FBQy9ELFlBQU0sSUFBSUssT0FBSixDQUFZQyxDQUFDLElBQUlDLFVBQVUsQ0FBQ0QsQ0FBRCxFQUFJLEVBQUosQ0FBM0IsQ0FBTjs7QUFDQSxVQUFJO0FBQUMvQixVQUFFLENBQUNpQyxRQUFILENBQVlsQyxJQUFJLENBQUNJLE9BQUwsQ0FBYXFCLFVBQWIsRUFBeUJLLFFBQXpCLENBQVo7QUFBaUQsT0FBdEQsQ0FDQSxPQUFPSyxHQUFQLEVBQVk7QUFDUixZQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtBQUMzQixlQUFPLEtBQUt2QixTQUFMLENBQWVpQixRQUFmLENBQVA7QUFDQSxZQUFJTixRQUFKLEVBQWMsT0FBT3hWLHFEQUFZLENBQUNxVyxZQUFiLENBQTBCUCxRQUExQixDQUFQO0FBQ2QsZUFBTzdWLG9EQUFXLENBQUNxVyxXQUFaLENBQXdCUixRQUF4QixDQUFQO0FBQ0g7O0FBQ0QsVUFBSSxDQUFDN0IsRUFBRSxDQUFDaUMsUUFBSCxDQUFZbEMsSUFBSSxDQUFDSSxPQUFMLENBQWFxQixVQUFiLEVBQXlCSyxRQUF6QixDQUFaLEVBQWdEUyxNQUFoRCxFQUFMLEVBQStEO0FBQy9ELFlBQU1DLEtBQUssR0FBR3ZDLEVBQUUsQ0FBQ2lDLFFBQUgsQ0FBWWxDLElBQUksQ0FBQ0ksT0FBTCxDQUFhcUIsVUFBYixFQUF5QkssUUFBekIsQ0FBWixDQUFkO0FBQ0EsVUFBSSxDQUFDVSxLQUFELElBQVUsQ0FBQ0EsS0FBSyxDQUFDQyxLQUFqQixJQUEwQixDQUFDRCxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsT0FBWixFQUEvQixFQUFzRDtBQUN0RCxVQUFJLE9BQU9GLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxPQUFaLEVBQVAsS0FBa0MsUUFBdEMsRUFBZ0Q7QUFDaEQsVUFBSSxLQUFLN0IsU0FBTCxDQUFlaUIsUUFBZixLQUE0QlUsS0FBSyxDQUFDQyxLQUFOLENBQVlDLE9BQVosRUFBaEMsRUFBdUQ7QUFDdkQsV0FBSzdCLFNBQUwsQ0FBZWlCLFFBQWYsSUFBMkJVLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxPQUFaLEVBQTNCOztBQUNBLFVBQUliLFNBQVMsSUFBSSxRQUFqQixFQUEyQjtBQUN2QixZQUFJTCxRQUFKLEVBQWMsTUFBTXhWLHFEQUFZLENBQUMyVyxVQUFiLENBQXdCYixRQUF4QixDQUFOLENBQWQsS0FDSyxNQUFNN1Ysb0RBQVcsQ0FBQzJXLFNBQVosQ0FBc0JkLFFBQXRCLENBQU47QUFDUjs7QUFDRCxVQUFJRCxTQUFTLElBQUksUUFBakIsRUFBMkI7QUFDdkIsWUFBSUwsUUFBSixFQUFjLE1BQU14VixxREFBWSxDQUFDNlcsWUFBYixDQUEwQmYsUUFBMUIsQ0FBTixDQUFkLEtBQ0ssTUFBTTdWLG9EQUFXLENBQUM2VyxXQUFaLENBQXdCaEIsUUFBeEIsQ0FBTjtBQUNSO0FBQ0osS0F4QjRCLENBQTdCO0FBeUJIOztBQUVEaUIsZ0JBQWMsQ0FBQ3hCLFdBQUQsRUFBYztBQUN4QixRQUFJLENBQUMsS0FBS1QsUUFBTCxDQUFjUyxXQUFkLENBQUwsRUFBaUM7QUFDakMsU0FBS1QsUUFBTCxDQUFjUyxXQUFkLEVBQTJCeUIsS0FBM0I7QUFDQSxXQUFPLEtBQUtsQyxRQUFMLENBQWNTLFdBQWQsQ0FBUDtBQUNIOztBQUVEMEIsYUFBVyxDQUFDaFIsT0FBRCxFQUFVO0FBQ2pCLFVBQU1pUixTQUFTLEdBQUdqUixPQUFPLENBQUM0SyxLQUFSLENBQWMsSUFBZCxFQUFvQixDQUFwQixDQUFsQjtBQUNBLFVBQU1zRyxVQUFVLEdBQUdELFNBQVMsQ0FBQzFVLFFBQVYsQ0FBbUIsUUFBbkIsQ0FBbkI7QUFDQSxRQUFJMlUsVUFBSixFQUFnQixPQUFPLEtBQUtDLFlBQUwsQ0FBa0JuUixPQUFsQixDQUFQO0FBQ2hCLFVBQU1vUixVQUFVLEdBQUdILFNBQVMsQ0FBQzFVLFFBQVYsQ0FBbUIsS0FBbkIsQ0FBbkI7QUFDQSxRQUFJNlUsVUFBSixFQUFnQixPQUFPLEtBQUtDLFlBQUwsQ0FBa0JyUixPQUFsQixDQUFQO0FBQ2hCLFVBQU0sSUFBSXNPLFNBQUosQ0FBYyxxQkFBZCxDQUFOO0FBQ0g7O0FBRUQ2QyxjQUFZLENBQUNuUixPQUFELEVBQVU7QUFDbEIsVUFBTXNSLElBQUksR0FBR3RSLE9BQU8sQ0FBQzRLLEtBQVIsQ0FBYyxJQUFkLEVBQW9CLENBQXBCLENBQWI7QUFDQSxVQUFNMkcsT0FBTyxHQUFHRCxJQUFJLENBQUNFLFNBQUwsQ0FBZUYsSUFBSSxDQUFDRyxXQUFMLENBQWlCLFFBQWpCLElBQTZCLENBQTVDLEVBQStDSCxJQUFJLENBQUNHLFdBQUwsQ0FBaUIsS0FBakIsQ0FBL0MsQ0FBaEI7QUFDQSxRQUFJSCxJQUFJLENBQUNJLE9BQUwsQ0FBYSxNQUFiLElBQXVCLENBQTNCLEVBQThCLE1BQU0sSUFBSXBELFNBQUosQ0FBYyxxQkFBZCxDQUFOO0FBQzlCLFVBQU1xRCxNQUFNLEdBQUdqWSw4Q0FBSyxDQUFDNk0sUUFBTixDQUFlZ0wsT0FBZixDQUFmO0FBQ0EsUUFBSSxDQUFDSSxNQUFMLEVBQWEsTUFBTSxJQUFJckQsU0FBSixDQUFjLDJCQUFkLENBQU47QUFDYixRQUFJLENBQUNxRCxNQUFNLENBQUNuUixJQUFaLEVBQWtCLE1BQU0sSUFBSThOLFNBQUosQ0FBYyx5QkFBZCxDQUFOO0FBQ2xCcUQsVUFBTSxDQUFDQyxNQUFQLEdBQWdCLE1BQWhCO0FBQ0EsV0FBT0QsTUFBUDtBQUNIOztBQUVETixjQUFZLENBQUNyUixPQUFELEVBQVU7QUFDbEIsVUFBTTZSLEtBQUssR0FBRzdSLE9BQU8sQ0FBQzRLLEtBQVIsQ0FBYyxLQUFkLEVBQXFCLENBQXJCLEVBQXdCLENBQXhCLEVBQTJCQSxLQUEzQixDQUFpQyxJQUFqQyxFQUF1QyxDQUF2QyxFQUEwQyxDQUExQyxDQUFkO0FBQ0EsVUFBTWtILEdBQUcsR0FBRyxFQUFaO0FBQ0EsUUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQSxRQUFJQyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxTQUFLLE1BQU1DLElBQVgsSUFBbUJKLEtBQUssQ0FBQ2pILEtBQU4sQ0FBWThELFVBQVosQ0FBbkIsRUFBNEM7QUFDeEMsVUFBSXVELElBQUksQ0FBQy9VLE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7O0FBQ3ZCLFVBQUkrVSxJQUFJLENBQUNDLE1BQUwsQ0FBWSxDQUFaLE1BQW1CLEdBQW5CLElBQTBCRCxJQUFJLENBQUNDLE1BQUwsQ0FBWSxDQUFaLE1BQW1CLEdBQWpELEVBQXNEO0FBQ2xESixXQUFHLENBQUNDLEtBQUQsQ0FBSCxHQUFhQyxLQUFiO0FBQ0EsY0FBTUcsQ0FBQyxHQUFHRixJQUFJLENBQUNQLE9BQUwsQ0FBYSxHQUFiLENBQVY7QUFDQUssYUFBSyxHQUFHRSxJQUFJLENBQUNHLE1BQUwsQ0FBWSxDQUFaLEVBQWVELENBQUMsR0FBRyxDQUFuQixDQUFSO0FBQ0FILGFBQUssR0FBR0MsSUFBSSxDQUFDRyxNQUFMLENBQVlELENBQUMsR0FBRyxDQUFoQixDQUFSO0FBQ0gsT0FMRCxNQU1LO0FBQ0RILGFBQUssSUFBSSxNQUFNQyxJQUFJLENBQUM5VSxPQUFMLENBQWEsS0FBYixFQUFvQixJQUFwQixFQUEwQkEsT0FBMUIsQ0FBa0N3UixjQUFsQyxFQUFrRCxHQUFsRCxDQUFmO0FBQ0g7QUFDSjs7QUFDRG1ELE9BQUcsQ0FBQ0MsS0FBRCxDQUFILEdBQWFDLEtBQUssQ0FBQ3hHLElBQU4sRUFBYjtBQUNBLFdBQU9zRyxHQUFHLENBQUMsRUFBRCxDQUFWO0FBQ0FBLE9BQUcsQ0FBQ0YsTUFBSixHQUFhLE9BQWI7QUFDQSxXQUFPRSxHQUFQO0FBQ0g7O0FBRURoRCxtQkFBaUIsQ0FBQ25YLElBQUQsRUFBTztBQUNwQixVQUFNNFgsUUFBUSxHQUFHNVgsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTBhLElBQUksR0FBRyxJQUFiO0FBQ0EsVUFBTUMsZUFBZSxHQUFHL0MsUUFBUSxHQUFHaEIsaUJBQUgsR0FBdUJFLGtCQUF2RDtBQUNBLFdBQU8sVUFBU3hFLE1BQVQsRUFBaUI0RixRQUFqQixFQUEyQjtBQUM5QixZQUFNTCxVQUFVLEdBQUdELFFBQVEsR0FBRzhDLElBQUksQ0FBQ3RELGFBQVIsR0FBd0JzRCxJQUFJLENBQUNsRCxZQUF4RDtBQUNBLFlBQU1vRCxZQUFZLEdBQUd4RSxJQUFJLENBQUNJLE9BQUwsQ0FBYXFCLFVBQWIsRUFBeUJ6QixJQUFJLENBQUN5RSxRQUFMLENBQWMzQyxRQUFkLENBQXpCLENBQXJCO0FBQ0EsVUFBSSxDQUFDN0IsRUFBRSxDQUFDeUUsVUFBSCxDQUFjRixZQUFkLENBQUQsSUFBZ0MxQyxRQUFRLEtBQUs3QixFQUFFLENBQUNpQixZQUFILENBQWdCc0QsWUFBaEIsQ0FBakQsRUFBZ0YsT0FBT2pYLE9BQU8sQ0FBQ0MsS0FBUixDQUFjK1csZUFBZCxFQUErQixJQUEvQixFQUFxQzlXLFNBQXJDLENBQVA7QUFDaEYsVUFBSXdFLE9BQU8sR0FBR2dPLEVBQUUsQ0FBQzBFLFlBQUgsQ0FBZ0I3QyxRQUFoQixFQUEwQixNQUExQixDQUFkO0FBQ0E3UCxhQUFPLEdBQUd0Ryw4Q0FBSyxDQUFDaVosUUFBTixDQUFlM1MsT0FBZixDQUFWO0FBRUEsWUFBTXVRLEtBQUssR0FBR3ZDLEVBQUUsQ0FBQ2lDLFFBQUgsQ0FBWUosUUFBWixDQUFkO0FBQ0EsWUFBTXlCLElBQUksR0FBR2UsSUFBSSxDQUFDckIsV0FBTCxDQUFpQmhSLE9BQWpCLENBQWI7QUFDQXNSLFVBQUksQ0FBQ3pCLFFBQUwsR0FBZ0I5QixJQUFJLENBQUN5RSxRQUFMLENBQWMzQyxRQUFkLENBQWhCO0FBQ0F5QixVQUFJLENBQUNzQixLQUFMLEdBQWFyQyxLQUFLLENBQUNzQyxPQUFuQjtBQUNBdkIsVUFBSSxDQUFDd0IsUUFBTCxHQUFnQnZDLEtBQUssQ0FBQ3dDLE9BQXRCO0FBQ0F6QixVQUFJLENBQUNsYSxJQUFMLEdBQVltWixLQUFLLENBQUNuWixJQUFsQjs7QUFDQSxVQUFJLENBQUNtWSxRQUFMLEVBQWU7QUFDWCtCLFlBQUksQ0FBQ2hPLEdBQUwsR0FBV3RELE9BQVg7QUFDQSxZQUFJc1IsSUFBSSxDQUFDTSxNQUFMLElBQWUsTUFBbkIsRUFBMkJOLElBQUksQ0FBQ2hPLEdBQUwsR0FBV2dPLElBQUksQ0FBQ2hPLEdBQUwsQ0FBU3NILEtBQVQsQ0FBZSxJQUFmLEVBQXFCUyxLQUFyQixDQUEyQixDQUEzQixFQUE4QkMsSUFBOUIsQ0FBbUMsSUFBbkMsQ0FBWDtBQUMzQnRMLGVBQU8sR0FBSSxvQkFBbUJnVCxJQUFJLENBQUNDLFNBQUwsQ0FBZTNCLElBQWYsQ0FBcUIsR0FBbkQ7QUFDSDs7QUFDRCxVQUFJL0IsUUFBSixFQUFjO0FBQ1Z0RixjQUFNLENBQUNpSixRQUFQLENBQWdCbFQsT0FBaEIsRUFBeUJpSyxNQUFNLENBQUM0RixRQUFoQzs7QUFDQSxjQUFNc0QsU0FBUyxHQUFHLENBQUN6Wiw4Q0FBSyxDQUFDMFosT0FBTixDQUFjbkosTUFBTSxDQUFDb0osT0FBckIsQ0FBbkI7O0FBQ0EsWUFBSUYsU0FBSixFQUFlO0FBQ1g3QixjQUFJLENBQUMzWixJQUFMLEdBQVlzUyxNQUFNLENBQUNvSixPQUFuQjtBQUNBcEosZ0JBQU0sQ0FBQ29KLE9BQVAsR0FBaUIvQixJQUFqQjtBQUNBdFIsaUJBQU8sR0FBRyxFQUFWO0FBQ0gsU0FKRCxNQUtLO0FBQ0Q7QUFDQUEsaUJBQU8sSUFBSyxzQkFBcUJnVCxJQUFJLENBQUNDLFNBQUwsQ0FBZTNCLElBQWYsQ0FBcUIsNEJBQTJCQSxJQUFJLENBQUMrQixPQUFMLElBQWdCL0IsSUFBSSxDQUFDOVEsSUFBSyxHQUEzRztBQUNIO0FBQ0o7O0FBQ0R5SixZQUFNLENBQUNpSixRQUFQLENBQWdCbFQsT0FBaEIsRUFBeUI2UCxRQUF6QjtBQUNILEtBaENEO0FBaUNIOztBQUVEeUQsdUJBQXFCLENBQUN4VyxJQUFELEVBQU87QUFDeEIsV0FBTztBQUFDb0gsWUFBTSxFQUFFO0FBQ1I1QyxhQUFLLEVBQUUsTUFBTSxDQUFFLENBRFA7QUFFUmlTLGVBQU8sRUFBRSxNQUFNO0FBQUMsaUJBQU96VyxJQUFJLENBQUMwRCxJQUFMLElBQWExRCxJQUFJLENBQUMrUyxRQUF6QjtBQUFtQyxTQUYzQztBQUdSMkQsaUJBQVMsRUFBRSxNQUFNO0FBQUMsaUJBQU8sS0FBUDtBQUFjLFNBSHhCO0FBSVJDLHNCQUFjLEVBQUUsTUFBTTtBQUFDLGlCQUFPM1csSUFBSSxDQUFDc0MsT0FBTCxHQUFldEMsSUFBSSxDQUFDc0MsT0FBcEIsR0FBOEIsMkVBQXJDO0FBQWtILFNBSmpJO0FBS1J0SyxrQkFBVSxFQUFFLE1BQU07QUFBQyxpQkFBTyxLQUFQO0FBQWM7QUFMekIsT0FBVDtBQU9IMEwsVUFBSSxFQUFFMUQsSUFBSSxDQUFDMEQsSUFBTCxJQUFhMUQsSUFBSSxDQUFDK1MsUUFQckI7QUFRSEEsY0FBUSxFQUFFL1MsSUFBSSxDQUFDK1MsUUFSWjtBQVNINkQsWUFBTSxFQUFFNVcsSUFBSSxDQUFDNFcsTUFBTCxHQUFjNVcsSUFBSSxDQUFDNFcsTUFBbkIsR0FBNEIsRUFUakM7QUFVSEMsYUFBTyxFQUFFN1csSUFBSSxDQUFDNlcsT0FBTCxHQUFlN1csSUFBSSxDQUFDNlcsT0FBcEIsR0FBOEI7QUFWcEMsS0FBUDtBQVlIOztBQUVELFFBQU1DLFdBQU4sQ0FBa0IvRCxRQUFsQixFQUE0QmxZLElBQTVCLEVBQWtDO0FBQzlCLFFBQUksT0FBT2tZLFFBQVAsS0FBcUIsV0FBckIsSUFBb0MsT0FBT2xZLElBQVAsS0FBaUIsV0FBekQsRUFBc0U7QUFDdEUsVUFBTTRYLFFBQVEsR0FBRzVYLElBQUksS0FBSyxRQUExQjtBQUNBLFVBQU02WCxVQUFVLEdBQUdELFFBQVEsR0FBRyxLQUFLUixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEOztBQUNBLFFBQUk7QUFBQ3JCLDZCQUF1QixDQUFDQyxJQUFJLENBQUNJLE9BQUwsQ0FBYXFCLFVBQWIsRUFBeUJLLFFBQXpCLENBQUQsQ0FBdkI7QUFBNkQsS0FBbEUsQ0FDQSxPQUFPMUcsS0FBUCxFQUFjO0FBQUMsYUFBTztBQUFDM0ksWUFBSSxFQUFFcVAsUUFBUDtBQUFpQmdFLFlBQUksRUFBRWhFLFFBQXZCO0FBQWlDelEsZUFBTyxFQUFFLHdCQUExQztBQUFvRStKLGFBQUssRUFBRTtBQUFDL0osaUJBQU8sRUFBRStKLEtBQUssQ0FBQy9KLE9BQWhCO0FBQXlCMFUsZUFBSyxFQUFFM0ssS0FBSyxDQUFDMks7QUFBdEM7QUFBM0UsT0FBUDtBQUFpSTs7QUFDaEosVUFBTTlULE9BQU8sR0FBRzhOLHVCQUF1QixDQUFDQyxJQUFJLENBQUNJLE9BQUwsQ0FBYXFCLFVBQWIsRUFBeUJLLFFBQXpCLENBQUQsQ0FBdkM7O0FBQ0EsUUFBRyxDQUFDN1AsT0FBTyxDQUFDUSxJQUFaLEVBQWlCLE9BQU87QUFBQ0EsVUFBSSxFQUFFcVAsUUFBUDtBQUFpQmdFLFVBQUksRUFBRWhFLFFBQXZCO0FBQWlDelEsYUFBTyxFQUFFLHVCQUExQztBQUFtRStKLFdBQUssRUFBRTtBQUFDL0osZUFBTyxFQUFFLDZDQUFWO0FBQXlEMFUsYUFBSyxFQUFFO0FBQWhFO0FBQTFFLEtBQVA7QUFDakI5VCxXQUFPLENBQUNuSSxFQUFSLEdBQWE2Qiw4Q0FBSyxDQUFDK0osUUFBTixDQUFlekQsT0FBTyxDQUFDUSxJQUF2QixDQUFiOztBQUNBLFFBQUkrTyxRQUFKLEVBQWM7QUFDVixVQUFJLENBQUN2UCxPQUFPLENBQUNySSxJQUFiLEVBQW1COztBQUNuQixVQUFJO0FBQ0FxSSxlQUFPLENBQUNrRSxNQUFSLEdBQWlCLElBQUlsRSxPQUFPLENBQUNySSxJQUFaLEVBQWpCO0FBQ0EsZUFBT3FCLG1EQUFTLENBQUNnSCxPQUFPLENBQUNrRSxNQUFSLENBQWVxUCxPQUFmLEVBQUQsQ0FBaEI7QUFDQXZhLDJEQUFTLENBQUNnSCxPQUFPLENBQUNrRSxNQUFSLENBQWVxUCxPQUFmLEVBQUQsQ0FBVCxHQUFzQ3ZULE9BQXRDO0FBQ0gsT0FKRCxDQUtBLE9BQU9tSixLQUFQLEVBQWM7QUFBQyxlQUFPO0FBQUMzSSxjQUFJLEVBQUVxUCxRQUFQO0FBQWlCZ0UsY0FBSSxFQUFFaEUsUUFBdkI7QUFBaUN6USxpQkFBTyxFQUFFLDJCQUExQztBQUF1RStKLGVBQUssRUFBRTtBQUFDL0osbUJBQU8sRUFBRStKLEtBQUssQ0FBQy9KLE9BQWhCO0FBQXlCMFUsaUJBQUssRUFBRTNLLEtBQUssQ0FBQzJLO0FBQXRDO0FBQTlFLFNBQVA7QUFBb0k7QUFDdEosS0FSRCxNQVNLO0FBQ0QsYUFBTy9hLGtEQUFRLENBQUNpSCxPQUFPLENBQUNRLElBQVQsQ0FBZjtBQUNBekgsd0RBQVEsQ0FBQ2lILE9BQU8sQ0FBQ1EsSUFBVCxDQUFSLEdBQXlCUixPQUF6QjtBQUNIO0FBQ0o7O0FBRUQrVCxlQUFhLENBQUNsRSxRQUFELEVBQVdsWSxJQUFYLEVBQWlCO0FBQzFCLFFBQUksT0FBT2tZLFFBQVAsS0FBcUIsV0FBckIsSUFBb0MsT0FBT2xZLElBQVAsS0FBaUIsV0FBekQsRUFBc0U7QUFDdEUsVUFBTTRYLFFBQVEsR0FBRzVYLElBQUksS0FBSyxRQUExQjtBQUNBLFVBQU02WCxVQUFVLEdBQUdELFFBQVEsR0FBRyxLQUFLUixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEOztBQUNBLFFBQUk7QUFDQSxhQUFPckIsdUJBQXVCLENBQUNrRyxLQUF4QixDQUE4QmxHLHVCQUF1QixDQUFDSyxPQUF4QixDQUFnQ0osSUFBSSxDQUFDSSxPQUFMLENBQWFxQixVQUFiLEVBQXlCSyxRQUF6QixDQUFoQyxDQUE5QixDQUFQO0FBQ0gsS0FGRCxDQUdBLE9BQU9LLEdBQVAsRUFBWTtBQUFDLGFBQU87QUFBQzFQLFlBQUksRUFBRXFQLFFBQVA7QUFBaUJnRSxZQUFJLEVBQUVoRSxRQUF2QjtBQUFpQ3pRLGVBQU8sRUFBRSx3QkFBMUM7QUFBb0UrSixhQUFLLEVBQUU7QUFBQy9KLGlCQUFPLEVBQUU4USxHQUFHLENBQUM5USxPQUFkO0FBQXVCMFUsZUFBSyxFQUFFNUQsR0FBRyxDQUFDNEQ7QUFBbEM7QUFBM0UsT0FBUDtBQUE2SDtBQUM3STs7QUFFREcsVUFBUSxDQUFDcEUsUUFBRCxFQUFXbFksSUFBWCxFQUFpQjtBQUNyQixVQUFNNFgsUUFBUSxHQUFHNVgsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTZYLFVBQVUsR0FBR0QsUUFBUSxHQUFHLEtBQUtSLGFBQVIsR0FBd0IsS0FBS0ksWUFBeEQ7O0FBQ0EsUUFBSTtBQUFDckIsNkJBQXVCLENBQUNrRyxLQUF4QixDQUE4QmxHLHVCQUF1QixDQUFDSyxPQUF4QixDQUFnQ0osSUFBSSxDQUFDSSxPQUFMLENBQWFxQixVQUFiLEVBQXlCSyxRQUF6QixDQUFoQyxDQUE5QjtBQUFvRyxLQUF6RyxDQUNBLE9BQU9LLEdBQVAsRUFBWTtBQUFDLGFBQU8sS0FBUDtBQUFjOztBQUMzQixXQUFPLElBQVA7QUFDSDs7QUFFRCxRQUFNZ0UsYUFBTixDQUFvQnJFLFFBQXBCLEVBQThCbFksSUFBOUIsRUFBb0M7QUFDaEMsVUFBTXdjLFVBQVUsR0FBRyxLQUFLSixhQUFMLENBQW1CbEUsUUFBbkIsRUFBNkJsWSxJQUE3QixDQUFuQjtBQUNBLFFBQUl3YyxVQUFKLEVBQWdCLE9BQU9BLFVBQVA7QUFDaEIsV0FBTyxNQUFNLEtBQUtQLFdBQUwsQ0FBaUIvRCxRQUFqQixFQUEyQmxZLElBQTNCLENBQWI7QUFDSDs7QUFFRHljLGdCQUFjLENBQUN6YyxJQUFELEVBQU87QUFDakIsVUFBTTRYLFFBQVEsR0FBRzVYLElBQUksS0FBSyxRQUExQjtBQUNBLFVBQU04WCxVQUFVLEdBQUdGLFFBQVEsR0FBRyxZQUFILEdBQWtCLFlBQTdDO0FBQ0EsVUFBTThFLE9BQU8sR0FBRzlFLFFBQVEsR0FBRyxLQUFLUixhQUFSLEdBQXdCLEtBQUtJLFlBQXJEO0FBQ0EsVUFBTW1GLEtBQUssR0FBR3RHLEVBQUUsQ0FBQ3VHLFdBQUgsQ0FBZUYsT0FBZixDQUFkO0FBQ0EsVUFBTUcsV0FBVyxHQUFHNWIsTUFBTSxDQUFDNmIsTUFBUCxDQUFjbEYsUUFBUSxHQUFHdlcsbURBQUgsR0FBZUQsa0RBQXJDLENBQXBCO0FBQ0EsVUFBTTJiLE9BQU8sR0FBR0YsV0FBVyxDQUFDOVAsTUFBWixDQUFtQjhILENBQUMsSUFBSSxDQUFDOEgsS0FBSyxDQUFDL1gsUUFBTixDQUFlaVEsQ0FBQyxDQUFDcUQsUUFBakIsQ0FBekIsRUFBcUR6UCxHQUFyRCxDQUF5RHVMLENBQUMsSUFBSTRELFFBQVEsR0FBRzVELENBQUMsQ0FBQ3pILE1BQUYsQ0FBU3FQLE9BQVQsRUFBSCxHQUF3QjVILENBQUMsQ0FBQ25MLElBQWhHLENBQWhCO0FBQ0EsVUFBTW9TLEtBQUssR0FBRzBCLEtBQUssQ0FBQzVQLE1BQU4sQ0FBYWlRLENBQUMsSUFBSSxDQUFDSCxXQUFXLENBQUN0ZSxJQUFaLENBQWlCc1csQ0FBQyxJQUFJQSxDQUFDLENBQUNxRCxRQUFGLElBQWM4RSxDQUFwQyxDQUFELElBQTJDQSxDQUFDLENBQUNySyxRQUFGLENBQVdtRixVQUFYLENBQTNDLElBQXFFekIsRUFBRSxDQUFDaUMsUUFBSCxDQUFZbEMsSUFBSSxDQUFDSSxPQUFMLENBQWFrRyxPQUFiLEVBQXNCTSxDQUF0QixDQUFaLEVBQXNDckUsTUFBdEMsRUFBdkYsQ0FBZDtBQUNBLFdBQU87QUFBQ3NDLFdBQUQ7QUFBUThCO0FBQVIsS0FBUDtBQUNIOztBQUVELFFBQU1FLGNBQU4sQ0FBcUJqZCxJQUFyQixFQUEyQjtBQUN2QixVQUFNNFgsUUFBUSxHQUFHNVgsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTThYLFVBQVUsR0FBR0YsUUFBUSxHQUFHLFlBQUgsR0FBa0IsWUFBN0M7QUFDQSxVQUFNOEUsT0FBTyxHQUFHOUUsUUFBUSxHQUFHLEtBQUtSLGFBQVIsR0FBd0IsS0FBS0ksWUFBckQ7QUFDQSxVQUFNMEYsTUFBTSxHQUFHLEVBQWY7QUFDQSxVQUFNUCxLQUFLLEdBQUd0RyxFQUFFLENBQUN1RyxXQUFILENBQWVGLE9BQWYsQ0FBZDs7QUFFQSxTQUFLLE1BQU14RSxRQUFYLElBQXVCeUUsS0FBdkIsRUFBOEI7QUFDMUIsVUFBSSxDQUFDdEcsRUFBRSxDQUFDaUMsUUFBSCxDQUFZbEMsSUFBSSxDQUFDSSxPQUFMLENBQWFrRyxPQUFiLEVBQXNCeEUsUUFBdEIsQ0FBWixFQUE2Q1MsTUFBN0MsRUFBRCxJQUEwRCxDQUFDVCxRQUFRLENBQUN2RixRQUFULENBQWtCbUYsVUFBbEIsQ0FBL0QsRUFBOEY7QUFDOUYsWUFBTXRHLEtBQUssR0FBRyxNQUFNLEtBQUt5SyxXQUFMLENBQWlCL0QsUUFBakIsRUFBMkJsWSxJQUEzQixDQUFwQjtBQUNBLFVBQUl3UixLQUFKLEVBQVcwTCxNQUFNLENBQUNqTSxJQUFQLENBQVlPLEtBQVo7QUFDZDs7QUFFRCxXQUFPMEwsTUFBUDtBQUNIOztBQUVEQyxhQUFXLEdBQUc7QUFBQyxXQUFPLEtBQUtGLGNBQUwsQ0FBb0IsUUFBcEIsQ0FBUDtBQUFzQzs7QUFDckRHLFlBQVUsR0FBRztBQUFDLFdBQU8sS0FBS0gsY0FBTCxDQUFvQixPQUFwQixDQUFQO0FBQXFDOztBQS9OZixDQUF6QixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ3RCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTcmEsSUFBVCxHQUFnQixDQUNaO0FBQ0E7QUFDSDs7QUFFREEsSUFBSSxDQUFDYSxTQUFMLENBQWVWLFNBQWYsR0FBMkIsVUFBU3NhLE1BQVQsRUFBaUI7QUFDeENwYyxRQUFNLENBQUMwVSxNQUFQLENBQWMzVSxrREFBZCxFQUF3QnFjLE1BQXhCO0FBQ0gsQ0FGRDs7QUFJQXphLElBQUksQ0FBQ2EsU0FBTCxDQUFlVCxJQUFmLEdBQXNCLGtCQUFpQjtBQUNuQyxNQUFJLENBQUM2UCxLQUFLLENBQUNwUCxTQUFOLENBQWdCNlosSUFBckIsRUFBMkI7QUFDdkJ2YixrREFBSyxDQUFDMkssS0FBTixDQUFZLGVBQVosRUFBNkIsb0JBQW9CclAsb0RBQXBCLEdBQWlDLHNDQUFqQyxHQUEwRU4sK0RBQTFFLEdBQWtHLDBFQUEvSDtBQUNBO0FBQ0g7O0FBRUQsTUFBSWlFLGtEQUFRLENBQUNqRCxPQUFULEdBQW1CWCw2REFBdkIsRUFBNEM7QUFDeEMyRSxrREFBSyxDQUFDMkssS0FBTixDQUFZLGVBQVosRUFBNkIsb0JBQW9CMUwsa0RBQVEsQ0FBQ2pELE9BQTdCLEdBQXVDLGlCQUF2QyxHQUEyRCxzQ0FBM0QsR0FBb0dWLG9EQUFwRyxHQUFpSCxxSkFBOUk7QUFDQTtBQUNIOztBQUVELE1BQUlMLE1BQU0sQ0FBQ3VnQixFQUFYLEVBQWU7QUFDWHhiLGtEQUFLLENBQUMySyxLQUFOLENBQVksZUFBWixFQUE2Qiw4RUFBN0I7QUFDQTtBQUNIOztBQUVELE1BQUkxUCxNQUFNLENBQUN3Z0IsU0FBUCxJQUFvQnhnQixNQUFNLENBQUN3Z0IsU0FBUCxDQUFpQjNVLElBQXJDLElBQTZDN0wsTUFBTSxDQUFDd2dCLFNBQVAsQ0FBaUIzVSxJQUFqQixDQUFzQmpFLFFBQXRCLENBQStCLFNBQS9CLENBQWpELEVBQTRGO0FBQ3hGN0Msa0RBQUssQ0FBQzJLLEtBQU4sQ0FBWSxlQUFaLEVBQTZCLHdFQUE3QjtBQUNBO0FBQ0g7O0FBRUQsUUFBTStRLGtCQUFrQixHQUFHemMsa0RBQVEsQ0FBQzBjLE9BQVQsR0FBbUIxYyxrREFBUSxDQUFDMGMsT0FBVCxDQUFpQkMsYUFBcEMsR0FBb0QzYyxrREFBUSxDQUFDNGMsYUFBeEY7O0FBQ0EsTUFBSUgsa0JBQWtCLEdBQUd6YyxrREFBUSxDQUFDakQsT0FBbEMsRUFBMkM7QUFDdkNnRSxrREFBSyxDQUFDNEsscUJBQU4sQ0FBNEIsa0JBQTVCLEVBQWdELENBQUUsMkRBQTBEOFEsa0JBQW1CLElBQS9FLEVBQW9GLGtEQUFwRixDQUFoRCxFQUF5TDtBQUNyTEksaUJBQVcsRUFBRSxZQUR3SztBQUVyTGpSLGdCQUFVLEVBQUUsYUFGeUs7QUFHckxrUixlQUFTLEVBQUUsWUFBWTtBQUNuQixjQUFNQyxjQUFjLEdBQUcsTUFBTTtBQUFDaGMsd0RBQUssQ0FBQzJLLEtBQU4sQ0FBWSxrQkFBWixFQUFpQywrTUFBakM7QUFBa1AsU0FBaFI7O0FBQ0EsWUFBSTtBQUNBLGdCQUFNc1IsU0FBUyxHQUFHLE1BQU0sS0FBS0MsY0FBTCxFQUF4QjtBQUNBLGNBQUksQ0FBQ0QsU0FBTCxFQUFnQixPQUFPRCxjQUFjLEVBQXJCOztBQUNoQixnQkFBTXRILEdBQUcsR0FBR3hULG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQnBGLE1BQXBCLENBQTJCNFksR0FBdkM7O0FBQ0FBLGFBQUcsQ0FBQ3lILFFBQUo7QUFDQXpILGFBQUcsQ0FBQzBILElBQUo7QUFDSCxTQU5ELENBT0EsT0FBTzVGLEdBQVAsRUFBWTtBQUNSd0Ysd0JBQWM7QUFDakI7QUFDSjtBQWZvTCxLQUF6TDtBQWlCSDs7QUFFRGhjLGdEQUFLLENBQUNvSSxHQUFOLENBQVUsU0FBVixFQUFxQix1QkFBckI7QUFDQSxPQUFLaVUsWUFBTDtBQUVBLFFBQU0sS0FBS0MsY0FBTCxFQUFOO0FBQ0FuZiw2Q0FBSSxDQUFDb2YsVUFBTDtBQUNBdmMsZ0RBQUssQ0FBQ29JLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLG1CQUFyQjtBQUNBNUgsd0RBQWEsQ0FBQ2djLGtCQUFkO0FBRUF4YyxnREFBSyxDQUFDb0ksR0FBTixDQUFVLFNBQVYsRUFBcUIsaUJBQXJCO0FBQ0EsUUFBTS9ILHFEQUFZLENBQUMrYSxXQUFiLEVBQU47QUFFQXBiLGdEQUFLLENBQUNvSSxHQUFOLENBQVUsU0FBVixFQUFxQixnQkFBckI7QUFDQSxRQUFNOUgsb0RBQVcsQ0FBQythLFVBQVosRUFBTjtBQUVBeFIsbURBQUcsQ0FBQ0MsUUFBSixDQUFhLFdBQWIsRUFBMEIyUyxJQUFJLENBQUNoYyxrREFBUyxDQUFDNE0sU0FBVixDQUFvQixhQUFwQixDQUFELENBQTlCO0FBRUFwUyxRQUFNLENBQUN5aEIsZ0JBQVAsQ0FBd0IsY0FBeEIsRUFBd0MsWUFBVztBQUMvQyxRQUFJaGUsd0RBQWMsQ0FBQyxVQUFELENBQWxCLEVBQWdDMEMsUUFBUSxDQUFDOE8sYUFBVCxDQUF1QixxQkFBdkIsRUFBOENuVCxLQUE5QztBQUNuQyxHQUZEO0FBSUE0ZiwyREFBZSxDQUFDL1UsS0FBaEI7QUFFQTVILGdEQUFLLENBQUNvSSxHQUFOLENBQVUsU0FBVixFQUFxQix1QkFBckI7QUFDQSxNQUFJaEgsUUFBUSxDQUFDd2Isc0JBQVQsQ0FBZ0MsYUFBaEMsRUFBK0NwWixNQUFuRCxFQUEyRHBDLFFBQVEsQ0FBQ3diLHNCQUFULENBQWdDLGFBQWhDLEVBQStDLENBQS9DLEVBQWtEbkssTUFBbEQ7QUFDM0R6UyxnREFBSyxDQUFDb0ksR0FBTixDQUFVLFNBQVYsRUFBcUIsNEJBQXJCO0FBQ0EsT0FBS3lVLFlBQUwsR0FuRW1DLENBcUVuQzs7QUFDQSxNQUFJbmUsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDO0FBQzdCc0Isa0RBQUssQ0FBQ29JLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLDJCQUFyQjtBQUNBcEksa0RBQUssQ0FBQzhjLGlCQUFOLENBQXdCO0FBQUNDLGFBQU8sRUFBRWhlLHdEQUFWO0FBQTBCaWUsWUFBTSxFQUFFaGUsdURBQWFBO0FBQS9DLEtBQXhCO0FBQ0g7O0FBRUQsUUFBTWllLGVBQWUsR0FBR3hjLGtEQUFTLENBQUM0TSxTQUFWLENBQW9CLFNBQXBCLENBQXhCOztBQUNBLE1BQUkvUixvREFBVSxHQUFHMmhCLGVBQWpCLEVBQWtDO0FBQzlCLFFBQUlqZixzREFBSixFQUFrQixLQUFLa2Ysa0JBQUwsQ0FBd0JsZixzREFBeEI7QUFDbEJ5QyxzREFBUyxDQUFDNk0sU0FBVixDQUFvQixTQUFwQixFQUErQmhTLG9EQUEvQjtBQUNIOztBQUVELFFBQU02aEIsV0FBVyxHQUFHQyxxREFBcEI7QUFFQXBkLGdEQUFLLENBQUMyTSxjQUFOLENBQXFCLEtBQUswUSxXQUFMLENBQWlCamIsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBckIsRUFBa0QsaUJBQWxEO0FBQ0FwQyxnREFBSyxDQUFDMk0sY0FBTixDQUFxQixLQUFLMlEsZUFBTCxDQUFxQmxiLElBQXJCLENBQTBCLElBQTFCLENBQXJCLEVBQXNELHNCQUF0RDtBQUNBcEMsZ0RBQUssQ0FBQzJNLGNBQU4sQ0FBcUIsS0FBSzRRLG1CQUFMLENBQXlCbmIsSUFBekIsQ0FBOEIsSUFBOUIsQ0FBckIsRUFBMEQsMkJBQTFEO0FBQ0FwQyxnREFBSyxDQUFDMk0sY0FBTixDQUFxQixLQUFLNlEsbUJBQUwsQ0FBeUJwYixJQUF6QixDQUE4QixJQUE5QixDQUFyQixFQUEwRCwwQkFBMUQ7QUFDQXBDLGdEQUFLLENBQUMyTSxjQUFOLENBQXFCLEtBQUs4USxrQkFBTCxDQUF3QnJiLElBQXhCLENBQTZCLElBQTdCLENBQXJCLEVBQXlELHFCQUF6RDtBQUNBcEMsZ0RBQUssQ0FBQzJNLGNBQU4sQ0FBcUIsS0FBSytRLGVBQUwsQ0FBcUJ0YixJQUFyQixDQUEwQixJQUExQixDQUFyQixFQUFzRCw0QkFBdEQ7QUFDQXBDLGdEQUFLLENBQUMyTSxjQUFOLENBQXFCLEtBQUtnUixlQUFMLENBQXFCdmIsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBckIsRUFBc0QsMkJBQXREOztBQUVBLE1BQUduRCxrREFBUSxDQUFDMmUsb0JBQVosRUFBaUM7QUFDN0IsUUFBSWpULEtBQUssR0FBRzNLLDhDQUFLLENBQUMySyxLQUFOLENBQVksb0JBQVosRUFBa0MsdUtBQWxDLENBQVo7QUFDQSxVQUFNLElBQUl5TCxPQUFKLENBQWEzQixPQUFELElBQWE7QUFDM0I5SixXQUFLLENBQUNrVCxPQUFOLENBQWNwSixPQUFkO0FBQ0gsS0FGSyxDQUFOO0FBR0g7O0FBQ0QsUUFBTXFKLElBQUksR0FBRzFjLFFBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsc1hBQXZCLENBQWI7O0FBQ0EsTUFBRzROLElBQUgsRUFBUTtBQUNKQSxRQUFJLENBQUNDLFNBQUwsR0FBa0I7Ozs7T0FBbEI7QUFLSDtBQUNKLENBekdEOztBQTJHQWxkLElBQUksQ0FBQ2EsU0FBTCxDQUFlNGEsY0FBZixHQUFnQyxZQUFXO0FBQ3ZDLE1BQUkwQixZQUFZLEdBQUcsQ0FBbkI7QUFDQSxTQUFPLElBQUk1SCxPQUFKLENBQVkzQixPQUFPLElBQUk7QUFDMUIsVUFBTTZILGNBQWMsR0FBRyxZQUFXO0FBQzlCLFlBQU0yQixPQUFPLEdBQUc5Z0IsMkNBQUksQ0FBQytnQixZQUFMLENBQWtCRCxPQUFsQixDQUEwQi9NLEtBQTFCLENBQWdDLEdBQWhDLEVBQXFDLENBQXJDLENBQWhCO0FBQ0EsVUFBSTlQLFFBQVEsQ0FBQzRTLGdCQUFULENBQTJCLElBQUdpSyxPQUFRLEVBQXRDLEVBQXlDemEsTUFBekMsR0FBa0QsQ0FBdEQsRUFBeUR3YSxZQUFZO0FBQ3JFLFlBQU1HLEtBQUssR0FBR2hoQiwyQ0FBSSxDQUFDK2dCLFlBQUwsQ0FBa0JFLFFBQWxCLENBQTJCbE4sS0FBM0IsQ0FBaUMsR0FBakMsRUFBc0MsQ0FBdEMsQ0FBZDtBQUNBLFlBQU1tTixJQUFJLEdBQUdsaEIsMkNBQUksQ0FBQytnQixZQUFMLENBQWtCSSxhQUFsQixDQUFnQ3BOLEtBQWhDLENBQXNDLEdBQXRDLEVBQTJDLENBQTNDLENBQWI7QUFDQSxVQUFJOVAsUUFBUSxDQUFDNFMsZ0JBQVQsQ0FBMkIsSUFBR2lLLE9BQVEsS0FBSUUsS0FBTSxLQUFJRSxJQUFLLEVBQXpELEVBQTREN2EsTUFBNUQsR0FBcUUsQ0FBekUsRUFBNEUsT0FBT2lSLE9BQU8sQ0FBQ3hWLGtEQUFRLENBQUNzZixXQUFULEdBQXVCLElBQXhCLENBQWQsQ0FBNUUsS0FDSyxJQUFJUCxZQUFZLElBQUksRUFBcEIsRUFBd0IsT0FBT3ZKLE9BQU8sQ0FBQ3hWLGtEQUFRLENBQUNzZixXQUFULEdBQXVCLElBQXhCLENBQWQ7QUFDN0JqSSxnQkFBVSxDQUFDZ0csY0FBRCxFQUFpQixHQUFqQixDQUFWO0FBQ0gsS0FSRDs7QUFTQSxRQUFJbGIsUUFBUSxDQUFDb2QsVUFBVCxJQUF1QixTQUEzQixFQUFzQ2xJLFVBQVUsQ0FBQ2dHLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUN0Q2xiLFlBQVEsQ0FBQ3NiLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxNQUFNO0FBQUNwRyxnQkFBVSxDQUFDZ0csY0FBRCxFQUFpQixHQUFqQixDQUFWO0FBQWlDLEtBQXRGO0FBQ0gsR0FaTSxDQUFQO0FBYUgsQ0FmRDs7QUFpQkF6YixJQUFJLENBQUNhLFNBQUwsQ0FBZStjLGVBQWYsR0FBaUMsa0JBQWlCO0FBQzlDLFFBQU01VSxpREFBRyxDQUFDTSxTQUFKLENBQWMsWUFBZCxFQUE0Qix5REFBNUIsQ0FBTjtBQUNBLE1BQUlsUCxNQUFNLENBQUNpRyxPQUFQLENBQWV3ZCxRQUFuQixFQUE2QnpqQixNQUFNLENBQUNpRyxPQUFQLEdBQWlCakcsTUFBTSxDQUFDaUcsT0FBUCxDQUFld2QsUUFBaEM7QUFDaEMsQ0FIRDs7QUFLQTdkLElBQUksQ0FBQ2EsU0FBTCxDQUFlMmEsWUFBZixHQUE4QixZQUFZO0FBQ3RDNWIsb0RBQVMsQ0FBQzhiLFVBQVY7O0FBQ0EsTUFBRyxDQUFDOWIsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsVUFBMUIsQ0FBRCxJQUEwQyxDQUFDbGUsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsS0FBMUIsQ0FBOUMsRUFBK0U7QUFDM0UsUUFBSSxDQUFDbGUsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsVUFBMUIsQ0FBTCxFQUE0QztBQUN4Q3pmLFlBQU0sQ0FBQzBVLE1BQVAsQ0FBY2xWLHdEQUFkLEVBQThCRCx1REFBOUI7QUFDSDs7QUFDRCxRQUFJLENBQUNnQyxrREFBUyxDQUFDa2UsZUFBVixDQUEwQixLQUExQixDQUFMLEVBQXVDO0FBQ25DemYsWUFBTSxDQUFDMFUsTUFBUCxDQUFjalYscURBQWQsRUFBMkJDLG9EQUEzQjtBQUNIOztBQUNENEIsMERBQWEsQ0FBQ29lLFlBQWQ7QUFDSCxHQVJELE1BUU87QUFDSHBlLDBEQUFhLENBQUNxZSxZQUFkOztBQUNBLFNBQUssTUFBTUMsT0FBWCxJQUFzQnJnQix1REFBdEIsRUFBcUM7QUFDakMsVUFBSUMsd0RBQWMsQ0FBQ29nQixPQUFELENBQWQsSUFBMkI1YyxTQUEvQixFQUEwQztBQUN0Q3hELGdFQUFjLENBQUNvZ0IsT0FBRCxDQUFkLEdBQTBCcmdCLHVEQUFhLENBQUNxZ0IsT0FBRCxDQUF2QztBQUNBdGUsOERBQWEsQ0FBQ29lLFlBQWQ7QUFDSDtBQUNKO0FBQ0o7QUFDSixDQW5CRDs7QUFxQkEvZCxJQUFJLENBQUNhLFNBQUwsQ0FBZW1iLFlBQWYsR0FBOEIsWUFBWTtBQUN0QyxRQUFNa0MsWUFBWSxHQUFHLElBQUlDLGdCQUFKLENBQXNCQyxTQUFELElBQWU7QUFFckQsU0FBSyxJQUFJeE4sQ0FBQyxHQUFHLENBQVIsRUFBV3lOLElBQUksR0FBR0QsU0FBUyxDQUFDemIsTUFBakMsRUFBeUNpTyxDQUFDLEdBQUd5TixJQUE3QyxFQUFtRHpOLENBQUMsRUFBcEQsRUFBd0Q7QUFDcEQsWUFBTTBOLFFBQVEsR0FBR0YsU0FBUyxDQUFDeE4sQ0FBRCxDQUExQjtBQUNBLFVBQUksT0FBT3BSLHFEQUFQLEtBQXdCLFdBQTVCLEVBQXlDQSxxREFBWSxDQUFDK2UsV0FBYixDQUF5QkQsUUFBekIsRUFGVyxDQUlwRDs7QUFDQSxVQUFJLENBQUNBLFFBQVEsQ0FBQ0UsVUFBVCxDQUFvQjdiLE1BQXJCLElBQStCLEVBQUUyYixRQUFRLENBQUNFLFVBQVQsQ0FBb0IsQ0FBcEIsYUFBa0N4VCxPQUFwQyxDQUFuQyxFQUFpRjtBQUVqRixZQUFNRixJQUFJLEdBQUd3VCxRQUFRLENBQUNFLFVBQVQsQ0FBb0IsQ0FBcEIsQ0FBYjtBQUVBLFVBQUksQ0FDQUMsY0FEQSxFQUVBQyxvQkFGQSxJQUdBLENBQ0FqYixTQUFTLENBQUN2RSxHQUFWLENBQWV3RSxDQUFELElBQU9BLENBQUMsQ0FBQ2liLEtBQUYsSUFBVyxPQUFPamIsQ0FBQyxDQUFDaWIsS0FBVCxLQUFtQixRQUE5QixJQUEwQ2piLENBQUMsQ0FBQ2tiLFNBQWpFLEVBQTRFLENBQTVFLEVBQStFRCxLQUQvRSxFQUVBbGIsU0FBUyxDQUFDdkUsR0FBVixDQUFld0UsQ0FBRCxJQUFPQSxDQUFDLENBQUNtYixXQUFGLElBQWlCLE9BQU9uYixDQUFDLENBQUNtYixXQUFULEtBQXlCLFFBQS9ELEVBQXlFLENBQXpFLEVBQTRFQSxXQUY1RSxDQUhKOztBQVFBLFVBQUkvVCxJQUFJLENBQUMwRixTQUFMLENBQWVxQixRQUFmLENBQXdCNE0sY0FBeEIsQ0FBSixFQUE2QztBQUN6QyxZQUFJM1QsSUFBSSxDQUFDaVIsc0JBQUwsQ0FBNEIsNkJBQTVCLEVBQTJEcFosTUFBL0QsRUFBdUVtSSxJQUFJLENBQUNnVSxZQUFMLENBQWtCLFVBQWxCLEVBQThCLGlCQUE5Qjs7QUFFdkUsWUFBSWhVLElBQUksQ0FBQ2lSLHNCQUFMLENBQTRCMkMsb0JBQTVCLEVBQWtEL2IsTUFBdEQsRUFBOEQ7QUFDMURtSSxjQUFJLENBQUNnVSxZQUFMLENBQWtCLFVBQWxCLEVBQThCLGVBQTlCO0FBQ0FoVSxjQUFJLENBQUNnVSxZQUFMLENBQWtCLElBQWxCLEVBQXdCLGVBQXhCO0FBQ0EsY0FBSSxDQUFDdmUsUUFBUSxDQUFDd2UsY0FBVCxDQUF3QixxQkFBeEIsQ0FBTCxFQUFxRHBmLHNEQUFhLENBQUNxZixhQUFkO0FBQ3hEO0FBQ0o7O0FBRUQsVUFBSWxVLElBQUksQ0FBQ21VLGFBQUwsSUFBc0IxZSxRQUFRLENBQUNDLElBQS9CLElBQXVDc0ssSUFBSSxDQUFDdUUsYUFBTCxDQUFtQixtQkFBbkIsQ0FBM0MsRUFBb0Z2RSxJQUFJLENBQUN4TixFQUFMLEdBQVUsNEJBQVYsQ0EzQmhDLENBNkJwRDtBQUNBO0FBQ0E7QUFFSDtBQUNKLEdBcENvQixDQUFyQjtBQXNDQTRnQixjQUFZLENBQUNnQixPQUFiLENBQXFCM2UsUUFBckIsRUFBK0I7QUFDM0I0ZSxhQUFTLEVBQUUsSUFEZ0I7QUFFM0JDLFdBQU8sRUFBRTtBQUZrQixHQUEvQjtBQUlILENBM0NEOztBQTZDQXBmLElBQUksQ0FBQ2EsU0FBTCxDQUFld2Isa0JBQWYsR0FBb0MsVUFBU3BTLE9BQU8sR0FBRyxFQUFuQixFQUF1QjtBQUN2RCxTQUFPOUssOENBQUssQ0FBQ2tkLGtCQUFOLENBQXlCcFMsT0FBekIsQ0FBUDtBQUNILENBRkQ7O0FBSUFqSyxJQUFJLENBQUNhLFNBQUwsQ0FBZWlKLEtBQWYsR0FBdUIsVUFBU2pQLEtBQVQsRUFBZ0I0SyxPQUFoQixFQUF5QjtBQUM1QyxTQUFPdEcsOENBQUssQ0FBQzJLLEtBQU4sQ0FBWWpQLEtBQVosRUFBbUI0SyxPQUFuQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXpGLElBQUksQ0FBQ2EsU0FBTCxDQUFlMmIsV0FBZixHQUE2QixZQUFXO0FBQ3BDLE1BQUksS0FBSzZDLFdBQVQsRUFBc0I7QUFDdEIsUUFBTUMsTUFBTSxHQUFHaGtCLHVEQUFjLENBQUNLLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxXQUFGLElBQWlCLFFBQTFDLENBQWY7QUFDQSxRQUFNSCxNQUFNLEdBQUdKLHVEQUFjLENBQUNLLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxXQUFGLElBQWlCLFFBQTFDLENBQWY7QUFDQSxNQUFJLENBQUN5akIsTUFBTCxFQUFhO0FBQ2IsT0FBS0QsV0FBTCxHQUFtQmxnQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQnNjLE1BQU0sQ0FBQ3plLFNBQXpCLEVBQW9DLFFBQXBDLEVBQThDO0FBQUNxQyxTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUMvRSxZQUFNa1AsUUFBUSxHQUFHbFAsSUFBSSxDQUFDRSxXQUFMLENBQWlCOEgsS0FBakIsQ0FBdUJrSCxRQUF4QztBQUNBLFVBQUksQ0FBQ0EsUUFBRCxJQUFhLENBQUNBLFFBQVEsQ0FBQzlPLE1BQXZCLElBQWlDOE8sUUFBUSxDQUFDOU8sTUFBVCxHQUFrQixDQUF2RCxFQUEwRDtBQUMxRCxVQUFJOE8sUUFBUSxDQUFDQSxRQUFRLENBQUM5TyxNQUFULEdBQWtCLENBQW5CLENBQVIsQ0FBOEJ2RixJQUE5QixDQUFtQ3ZCLFdBQW5DLEtBQW1ELFdBQXZELEVBQW9FO0FBQ3BFLFVBQUksQ0FBQzRWLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDOU8sTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCdkYsSUFBOUIsQ0FBbUNtaUIsUUFBbkMsR0FBOEN2ZCxRQUE5QyxDQUF1RCxhQUF2RCxDQUFMLEVBQTRFOztBQUM1RSxVQUFJdEcsTUFBSixFQUFZO0FBQ1IsWUFBSThqQixhQUFhLEdBQUcvYixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ21iLFdBQXJCLEVBQWtDLENBQWxDLENBQXBCO0FBQ0EsY0FBTWhCLFFBQVEsR0FBR3BNLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDOU8sTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCdkYsSUFBL0M7O0FBQ0EsY0FBTXFpQixNQUFNLEdBQUcsWUFBVztBQUN0QixnQkFBTUMsU0FBUyxHQUFHN0IsUUFBUSxDQUFDLEdBQUc1YyxTQUFKLENBQTFCO0FBQ0F5ZSxtQkFBUyxDQUFDblYsS0FBVixDQUFnQmtILFFBQWhCLENBQXlCcEQsSUFBekIsQ0FDSS9SLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QmlqQix3REFBekIsRUFBc0M7QUFBQzNpQixpQkFBSyxFQUFFLE9BQVI7QUFBaUI0aUIsZ0JBQUksRUFBRSxLQUF2QjtBQUE4QjdaLGdCQUFJLEVBQUU7QUFBcEMsV0FBdEMsRUFDSXpKLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QmhCLE1BQXpCLEVBQWlDO0FBQUNrQixxQkFBUyxFQUFFLG9CQUFrQjRpQixhQUFhLENBQUNLLElBQTVDO0FBQWtEQyxnQkFBSSxFQUFFLHdDQUF4RDtBQUFrR2psQixpQkFBSyxFQUFFLFdBQXpHO0FBQXNIa2xCLGtCQUFNLEVBQUU7QUFBOUgsV0FBakMsRUFDSXpqQiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJzakIsdURBQXpCLEVBQXdDO0FBQUNuakIsZ0JBQUksRUFBRSxNQUFQO0FBQWVELHFCQUFTLEVBQUU7QUFBMUIsV0FBeEMsQ0FESixDQURKLENBREo7QUFPQThpQixtQkFBUyxDQUFDblYsS0FBVixDQUFnQmtILFFBQWhCLENBQXlCcEQsSUFBekIsQ0FDSS9SLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QmlqQix3REFBekIsRUFBc0M7QUFBQzNpQixpQkFBSyxFQUFFLE9BQVI7QUFBaUI0aUIsZ0JBQUksRUFBRSxLQUF2QjtBQUE4QjdaLGdCQUFJLEVBQUU7QUFBcEMsV0FBdEMsRUFDSXpKLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QmhCLE1BQXpCLEVBQWlDO0FBQUNrQixxQkFBUyxFQUFFLG9CQUFrQjRpQixhQUFhLENBQUNLLElBQTVDO0FBQWtEQyxnQkFBSSxFQUFFLDZDQUF4RDtBQUF1R2psQixpQkFBSyxFQUFFLFlBQTlHO0FBQTRIa2xCLGtCQUFNLEVBQUU7QUFBcEksV0FBakMsRUFDSXpqQiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJ1akIsa0RBQXpCLEVBQWlDO0FBQUNwakIsZ0JBQUksRUFBRSxNQUFQO0FBQWVELHFCQUFTLEVBQUU7QUFBMUIsV0FBakMsQ0FESixDQURKLENBREo7QUFPQSxpQkFBTzhpQixTQUFQO0FBQ0gsU0FqQkQ7O0FBa0JBak8sZ0JBQVEsQ0FBQ0EsUUFBUSxDQUFDOU8sTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCdkYsSUFBOUIsR0FBcUNxaUIsTUFBckM7QUFDSDs7QUFFRCxVQUFJLENBQ0FTLG1CQURBLEVBRUFDLEtBRkEsRUFHQUMsb0JBSEEsSUFJQSxDQUNBM2MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMyYyxVQUFyQixFQUFpQyxDQUFqQyxFQUFvQ0EsVUFEcEMsRUFFQTVjLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNGMsTUFBckIsRUFBNkIsQ0FBN0IsQ0FGQSxFQUdBN2MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM2YyxXQUFyQixFQUFrQyxDQUFsQyxFQUFxQ0EsV0FIckMsQ0FKSjtBQVVBLFlBQU1BLFdBQVcsR0FBSSxJQUFHbmlCLGtEQUFRLENBQUNvaUIsSUFBVCxHQUFnQnBpQixrREFBUSxDQUFDb2lCLElBQVQsQ0FBY3ZKLFNBQWQsQ0FBd0IsQ0FBeEIsRUFBMkIsQ0FBM0IsQ0FBaEIsR0FBZ0Q3WSxrREFBUSxDQUFDcWlCLE1BQU8sR0FBeEY7QUFDQSxZQUFNQyxVQUFVLEdBQUcsQ0FDZnBrQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGlCQUFTLEVBQUcsR0FBRXNqQixtQkFBb0IsSUFBR0MsS0FBSyxDQUFDUyxNQUFPO0FBQW5ELE9BQWhDLEVBQXdGLGFBQVlDLGdEQUFRLENBQUMzbEIsU0FBVCxDQUFtQixXQUFuQixFQUFnQ0MsT0FBUSxHQUE1SSxFQUFnSm1CLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0UsaUJBQVMsRUFBRXdqQixvQkFBb0IsR0FBQztBQUFqQyxPQUFqQyxFQUF1RixJQUFHLENBQUNTLGdEQUFRLENBQUMzbEIsU0FBVCxDQUFtQixXQUFuQixFQUFnQzRsQixNQUFoQyxJQUEwQyxTQUEzQyxFQUFzRGhRLEtBQXRELENBQTRELENBQTVELEVBQStELENBQS9ELENBQWtFLEdBQTVKLENBQWhKLENBRGUsRUFFZnhVLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsaUJBQVMsRUFBRyxHQUFFc2pCLG1CQUFvQixJQUFHQyxLQUFLLENBQUNTLE1BQU87QUFBbkQsT0FBaEMsRUFBd0YsT0FBTW5tQixvREFBVyxHQUF6RyxFQUE2RzZCLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0UsaUJBQVMsRUFBRXdqQixvQkFBb0IsR0FBQztBQUFqQyxPQUFqQyxFQUFzRkcsV0FBdEYsQ0FBN0csQ0FGZSxDQUFuQjtBQU1BLFlBQU1RLGdCQUFnQixHQUFHdFAsUUFBUSxDQUFDQSxRQUFRLENBQUM5TyxNQUFULEdBQWtCLENBQW5CLENBQVIsQ0FBOEJ2RixJQUF2RDs7QUFDQXFVLGNBQVEsQ0FBQ0EsUUFBUSxDQUFDOU8sTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCdkYsSUFBOUIsR0FBcUMsWUFBVztBQUM1QyxjQUFNc2lCLFNBQVMsR0FBR3FCLGdCQUFnQixDQUFDLEdBQUc5ZixTQUFKLENBQWxDO0FBQ0F5ZSxpQkFBUyxDQUFDblYsS0FBVixDQUFnQmtILFFBQWhCLENBQXlCdVAsTUFBekIsQ0FBZ0MsQ0FBaEMsRUFBbUMsQ0FBbkMsRUFBc0NOLFVBQXRDO0FBQ0EsZUFBT2hCLFNBQVA7QUFDSCxPQUpEO0FBS0g7QUFwRGdFLEdBQTlDLENBQW5CO0FBcURILENBMUREOztBQTREQSxNQUFNdUIsZUFBZSxHQUFHLFlBQVc7QUFDL0IsUUFBTUMsYUFBYSxHQUFHNWxCLHVEQUFjLENBQUNHLFdBQWYsQ0FBMkIsU0FBM0IsRUFBc0MsbUJBQXRDLENBQXRCO0FBQ0EsUUFBTTBsQixNQUFNLEdBQUc3bEIsdURBQWMsQ0FBQ0csV0FBZixDQUEyQixhQUEzQixFQUEwQyxVQUExQyxDQUFmO0FBQ0EsUUFBTTJsQixJQUFJLEdBQUc5bEIsdURBQWMsQ0FBQ0csV0FBZixDQUEyQixlQUEzQixDQUFiO0FBQ0EsU0FBTzRDLE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYyxFQUFkLEVBQWtCbU8sYUFBbEIsRUFBaUNDLE1BQWpDLEVBQXlDQyxJQUF6QyxDQUFQO0FBQ0gsQ0FMRDs7QUFPQXBoQixJQUFJLENBQUNhLFNBQUwsQ0FBZTZiLG1CQUFmLEdBQXFDLFlBQVc7QUFDNUMsTUFBSSxLQUFLMkUsbUJBQVQsRUFBOEI7QUFDOUIsUUFBTUMsWUFBWSxHQUFHTCxlQUFlLEVBQXBDO0FBQ0EsUUFBTU0sYUFBYSxHQUFHRCxZQUFZLENBQUMvRCxRQUFiLENBQXNCbE4sS0FBdEIsQ0FBNEIsR0FBNUIsRUFBaUMsQ0FBakMsQ0FBdEI7QUFDQSxRQUFNbVIsU0FBUyxHQUFHRixZQUFZLENBQUM3RCxhQUFiLENBQTJCcE4sS0FBM0IsQ0FBaUMsR0FBakMsRUFBc0MsQ0FBdEMsQ0FBbEI7QUFDQSxRQUFNb1IsYUFBYSxHQUFHbmxCLDJDQUFJLENBQUN1TyxtQkFBTCxDQUF5QnRLLFFBQVEsQ0FBQzhPLGFBQVQsQ0FBd0IsSUFBR2tTLGFBQWMsS0FBSUMsU0FBVSxFQUF2RCxFQUEwRHZDLGFBQW5GLENBQXRCO0FBQ0EsUUFBTXlDLGNBQWMsR0FBR0QsYUFBYSxDQUFDRSxNQUFkLENBQXFCdmtCLElBQTVDO0FBQ0EsTUFBSSxDQUFDc2tCLGNBQUwsRUFBcUI7QUFDckIsT0FBS0wsbUJBQUwsR0FBMkJsaUIsOENBQUssQ0FBQzZELFdBQU4sQ0FBa0IwZSxjQUFjLENBQUM3Z0IsU0FBakMsRUFBNEMsUUFBNUMsRUFBc0Q7QUFBQ3FDLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQy9GLFVBQUlBLElBQUksQ0FBQ0UsV0FBTCxJQUFvQkYsSUFBSSxDQUFDcWYsVUFBN0IsRUFBeUM7QUFDckMsY0FBTW5mLFdBQVcsR0FBR0YsSUFBSSxDQUFDRSxXQUF6QjtBQUNBLGNBQU1vZixTQUFTLEdBQUd0ZixJQUFJLENBQUNxZixVQUFMLENBQWdCclgsS0FBbEM7QUFDQTlILG1CQUFXLENBQUM4SCxLQUFaLENBQWtCM04sU0FBbEIsSUFBK0IsV0FBL0I7QUFDQSxZQUFJaWxCLFNBQVMsQ0FBQ0MsTUFBZCxFQUFzQnJmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixZQUEvQjtBQUN0QixZQUFJaWxCLFNBQVMsQ0FBQ0UsUUFBZCxFQUF3QnRmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixjQUEvQjtBQUN4QixZQUFJaWxCLFNBQVMsQ0FBQ0csS0FBZCxFQUFxQnZmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixXQUEvQjtBQUNyQixZQUFJaWxCLFNBQVMsQ0FBQ0ksS0FBZCxFQUFxQnhmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixXQUEvQjtBQUNyQixZQUFJaWxCLFNBQVMsQ0FBQ0ssS0FBZCxFQUFxQnpmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixXQUEvQjtBQUNyQixZQUFJaWxCLFNBQVMsQ0FBQ00sVUFBZCxFQUEwQjFmLFdBQVcsQ0FBQzhILEtBQVosQ0FBa0IzTixTQUFsQixJQUErQixnQkFBL0I7QUFDMUIsZUFBTzZGLFdBQVA7QUFDSDtBQUNKO0FBYmdGLEdBQXRELENBQTNCO0FBY0gsQ0F0QkQ7O0FBd0JBekMsSUFBSSxDQUFDYSxTQUFMLENBQWU0YixlQUFmLEdBQWlDLFlBQVc7QUFDeEMsTUFBSSxLQUFLMkYsY0FBVCxFQUF5QjtBQUN6QixRQUFNQyxTQUFTLEdBQUcvbUIsdURBQWMsQ0FBQ0ssSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUMrSCxPQUFGLElBQWEsQ0FBQy9ILENBQUMsQ0FBQytILE9BQUYsQ0FBVTlILFdBQXhCLElBQXVDRCxDQUFDLENBQUMrSCxPQUFGLENBQVU0YixRQUFqRCxJQUE2RDNqQixDQUFDLENBQUMrSCxPQUFGLENBQVU0YixRQUFWLEdBQXFCdmQsUUFBckIsQ0FBOEIsYUFBOUIsQ0FBdEYsQ0FBbEI7QUFDQSxNQUFJLENBQUNxZ0IsU0FBTCxFQUFnQjtBQUNoQixPQUFLRCxjQUFMLEdBQXNCampCLDhDQUFLLENBQUM2RCxXQUFOLENBQWtCcWYsU0FBbEIsRUFBNkIsU0FBN0IsRUFBd0M7QUFBQ25mLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQzVFLFlBQU1nSSxLQUFLLEdBQUdoSSxJQUFJLENBQUNnUSxlQUFMLENBQXFCLENBQXJCLENBQWQ7QUFDQSxVQUFJaEksS0FBSyxDQUFDdVgsTUFBVixFQUFrQnZmLElBQUksQ0FBQ0UsV0FBTCxDQUFpQjhILEtBQWpCLENBQXVCM04sU0FBdkIsSUFBb0MsWUFBcEM7QUFDbEIsVUFBSTJOLEtBQUssQ0FBQ3dYLFFBQVYsRUFBb0J4ZixJQUFJLENBQUNFLFdBQUwsQ0FBaUI4SCxLQUFqQixDQUF1QjNOLFNBQXZCLElBQW9DLGNBQXBDO0FBQ3BCLFVBQUkyTixLQUFLLENBQUMrWCxPQUFWLEVBQW1CL2YsSUFBSSxDQUFDRSxXQUFMLENBQWlCOEgsS0FBakIsQ0FBdUIzTixTQUF2QixJQUFvQyxhQUFwQztBQUNuQixhQUFPMkYsSUFBSSxDQUFDRSxXQUFaO0FBQ0g7QUFONkQsR0FBeEMsQ0FBdEI7QUFPSCxDQVhEOztBQWFBekMsSUFBSSxDQUFDYSxTQUFMLENBQWU4YixtQkFBZixHQUFxQyxZQUFXO0FBQzVDLE1BQUksS0FBSzRGLG1CQUFULEVBQThCO0FBQzlCLFFBQU1DLE1BQU0sR0FBR2xuQix1REFBYyxDQUFDQyxpQkFBZixDQUFpQyxRQUFqQyxDQUFmO0FBQ0EsUUFBTWtuQixlQUFlLEdBQUdubkIsdURBQWMsQ0FBQ0csV0FBZixDQUEyQixnQkFBM0IsQ0FBeEI7QUFDQSxNQUFJLENBQUNnbkIsZUFBRCxJQUFvQixDQUFDRCxNQUF6QixFQUFpQzs7QUFDakMsUUFBTUUsY0FBYyxHQUFHLFlBQVc7QUFDOUIsVUFBTWpnQixXQUFXLEdBQUdnZ0IsZUFBZSxDQUFDRSxTQUFoQixDQUEwQixHQUFHMWhCLFNBQTdCLENBQXBCO0FBQ0F3QixlQUFXLENBQUM4SCxLQUFaLENBQWtCM04sU0FBbEIsSUFBK0IscUJBQS9CO0FBQ0EsV0FBTzZGLFdBQVA7QUFDSCxHQUpEOztBQUtBLE9BQUs4ZixtQkFBTCxHQUEyQnBqQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQndmLE1BQU0sQ0FBQzNoQixTQUF6QixFQUFvQyxRQUFwQyxFQUE4QztBQUFDcUMsU0FBSyxFQUFHWCxJQUFELElBQVU7QUFDdkZBLFVBQUksQ0FBQ0UsV0FBTCxDQUFpQjhILEtBQWpCLENBQXVCa0gsUUFBdkIsQ0FBZ0MsQ0FBaEMsRUFBbUNsSCxLQUFuQyxDQUF5Q2tILFFBQXpDLENBQWtELENBQWxELEVBQXFEclUsSUFBckQsR0FBNERzbEIsY0FBNUQ7QUFDSDtBQUZ3RSxHQUE5QyxDQUEzQjtBQUdILENBYkQ7O0FBZUExaUIsSUFBSSxDQUFDYSxTQUFMLENBQWVpYyxlQUFmLEdBQWlDLFlBQVc7QUFDeEMsTUFBSSxLQUFLOEYsZUFBVCxFQUEwQjtBQUMxQixRQUFNQyxVQUFVLEdBQUdwZixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTlILFdBQVYsS0FBMEIsWUFBMUQsRUFBd0UsQ0FBeEUsQ0FBbkIsQ0FGd0MsQ0FFc0Q7O0FBQzlGLFFBQU1ILE1BQU0sR0FBR0osdURBQWMsQ0FBQ0ssSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLFdBQUYsSUFBaUIsUUFBMUMsQ0FBZjtBQUNBLE1BQUksQ0FBQ0gsTUFBRCxJQUFXLENBQUNtbkIsVUFBWixJQUEwQixDQUFDQSxVQUFVLENBQUNsZixPQUExQyxFQUFtRDtBQUNuRCxPQUFLaWYsZUFBTCxHQUF1QnpqQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQjZmLFVBQWxCLEVBQThCLFNBQTlCLEVBQXlDO0FBQUMzZixTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUM5RSxZQUFNdWdCLFVBQVUsR0FBR3ZnQixJQUFJLENBQUNnUSxlQUFMLENBQXFCLENBQXJCLEtBQTJCLElBQTlDO0FBQ0EsWUFBTWQsUUFBUSxHQUFHdFMsOENBQUssQ0FBQzRqQixhQUFOLENBQW9CeGdCLElBQUksQ0FBQ0UsV0FBekIsRUFBc0MsZ0JBQXRDLENBQWpCO0FBRUEsVUFBSSxDQUFDZ1AsUUFBRCxJQUFhLENBQUNxUixVQUFkLElBQTRCLENBQUNBLFVBQVUsQ0FBQ2hoQixHQUE1QyxFQUFnRDtBQUNoRCxVQUFJLENBQUNtTyxLQUFLLENBQUNDLE9BQU4sQ0FBY3VCLFFBQWQsQ0FBTCxFQUE4QjtBQUU5QixZQUFNblUsRUFBRSxHQUFHMGxCLHdEQUFNLEVBQWpCO0FBQ0F2UixjQUFRLENBQUNwRCxJQUFULENBQWMvUiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQzFDWSxVQUFFLEVBQUUsZUFBYUE7QUFEeUIsT0FBaEMsQ0FBZDtBQUdBd2UsK0RBQWUsQ0FBQ21ILEtBQWhCLENBQXNCSCxVQUF0QixFQUFrQyxlQUFheGxCLEVBQS9DO0FBQ0g7QUFaK0QsR0FBekMsQ0FBdkI7QUFhSCxDQWxCRDs7QUFvQkEwQyxJQUFJLENBQUNhLFNBQUwsQ0FBZStiLGtCQUFmLEdBQW9DLFlBQVc7QUFDM0MsTUFBSSxLQUFLc0csa0JBQVQsRUFBNkI7QUFDN0IsUUFBTUMsYUFBYSxHQUFHN25CLHVEQUFjLENBQUNHLFdBQWYsQ0FBMkIsa0JBQTNCLENBQXRCO0FBQ0EsUUFBTUMsTUFBTSxHQUFHSix1REFBYyxDQUFDSyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsTUFBSSxDQUFDSCxNQUFELElBQVcsQ0FBQ3luQixhQUFaLElBQTZCLENBQUNBLGFBQWEsQ0FBQ3hmLE9BQWhELEVBQXlEO0FBQ3pELE9BQUt1ZixrQkFBTCxHQUEwQi9qQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQm1nQixhQUFsQixFQUFpQyxTQUFqQyxFQUE0QztBQUFDamdCLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQ3BGLFlBQU11QyxNQUFNLEdBQUczRiw4Q0FBSyxDQUFDNGpCLGFBQU4sQ0FBb0J4Z0IsSUFBSSxDQUFDZ1EsZUFBTCxDQUFxQixDQUFyQixDQUFwQixFQUE2QyxnQkFBN0MsQ0FBZixDQURvRixDQUVwRjs7QUFDQSxZQUFNZCxRQUFRLEdBQUd0Uyw4Q0FBSyxDQUFDNGpCLGFBQU4sQ0FBb0J4Z0IsSUFBSSxDQUFDRSxXQUF6QixFQUFzQyxrREFBdEMsQ0FBakI7QUFDQSxVQUFJLENBQUNnUCxRQUFELElBQWEsQ0FBQzNNLE1BQWQsSUFBd0IsQ0FBQ0EsTUFBTSxDQUFDeEgsRUFBcEMsRUFBdUMsT0FKNkMsQ0FLcEY7O0FBQ0EsVUFBSSxDQUFDMlMsS0FBSyxDQUFDQyxPQUFOLENBQWN1QixRQUFkLENBQUwsRUFBOEI7O0FBQzlCLFVBQUkzTSxNQUFNLENBQUN4SCxFQUFQLEtBQWMsb0JBQWxCLEVBQXdDO0FBQUU7QUFDdENtVSxnQkFBUSxDQUFDcEQsSUFBVCxDQUNJL1IsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCaWpCLHdEQUF6QixFQUFzQztBQUFDM2lCLGVBQUssRUFBRSxPQUFSO0FBQWlCNGlCLGNBQUksRUFBRSxLQUF2QjtBQUE4QjdaLGNBQUksRUFBRTtBQUFwQyxTQUF0QyxFQUNJekosMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCaEIsTUFBekIsRUFBaUM7QUFBQ2tCLG1CQUFTLEVBQUUsZUFBWjtBQUE2QmtqQixjQUFJLEVBQUUsNkNBQW5DO0FBQWtGamxCLGVBQUssRUFBRSxZQUF6RjtBQUF1R2tsQixnQkFBTSxFQUFFO0FBQS9HLFNBQWpDLEVBQ0l6akIsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCdWpCLGtEQUF6QixFQUFpQztBQUFDcGpCLGNBQUksRUFBRSxNQUFQO0FBQWVELG1CQUFTLEVBQUU7QUFBMUIsU0FBakMsQ0FESixDQURKLENBREo7QUFPSCxPQVJELE1BUU8sSUFBSWtJLE1BQU0sQ0FBQ3hILEVBQVAsS0FBYyxvQkFBZCxJQUFzQ3dILE1BQU0sQ0FBQ3hILEVBQVAsS0FBYyxvQkFBeEQsRUFBNkU7QUFBRTtBQUNsRm1VLGdCQUFRLENBQUNwRCxJQUFULENBQ0kvUiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJpakIsd0RBQXpCLEVBQXNDO0FBQUMzaUIsZUFBSyxFQUFFLE9BQVI7QUFBaUI0aUIsY0FBSSxFQUFFLEtBQXZCO0FBQThCN1osY0FBSSxFQUFFO0FBQXBDLFNBQXRDLEVBQ0l6SiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJoQixNQUF6QixFQUFpQztBQUFDa0IsbUJBQVMsRUFBRSxlQUFaO0FBQTZCa2pCLGNBQUksRUFBRSx3Q0FBbkM7QUFBNkVqbEIsZUFBSyxFQUFFLFdBQXBGO0FBQWlHa2xCLGdCQUFNLEVBQUU7QUFBekcsU0FBakMsRUFDSXpqQiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJzakIsdURBQXpCLEVBQXdDO0FBQUNuakIsY0FBSSxFQUFFLE1BQVA7QUFBZUQsbUJBQVMsRUFBRTtBQUExQixTQUF4QyxDQURKLENBREosQ0FESjtBQU9IOztBQUNELFlBQU1VLEVBQUUsR0FBRzBsQix3REFBTSxFQUFqQjtBQUNBdlIsY0FBUSxDQUFDcEQsSUFBVCxDQUNJL1IsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQzVCWSxVQUFFLEVBQUUsWUFBVUEsRUFEYztBQUU1QndWLGFBQUssRUFBRTtBQUNIc1EsaUJBQU8sRUFBRTtBQUROO0FBRnFCLE9BQWhDLENBREo7QUFRQUMsaUJBQVcsQ0FBQy9sQixFQUFELEVBQUt3SCxNQUFMLEVBQWEsSUFBYixDQUFYO0FBQ0g7QUFsQ3FFLEdBQTVDLENBQTFCO0FBbUNILENBeENEOztBQTBDQSxTQUFTdWUsV0FBVCxDQUFxQi9sQixFQUFyQixFQUF5QmdtQixJQUF6QixFQUErQkMsSUFBL0IsRUFBb0M7QUFDaENoZCxTQUFPLENBQUNpZCxRQUFSLENBQWlCLE1BQU07QUFDbkIsVUFBTUMsR0FBRyxHQUFHbGpCLFFBQVEsQ0FBQ3dlLGNBQVQsQ0FBd0IsWUFBVXpoQixFQUFsQyxDQUFaO0FBQ0EsUUFBRyxDQUFDbW1CLEdBQUQsSUFBUUEsR0FBRyxDQUFDQyxVQUFKLENBQWUvZ0IsTUFBZixHQUF3QixDQUFuQyxFQUFxQztBQUVyQyxVQUFNakgsTUFBTSxHQUFHSix1REFBYyxDQUFDSyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBRUE4bkIscURBQU8sQ0FBQ0MsU0FBUixDQUFrQk4sSUFBSSxDQUFDaG1CLEVBQXZCLEVBQ0N1bUIsSUFERCxDQUNNQyxNQUFNLElBQUk7QUFDWkEsWUFBTSxDQUFDMVEsT0FBUCxDQUFlOE8sS0FBSyxJQUFJO0FBQ3BCLGNBQU0zWCxLQUFLLEdBQUc7QUFDVndaLGFBQUcsRUFBRTtBQUNEbG5CLGdCQUFJLEVBQUUsTUFETDtBQUVERCxxQkFBUyxFQUFFLFNBRlY7QUFHRG9uQixpQkFBSyxFQUFFO0FBSE47QUFESyxTQUFkO0FBT0E5QixhQUFLLENBQUMrQixNQUFOLENBQWE3USxPQUFiLENBQXFCOFEsS0FBSyxJQUFJO0FBQzFCLGNBQUdBLEtBQUssS0FBSyxNQUFiLEVBQW9CO0FBQUM7QUFDakIzWixpQkFBSyxDQUFDK1ksSUFBTixHQUFhQSxJQUFiO0FBQ0g7QUFDSixTQUpEOztBQUtBLFlBQUcsQ0FBQ3BCLEtBQUssQ0FBQ3BDLElBQVYsRUFBZTtBQUNYdlYsZUFBSyxDQUFDN08sTUFBTixHQUFlQSxNQUFmO0FBQ0E2TyxlQUFLLENBQUN1VixJQUFOLEdBQWE7QUFDVGxqQixxQkFBUyxFQUFFMm1CLElBQUksR0FBRyxlQUFILEdBQXFCLGlCQUQzQjtBQUVUMW9CLGlCQUFLLEVBQUVxbkIsS0FBSyxDQUFDamMsSUFGSjtBQUdUOFosa0JBQU0sRUFBRTtBQUhDLFdBQWI7QUFLSDs7QUFDRCxjQUFNN08sT0FBTyxHQUFHNVUsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCaWpCLHdEQUF6QixFQUFzQztBQUFDM2lCLGVBQUssRUFBRSxPQUFSO0FBQWlCNGlCLGNBQUksRUFBRSxLQUF2QjtBQUE4QjdaLGNBQUksRUFBRW1jLEtBQUssQ0FBQ2pjO0FBQTFDLFNBQXRDLEVBQ1ppYyxLQUFLLENBQUNwQyxJQUFOLEdBQWF4akIsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmhCLE1BQXpCLEVBQWlDO0FBQzFDb2tCLGNBQUksRUFBRW9DLEtBQUssQ0FBQ3BDLElBRDhCO0FBRTFDbGpCLG1CQUFTLEVBQUUybUIsSUFBSSxHQUFHLGVBQUgsR0FBcUIsaUJBRk07QUFHMUMxb0IsZUFBSyxFQUFFcW5CLEtBQUssQ0FBQ2pjLElBSDZCO0FBSTFDOFosZ0JBQU0sRUFBRTtBQUprQyxTQUFqQyxFQUtWempCLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QndsQixLQUFLLENBQUNpQyxTQUEvQixFQUEwQzVaLEtBQTFDLENBTFUsQ0FBYixHQUt1RGpPLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QndsQixLQUFLLENBQUNpQyxTQUEvQixFQUEwQzVaLEtBQTFDLENBTjNDLENBQWhCO0FBUUEsY0FBTTZaLElBQUksR0FBRzdqQixRQUFRLENBQUM3RCxhQUFULENBQXVCLEtBQXZCLENBQWI7QUFDQUosbURBQUksQ0FBQytuQixRQUFMLENBQWNDLE1BQWQsQ0FBcUJwVCxPQUFyQixFQUE4QmtULElBQTlCO0FBQ0FBLFlBQUksQ0FBQ1YsVUFBTCxDQUFnQnRRLE9BQWhCLENBQXdCdEksSUFBSSxJQUFJO0FBQzVCMlksYUFBRyxDQUFDaGpCLFdBQUosQ0FBZ0JxSyxJQUFoQjtBQUNILFNBRkQ7QUFHSCxPQWxDRDtBQW1DSCxLQXJDRDtBQXNDSCxHQTVDRDtBQTZDSDs7QUFFRDlLLElBQUksQ0FBQ2EsU0FBTCxDQUFlZ2MsZUFBZixHQUFpQyxZQUFXO0FBQ3hDLE1BQUksS0FBSzBILGVBQVQsRUFBMEI7QUFDMUIsUUFBTUMsY0FBYyxHQUFHbHBCLHVEQUFjLENBQUNDLGlCQUFmLENBQWlDLGdCQUFqQyxDQUF2QjtBQUNBLFFBQU1HLE1BQU0sR0FBR0osdURBQWMsQ0FBQ0ssSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLFdBQUYsSUFBaUIsUUFBMUMsQ0FBZjtBQUNBLE1BQUksQ0FBQ0gsTUFBRCxJQUFXLENBQUM4b0IsY0FBWixJQUE4QixDQUFDQSxjQUFjLENBQUMzakIsU0FBOUMsSUFBMkQsQ0FBQzJqQixjQUFjLENBQUMzakIsU0FBZixDQUF5QjRqQixnQkFBekYsRUFBMkc7QUFDM0csT0FBS0YsZUFBTCxHQUF1QnBsQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQndoQixjQUFjLENBQUMzakIsU0FBakMsRUFBNEMsa0JBQTVDLEVBQWdFO0FBQUNxQyxTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUNyRyxZQUFNK2dCLElBQUksR0FBR25rQiw4Q0FBSyxDQUFDNGpCLGFBQU4sQ0FBb0J4Z0IsSUFBSSxDQUFDcWYsVUFBekIsRUFBcUMsWUFBckMsQ0FBYjtBQUNBLFlBQU1uUSxRQUFRLEdBQUd0Uyw4Q0FBSyxDQUFDNGpCLGFBQU4sQ0FBb0J4Z0IsSUFBSSxDQUFDRSxXQUF6QixFQUFzQyxnQkFBdEMsQ0FBakI7QUFDQSxVQUFJLENBQUNnUCxRQUFELElBQWEsQ0FBQzZSLElBQWQsSUFBc0IsQ0FBQ0EsSUFBSSxDQUFDaG1CLEVBQWhDLEVBQW1DLE9BSGtFLENBSXJHOztBQUNBLFVBQUksQ0FBQzJTLEtBQUssQ0FBQ0MsT0FBTixDQUFjdUIsUUFBZCxDQUFMLEVBQThCOztBQUM5QixVQUFJNlIsSUFBSSxDQUFDaG1CLEVBQUwsS0FBWSxvQkFBaEIsRUFBc0M7QUFDbENtVSxnQkFBUSxDQUFDcEQsSUFBVCxDQUNJL1IsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCaWpCLHdEQUF6QixFQUFzQztBQUFDM2lCLGVBQUssRUFBRSxPQUFSO0FBQWlCNGlCLGNBQUksRUFBRSxLQUF2QjtBQUE4QjdaLGNBQUksRUFBRTtBQUFwQyxTQUF0QyxFQUNJekosMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCaEIsTUFBekIsRUFBaUM7QUFBQ2tCLG1CQUFTLEVBQUUsaUJBQVo7QUFBK0JrakIsY0FBSSxFQUFFLDZDQUFyQztBQUFvRmpsQixlQUFLLEVBQUUsWUFBM0Y7QUFBeUdrbEIsZ0JBQU0sRUFBRTtBQUFqSCxTQUFqQyxFQUNJempCLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QnVqQixrREFBekIsRUFBaUM7QUFBQ3BqQixjQUFJLEVBQUUsTUFBUDtBQUFlRCxtQkFBUyxFQUFFO0FBQTFCLFNBQWpDLENBREosQ0FESixDQURKO0FBT0gsT0FSRCxNQVFPLElBQUkwbUIsSUFBSSxDQUFDaG1CLEVBQUwsS0FBWSxvQkFBWixJQUFvQ2dtQixJQUFJLENBQUNobUIsRUFBTCxLQUFZLG9CQUFwRCxFQUF5RTtBQUM1RW1VLGdCQUFRLENBQUNwRCxJQUFULENBQ0kvUiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJpakIsd0RBQXpCLEVBQXNDO0FBQUMzaUIsZUFBSyxFQUFFLE9BQVI7QUFBaUI0aUIsY0FBSSxFQUFFLEtBQXZCO0FBQThCN1osY0FBSSxFQUFFO0FBQXBDLFNBQXRDLEVBQ0l6SiwyQ0FBSSxDQUFDRyxLQUFMLENBQVdDLGFBQVgsQ0FBeUJoQixNQUF6QixFQUFpQztBQUFDa0IsbUJBQVMsRUFBRSxpQkFBWjtBQUErQmtqQixjQUFJLEVBQUUsd0NBQXJDO0FBQStFamxCLGVBQUssRUFBRSxXQUF0RjtBQUFtR2tsQixnQkFBTSxFQUFFO0FBQTNHLFNBQWpDLEVBQ0l6akIsMkNBQUksQ0FBQ0csS0FBTCxDQUFXQyxhQUFYLENBQXlCc2pCLHVEQUF6QixFQUF3QztBQUFDbmpCLGNBQUksRUFBRSxNQUFQO0FBQWVELG1CQUFTLEVBQUU7QUFBMUIsU0FBeEMsQ0FESixDQURKLENBREo7QUFPSDs7QUFDRCxZQUFNVSxFQUFFLEdBQUcwbEIsd0RBQU0sRUFBakI7QUFDQXZSLGNBQVEsQ0FBQ3BELElBQVQsQ0FDSS9SLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDWSxVQUFFLEVBQUUsWUFBVUE7QUFBZixPQUFoQyxDQURKO0FBR0ErbEIsaUJBQVcsQ0FBQy9sQixFQUFELEVBQUtnbUIsSUFBTCxFQUFXLEtBQVgsQ0FBWDtBQUNIO0FBNUJzRixHQUFoRSxDQUF2QjtBQTZCSCxDQWxDRDs7QUFvQ0F0akIsSUFBSSxDQUFDYSxTQUFMLENBQWV3YSxjQUFmLEdBQWdDLGtCQUFpQjtBQUM3QyxRQUFNcUosYUFBYSxHQUFHOWtCLGtEQUFTLENBQUM4a0IsYUFBaEM7QUFDQSxNQUFJLENBQUNBLGFBQUwsRUFBb0IsT0FBTyxLQUFQOztBQUVwQixRQUFNalIsRUFBRSxHQUFHcFQsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLFFBQU1tVCxJQUFJLEdBQUduVCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLFFBQU1za0IsSUFBSSxHQUFHdGtCLG1CQUFPLENBQUMsc0JBQUQsQ0FBcEI7O0FBQ0EsUUFBTXVrQixLQUFLLEdBQUd2a0IsbUJBQU8sQ0FBQyxvQkFBRCxDQUFyQjs7QUFDQSxRQUFNd2tCLE1BQU0sR0FBR3hrQixtQkFBTyxDQUFDLHNCQUFELENBQXRCOztBQUNBLFFBQU15a0IsT0FBTztBQUFHO0FBQXdCLE1BQXhDO0FBRUEsUUFBTUMsVUFBVSxHQUFHdlIsSUFBSSxDQUFDSSxPQUFMLENBQWE4USxhQUFiLEVBQTRCLElBQTVCLENBQW5CO0FBQ0EsUUFBTU0sVUFBVSxHQUFHeFIsSUFBSSxDQUFDeUUsUUFBTCxDQUFjeU0sYUFBZCxDQUFuQjtBQUNBLFFBQU1PLE9BQU8sR0FBRyxrRUFBaEI7QUFDQSxRQUFNQyxRQUFRLEdBQUcxUixJQUFJLENBQUNJLE9BQUwsQ0FBYW1SLFVBQWIsRUFBeUIsY0FBekIsQ0FBakI7QUFDQSxRQUFNSSxlQUFlLEdBQUczUixJQUFJLENBQUNJLE9BQUwsQ0FBYW1SLFVBQWIsRUFBeUIsMkJBQXpCLENBQXhCLENBZjZDLENBaUI3Qzs7QUFDQTVsQixnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTRCLGlCQUFpQjBkLE9BQTdDO0FBQ0EsTUFBSUcsT0FBTyxHQUFHLE1BQU0sSUFBSTdQLE9BQUosQ0FBWTNCLE9BQU8sSUFBSTtBQUN2Q2tSLFdBQU8sQ0FBQzVsQixHQUFSLENBQVk7QUFBQzRDLFNBQUcsRUFBRW1qQixPQUFOO0FBQWVJLGNBQVEsRUFBRTtBQUF6QixLQUFaLEVBQTRDLE9BQU96VyxLQUFQLEVBQWMwVyxRQUFkLEVBQXdCOWtCLElBQXhCLEtBQWlDO0FBQ3pFLFVBQUlvTyxLQUFLLElBQUkwVyxRQUFRLENBQUNDLFVBQVQsS0FBd0IsR0FBckMsRUFBMEMsT0FBTzNSLE9BQU8sQ0FBQyxLQUFELENBQWQsQ0FEK0IsQ0FFekU7O0FBQ0EsWUFBTTRSLGFBQWEsR0FBRyxNQUFNLElBQUlqUSxPQUFKLENBQVlrUSxHQUFHLElBQUloUyxFQUFFLENBQUNpUyxNQUFILENBQVVSLFFBQVYsRUFBb0JPLEdBQXBCLENBQW5CLENBQTVCO0FBQ0EsVUFBSUQsYUFBSixFQUFtQixNQUFNLElBQUlqUSxPQUFKLENBQVlrUSxHQUFHLElBQUloUyxFQUFFLENBQUNrUyxNQUFILENBQVVULFFBQVYsRUFBcUIsR0FBRUEsUUFBUyxPQUFNL2MsSUFBSSxDQUFDeWQsS0FBTCxDQUFXQyxXQUFXLENBQUM1bkIsR0FBWixFQUFYLENBQThCLEVBQXBFLEVBQXVFd25CLEdBQXZFLENBQW5CLENBQU47QUFFbkJ0bUIsb0RBQUssQ0FBQ29JLEdBQU4sQ0FBVSxnQkFBVixFQUE0QixhQUFhMmQsUUFBekM7QUFDQXpSLFFBQUUsQ0FBQ3FTLFNBQUgsQ0FBYVosUUFBYixFQUF1QjFrQixJQUF2QixFQUE2Qm1WLEdBQUcsSUFBSS9CLE9BQU8sQ0FBQyxDQUFDK0IsR0FBRixDQUEzQztBQUNILEtBUkQ7QUFTSCxHQVZtQixDQUFwQjtBQVdBLE1BQUksQ0FBQ3lQLE9BQUwsRUFBYyxPQUFPQSxPQUFQLENBOUIrQixDQWdDN0M7O0FBQ0EsUUFBTUksYUFBYSxHQUFHLE1BQU0sSUFBSWpRLE9BQUosQ0FBWWtRLEdBQUcsSUFBSWhTLEVBQUUsQ0FBQ2lTLE1BQUgsQ0FBVVAsZUFBVixFQUEyQk0sR0FBM0IsQ0FBbkIsQ0FBNUI7QUFDQSxNQUFJRCxhQUFKLEVBQW1CLE1BQU0sSUFBSWpRLE9BQUosQ0FBWWtRLEdBQUcsSUFBSWhTLEVBQUUsQ0FBQ2tTLE1BQUgsQ0FBVVIsZUFBVixFQUE0QixHQUFFQSxlQUFnQixPQUFNaGQsSUFBSSxDQUFDeWQsS0FBTCxDQUFXQyxXQUFXLENBQUM1bkIsR0FBWixFQUFYLENBQThCLEVBQWxGLEVBQXFGd25CLEdBQXJGLENBQW5CLENBQU4sQ0FsQzBCLENBb0M3Qzs7QUFDQSxRQUFNTSxPQUFPLEdBQUcsTUFBTSxJQUFJeFEsT0FBSixDQUFZQyxDQUFDLElBQUlvUCxLQUFLLENBQUMvaUIsSUFBTixDQUFXcWpCLFFBQVgsRUFBcUI7QUFBQ2MsZUFBVyxFQUFFO0FBQWQsR0FBckIsRUFBMEMsQ0FBQ3JRLEdBQUQsRUFBTXNRLEdBQU4sS0FBZXpRLENBQUMsQ0FBQ3lRLEdBQUQsQ0FBMUQsQ0FBakIsQ0FBdEI7QUFDQUYsU0FBTyxDQUFDRyxFQUFSLENBQVcsT0FBWCxFQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2hDO0FBQ0EsUUFBSUEsS0FBSyxDQUFDQyxRQUFOLENBQWVyVyxRQUFmLENBQXdCLEdBQXhCLENBQUosRUFBa0MsT0FBT2dXLE9BQU8sQ0FBQ00sU0FBUixFQUFQO0FBRWxDbG5CLGtEQUFLLENBQUNvSSxHQUFOLENBQVUsZ0JBQVYsRUFBNEIsZ0JBQWdCNGUsS0FBSyxDQUFDQyxRQUFsRCxFQUpnQyxDQUtoQzs7QUFDQSxVQUFNRSxRQUFRLEdBQUc5UyxJQUFJLENBQUNJLE9BQUwsQ0FBYW1SLFVBQWIsRUFBeUJvQixLQUFLLENBQUNDLFFBQS9CLENBQWpCO0FBQ0F2QixVQUFNLENBQUMwQixJQUFQLENBQVkvUyxJQUFJLENBQUNnVCxPQUFMLENBQWFGLFFBQWIsQ0FBWjtBQUNBUCxXQUFPLENBQUNVLGNBQVIsQ0FBdUJOLEtBQXZCLEVBQThCLFVBQVN4USxHQUFULEVBQWMrUSxVQUFkLEVBQTBCO0FBQ3BELFVBQUkvUSxHQUFKLEVBQVMsT0FBT3lQLE9BQU8sR0FBRyxLQUFqQjtBQUNUc0IsZ0JBQVUsQ0FBQ1IsRUFBWCxDQUFjLEtBQWQsRUFBcUIsWUFBVztBQUFDSCxlQUFPLENBQUNNLFNBQVI7QUFBcUIsT0FBdEQsRUFGb0QsQ0FFSzs7QUFDekRLLGdCQUFVLENBQUNDLElBQVgsQ0FBZ0JsVCxFQUFFLENBQUNtVCxpQkFBSCxDQUFxQk4sUUFBckIsQ0FBaEI7QUFDSCxLQUpEO0FBS0gsR0FiRDtBQWNBUCxTQUFPLENBQUNNLFNBQVIsR0FwRDZDLENBb0R4QjtBQUVyQjs7QUFDQSxRQUFNLElBQUk5USxPQUFKLENBQVkzQixPQUFPLElBQUltUyxPQUFPLENBQUNjLElBQVIsQ0FBYSxLQUFiLEVBQW9CalQsT0FBcEIsQ0FBdkIsQ0FBTixDQXZENkMsQ0F5RDdDOztBQUNBLFFBQU1rVCxZQUFZLEdBQUd0VCxJQUFJLENBQUNJLE9BQUwsQ0FBYW1SLFVBQWIsRUFBMEIsR0FBRUMsVUFBVyxPQUFNN2MsSUFBSSxDQUFDeWQsS0FBTCxDQUFXQyxXQUFXLENBQUM1bkIsR0FBWixFQUFYLENBQThCLEVBQTNFLENBQXJCO0FBQ0EsUUFBTSxJQUFJc1gsT0FBSixDQUFZM0IsT0FBTyxJQUFJSCxFQUFFLENBQUNrUyxNQUFILENBQVVqQixhQUFWLEVBQXlCb0MsWUFBekIsRUFBdUNsVCxPQUF2QyxDQUF2QixDQUFOLENBM0Q2QyxDQTZEN0M7O0FBQ0F6VSxnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTZCLFlBQVdpTSxJQUFJLENBQUN5RSxRQUFMLENBQWNrTixlQUFkLENBQStCLE9BQU1ILFVBQVcsRUFBeEY7QUFDQUksU0FBTyxHQUFHLE1BQU0sSUFBSTdQLE9BQUosQ0FBWTNCLE9BQU8sSUFBSUgsRUFBRSxDQUFDa1MsTUFBSCxDQUFVUixlQUFWLEVBQTJCVCxhQUEzQixFQUEwQy9PLEdBQUcsSUFBSS9CLE9BQU8sQ0FBQyxDQUFDK0IsR0FBRixDQUF4RCxDQUF2QixDQUFoQjs7QUFDQSxNQUFJLENBQUN5UCxPQUFMLEVBQWM7QUFDVmptQixrREFBSyxDQUFDd1csR0FBTixDQUFVLGdCQUFWLEVBQTRCLHNDQUE1QjtBQUNBLFdBQU95UCxPQUFQO0FBQ0gsR0FuRTRDLENBcUU3Qzs7O0FBQ0EsTUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDVmptQixrREFBSyxDQUFDd1csR0FBTixDQUFVLGdCQUFWLEVBQTRCLDRDQUE1QjtBQUNBLFVBQU0sSUFBSUosT0FBSixDQUFZM0IsT0FBTyxJQUFJK1EsSUFBSSxDQUFDUSxlQUFELEVBQWtCdlIsT0FBbEIsQ0FBM0IsQ0FBTjtBQUNBLFVBQU0sSUFBSTJCLE9BQUosQ0FBWTNCLE9BQU8sSUFBSUgsRUFBRSxDQUFDa1MsTUFBSCxDQUFVbUIsWUFBVixFQUF3QnBDLGFBQXhCLEVBQXVDOVEsT0FBdkMsQ0FBdkIsQ0FBTjtBQUNBLFdBQU93UixPQUFQO0FBQ0gsR0EzRTRDLENBNkU3QztBQUNBOzs7QUFDQSxRQUFNLElBQUk3UCxPQUFKLENBQVkzQixPQUFPLElBQUkrUSxJQUFJLENBQUNtQyxZQUFELEVBQWVsVCxPQUFmLENBQTNCLENBQU47QUFDQSxRQUFNLElBQUkyQixPQUFKLENBQVkzQixPQUFPLElBQUlILEVBQUUsQ0FBQ3NULE1BQUgsQ0FBVTdCLFFBQVYsRUFBb0J0UixPQUFwQixDQUF2QixDQUFOO0FBRUF6VSxnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTRCLG1CQUE1QjtBQUNBLFNBQU82ZCxPQUFQO0FBQ0gsQ0FwRkQ7O0FBc0ZlLG1FQUFJcGxCLElBQUosRUFBZixFOzs7Ozs7Ozs7Ozs7QUN0a0JBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBTXVULHVCQUF1QixHQUFHblosTUFBTSxDQUFDaUcsT0FBdkM7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTW9ULEVBQUUsR0FBR3BULG1CQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQSxNQUFNbVQsSUFBSSxHQUFHblQsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNMm1CLGNBQWMsR0FBRzNzQixhQUFhLENBQUM0c0IsT0FBZCxHQUF3QjVzQixhQUFhLENBQUM0c0IsT0FBZCxDQUFzQkQsY0FBOUMsR0FBK0Qzc0IsYUFBYSxDQUFDd1osR0FBZCxHQUFvQnhaLGFBQWEsQ0FBQ3daLEdBQWQsQ0FBa0JxVCxpQkFBbEIsRUFBcEIsR0FBNEQsUUFBbEo7QUFFZSxtRUFBSSxNQUFNdG5CLFNBQU4sQ0FBZ0I7QUFDL0JNLGFBQVcsR0FBRztBQUNWLFNBQUtxQyxJQUFMLEdBQVk7QUFBQ2xGLGNBQVEsRUFBRTtBQUFDOHBCLGNBQU0sRUFBRSxFQUFUO0FBQWFDLGNBQU0sRUFBRSxFQUFyQjtBQUF5QkMsV0FBRyxFQUFFO0FBQTlCO0FBQVgsS0FBWjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFDSDs7QUFFRDVMLFlBQVUsR0FBRztBQUNULFFBQUk7QUFDQSxVQUFJLENBQUNqSSxFQUFFLENBQUN5RSxVQUFILENBQWMsS0FBS3FQLE1BQW5CLENBQUwsRUFBaUM5VCxFQUFFLENBQUMrVCxhQUFILENBQWlCLEtBQUtELE1BQXRCLEVBQThCOU8sSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBS25XLElBQXBCLEVBQTBCLElBQTFCLEVBQWdDLENBQWhDLENBQTlCLEVBQWtFLFFBQWxFO0FBQ2pDLFlBQU1BLElBQUksR0FBR2tXLElBQUksQ0FBQ2dQLEtBQUwsQ0FBV2hVLEVBQUUsQ0FBQzBFLFlBQUgsQ0FBZ0IsS0FBS29QLE1BQXJCLEVBQTZCLFFBQTdCLENBQVgsQ0FBYjtBQUNBLFVBQUlobEIsSUFBSSxDQUFDbUgsY0FBTCxDQUFvQixVQUFwQixDQUFKLEVBQXFDLEtBQUtuSCxJQUFMLEdBQVlBLElBQVo7QUFDckMsVUFBSSxDQUFDa1IsRUFBRSxDQUFDeUUsVUFBSCxDQUFjLEtBQUt3UCxZQUFuQixDQUFMLEVBQXVDOztBQUN2QyxVQUFJcnFCLFFBQVEsR0FBR2tXLHVCQUF1QixDQUFDLEtBQUttVSxZQUFOLENBQXRDOztBQUNBalUsUUFBRSxDQUFDa1UsVUFBSCxDQUFjLEtBQUtELFlBQW5CO0FBQ0EsVUFBSXJxQixRQUFRLENBQUNxTSxjQUFULENBQXdCLFVBQXhCLENBQUosRUFBeUNyTSxRQUFRLEdBQUdnQixNQUFNLENBQUMwVSxNQUFQLENBQWM7QUFBQ29VLGNBQU0sRUFBRSxFQUFUO0FBQWFDLGNBQU0sRUFBRSxFQUFyQjtBQUF5QkMsV0FBRyxFQUFFO0FBQTlCLE9BQWQsRUFBaUQ7QUFBQyxTQUFDTCxjQUFELEdBQWtCM3BCO0FBQW5CLE9BQWpELENBQVgsQ0FBekMsS0FDS0EsUUFBUSxHQUFHZ0IsTUFBTSxDQUFDMFUsTUFBUCxDQUFjO0FBQUNvVSxjQUFNLEVBQUUsRUFBVDtBQUFhQyxjQUFNLEVBQUUsRUFBckI7QUFBeUJDLFdBQUcsRUFBRTtBQUE5QixPQUFkLEVBQWlEaHFCLFFBQWpELENBQVg7QUFDTCxXQUFLb1AsU0FBTCxDQUFlLFVBQWYsRUFBMkJwUCxRQUEzQjtBQUNILEtBVkQsQ0FXQSxPQUFPc1ksR0FBUCxFQUFZO0FBQ1JyTyxhQUFPLENBQUNzSCxLQUFSLENBQWMrRyxHQUFkO0FBQ0F4VyxvREFBSyxDQUFDMkssS0FBTixDQUFZLGlCQUFaLEVBQStCLDZHQUEvQjtBQUNIO0FBQ0o7O0FBRUQsTUFBSTRhLGFBQUosR0FBb0I7QUFDaEIsV0FBTyxLQUFLa0QsY0FBTCxHQUFzQixJQUE3QjtBQUNBLFFBQUksS0FBS0EsY0FBVCxFQUF5QixPQUFPLEtBQUtBLGNBQVo7O0FBQ3pCLFVBQU0vRyxRQUFRLEdBQUd4Z0IsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CcEYsTUFBcEIsQ0FBMkI0WSxHQUE1Qzs7QUFDQSxVQUFNZ1UsSUFBSSxHQUFHaEgsUUFBUSxDQUFDL00sVUFBVCxFQUFiO0FBQ0EsVUFBTWdVLFdBQVcsR0FBR2pILFFBQVEsQ0FBQ2tILE9BQVQsQ0FBaUIsVUFBakIsQ0FBcEI7QUFDQSxVQUFNQyxlQUFlLEdBQUd4VSxJQUFJLENBQUNJLE9BQUwsQ0FBYWtVLFdBQWIsRUFBMEJqSCxRQUFRLENBQUN0bUIsVUFBVCxFQUExQixFQUFpRCxTQUFqRCxFQUE0RCxzQkFBNUQsRUFBb0YsVUFBcEYsQ0FBeEI7QUFDQSxVQUFNZ0wsUUFBUSxHQUFHaU8sSUFBSSxDQUFDSSxPQUFMLENBQWFpVSxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLEtBQXpCLENBQWpCO0FBQ0EsVUFBTUksWUFBWSxHQUFHeFUsRUFBRSxDQUFDeUUsVUFBSCxDQUFjM1MsUUFBZCxJQUEwQkEsUUFBMUIsR0FBcUNrTyxFQUFFLENBQUN5RSxVQUFILENBQWM4UCxlQUFkLElBQWlDQSxlQUFqQyxHQUFtRCxJQUE3RztBQUNBLFFBQUksQ0FBQ0MsWUFBTCxFQUFtQixPQUFPLEtBQUtMLGNBQUwsR0FBc0IsSUFBN0I7QUFDbkIsV0FBTyxLQUFLQSxjQUFMLEdBQXNCSyxZQUE3QjtBQUNIOztBQUVELE1BQUlDLFVBQUosR0FBaUI7QUFBQyxXQUFPLEtBQUtDLFdBQUwsS0FBcUIsS0FBS0EsV0FBTCxHQUFtQjNVLElBQUksQ0FBQ0ksT0FBTCxDQUFhLEtBQUs4USxhQUFsQixFQUFpQyxlQUFqQyxFQUFrRCxhQUFsRCxDQUF4QyxDQUFQO0FBQWtIOztBQUNwSSxNQUFJNkMsTUFBSixHQUFhO0FBQUMsV0FBTyxLQUFLYSxPQUFMLEtBQWlCLEtBQUtBLE9BQUwsR0FBZTVVLElBQUksQ0FBQ0ksT0FBTCxDQUFheFYsa0RBQVEsQ0FBQ3VXLFFBQXRCLEVBQWdDLGdCQUFoQyxDQUFoQyxDQUFQO0FBQTJGOztBQUN6RyxNQUFJK1MsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS1csYUFBTCxLQUF1QixLQUFLQSxhQUFMLEdBQXFCN1UsSUFBSSxDQUFDSSxPQUFMLENBQWF4VixrREFBUSxDQUFDdVcsUUFBdEIsRUFBZ0MsaUJBQWhDLENBQTVDLENBQVA7QUFBd0c7O0FBQzVIMlQsZUFBYSxDQUFDcGQsVUFBRCxFQUFhO0FBQUMsV0FBT3NJLElBQUksQ0FBQ0ksT0FBTCxDQUFhL1QsdURBQWMsQ0FBQzJVLGFBQTVCLEVBQTJDdEosVUFBVSxHQUFHLGNBQXhELENBQVA7QUFBZ0Y7O0FBRTNHNFMsaUJBQWUsQ0FBQy9lLEdBQUQsRUFBTTtBQUNqQixXQUFPLEtBQUt3RCxJQUFMLENBQVVsRixRQUFWLENBQW1CMnBCLGNBQW5CLEVBQW1Dam9CLEdBQW5DLEtBQTJDLElBQWxEO0FBQ0g7O0FBRUR3cEIsaUJBQWUsQ0FBQ3hwQixHQUFELEVBQU13RCxJQUFOLEVBQVk7QUFDdkIsU0FBS0EsSUFBTCxDQUFVbEYsUUFBVixDQUFtQjJwQixjQUFuQixFQUFtQ2pvQixHQUFuQyxJQUEwQ3dELElBQTFDO0FBQ0FrUixNQUFFLENBQUMrVCxhQUFILENBQWlCLEtBQUtELE1BQXRCLEVBQThCOU8sSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBS25XLElBQXBCLEVBQTBCLElBQTFCLEVBQWdDLENBQWhDLENBQTlCLEVBQWtFLFFBQWxFO0FBQ0g7O0FBRURpSyxXQUFTLENBQUN6TixHQUFELEVBQU07QUFDWCxXQUFPLEtBQUt3RCxJQUFMLENBQVV4RCxHQUFWLEtBQWtCLEVBQXpCO0FBQ0g7O0FBRUQwTixXQUFTLENBQUMxTixHQUFELEVBQU1DLEtBQU4sRUFBYTtBQUNsQixTQUFLdUQsSUFBTCxDQUFVeEQsR0FBVixJQUFpQkMsS0FBakI7QUFDQXlVLE1BQUUsQ0FBQytULGFBQUgsQ0FBaUIsS0FBS0QsTUFBdEIsRUFBOEI5TyxJQUFJLENBQUNDLFNBQUwsQ0FBZSxLQUFLblcsSUFBcEIsRUFBMEIsSUFBMUIsRUFBZ0MsQ0FBaEMsQ0FBOUIsRUFBa0UsUUFBbEU7QUFDSDs7QUFFRDRJLGVBQWEsQ0FBQ0QsVUFBRCxFQUFhbk0sR0FBYixFQUFrQjtBQUMzQixRQUFJLEtBQUt1b0IsVUFBTCxDQUFnQnBjLFVBQWhCLE1BQWdDN0osU0FBcEMsRUFBK0MsT0FBTyxLQUFLaW1CLFVBQUwsQ0FBZ0JwYyxVQUFoQixFQUE0Qm5NLEdBQTVCLENBQVA7QUFDL0MsUUFBSSxDQUFDMFUsRUFBRSxDQUFDeUUsVUFBSCxDQUFjLEtBQUtvUSxhQUFMLENBQW1CcGQsVUFBbkIsQ0FBZCxDQUFMLEVBQW9ELE9BQU83SixTQUFQO0FBQ3BELFNBQUtpbUIsVUFBTCxDQUFnQnBjLFVBQWhCLElBQThCdU4sSUFBSSxDQUFDZ1AsS0FBTCxDQUFXaFUsRUFBRSxDQUFDMEUsWUFBSCxDQUFnQixLQUFLbVEsYUFBTCxDQUFtQnBkLFVBQW5CLENBQWhCLENBQVgsQ0FBOUI7QUFDQSxXQUFPLEtBQUtvYyxVQUFMLENBQWdCcGMsVUFBaEIsRUFBNEJuTSxHQUE1QixDQUFQO0FBQ0g7O0FBRUR1TSxlQUFhLENBQUNKLFVBQUQsRUFBYW5NLEdBQWIsRUFBa0JDLEtBQWxCLEVBQXlCO0FBQ2xDLFFBQUlBLEtBQUssS0FBS3FDLFNBQWQsRUFBeUI7QUFDekIsUUFBSSxLQUFLaW1CLFVBQUwsQ0FBZ0JwYyxVQUFoQixNQUFnQzdKLFNBQXBDLEVBQStDLEtBQUtpbUIsVUFBTCxDQUFnQnBjLFVBQWhCLElBQThCLEVBQTlCO0FBQy9DLFNBQUtvYyxVQUFMLENBQWdCcGMsVUFBaEIsRUFBNEJuTSxHQUE1QixJQUFtQ0MsS0FBbkM7QUFDQXlVLE1BQUUsQ0FBQytULGFBQUgsQ0FBaUIsS0FBS2MsYUFBTCxDQUFtQnBkLFVBQW5CLENBQWpCLEVBQWlEdU4sSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBSzRPLFVBQUwsQ0FBZ0JwYyxVQUFoQixDQUFmLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQWpELEVBQXVHLFFBQXZHO0FBQ0g7O0FBRURPLGtCQUFnQixDQUFDUCxVQUFELEVBQWFuTSxHQUFiLEVBQWtCO0FBQzlCLFFBQUksS0FBS3VvQixVQUFMLENBQWdCcGMsVUFBaEIsTUFBZ0M3SixTQUFwQyxFQUErQyxLQUFLaW1CLFVBQUwsQ0FBZ0JwYyxVQUFoQixJQUE4QixFQUE5QjtBQUMvQyxXQUFPLEtBQUtvYyxVQUFMLENBQWdCcGMsVUFBaEIsRUFBNEJuTSxHQUE1QixDQUFQO0FBQ0EwVSxNQUFFLENBQUMrVCxhQUFILENBQWlCLEtBQUtjLGFBQUwsQ0FBbUJwZCxVQUFuQixDQUFqQixFQUFpRHVOLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUs0TyxVQUFMLENBQWdCcGMsVUFBaEIsQ0FBZixFQUE0QyxJQUE1QyxFQUFrRCxDQUFsRCxDQUFqRCxFQUF1RyxRQUF2RztBQUNIOztBQTlFOEIsQ0FBcEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNWQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1zZCxPQUFOLENBQWM7QUFDN0J0b0IsYUFBVyxHQUFHO0FBQ1YsU0FBS3VvQixhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJsbkIsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDQSxTQUFLbW5CLG9CQUFMLEdBQTRCLEtBQUtBLG9CQUFMLENBQTBCbm5CLElBQTFCLENBQStCLElBQS9CLENBQTVCO0FBQ0g7O0FBRUR3RixPQUFLLEdBQUc7QUFDSixTQUFLNGhCLGtCQUFMO0FBQ0EsUUFBSTlxQix3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUMsS0FBSytxQixpQkFBTDtBQUNwQzs7QUFFRDVaLE1BQUksR0FBRztBQUNILFNBQUs2WixpQkFBTDtBQUNBLFNBQUtDLGdCQUFMO0FBQ0g7O0FBRURILG9CQUFrQixHQUFHO0FBQ2pCLFNBQUtFLGlCQUFMO0FBQ0F0b0IsWUFBUSxDQUFDc2IsZ0JBQVQsQ0FBMEIsU0FBMUIsRUFBcUMsS0FBSzRNLGFBQTFDO0FBQ0g7O0FBRURJLG1CQUFpQixHQUFHO0FBQ2hCdG9CLFlBQVEsQ0FBQ3dvQixtQkFBVCxDQUE2QixTQUE3QixFQUF3QyxLQUFLTixhQUE3QztBQUNIOztBQUVERyxtQkFBaUIsR0FBRztBQUNoQixTQUFLRSxnQkFBTDtBQUNBdm9CLFlBQVEsQ0FBQ3NiLGdCQUFULENBQTBCLGFBQTFCLEVBQXlDLEtBQUs2TSxvQkFBOUM7QUFDSDs7QUFFREksa0JBQWdCLEdBQUc7QUFDZnZvQixZQUFRLENBQUN3b0IsbUJBQVQsQ0FBNkIsYUFBN0IsRUFBNEMsS0FBS0wsb0JBQWpEO0FBQ0g7O0FBRURELGVBQWEsQ0FBQy9rQixDQUFELEVBQUk7QUFDYixRQUFJQSxDQUFDLENBQUNzbEIsS0FBRixLQUFZLEdBQVosSUFBbUJ0bEIsQ0FBQyxDQUFDc2xCLEtBQUYsSUFBVyxHQUFsQyxFQUF1QztBQUFDO0FBQ3BDMWhCLGFBQU8sQ0FBQ0MsR0FBUixDQUFZLGdDQUFaLEVBQThDLGFBQTlDLEVBQTZELGtDQUE3RCxFQUFpRyxZQUFqRyxFQUErRyxFQUEvRztBQUNBLGVBRm1DLENBRXpCOztBQUNWN0QsT0FBQyxDQUFDdkgsY0FBRjtBQUNBdUgsT0FBQyxDQUFDdWxCLHdCQUFGO0FBQ0Y7QUFDTDs7QUFFRFAsc0JBQW9CLENBQUNobEIsQ0FBRCxFQUFJO0FBQ3BCLFFBQUc7QUFDQ0EsT0FBQyxDQUFDdEgsZUFBRjtBQUNBLFlBQU04c0IsUUFBUSxHQUFHLEtBQUtDLFdBQUwsQ0FBaUJ6bEIsQ0FBQyxDQUFDcWMsTUFBbkIsQ0FBakI7QUFFQSxVQUFJLENBQ0F0QixjQURBLEVBRUEySyxVQUZBLElBR0EsQ0FDQTNsQixTQUFTLENBQUN2RSxHQUFWLENBQWV3RSxDQUFELElBQU9BLENBQUMsQ0FBQ2liLEtBQUYsSUFBVyxPQUFPamIsQ0FBQyxDQUFDaWIsS0FBVCxLQUFtQixRQUE5QixJQUEwQ2piLENBQUMsQ0FBQzJsQixxQkFBakUsRUFBd0YsQ0FBeEYsRUFBMkYxSyxLQUQzRixFQUVBbGIsU0FBUyxDQUFDdkUsR0FBVixDQUFld0UsQ0FBRCxJQUFPQSxDQUFDLENBQUM0bEIsV0FBdkIsRUFBb0MsQ0FBcEMsQ0FGQSxDQUhKOztBQVFBLGVBQVNDLE1BQVQsR0FBa0I7QUFDZCxZQUFJQyxFQUFFLEdBQUd4Z0IsaURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsTUFBSUwsVUFBVSxDQUFDRSxXQUFYLENBQXVCalosS0FBdkIsQ0FBNkIsR0FBN0IsRUFBa0MsQ0FBbEMsQ0FBZCxDQUFUOztBQUNBLFlBQUksQ0FBQ21aLEVBQUwsRUFBUztBQUNMLGdCQUFNRSxTQUFTLEdBQUcxZ0IsaURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsWUFBVixDQUFsQjtBQUNBLGdCQUFNRSxNQUFNLEdBQUczZ0IsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBbUIsZUFBYytoQixjQUFlLElBQWhELENBQWY7QUFDQStLLFlBQUUsR0FBR3hnQixpREFBRyxDQUFDdE0sYUFBSixDQUFtQixlQUFjMHNCLFVBQVUsQ0FBQ0UsV0FBWSwwQkFBeEQsQ0FBTDtBQUNBSyxnQkFBTSxDQUFDQyxNQUFQLENBQWNKLEVBQWQ7QUFDQUUsbUJBQVMsQ0FBQ0UsTUFBVixDQUFpQkQsTUFBakI7QUFDQUEsZ0JBQU0sQ0FBQzdXLEtBQVAsQ0FBYStXLEdBQWIsR0FBbUJubUIsQ0FBQyxDQUFDb21CLE9BQUYsR0FBWSxJQUEvQjtBQUNBSCxnQkFBTSxDQUFDN1csS0FBUCxDQUFhaVgsSUFBYixHQUFvQnJtQixDQUFDLENBQUNzbUIsT0FBRixHQUFZLElBQWhDO0FBQ0FMLGdCQUFNLENBQUM3VyxLQUFQLENBQWFtWCxNQUFiLEdBQXNCLE1BQXRCOztBQUNBLGdCQUFNQyxRQUFRLEdBQUcsVUFBU3htQixDQUFULEVBQVk7QUFDekIsZ0JBQUlBLENBQUMsQ0FBQ3ltQixPQUFGLElBQWF6bUIsQ0FBQyxDQUFDeW1CLE9BQUYsS0FBYyxFQUEvQixFQUFtQztBQUNuQ1Isa0JBQU0sQ0FBQy9YLE1BQVA7QUFDQXJSLG9CQUFRLENBQUN3b0IsbUJBQVQsQ0FBNkIsT0FBN0IsRUFBc0NtQixRQUF0QztBQUNBM3BCLG9CQUFRLENBQUN3b0IsbUJBQVQsQ0FBNkIsYUFBN0IsRUFBNENtQixRQUE1QztBQUNBM3BCLG9CQUFRLENBQUN3b0IsbUJBQVQsQ0FBNkIsT0FBN0IsRUFBc0NtQixRQUF0QztBQUNILFdBTkQ7O0FBT0EzcEIsa0JBQVEsQ0FBQ3NiLGdCQUFULENBQTBCLE9BQTFCLEVBQW1DcU8sUUFBbkM7QUFDQTNwQixrQkFBUSxDQUFDc2IsZ0JBQVQsQ0FBMEIsYUFBMUIsRUFBeUNxTyxRQUF6QztBQUNBM3BCLGtCQUFRLENBQUNzYixnQkFBVCxDQUEwQixPQUExQixFQUFtQ3FPLFFBQW5DO0FBQ0g7O0FBQ0QsY0FBTVAsTUFBTSxHQUFHM2dCLGlEQUFHLENBQUN5Z0IsS0FBSixDQUFVLE1BQUloTCxjQUFjLENBQUNwTyxLQUFmLENBQXFCLEdBQXJCLEVBQTBCLENBQTFCLENBQWQsQ0FBZjtBQUVBLGNBQU0rWixHQUFHLEdBQUdwaEIsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBbUIsZUFBYzBzQixVQUFVLENBQUNpQixTQUFVLElBQXRELENBQVo7QUFDQSxjQUFNQyxHQUFHLEdBQUd0aEIsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBbUIsZUFBYzBzQixVQUFVLENBQUNtQixJQUFLLElBQUduQixVQUFVLENBQUNvQixTQUFVLElBQXpFLENBQVo7QUFDQUYsV0FBRyxDQUFDVixNQUFKLENBQVc1Z0IsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBbUIsZUFBYzBzQixVQUFVLENBQUNxQixLQUFNLHVCQUFsRCxDQUFYO0FBQ0FILFdBQUcsQ0FBQ3pPLGdCQUFKLENBQXFCLE9BQXJCLEVBQThCLE1BQU07QUFDaEN2ZixxREFBSSxDQUFDb3VCLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCekIsUUFBdkI7QUFDQU0sWUFBRSxDQUFDMVcsS0FBSCxDQUFTc1EsT0FBVCxHQUFtQixNQUFuQjtBQUNILFNBSEQ7QUFJQWdILFdBQUcsQ0FBQ1IsTUFBSixDQUFXVSxHQUFYO0FBQ0FkLFVBQUUsQ0FBQ0ksTUFBSCxDQUFVUSxHQUFWOztBQUNBLFlBQUdULE1BQU0sQ0FBQ2xoQixZQUFQLEdBQXNCa2hCLE1BQU0sQ0FBQ2lCLFlBQWhDLEVBQTZDO0FBQ3pDdGpCLGlCQUFPLENBQUNDLEdBQVIsQ0FBWSxpQkFBZW9pQixNQUFNLENBQUM3VyxLQUFQLENBQWErVyxHQUF4QztBQUNBRixnQkFBTSxDQUFDN1csS0FBUCxDQUFhK1csR0FBYixHQUFvQkYsTUFBTSxDQUFDN1csS0FBUCxDQUFhK1csR0FBYixHQUFtQk8sR0FBRyxDQUFDM2hCLFlBQXhCLEdBQXdDLElBQTNEO0FBQ0FuQixpQkFBTyxDQUFDQyxHQUFSLENBQVksZ0JBQWNvaUIsTUFBTSxDQUFDN1csS0FBUCxDQUFhK1csR0FBdkM7QUFDSDtBQUNKOztBQUVEcFUsZ0JBQVUsQ0FBQzhULE1BQUQsRUFBUyxDQUFULENBQVY7QUFDSCxLQXJERCxDQXFEQyxPQUFNN2xCLENBQU4sRUFBUTtBQUNMNEQsYUFBTyxDQUFDc0gsS0FBUixDQUFjbEwsQ0FBZDtBQUNIO0FBQ0o7O0FBRUR5bEIsYUFBVyxDQUFDalksT0FBRCxFQUFVO0FBQ2pCLFFBQUlBLE9BQU8sQ0FBQzVULEVBQVosRUFBZ0IsT0FBUSxJQUFHNFQsT0FBTyxDQUFDNVQsRUFBRyxFQUF0QjtBQUNoQjs7Ozs7QUFJQSxhQUFTZ3BCLFFBQVQsQ0FBa0J1RSxFQUFsQixFQUFxQjtBQUNqQixVQUFJQyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxhQUFPRCxFQUFFLENBQUNFLFVBQVYsRUFBcUI7QUFDbkIsWUFBSUYsRUFBRSxDQUFDdnRCLEVBQVAsRUFBVTtBQUNSd3RCLGVBQUssQ0FBQ0UsT0FBTixDQUFjLE1BQUlILEVBQUUsQ0FBQ3Z0QixFQUFyQjtBQUNBO0FBQ0QsU0FIRCxNQUdLO0FBQ0gsY0FBSXV0QixFQUFFLElBQUVBLEVBQUUsQ0FBQ0ksYUFBSCxDQUFpQjVpQixlQUF6QixFQUEwQ3lpQixLQUFLLENBQUNFLE9BQU4sQ0FBY0gsRUFBRSxDQUFDSyxPQUFILENBQVducEIsV0FBWCxLQUF5QmtPLEtBQUssQ0FBQ2tiLElBQU4sQ0FBV04sRUFBRSxDQUFDcmEsU0FBSCxDQUFhNGEsT0FBYixFQUFYLEVBQW1DdmxCLEdBQW5DLENBQXVDbkMsQ0FBQyxJQUFJLE1BQUlBLENBQWhELEVBQW1EcU4sSUFBbkQsQ0FBd0QsRUFBeEQsQ0FBdkMsRUFBMUMsS0FDSTtBQUNGLGlCQUFLLElBQUlLLENBQUMsR0FBQyxDQUFOLEVBQVExTixDQUFDLEdBQUNtbkIsRUFBZixFQUFrQm5uQixDQUFDLENBQUMybkIsc0JBQXBCLEVBQTJDM25CLENBQUMsR0FBQ0EsQ0FBQyxDQUFDMm5CLHNCQUFKLEVBQTJCamEsQ0FBQyxFQUF2RSxDQUEwRTs7QUFDMUUwWixpQkFBSyxDQUFDRSxPQUFOLENBQWNILEVBQUUsQ0FBQ0ssT0FBSCxDQUFXbnBCLFdBQVgsS0FBeUIsQ0FBQzhvQixFQUFFLENBQUNqdUIsU0FBSCxJQUFnQixFQUFqQixFQUFxQnlULEtBQXJCLENBQTJCLEdBQTNCLEVBQWdDeEssR0FBaEMsQ0FBb0NuQyxDQUFDLElBQUksTUFBSUEsQ0FBN0MsRUFBZ0RxTixJQUFoRCxDQUFxRCxFQUFyRCxDQUF6QixHQUFrRixhQUFsRixHQUFnR0ssQ0FBaEcsR0FBa0csR0FBaEg7QUFDRDtBQUNEeVosWUFBRSxHQUFDQSxFQUFFLENBQUNFLFVBQU47QUFDRDtBQUNGOztBQUNELGFBQU9ELEtBQUssQ0FBQy9aLElBQU4sQ0FBVyxLQUFYLENBQVA7QUFDSDs7QUFDRCxXQUFPdVYsUUFBUSxDQUFDcFYsT0FBRCxDQUFmO0FBQ0E7Ozs7OztBQU1IOztBQUVEb2EsVUFBUSxDQUFDcGEsT0FBRCxFQUFVbkksR0FBRyxHQUFHbUksT0FBTyxDQUFDK1osYUFBUixDQUFzQk0sV0FBdEMsRUFBbUQ7QUFDdkQ7QUFDQSxVQUFNQyxNQUFNLEdBQUcsQ0FBQyxHQUFHemlCLEdBQUosRUFBU29CLE1BQVQsQ0FBZ0J3RyxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDbVAsSUFBSCxJQUFXLENBQUNuUCxDQUFDLENBQUNtUCxJQUFGLENBQU85ZCxRQUFQLENBQWdCLGtCQUFoQixDQUFqQyxDQUFmO0FBQ0EsVUFBTXlwQixLQUFLLEdBQUdELE1BQU0sQ0FBQzNsQixHQUFQLENBQVc4SyxDQUFDLElBQUksQ0FBQyxJQUFJQSxDQUFDLENBQUMrYSxRQUFGLElBQWMsRUFBbEIsQ0FBRCxDQUFoQixFQUF5Q2hSLElBQXpDLEVBQWQ7QUFDQSxVQUFNaVIsWUFBWSxHQUFHRixLQUFLLENBQUN0aEIsTUFBTixDQUFhcUwsQ0FBQyxJQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ29XLFlBQVAsSUFBdUIxYSxPQUFPLENBQUMyYSxPQUFSLENBQWdCclcsQ0FBQyxDQUFDb1csWUFBbEIsQ0FBdkIsSUFBMERwVyxDQUFDLENBQUMxQyxLQUFGLENBQVFuUSxNQUFsRSxJQUE0RTZTLENBQUMsQ0FBQ29XLFlBQUYsQ0FBZXZiLEtBQWYsQ0FBcUIsSUFBckIsRUFBMkIxTixNQUEzQixHQUFvQyxDQUFoSCxJQUFxSCxDQUFDNlMsQ0FBQyxDQUFDb1csWUFBRixDQUFldmIsS0FBZixDQUFxQixJQUFyQixFQUEyQnJPLFFBQTNCLENBQW9DLEdBQXBDLENBQXhJLENBQXJCO0FBQ0EsV0FBTzJwQixZQUFQO0FBQ0g7O0FBNUk0QixDQUFsQixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ0pBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRU8sU0FBUzNJLE1BQVQsR0FBa0I7QUFBRTtBQUN2QixTQUFPLHVDQUF1Q3BnQixPQUF2QyxDQUErQyxPQUEvQyxFQUF3RCxVQUFTd08sQ0FBVCxFQUFZO0FBQ3ZFLFFBQUlvRSxDQUFDLEdBQUdyTixJQUFJLENBQUMyakIsTUFBTCxLQUFnQixFQUFoQixHQUFxQixDQUE3QjtBQUFBLFFBQWdDQyxDQUFDLEdBQUczYSxDQUFDLElBQUksR0FBTCxHQUFXb0UsQ0FBWCxHQUFnQkEsQ0FBQyxHQUFHLEdBQUosR0FBVSxHQUE5RDtBQUNBLFdBQU91VyxDQUFDLENBQUN4TSxRQUFGLENBQVcsRUFBWCxDQUFQO0FBQ0gsR0FITSxDQUFQO0FBSUg7QUFFRCxNQUFNeU0sc0JBQXNCLEdBQUcsRUFBL0I7QUFDQSxJQUFJQyxhQUFhLEdBQUcsRUFBcEI7QUFFZSxtRUFBSSxNQUFNQyxhQUFOLENBQW9CO0FBQ25DaHNCLGFBQVcsR0FBRTtBQUNULFNBQUtpc0IsTUFBTCxHQUFjO0FBQ1ZySSxZQUFNLEVBQUU7QUFERSxLQUFkO0FBS0g7O0FBRUQsTUFBSXJLLEtBQUosR0FBVztBQUNQLFdBQU8sS0FBSzBTLE1BQVo7QUFDSDs7QUFFRCxNQUFJMVMsS0FBSixDQUFVbFgsSUFBVixFQUFlO0FBQ1gsUUFBRyxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCLE9BQU8sS0FBSzRwQixNQUFaLEtBQXVCLFFBQXRELEVBQStELE9BQU8sS0FBS0EsTUFBTCxHQUFjNXBCLElBQXJCO0FBQy9ELFdBQU8sS0FBSzRwQixNQUFMLEdBQWM5dEIsTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEtBQUtvWixNQUFuQixFQUEyQjVwQixJQUEzQixDQUFyQjtBQUNIOztBQUVELFFBQU02cEIsTUFBTixHQUFjO0FBQ1Zyc0IsU0FBSyxDQUFDcUYsU0FBTixDQUFnQixzREFBaEIsRUFBd0U7QUFBQ2hJLFVBQUksRUFBRTtBQUFQLEtBQXhFO0FBQ0EsV0FBT2l2QixhQUFhLENBQUNDLE1BQU0sQ0FBQ0YsTUFBUixFQUFnQixRQUFoQixDQUFiLENBQ052SSxJQURNLENBQ0QsTUFBTTRCLEdBQU4sSUFBYTtBQUNmLFVBQUdBLEdBQUcsQ0FBQzhHLE1BQUosS0FBZSxHQUFsQixFQUFzQjtBQUNsQnhzQixhQUFLLENBQUNxRixTQUFOLENBQWdCLDRFQUFoQixFQUE4RjtBQUFDaEksY0FBSSxFQUFFO0FBQVAsU0FBOUY7QUFDQSxjQUFNLElBQUl3SyxLQUFKLENBQVcscUNBQXFDNmQsR0FBRyxDQUFDOEcsTUFBSixHQUFXLEdBQVgsR0FBZTlHLEdBQUcsQ0FBQytHLFVBQW5CLEdBQThCLEdBQTlCLElBQWtDLE1BQU0vRyxHQUFHLENBQUMxZixJQUFKLEVBQXhDLENBQW9ELEVBQXBHLENBQU47QUFDSDs7QUFDRHVCLGFBQU8sQ0FBQy9KLElBQVIsQ0FBYyxtQ0FBZDtBQUNBd0MsV0FBSyxDQUFDcUYsU0FBTixDQUFnQixrQ0FBaEIsRUFBb0Q7QUFBQ2hJLFlBQUksRUFBRTtBQUFQLE9BQXBEO0FBQ0FoRCxZQUFNLENBQUNrSixTQUFQLENBQWlCbXBCLEdBQWpCLENBQXFCQyxhQUFyQixHQUFxQyxJQUFyQztBQUNBLGFBQU9qSCxHQUFHLENBQUNrSCxJQUFKLEVBQVA7QUFDSCxLQVZNLEVBVUpDLEtBVkksQ0FVR2pYLEdBQUQsSUFBUztBQUNkNVYsV0FBSyxDQUFDcUYsU0FBTixDQUFnQiw0RUFBaEIsRUFBOEY7QUFBQ2hJLFlBQUksRUFBRTtBQUFQLE9BQTlGO0FBQ0EsWUFBTSxJQUFJd0ssS0FBSixDQUFXLHFDQUFvQytOLEdBQUcsQ0FBQzRELEtBQU0sRUFBekQsQ0FBTjtBQUNILEtBYk0sQ0FBUDtBQWNIO0FBRUQ7Ozs7Ozs7QUFLQSxRQUFNcUssU0FBTixDQUFnQk4sSUFBaEIsRUFBcUI7QUFDakIsUUFBRyxLQUFLN0osS0FBTCxDQUFXcUssTUFBWCxDQUFrQlIsSUFBbEIsQ0FBSCxFQUEyQixPQUFPLEtBQUs3SixLQUFMLENBQVdxSyxNQUFYLENBQWtCUixJQUFsQixDQUFQO0FBQzNCLFFBQUcwSSxzQkFBc0IsQ0FBQzFJLElBQUQsQ0FBekIsRUFBZ0MsT0FBTzBJLHNCQUFzQixDQUFDMUksSUFBRCxDQUE3QjtBQUVoQyxRQUFJMVAsT0FBSjtBQUNBLFVBQU1pWixVQUFVLEdBQUcsSUFBSXRYLE9BQUosQ0FBYWtRLEdBQUQsSUFBVTdSLE9BQU8sR0FBRzZSLEdBQWhDLENBQW5CO0FBQ0F1RywwQkFBc0IsQ0FBQzFJLElBQUQsQ0FBdEIsR0FBK0J1SixVQUEvQjtBQUVBLFVBQU0vSSxNQUFNLEdBQUcsRUFBZjs7QUFDQSxTQUFJLElBQUk1QixLQUFSLElBQWlCNEssU0FBUyxDQUFDaEosTUFBM0IsRUFBa0M7QUFDOUIsVUFBRzVCLEtBQUssQ0FBQzZLLFlBQU4sQ0FBbUIvcUIsUUFBbkIsQ0FBNEJzaEIsSUFBNUIsQ0FBSCxFQUFxQ1EsTUFBTSxDQUFDelYsSUFBUCxDQUFZNlQsS0FBWjtBQUN4Qzs7QUFDRCxVQUFNOEssYUFBYSxHQUFHLE1BQU0sSUFBSXpYLE9BQUosQ0FBYTNCLE9BQUQsSUFBYTtBQUNqRHFZLG1CQUFhLENBQUM1ZCxJQUFkLENBQW1CLENBQUNpVixJQUFELEVBQU8xUCxPQUFQLENBQW5CO0FBQ0E2QixnQkFBVSxDQUFDLE1BQU07QUFDYixZQUFJd1gsS0FBSyxHQUFHaEIsYUFBWjtBQUNBLFlBQUdnQixLQUFLLENBQUN0cUIsTUFBTixLQUFpQixDQUFwQixFQUFzQjtBQUN0QnNwQixxQkFBYSxHQUFHLEVBQWhCO0FBQ0FJLHFCQUFhLENBQUNDLE1BQU0sQ0FBQ3hJLE1BQVIsRUFBZ0IsTUFBaEIsRUFBd0JyTCxJQUFJLENBQUNDLFNBQUwsQ0FBZXVVLEtBQUssQ0FBQ3BuQixHQUFOLENBQVVuQyxDQUFDLElBQUlBLENBQUMsQ0FBQyxDQUFELENBQWhCLENBQWYsQ0FBeEIsQ0FBYixDQUNDbWdCLElBREQsQ0FDTSxNQUFNNEIsR0FBTixJQUFhO0FBQ2YsY0FBR0EsR0FBRyxDQUFDOEcsTUFBSixLQUFlLEdBQWxCLEVBQXNCO0FBQUM7QUFDbkJVLGlCQUFLLENBQUM3WixPQUFOLENBQWM3USxJQUFJLElBQUk7QUFDbEJBLGtCQUFJLENBQUMsQ0FBRCxDQUFKLENBQVEsRUFBUixFQURrQixDQUNQO0FBQ2QsYUFGRDtBQUdIOztBQUNELGdCQUFNMnFCLFlBQVksR0FBRyxNQUFNekgsR0FBRyxDQUFDa0gsSUFBSixFQUEzQjtBQUNBcmxCLGlCQUFPLENBQUNDLEdBQVIsQ0FBWTJsQixZQUFaOztBQUNBLGVBQUksSUFBSTVKLElBQVIsSUFBZ0I0SixZQUFoQixFQUE2QjtBQUN6QixnQkFBSUMsT0FBTyxHQUFHRixLQUFLLENBQUN0eEIsSUFBTixDQUFXd3hCLE9BQU8sSUFBSUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxLQUFlN0osSUFBSSxDQUFDOEosT0FBMUMsQ0FBZDtBQUNBRCxtQkFBTyxDQUFDLENBQUQsQ0FBUCxDQUFXN0osSUFBSSxDQUFDUSxNQUFoQjtBQUNIO0FBQ0osU0FiRCxFQWFHOEksS0FiSCxDQWFValgsR0FBRCxJQUFTO0FBQUM7QUFDZnJPLGlCQUFPLENBQUNzSCxLQUFSLENBQWMrRyxHQUFkO0FBQ0FzWCxlQUFLLENBQUM3WixPQUFOLENBQWM3USxJQUFJLElBQUk7QUFDbEJBLGdCQUFJLENBQUMsQ0FBRCxDQUFKLENBQVEsRUFBUixFQURrQixDQUNQO0FBQ2QsV0FGRDtBQUdILFNBbEJEO0FBbUJILE9BdkJTLEVBdUJQLENBdkJPLENBQVY7QUF3QkgsS0ExQjJCLENBQTVCOztBQTJCQSxTQUFJLElBQUkyZixLQUFSLElBQWlCOEssYUFBakIsRUFBK0I7QUFDM0IsVUFBRyxDQUFDRixTQUFTLENBQUNoSixNQUFWLENBQWlCbm9CLElBQWpCLENBQXNCK0gsQ0FBQyxJQUFJQSxDQUFDLENBQUNwRyxFQUFGLEtBQVM0a0IsS0FBcEMsQ0FBSixFQUErQyxTQURwQixDQUM2Qjs7QUFDeEQsVUFBRzRCLE1BQU0sQ0FBQ25vQixJQUFQLENBQVkrSCxDQUFDLElBQUlBLENBQUMsQ0FBQ3BHLEVBQUYsS0FBUzRrQixLQUExQixDQUFILEVBQW9DLFNBRlQsQ0FFa0I7O0FBQzdDNEIsWUFBTSxDQUFDelYsSUFBUCxDQUFZeWUsU0FBUyxDQUFDaEosTUFBVixDQUFpQm5vQixJQUFqQixDQUFzQitILENBQUMsSUFBSUEsQ0FBQyxDQUFDcEcsRUFBRixLQUFTNGtCLEtBQXBDLENBQVo7QUFDSDs7QUFDRCxTQUFLekksS0FBTCxHQUFhO0FBQ1RxSyxZQUFNLEVBQUV6bEIsTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEtBQUswRyxLQUFMLENBQVdxSyxNQUF6QixFQUFpQztBQUFDLFNBQUNSLElBQUQsR0FBUVE7QUFBVCxPQUFqQztBQURDLEtBQWI7QUFHQXJPLGNBQVUsQ0FBQyxNQUFNO0FBQ2IsYUFBTyxLQUFLZ0UsS0FBTCxDQUFXcUssTUFBWCxDQUFrQlIsSUFBbEIsQ0FBUDtBQUNILEtBRlMsRUFFUCxNQUZPLENBQVY7QUFJQTFQLFdBQU8sQ0FBQ2tRLE1BQUQsQ0FBUDtBQUNBLFdBQU9rSSxzQkFBc0IsQ0FBQzFJLElBQUQsQ0FBN0I7QUFDQSxXQUFPUSxNQUFQO0FBQ0g7O0FBL0ZrQyxDQUF4QixFQUFmOztBQWtHQSxNQUFNdUksYUFBYSxHQUFHLFVBQVNnQixLQUFULEVBQWdCdGhCLE1BQWhCLEVBQXdCeEosSUFBeEIsRUFBNkI7QUFDL0MsTUFBRyxDQUFDMUUsd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQWtDO0FBQzlCeUosV0FBTyxDQUFDbEksSUFBUixDQUFjLHdCQUF1Qml1QixLQUFNLGdCQUFldGhCLE1BQU8sV0FBakUsRUFBNkV4SixJQUE3RSxFQUFtRixzQkFBbkY7QUFDQSxXQUFPZ1QsT0FBTyxDQUFDK1gsTUFBUixDQUFlLElBQUlDLGNBQUosQ0FBbUIsMkNBQW5CLENBQWYsQ0FBUDtBQUNIOztBQUNEam1CLFNBQU8sQ0FBQ0MsR0FBUixDQUFhLHNCQUFxQjhsQixLQUFNLGdCQUFldGhCLE1BQU8sV0FBOUQsRUFBMEV4SixJQUExRTtBQUNBLFNBQU9pckIsaURBQVMsQ0FBRSxHQUFFVixTQUFTLENBQUNXLFVBQVcsVUFBU0osS0FBTSxFQUF4QyxFQUEyQztBQUN2RHRoQixVQUR1RDtBQUV2RDJoQixXQUFPLEVBQUU7QUFDTCxnQkFBVSxXQURMO0FBRUwsdUJBQWlCdHpCLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJtcEIsR0FBakIsQ0FBcUJDLGFBQXJCLElBQXNDO0FBRmxELEtBRjhDO0FBTXZELFFBQUlucUIsSUFBSSxHQUFHO0FBQ1AvQixVQUFJLEVBQUUrQjtBQURDLEtBQUgsR0FFSixFQUZKO0FBTnVELEdBQTNDLENBQWhCO0FBVUgsQ0FoQkQ7O0FBa0JBLE1BQU1nckIsY0FBTixTQUE2QjNsQixLQUE3QixDQUFtQztBQUMvQjFILGFBQVcsR0FBRTtBQUNULFVBQU0sR0FBR2UsU0FBVDtBQUNBLFNBQUtnRixJQUFMLEdBQVksZ0JBQVo7QUFFSDs7QUFMOEI7O0FBUTVCLE1BQU02bUIsU0FBUyxHQUFHO0FBQ3JCVyxZQUFVLEVBQUUsa0JBRFM7QUFFckIzSixRQUFNLEVBQUUsQ0FDSjtBQUNJN2QsUUFBSSxFQUFFLGdCQURWO0FBRUkzSSxNQUFFLEVBQUUsc0NBRlI7QUFHSXl2QixnQkFBWSxFQUFFLEVBSGxCO0FBSUk5SSxVQUFNLEVBQUUsQ0FDSixNQURJLENBSlo7QUFPSUUsYUFBUyxFQUFFd0osMERBQWtCQTtBQVBqQyxHQURJLEVBU0Q7QUFDQzFuQixRQUFJLEVBQUUsc0JBRFA7QUFFQzNJLE1BQUUsRUFBRSxzQ0FGTDtBQUdDeXZCLGdCQUFZLEVBQUUsRUFIZjtBQUlDOUksVUFBTSxFQUFFLEVBSlQ7QUFLQ0UsYUFBUyxFQUFFeUosdURBTFo7QUFNQzlOLFFBQUksRUFBRTtBQU5QLEdBVEM7QUFGYSxDQUFsQjtBQXNCQSxNQUFNd00sTUFBTSxHQUFHO0FBQ2xCeEksUUFBTSxFQUFHLGVBRFM7QUFFbEJzSSxRQUFNLEVBQUc7QUFGUyxDQUFmLEM7Ozs7Ozs7Ozs7OztBQ2pLUDtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBOzs7Ozs7Ozs7OztBQVdDOzs7O0FBS2MsTUFBTXZkLFFBQU4sQ0FBZTtBQUUxQixTQUFPM0YsUUFBUCxDQUFnQjVMLEVBQWhCLEVBQW9CO0FBQ2hCLFdBQU9BLEVBQUUsQ0FBQ3NGLE9BQUgsQ0FBVyxvQkFBWCxFQUFpQyxHQUFqQyxDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtILFNBQU9xRyxRQUFQLENBQWdCM0wsRUFBaEIsRUFBb0J5TCxHQUFwQixFQUF5QjtBQUN4QnhJLFlBQVEsQ0FBQ3N0QixJQUFULENBQWNqRSxNQUFkLENBQXFCL2EsUUFBUSxDQUFDblMsYUFBVCxDQUF3QixjQUFhWSxFQUFHLEtBQUl5TCxHQUFJLFVBQWhELENBQXJCO0FBQ0E7QUFFRDs7Ozs7O0FBSUEsU0FBT0ssV0FBUCxDQUFtQjlMLEVBQW5CLEVBQXVCO0FBQ3RCLFVBQU00VCxPQUFPLEdBQUczUSxRQUFRLENBQUN3ZSxjQUFULENBQXdCemhCLEVBQXhCLENBQWhCO0FBQ0EsUUFBSTRULE9BQUosRUFBYUEsT0FBTyxDQUFDVSxNQUFSO0FBQ2I7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPdEksU0FBUCxDQUFpQmhNLEVBQWpCLEVBQXFCd0UsR0FBckIsRUFBMEI7QUFDekIsV0FBTyxJQUFJeVQsT0FBSixDQUFZM0IsT0FBTyxJQUFJO0FBQzdCLFlBQU1rYSxNQUFNLEdBQUd2dEIsUUFBUSxDQUFDN0QsYUFBVCxDQUF1QixRQUF2QixDQUFmO0FBQ0FveEIsWUFBTSxDQUFDeHdCLEVBQVAsR0FBWUEsRUFBWjtBQUNBd3dCLFlBQU0sQ0FBQ0MsR0FBUCxHQUFhanNCLEdBQWI7QUFDQWdzQixZQUFNLENBQUMxd0IsSUFBUCxHQUFjLGlCQUFkO0FBQ0Ewd0IsWUFBTSxDQUFDRSxNQUFQLEdBQWdCcGEsT0FBaEI7QUFDQXJULGNBQVEsQ0FBQ3N0QixJQUFULENBQWNqRSxNQUFkLENBQXFCa0UsTUFBckI7QUFDQSxLQVBNLENBQVA7QUFRQTtBQUVEOzs7Ozs7QUFJQSxTQUFPdGtCLFlBQVAsQ0FBb0JsTSxFQUFwQixFQUF3QjtBQUNqQkEsTUFBRSxHQUFHLEtBQUs0TCxRQUFMLENBQWM1TCxFQUFkLENBQUw7QUFDTixVQUFNNFQsT0FBTyxHQUFHM1EsUUFBUSxDQUFDd2UsY0FBVCxDQUF3QnpoQixFQUF4QixDQUFoQjtBQUNBLFFBQUk0VCxPQUFKLEVBQWFBLE9BQU8sQ0FBQ1UsTUFBUjtBQUNWLEdBakR5QixDQW1EMUI7OztBQUNBLFNBQU9xYyxPQUFQLENBQWU7QUFBQ0MsVUFBTSxHQUFHQyxDQUFDLElBQUlBLENBQWY7QUFBa0JDLFVBQWxCO0FBQTBCQztBQUExQixHQUFmLEVBQW9EO0FBQ2hELFVBQU10bkIsS0FBSyxHQUFHOGUsV0FBVyxDQUFDNW5CLEdBQVosRUFBZDtBQUVBcXdCLHlCQUFxQixDQUFDLFNBQVNMLE9BQVQsQ0FBaUJNLElBQWpCLEVBQXVCO0FBQzNDO0FBQ0EsVUFBSUMsWUFBWSxHQUFHLENBQUNELElBQUksR0FBR3huQixLQUFSLElBQWlCc25CLFFBQXBDO0FBQ0EsVUFBSUcsWUFBWSxHQUFHLENBQW5CLEVBQXNCQSxZQUFZLEdBQUcsQ0FBZixDQUhxQixDQUszQzs7QUFDQSxZQUFNQyxRQUFRLEdBQUdQLE1BQU0sQ0FBQ00sWUFBRCxDQUF2QjtBQUVBSixZQUFNLENBQUNLLFFBQUQsQ0FBTixDQVIyQyxDQVF6Qjs7QUFFbEIsVUFBSUQsWUFBWSxHQUFHLENBQW5CLEVBQXNCO0FBQ3BCRiw2QkFBcUIsQ0FBQ0wsT0FBRCxDQUFyQjtBQUNEO0FBRUYsS0Fkb0IsQ0FBckI7QUFlRDtBQUVIOzs7Ozs7Ozs7OztBQVNBLFNBQU9TLENBQVAsQ0FBU3hGLFFBQVQsRUFBbUI7QUFDZixVQUFNaFksT0FBTyxHQUFHLEtBQUt5ZCxTQUFMLENBQWV6RixRQUFmLENBQWhCO0FBQ0EsVUFBTTBGLE1BQU0sR0FBRzFkLE9BQU8sWUFBWTJkLFFBQW5CLEdBQThCNWUsS0FBSyxDQUFDa2IsSUFBTixDQUFXamEsT0FBWCxFQUFvQjRkLElBQXBCLENBQXlCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsUUFBRixLQUFlLENBQTdDLENBQTlCLEdBQWdGOWQsT0FBTyxDQUFDOGQsUUFBUixLQUFxQixDQUFwSDtBQUNBLFFBQUlKLE1BQUosRUFBWSxPQUFPMWQsT0FBUDtBQUNaLFdBQU8sS0FBS3VZLEtBQUwsQ0FBV1AsUUFBWCxDQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7O0FBT0EsU0FBT08sS0FBUCxDQUFhUCxRQUFiLEVBQXVCK0YsV0FBdkIsRUFBb0M7QUFDaEMsUUFBSSxDQUFDQSxXQUFMLEVBQWtCQSxXQUFXLEdBQUcxdUIsUUFBZDtBQUNsQixXQUFPMHVCLFdBQVcsQ0FBQzVmLGFBQVosQ0FBMEI2WixRQUExQixDQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7O0FBT0EsU0FBT2dHLFFBQVAsQ0FBZ0JoRyxRQUFoQixFQUEwQitGLFdBQTFCLEVBQXVDO0FBQ25DLFFBQUksQ0FBQ0EsV0FBTCxFQUFrQkEsV0FBVyxHQUFHMXVCLFFBQWQ7QUFDbEIsV0FBTzB1QixXQUFXLENBQUM5YixnQkFBWixDQUE2QitWLFFBQTdCLENBQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7Ozs7O0FBV0EsU0FBT3lGLFNBQVAsQ0FBaUJRLElBQWpCLEVBQXVCQyxRQUFRLEdBQUcsS0FBbEMsRUFBeUM7QUFDckMsVUFBTUMsUUFBUSxHQUFHOXVCLFFBQVEsQ0FBQzdELGFBQVQsQ0FBdUIsVUFBdkIsQ0FBakI7QUFDQTJ5QixZQUFRLENBQUNuUyxTQUFULEdBQXFCaVMsSUFBckI7QUFDQSxVQUFNcmtCLElBQUksR0FBR3VrQixRQUFRLENBQUM1cEIsT0FBVCxDQUFpQjZwQixTQUFqQixDQUEyQixJQUEzQixDQUFiO0FBQ0EsUUFBSUYsUUFBSixFQUFjLE9BQU90a0IsSUFBUDtBQUNkLFdBQU9BLElBQUksQ0FBQzRZLFVBQUwsQ0FBZ0IvZ0IsTUFBaEIsR0FBeUIsQ0FBekIsR0FBNkJtSSxJQUFJLENBQUM0WSxVQUFsQyxHQUErQzVZLElBQUksQ0FBQzRZLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FBdEQ7QUFDSDtBQUVEOzs7QUFDQSxTQUFPaG5CLGFBQVAsQ0FBcUJ5eUIsSUFBckIsRUFBMkJDLFFBQVEsR0FBRyxLQUF0QyxFQUE2QztBQUFDLFdBQU8sS0FBS1QsU0FBTCxDQUFlUSxJQUFmLEVBQXFCQyxRQUFyQixDQUFQO0FBQXVDO0FBRXJGOzs7Ozs7QUFJQSxTQUFPRyxVQUFQLENBQWtCSixJQUFsQixFQUF3QjtBQUNwQixVQUFNSyxRQUFRLEdBQUdqdkIsUUFBUSxDQUFDa3ZCLGNBQVQsQ0FBd0IsRUFBeEIsQ0FBakI7QUFDQSxVQUFNQyxXQUFXLEdBQUdudkIsUUFBUSxDQUFDN0QsYUFBVCxDQUF1QixNQUF2QixDQUFwQjtBQUNBZ3pCLGVBQVcsQ0FBQzlGLE1BQVosQ0FBbUI0RixRQUFuQjtBQUNBQSxZQUFRLENBQUNHLFNBQVQsR0FBcUJSLElBQXJCO0FBQ0EsV0FBT08sV0FBVyxDQUFDeFMsU0FBbkI7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU8wUyxRQUFQLENBQWdCMWUsT0FBaEIsRUFBeUIsR0FBR0MsT0FBNUIsRUFBcUM7QUFDakNBLFdBQU8sR0FBR0EsT0FBTyxDQUFDdUosSUFBUixHQUFldlEsTUFBZixDQUFzQmlILENBQUMsSUFBSUEsQ0FBM0IsQ0FBVjs7QUFDQSxTQUFLLElBQUlBLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE9BQU8sQ0FBQ3hPLE1BQTVCLEVBQW9DeU8sQ0FBQyxFQUFyQyxFQUF5Q0QsT0FBTyxDQUFDQyxDQUFELENBQVAsR0FBYUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBV21PLFFBQVgsR0FBc0JsUCxLQUF0QixDQUE0QixHQUE1QixDQUFiOztBQUN6Q2MsV0FBTyxHQUFHQSxPQUFPLENBQUN1SixJQUFSLEdBQWV2USxNQUFmLENBQXNCaUgsQ0FBQyxJQUFJQSxDQUEzQixDQUFWO0FBQ0FGLFdBQU8sQ0FBQ1YsU0FBUixDQUFrQmUsR0FBbEIsQ0FBc0IsR0FBR0osT0FBekI7QUFDQSxXQUFPRCxPQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPMmUsV0FBUCxDQUFtQjNlLE9BQW5CLEVBQTRCLEdBQUdDLE9BQS9CLEVBQXdDO0FBQ3BDLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsT0FBTyxDQUFDeE8sTUFBNUIsRUFBb0N5TyxDQUFDLEVBQXJDLEVBQXlDRCxPQUFPLENBQUNDLENBQUQsQ0FBUCxHQUFhRCxPQUFPLENBQUNDLENBQUQsQ0FBUCxDQUFXbU8sUUFBWCxHQUFzQmxQLEtBQXRCLENBQTRCLEdBQTVCLENBQWI7O0FBQ3pDYyxXQUFPLEdBQUdBLE9BQU8sQ0FBQ3VKLElBQVIsR0FBZXZRLE1BQWYsQ0FBc0JpSCxDQUFDLElBQUlBLENBQTNCLENBQVY7QUFDQUYsV0FBTyxDQUFDVixTQUFSLENBQWtCb0IsTUFBbEIsQ0FBeUIsR0FBR1QsT0FBNUI7QUFDQSxXQUFPRCxPQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7Ozs7O0FBVUEsU0FBTzRlLFdBQVAsQ0FBbUI1ZSxPQUFuQixFQUE0QjZlLFNBQTVCLEVBQXVDQyxTQUF2QyxFQUFrRDtBQUM5Q0QsYUFBUyxHQUFHQSxTQUFTLENBQUN4USxRQUFWLEdBQXFCbFAsS0FBckIsQ0FBMkIsR0FBM0IsRUFBZ0NsRyxNQUFoQyxDQUF1Q2lILENBQUMsSUFBSUEsQ0FBNUMsQ0FBWjtBQUNBLFFBQUksT0FBTzRlLFNBQVAsS0FBc0IsV0FBMUIsRUFBdUNELFNBQVMsQ0FBQzNjLE9BQVYsQ0FBa0JoQyxDQUFDLElBQUlGLE9BQU8sQ0FBQ1YsU0FBUixDQUFrQnZELE1BQWxCLENBQXlCbUUsQ0FBekIsRUFBNEI0ZSxTQUE1QixDQUF2QixFQUF2QyxLQUNLRCxTQUFTLENBQUMzYyxPQUFWLENBQWtCaEMsQ0FBQyxJQUFJRixPQUFPLENBQUNWLFNBQVIsQ0FBa0J2RCxNQUFsQixDQUF5Qm1FLENBQXpCLENBQXZCO0FBQ0wsV0FBT0YsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTytlLFFBQVAsQ0FBZ0IvZSxPQUFoQixFQUF5QjZlLFNBQXpCLEVBQW9DO0FBQ2hDLFdBQU9BLFNBQVMsQ0FBQ3hRLFFBQVYsR0FBcUJsUCxLQUFyQixDQUEyQixHQUEzQixFQUFnQ2xHLE1BQWhDLENBQXVDaUgsQ0FBQyxJQUFJQSxDQUE1QyxFQUErQzhlLEtBQS9DLENBQXFEOWUsQ0FBQyxJQUFJRixPQUFPLENBQUNWLFNBQVIsQ0FBa0JxQixRQUFsQixDQUEyQlQsQ0FBM0IsQ0FBMUQsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7OztBQU9BLFNBQU8rZSxZQUFQLENBQW9CamYsT0FBcEIsRUFBNkJrZixPQUE3QixFQUFzQ0MsT0FBdEMsRUFBK0M7QUFDM0NuZixXQUFPLENBQUNWLFNBQVIsQ0FBa0I1TixPQUFsQixDQUEwQnd0QixPQUExQixFQUFtQ0MsT0FBbkM7QUFDQSxXQUFPbmYsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT29mLFFBQVAsQ0FBZ0JDLFFBQWhCLEVBQTBCQyxRQUExQixFQUFvQztBQUNoQyxRQUFJLE9BQU9BLFFBQVAsSUFBb0IsUUFBeEIsRUFBa0NBLFFBQVEsR0FBRyxLQUFLL0csS0FBTCxDQUFXK0csUUFBWCxDQUFYO0FBQ2xDLFFBQUksQ0FBQ0EsUUFBTCxFQUFlLE9BQU8sSUFBUDtBQUNmQSxZQUFRLENBQUM1RyxNQUFULENBQWdCMkcsUUFBaEI7QUFDQSxXQUFPQSxRQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPRSxTQUFQLENBQWlCRixRQUFqQixFQUEyQkMsUUFBM0IsRUFBcUM7QUFDakMsUUFBSSxPQUFPQSxRQUFQLElBQW9CLFFBQXhCLEVBQWtDQSxRQUFRLEdBQUcsS0FBSy9HLEtBQUwsQ0FBVytHLFFBQVgsQ0FBWDtBQUNsQyxRQUFJLENBQUNBLFFBQUwsRUFBZSxPQUFPLElBQVA7QUFDZkEsWUFBUSxDQUFDRSxPQUFULENBQWlCSCxRQUFqQjtBQUNBLFdBQU9BLFFBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9JLFdBQVAsQ0FBbUJKLFFBQW5CLEVBQTZCSyxVQUE3QixFQUF5QztBQUNyQ0EsY0FBVSxDQUFDN0YsVUFBWCxDQUFzQjhGLFlBQXRCLENBQW1DTixRQUFuQyxFQUE2Q0ssVUFBVSxDQUFDRSxXQUF4RDtBQUNBLFdBQU9QLFFBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9ydEIsS0FBUCxDQUFhcXRCLFFBQWIsRUFBdUJRLE9BQXZCLEVBQWdDO0FBQzVCUixZQUFRLENBQUN4RixVQUFULENBQW9COEYsWUFBcEIsQ0FBaUNFLE9BQWpDLEVBQTBDUixRQUFRLENBQUNPLFdBQW5EO0FBQ0EsV0FBT1AsUUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT1MsSUFBUCxDQUFZOWYsT0FBWixFQUFxQmdZLFFBQVEsR0FBRyxFQUFoQyxFQUFvQztBQUNoQyxXQUFPQSxRQUFRLEdBQUdoWSxPQUFPLENBQUM3QixhQUFSLENBQXNCLE9BQU82WixRQUE3QixDQUFILEdBQTRDaFksT0FBTyxDQUFDUSxrQkFBbkU7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT3VmLE9BQVAsQ0FBZS9mLE9BQWYsRUFBd0I7QUFDcEIsV0FBT0EsT0FBTyxDQUFDaUMsZ0JBQVIsQ0FBeUIsS0FBekIsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTytkLFNBQVAsQ0FBaUJoZ0IsT0FBakIsRUFBMEJnWSxRQUExQixFQUFvQztBQUNoQyxVQUFNOEgsSUFBSSxHQUFHLEVBQWI7O0FBQ0EsV0FBTzlmLE9BQU8sQ0FBQ1Esa0JBQVIsSUFBOEIsQ0FBQ1IsT0FBTyxDQUFDUSxrQkFBUixDQUEyQm1hLE9BQTNCLENBQW1DM0MsUUFBbkMsQ0FBdEMsRUFBb0Y4SCxJQUFJLENBQUMzaUIsSUFBTCxDQUFVNkMsT0FBTyxHQUFHQSxPQUFPLENBQUNRLGtCQUE1Qjs7QUFDcEYsV0FBT3NmLElBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9HLFFBQVAsQ0FBZ0JqZ0IsT0FBaEIsRUFBeUJnWSxRQUFRLEdBQUcsRUFBcEMsRUFBd0M7QUFDcEMsVUFBTWlJLFFBQVEsR0FBR2pnQixPQUFPLENBQUNtYSxzQkFBekI7QUFDQSxRQUFJbkMsUUFBSixFQUFjLE9BQU9pSSxRQUFRLElBQUlBLFFBQVEsQ0FBQ3RGLE9BQVQsQ0FBaUIzQyxRQUFqQixDQUFaLEdBQXlDaUksUUFBekMsR0FBb0QsSUFBM0Q7QUFDZCxXQUFPQSxRQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU9DLFdBQVAsQ0FBbUJsZ0IsT0FBbkIsRUFBNEI7QUFDeEIsVUFBTWlnQixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsV0FBT2pnQixPQUFPLENBQUNtYSxzQkFBZixFQUF1QzhGLFFBQVEsQ0FBQzlpQixJQUFULENBQWM2QyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ21hLHNCQUFoQzs7QUFDdkMsV0FBTzhGLFFBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9FLGFBQVAsQ0FBcUJuZ0IsT0FBckIsRUFBOEJnWSxRQUE5QixFQUF3QztBQUNwQyxVQUFNaUksUUFBUSxHQUFHLEVBQWpCOztBQUNBLFdBQU9qZ0IsT0FBTyxDQUFDbWEsc0JBQVIsSUFBa0MsQ0FBQ25hLE9BQU8sQ0FBQ21hLHNCQUFSLENBQStCUSxPQUEvQixDQUF1QzNDLFFBQXZDLENBQTFDLEVBQTRGaUksUUFBUSxDQUFDOWlCLElBQVQsQ0FBYzZDLE9BQU8sR0FBR0EsT0FBTyxDQUFDbWEsc0JBQWhDOztBQUM1RixXQUFPOEYsUUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPRyxhQUFQLENBQXFCeG1CLElBQXJCLEVBQTJCO0FBQ3ZCLFVBQU0yRyxRQUFRLEdBQUczRyxJQUFJLENBQUNpZ0IsVUFBTCxDQUFnQnJILFVBQWpDO0FBQ0EsUUFBSTZOLEdBQUcsR0FBRyxDQUFWOztBQUNBLFNBQUssSUFBSTNnQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHYSxRQUFRLENBQUM5TyxNQUE3QixFQUFxQ2lPLENBQUMsRUFBdEMsRUFBMEM7QUFDdEMsVUFBSWEsUUFBUSxDQUFDYixDQUFELENBQVIsSUFBZTlGLElBQW5CLEVBQXlCLE9BQU95bUIsR0FBUDtBQUN6QixVQUFJOWYsUUFBUSxDQUFDYixDQUFELENBQVIsQ0FBWW9lLFFBQVosSUFBd0IsQ0FBNUIsRUFBK0J1QyxHQUFHO0FBQ3JDOztBQUNELFdBQU8sQ0FBQyxDQUFSO0FBQ0g7QUFFRDs7O0FBQ0EsU0FBT0MsS0FBUCxDQUFhMW1CLElBQWIsRUFBbUI7QUFBQyxXQUFPLEtBQUt3bUIsYUFBTCxDQUFtQnhtQixJQUFuQixDQUFQO0FBQWlDO0FBRXJEOzs7Ozs7Ozs7QUFPQSxTQUFPMm1CLE1BQVAsQ0FBY3ZnQixPQUFkLEVBQXVCZ1ksUUFBUSxHQUFHLEVBQWxDLEVBQXNDO0FBQ2xDLFdBQU8sQ0FBQ0EsUUFBRCxJQUFhaFksT0FBTyxDQUFDK04sYUFBUixDQUFzQjRNLE9BQXRCLENBQThCM0MsUUFBOUIsQ0FBYixHQUF1RGhZLE9BQU8sQ0FBQytOLGFBQS9ELEdBQStFLElBQXRGO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPeVMsU0FBUCxDQUFpQnhnQixPQUFqQixFQUEwQmdZLFFBQTFCLEVBQW9DO0FBQ2hDLFdBQU9oWSxPQUFPLENBQUM3QixhQUFSLENBQXNCLGNBQWM2WixRQUFwQyxDQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPeUksWUFBUCxDQUFvQnpnQixPQUFwQixFQUE2QmdZLFFBQTdCLEVBQXVDO0FBQ25DLFdBQU9oWSxPQUFPLENBQUNpQyxnQkFBUixDQUF5QixjQUFjK1YsUUFBdkMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTzBJLE9BQVAsQ0FBZTFnQixPQUFmLEVBQXdCZ1ksUUFBUSxHQUFHLEVBQW5DLEVBQXVDO0FBQ25DLFVBQU0wSSxPQUFPLEdBQUcsRUFBaEI7QUFDQSxRQUFJMUksUUFBSixFQUFjLE9BQU9oWSxPQUFPLENBQUMrTixhQUFSLElBQXlCL04sT0FBTyxDQUFDK04sYUFBUixDQUFzQjRTLE9BQXRCLENBQThCM0ksUUFBOUIsQ0FBaEMsRUFBeUUwSSxPQUFPLENBQUN2akIsSUFBUixDQUFhNkMsT0FBTyxHQUFHQSxPQUFPLENBQUMrTixhQUFSLENBQXNCNFMsT0FBdEIsQ0FBOEIzSSxRQUE5QixDQUF2QixFQUF2RixLQUNLLE9BQU9oWSxPQUFPLENBQUMrTixhQUFmLEVBQThCMlMsT0FBTyxDQUFDdmpCLElBQVIsQ0FBYTZDLE9BQU8sR0FBR0EsT0FBTyxDQUFDK04sYUFBL0I7QUFDbkMsV0FBTzJTLE9BQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9FLFlBQVAsQ0FBb0I1Z0IsT0FBcEIsRUFBNkJnWSxRQUE3QixFQUF1QztBQUNuQyxVQUFNMEksT0FBTyxHQUFHLEVBQWhCOztBQUNBLFdBQU8xZ0IsT0FBTyxDQUFDK04sYUFBUixJQUF5QixDQUFDL04sT0FBTyxDQUFDK04sYUFBUixDQUFzQjRNLE9BQXRCLENBQThCM0MsUUFBOUIsQ0FBakMsRUFBMEUwSSxPQUFPLENBQUN2akIsSUFBUixDQUFhNkMsT0FBTyxHQUFHQSxPQUFPLENBQUMrTixhQUEvQjs7QUFDMUUsV0FBTzJTLE9BQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9HLFFBQVAsQ0FBZ0I3Z0IsT0FBaEIsRUFBeUJnWSxRQUFRLEdBQUcsR0FBcEMsRUFBeUM7QUFDckMsV0FBT2paLEtBQUssQ0FBQ2tiLElBQU4sQ0FBV2phLE9BQU8sQ0FBQytOLGFBQVIsQ0FBc0J4TixRQUFqQyxFQUEyQ3RILE1BQTNDLENBQWtEekcsQ0FBQyxJQUFJQSxDQUFDLElBQUl3TixPQUFMLElBQWdCeE4sQ0FBQyxDQUFDbW9CLE9BQUYsQ0FBVTNDLFFBQVYsQ0FBdkUsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7O0FBU0EsU0FBT25nQixHQUFQLENBQVdtSSxPQUFYLEVBQW9COGdCLFNBQXBCLEVBQStCaHpCLEtBQS9CLEVBQXNDO0FBQ2xDLFFBQUksT0FBT0EsS0FBUCxJQUFpQixXQUFyQixFQUFrQyxPQUFPaXpCLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FBd0JoaEIsT0FBeEIsRUFBaUM4Z0IsU0FBakMsQ0FBUDtBQUNsQzlnQixXQUFPLENBQUM0QixLQUFSLENBQWNrZixTQUFkLElBQTJCaHpCLEtBQTNCO0FBQ0EsV0FBT2tTLE9BQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7O0FBUUEsU0FBTzhTLEtBQVAsQ0FBYTlTLE9BQWIsRUFBc0JsUyxLQUF0QixFQUE2QjtBQUN6QixRQUFJLE9BQU9BLEtBQVAsSUFBaUIsV0FBckIsRUFBa0MsT0FBTzhELFFBQVEsQ0FBQ292QixnQkFBZ0IsQ0FBQ2hoQixPQUFELENBQWhCLENBQTBCOFMsS0FBM0IsQ0FBZjtBQUNsQzlTLFdBQU8sQ0FBQzRCLEtBQVIsQ0FBY2tSLEtBQWQsR0FBc0JobEIsS0FBdEI7QUFDQSxXQUFPa1MsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7QUFRQSxTQUFPaWhCLE1BQVAsQ0FBY2poQixPQUFkLEVBQXVCbFMsS0FBdkIsRUFBOEI7QUFDMUIsUUFBSSxPQUFPQSxLQUFQLElBQWlCLFdBQXJCLEVBQWtDLE9BQU84RCxRQUFRLENBQUNvdkIsZ0JBQWdCLENBQUNoaEIsT0FBRCxDQUFoQixDQUEwQmloQixNQUEzQixDQUFmO0FBQ2xDamhCLFdBQU8sQ0FBQzRCLEtBQVIsQ0FBY3FmLE1BQWQsR0FBdUJuekIsS0FBdkI7QUFDQSxXQUFPa1MsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT25MLElBQVAsQ0FBWW1MLE9BQVosRUFBcUJuTCxJQUFyQixFQUEyQjtBQUN2QixRQUFJLE9BQU9BLElBQVAsSUFBZ0IsV0FBcEIsRUFBaUMsT0FBT21MLE9BQU8sQ0FBQ2toQixXQUFmO0FBQ2pDLFdBQU9saEIsT0FBTyxDQUFDa2hCLFdBQVIsR0FBc0Jyc0IsSUFBN0I7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT3dDLFVBQVAsQ0FBa0IySSxPQUFsQixFQUEyQjtBQUN2QixXQUFPQSxPQUFPLENBQUM1SSxXQUFmO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU9JLFdBQVAsQ0FBbUJ3SSxPQUFuQixFQUE0QjtBQUN4QixXQUFPQSxPQUFPLENBQUN6SSxZQUFmO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU80cEIsVUFBUCxDQUFrQm5oQixPQUFsQixFQUEyQjtBQUN2QixXQUFPQSxPQUFPLENBQUNvaEIsV0FBZjtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPQyxXQUFQLENBQW1CcmhCLE9BQW5CLEVBQTRCO0FBQ3hCLFdBQU9BLE9BQU8sQ0FBQ3NoQixZQUFmO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU9DLE1BQVAsQ0FBY3ZoQixPQUFkLEVBQXVCO0FBQ25CLFdBQU9BLE9BQU8sQ0FBQ3doQixxQkFBUixFQUFQO0FBQ0g7O0FBRUQsYUFBV0MsU0FBWCxHQUF1QjtBQUFFLFdBQU8sS0FBS0MsVUFBTCxLQUFvQixLQUFLQSxVQUFMLEdBQWtCLEVBQXRDLENBQVA7QUFBbUQ7QUFFNUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBTzFNLEVBQVAsQ0FBVWhWLE9BQVYsRUFBbUIyaEIsS0FBbkIsRUFBMEJDLFFBQTFCLEVBQW9Dam5CLFFBQXBDLEVBQThDO0FBQzFDLFVBQU0sQ0FBQ3pPLElBQUQsRUFBTzIxQixTQUFQLElBQW9CRixLQUFLLENBQUN4aUIsS0FBTixDQUFZLEdBQVosQ0FBMUI7QUFDQSxVQUFNMmlCLFdBQVcsR0FBR0YsUUFBUSxJQUFJam5CLFFBQWhDO0FBQ0EsUUFBSSxDQUFDQSxRQUFMLEVBQWVBLFFBQVEsR0FBR2luQixRQUFYO0FBQ2YsVUFBTUcsU0FBUyxHQUFHLENBQUNELFdBQUQsR0FBZW5uQixRQUFmLEdBQTBCLFVBQVNnbkIsS0FBVCxFQUFnQjtBQUN4RCxVQUFJQSxLQUFLLENBQUM5UyxNQUFOLENBQWE4TCxPQUFiLENBQXFCaUgsUUFBckIsQ0FBSixFQUFvQztBQUNoQ2puQixnQkFBUSxDQUFDZ25CLEtBQUQsQ0FBUjtBQUNIO0FBQ0osS0FKRDtBQU1BM2hCLFdBQU8sQ0FBQzJLLGdCQUFSLENBQXlCemUsSUFBekIsRUFBK0I2MUIsU0FBL0I7O0FBQ0EsVUFBTUMsTUFBTSxHQUFHLE1BQU07QUFDakJoaUIsYUFBTyxDQUFDNlgsbUJBQVIsQ0FBNEIzckIsSUFBNUIsRUFBa0M2MUIsU0FBbEM7QUFDSCxLQUZEOztBQUdBLFFBQUlGLFNBQUosRUFBZTtBQUNYLFVBQUksQ0FBQyxLQUFLSixTQUFMLENBQWVJLFNBQWYsQ0FBTCxFQUFnQyxLQUFLSixTQUFMLENBQWVJLFNBQWYsSUFBNEIsRUFBNUI7O0FBQ2hDLFlBQU1JLFNBQVMsR0FBRyxNQUFNO0FBQ3BCRCxjQUFNO0FBQ04sYUFBS1AsU0FBTCxDQUFlSSxTQUFmLEVBQTBCL1IsTUFBMUIsQ0FBaUMsS0FBSzJSLFNBQUwsQ0FBZUksU0FBZixFQUEwQkssU0FBMUIsQ0FBb0N4YixDQUFDLElBQUlBLENBQUMsQ0FBQ2liLEtBQUYsSUFBV3oxQixJQUFYLElBQW1Cd2EsQ0FBQyxDQUFDMUcsT0FBRixJQUFhQSxPQUF6RSxDQUFqQyxFQUFvSCxDQUFwSDtBQUNILE9BSEQ7O0FBSUEsV0FBS3loQixTQUFMLENBQWVJLFNBQWYsRUFBMEIxa0IsSUFBMUIsQ0FBK0I7QUFDM0J3a0IsYUFBSyxFQUFFejFCLElBRG9CO0FBRTNCOFQsZUFBTyxFQUFFQSxPQUZrQjtBQUczQmdpQixjQUFNLEVBQUVDO0FBSG1CLE9BQS9CO0FBS0EsYUFBT0EsU0FBUDtBQUNIOztBQUNELFdBQU9ELE1BQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7Ozs7QUFVQSxTQUFPck0sSUFBUCxDQUFZM1YsT0FBWixFQUFxQjJoQixLQUFyQixFQUE0QkMsUUFBNUIsRUFBc0NqbkIsUUFBdEMsRUFBZ0Q7QUFDNUMsVUFBTSxDQUFDek8sSUFBRCxFQUFPMjFCLFNBQVAsSUFBb0JGLEtBQUssQ0FBQ3hpQixLQUFOLENBQVksR0FBWixDQUExQjtBQUNBLFVBQU0yaUIsV0FBVyxHQUFHRixRQUFRLElBQUlqbkIsUUFBaEM7QUFDQSxRQUFJLENBQUNBLFFBQUwsRUFBZUEsUUFBUSxHQUFHaW5CLFFBQVg7QUFDZixVQUFNRyxTQUFTLEdBQUcsQ0FBQ0QsV0FBRCxHQUFlLFVBQVNILEtBQVQsRUFBZ0I7QUFDN0NobkIsY0FBUSxDQUFDZ25CLEtBQUQsQ0FBUjtBQUNBM2hCLGFBQU8sQ0FBQzZYLG1CQUFSLENBQTRCM3JCLElBQTVCLEVBQWtDNjFCLFNBQWxDO0FBQ0gsS0FIaUIsR0FHZCxVQUFTSixLQUFULEVBQWdCO0FBQ2hCLFVBQUksQ0FBQ0EsS0FBSyxDQUFDOVMsTUFBTixDQUFhOEwsT0FBYixDQUFxQmlILFFBQXJCLENBQUwsRUFBcUM7QUFDckNqbkIsY0FBUSxDQUFDZ25CLEtBQUQsQ0FBUjtBQUNBM2hCLGFBQU8sQ0FBQzZYLG1CQUFSLENBQTRCM3JCLElBQTVCLEVBQWtDNjFCLFNBQWxDO0FBQ0gsS0FQRDtBQVNBL2hCLFdBQU8sQ0FBQzJLLGdCQUFSLENBQXlCemUsSUFBekIsRUFBK0I2MUIsU0FBL0I7O0FBQ0EsVUFBTUMsTUFBTSxHQUFHLE1BQU07QUFDakJoaUIsYUFBTyxDQUFDNlgsbUJBQVIsQ0FBNEIzckIsSUFBNUIsRUFBa0M2MUIsU0FBbEM7QUFDSCxLQUZEOztBQUdBLFFBQUlGLFNBQUosRUFBZTtBQUNYLFVBQUksQ0FBQyxLQUFLSixTQUFMLENBQWVJLFNBQWYsQ0FBTCxFQUFnQyxLQUFLSixTQUFMLENBQWVJLFNBQWYsSUFBNEIsRUFBNUI7O0FBQ2hDLFlBQU1JLFNBQVMsR0FBRyxNQUFNO0FBQ3BCRCxjQUFNO0FBQ04sYUFBS1AsU0FBTCxDQUFlSSxTQUFmLEVBQTBCL1IsTUFBMUIsQ0FBaUMsS0FBSzJSLFNBQUwsQ0FBZUksU0FBZixFQUEwQkssU0FBMUIsQ0FBb0N4YixDQUFDLElBQUlBLENBQUMsQ0FBQ2liLEtBQUYsSUFBV3oxQixJQUFYLElBQW1Cd2EsQ0FBQyxDQUFDMUcsT0FBRixJQUFhQSxPQUF6RSxDQUFqQyxFQUFvSCxDQUFwSDtBQUNILE9BSEQ7O0FBSUEsV0FBS3loQixTQUFMLENBQWVJLFNBQWYsRUFBMEIxa0IsSUFBMUIsQ0FBK0I7QUFDM0J3a0IsYUFBSyxFQUFFejFCLElBRG9CO0FBRTNCOFQsZUFBTyxFQUFFQSxPQUZrQjtBQUczQmdpQixjQUFNLEVBQUVDO0FBSG1CLE9BQS9CO0FBS0EsYUFBT0EsU0FBUDtBQUNIOztBQUNELFdBQU9ELE1BQVA7QUFDSDs7QUFFRCxTQUFPRyxRQUFQLENBQWdCUixLQUFoQixFQUF1QjNoQixPQUF2QixFQUFnQztBQUM1QixVQUFNLENBQUM5VCxJQUFELEVBQU8yMUIsU0FBUCxJQUFvQkYsS0FBSyxDQUFDeGlCLEtBQU4sQ0FBWSxHQUFaLENBQTFCOztBQUNBLFFBQUlpakIsV0FBVyxHQUFHQyxRQUFRLElBQUlBLFFBQVEsQ0FBQ1YsS0FBVCxJQUFrQnoxQixJQUFoRDtBQUFBLFFBQXNEbzJCLGFBQWEsR0FBR3JGLENBQUMsSUFBSUEsQ0FBM0U7O0FBQ0EsUUFBSWpkLE9BQUosRUFBYW9pQixXQUFXLEdBQUcxYixDQUFDLElBQUlBLENBQUMsQ0FBQ2liLEtBQUYsSUFBV3oxQixJQUFYLElBQW1Cd2EsQ0FBQyxDQUFDMUcsT0FBRixJQUFhQSxPQUFuRCxFQUE0RHNpQixhQUFhLEdBQUc1YixDQUFDLElBQUlBLENBQUMsQ0FBQzFHLE9BQUYsSUFBYUEsT0FBOUY7QUFDYixVQUFNeWhCLFNBQVMsR0FBRyxLQUFLQSxTQUFMLENBQWVJLFNBQWYsS0FBNkIsRUFBL0M7QUFDQSxVQUFNbm1CLElBQUksR0FBR3hQLElBQUksR0FBR3UxQixTQUFTLENBQUN4b0IsTUFBVixDQUFpQm1wQixXQUFqQixDQUFILEdBQW1DWCxTQUFTLENBQUN4b0IsTUFBVixDQUFpQnFwQixhQUFqQixDQUFwRDs7QUFDQSxTQUFLLElBQUlwaUIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3hFLElBQUksQ0FBQ2pLLE1BQXpCLEVBQWlDeU8sQ0FBQyxFQUFsQyxFQUFzQ3hFLElBQUksQ0FBQ3dFLENBQUQsQ0FBSixDQUFROGhCLE1BQVI7QUFDekM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxTQUFPdGxCLEdBQVAsQ0FBV3NELE9BQVgsRUFBb0IyaEIsS0FBcEIsRUFBMkJDLFFBQTNCLEVBQXFDam5CLFFBQXJDLEVBQStDO0FBQzNDLFFBQUksT0FBT3FGLE9BQVAsSUFBbUIsUUFBdkIsRUFBaUMsT0FBTyxLQUFLbWlCLFFBQUwsQ0FBY25pQixPQUFkLENBQVA7QUFDakMsVUFBTSxDQUFDOVQsSUFBRCxFQUFPMjFCLFNBQVAsSUFBb0JGLEtBQUssQ0FBQ3hpQixLQUFOLENBQVksR0FBWixDQUExQjtBQUNBLFFBQUkwaUIsU0FBSixFQUFlLE9BQU8sS0FBS00sUUFBTCxDQUFjUixLQUFkLEVBQXFCM2hCLE9BQXJCLENBQVA7QUFFZixVQUFNOGhCLFdBQVcsR0FBR0YsUUFBUSxJQUFJam5CLFFBQWhDO0FBQ0EsUUFBSSxDQUFDQSxRQUFMLEVBQWVBLFFBQVEsR0FBR2luQixRQUFYO0FBQ2YsVUFBTUcsU0FBUyxHQUFHLENBQUNELFdBQUQsR0FBZW5uQixRQUFmLEdBQTBCLFVBQVNnbkIsS0FBVCxFQUFnQjtBQUN4RCxVQUFJQSxLQUFLLENBQUM5UyxNQUFOLENBQWE4TCxPQUFiLENBQXFCaUgsUUFBckIsQ0FBSixFQUFvQztBQUNoQ2puQixnQkFBUSxDQUFDZ25CLEtBQUQsQ0FBUjtBQUNIO0FBQ0osS0FKRDtBQU1BM2hCLFdBQU8sQ0FBQzZYLG1CQUFSLENBQTRCM3JCLElBQTVCLEVBQWtDNjFCLFNBQWxDO0FBQ0EsV0FBTy9oQixPQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7O0FBT0EsU0FBT3VpQixhQUFQLENBQXFCM29CLElBQXJCLEVBQTJCZSxRQUEzQixFQUFxQzZuQixPQUFPLEdBQUcsSUFBL0MsRUFBcUQ7QUFDakQsVUFBTUMsZUFBZSxHQUFHLE1BQU07QUFDMUIsV0FBS0MsUUFBTCxDQUFjanZCLFdBQWQsQ0FBMEJndkIsZUFBMUI7QUFDQTluQixjQUFRO0FBQ1gsS0FIRDs7QUFJQSxTQUFLK25CLFFBQUwsQ0FBY252QixTQUFkLENBQXdCa3ZCLGVBQXhCLEVBQXlDclYsUUFBUSxJQUFJO0FBQ2pELFlBQU11VixLQUFLLEdBQUc1akIsS0FBSyxDQUFDa2IsSUFBTixDQUFXdUksT0FBTyxHQUFHcFYsUUFBUSxDQUFDRSxVQUFaLEdBQXlCRixRQUFRLENBQUN3VixZQUFwRCxDQUFkO0FBQ0EsWUFBTUMsV0FBVyxHQUFHRixLQUFLLENBQUMxYyxPQUFOLENBQWNyTSxJQUFkLElBQXNCLENBQUMsQ0FBM0M7QUFDQSxZQUFNa3BCLFdBQVcsR0FBR0gsS0FBSyxDQUFDL0UsSUFBTixDQUFXMkMsTUFBTSxJQUFJQSxNQUFNLENBQUM1ZixRQUFQLENBQWdCL0csSUFBaEIsQ0FBckIsQ0FBcEI7QUFDQSxhQUFPaXBCLFdBQVcsSUFBSUMsV0FBdEI7QUFDSCxLQUxEO0FBTUEsV0FBT2xwQixJQUFQO0FBQ0g7QUFFRDs7O0FBQ0EsU0FBTzRvQixPQUFQLENBQWU1b0IsSUFBZixFQUFxQmUsUUFBckIsRUFBK0I7QUFBRSxXQUFPLEtBQUs0bkIsYUFBTCxDQUFtQjNvQixJQUFuQixFQUF5QmUsUUFBekIsQ0FBUDtBQUE0QztBQUU3RTs7O0FBQ0EsU0FBT29vQixTQUFQLENBQWlCbnBCLElBQWpCLEVBQXVCZSxRQUF2QixFQUFpQztBQUFFLFdBQU8sS0FBSzRuQixhQUFMLENBQW1CM29CLElBQW5CLEVBQXlCZSxRQUF6QixFQUFtQyxLQUFuQyxDQUFQO0FBQW1EO0FBRXRGOzs7QUFDQSxTQUFPcW9CLE9BQVAsQ0FBZXBwQixJQUFmLEVBQXFCZSxRQUFyQixFQUErQjtBQUFFLFdBQU8sS0FBSzZuQixPQUFMLENBQWE1b0IsSUFBYixFQUFtQmUsUUFBbkIsQ0FBUDtBQUFzQztBQUV2RTs7O0FBQ0EsU0FBT0QsU0FBUCxDQUFpQmQsSUFBakIsRUFBdUJlLFFBQXZCLEVBQWlDO0FBQUUsV0FBTyxLQUFLb29CLFNBQUwsQ0FBZW5wQixJQUFmLEVBQXFCZSxRQUFyQixFQUErQixLQUEvQixDQUFQO0FBQStDO0FBRWxGOzs7Ozs7QUFJQSxTQUFPc29CLElBQVAsQ0FBWUMsUUFBWixFQUFzQjtBQUNsQixVQUFNQyxVQUFVLEdBQUcsS0FBSzFGLFNBQUwsQ0FBZ0IsaUNBQWhCLENBQW5COztBQUNBLFNBQUssSUFBSWpyQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMHdCLFFBQVEsQ0FBQ3p4QixNQUE3QixFQUFxQ2UsQ0FBQyxFQUF0QyxFQUEwQzJ3QixVQUFVLENBQUM1ekIsV0FBWCxDQUF1QjJ6QixRQUFRLENBQUMxd0IsQ0FBRCxDQUEvQjs7QUFDMUMsV0FBTzJ3QixVQUFQO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT0MsY0FBUCxDQUFzQnhwQixJQUF0QixFQUE0QjtBQUN4QixRQUFJLEVBQUVBLElBQUksWUFBWUMsTUFBbEIsS0FBNkIsRUFBRUQsSUFBSSxZQUFZRSxPQUFsQixDQUFqQyxFQUE2RCxPQUFPM0osU0FBUDtBQUM3RCxXQUFPeUosSUFBSSxZQUFZQyxNQUFoQixHQUF5QkQsSUFBSSxDQUFDLENBQUQsQ0FBN0IsR0FBbUNBLElBQTFDO0FBQ0g7O0FBeHNCeUIsQzs7Ozs7Ozs7Ozs7O0FDdkM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0NBRUE7O0FBRUEsTUFBTWdpQixTQUFTLEdBQUc7QUFDZHlILFlBQVUsRUFBRTtBQURFLENBQWxCO0FBSUEsSUFBSUMsaUJBQWlCLEdBQUcvd0IsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMrd0IsV0FBckIsRUFBa0MsQ0FBbEMsQ0FBeEI7QUFDQSxJQUFJQyxjQUFjLEdBQUdqeEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVneEIsa0JBQTFDLEVBQThELENBQTlELENBQXJCO0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUdueEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVU5SCxXQUFWLEtBQTBCLGNBQTFELEVBQTBFLENBQTFFLENBQXpCO0FBQ0EsSUFBSWc1Qix1QkFBdUIsR0FBR3B4QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ294QixzQkFBckIsRUFBNkMsQ0FBN0MsQ0FBOUI7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR3R4QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXF4QixpQkFBMUMsRUFBNkQsQ0FBN0QsQ0FBdkI7QUFDQSxJQUFJQyxRQUFRLEdBQUd4eEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBdkIsSUFBbUN2eEIsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBVixDQUFtQkMsY0FBekUsRUFBeUYsQ0FBekYsQ0FBZjtBQUNBLElBQUlDLFdBQVcsR0FBRzF4QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXl4QixRQUF2QixJQUFtQzF4QixDQUFDLENBQUNDLE9BQUYsQ0FBVTB4QixTQUE3QyxJQUEwRCxDQUFDM3hCLENBQUMsQ0FBQ0MsT0FBRixDQUFVMnhCLFVBQXhGLEVBQW9HLENBQXBHLENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHOXhCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVNnhCLDRCQUExQyxDQUFsQjtBQUVlLG1FQUFJLE1BQU1qWixXQUFOLENBQWtCO0FBQ2pDcmMsYUFBVyxHQUFFO0FBQ1QsU0FBS0UsSUFBTDtBQUNIOztBQUVELFFBQU1BLElBQU4sR0FBWTtBQUNSO0FBQ0EsUUFBRyxDQUFDdzBCLGtCQUFKLEVBQXVCQSxrQkFBa0IsR0FBRyxNQUFNeDZCLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJtcEIsR0FBakIsQ0FBcUJnSixjQUFyQixDQUFvQy94QixDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTlILFdBQVYsS0FBMEIsY0FBaEYsQ0FBM0I7QUFDdkIsUUFBRyxDQUFDZzVCLHVCQUFKLEVBQTRCQSx1QkFBdUIsR0FBRyxNQUFNejZCLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJtcEIsR0FBakIsQ0FBcUJnSixjQUFyQixDQUFvQy94QixDQUFDLElBQUlBLENBQUMsQ0FBQ294QixzQkFBM0MsQ0FBaEM7QUFDNUIsUUFBRyxDQUFDQyxnQkFBSixFQUFxQkEsZ0JBQWdCLEdBQUcsTUFBTTM2QixNQUFNLENBQUNrSixTQUFQLENBQWlCbXBCLEdBQWpCLENBQXFCZ0osY0FBckIsQ0FBb0MveEIsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVxeEIsaUJBQWhFLENBQXpCO0FBQ3JCLFFBQUcsQ0FBQ0MsUUFBSixFQUFhQSxRQUFRLEdBQUcsTUFBTTc2QixNQUFNLENBQUNrSixTQUFQLENBQWlCbXBCLEdBQWpCLENBQXFCZ0osY0FBckIsQ0FBb0MveEIsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBdkIsSUFBbUN2eEIsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBVixDQUFtQkMsY0FBL0YsQ0FBakI7QUFDYixRQUFHLENBQUNDLFdBQUosRUFBZ0JBLFdBQVcsR0FBRyxNQUFNLzZCLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJtcEIsR0FBakIsQ0FBcUJnSixjQUFyQixDQUFvQy94QixDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXl4QixRQUF2QixJQUFtQzF4QixDQUFDLENBQUNDLE9BQUYsQ0FBVTB4QixTQUE3QyxJQUEwRCxDQUFDM3hCLENBQUMsQ0FBQ0MsT0FBRixDQUFVMnhCLFVBQTlHLENBQXBCO0FBQ2hCLFFBQUcsQ0FBQ0MsV0FBSixFQUFnQkEsV0FBVyxHQUFHLE1BQU1uN0IsTUFBTSxDQUFDa0osU0FBUCxDQUFpQm1wQixHQUFqQixDQUFxQmdKLGNBQXJCLENBQW9DL3hCLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVNnhCLDRCQUFoRSxDQUFwQjs7QUFDaEIsUUFBR1osa0JBQWtCLElBQUlDLHVCQUF0QixJQUFpREUsZ0JBQWpELElBQXFFRSxRQUFyRSxJQUFpRkUsV0FBakYsSUFBZ0dJLFdBQW5HLEVBQStHO0FBQzNHanVCLGFBQU8sQ0FBQ0MsR0FBUixDQUFhLDREQUFiLEVBQTBFc3RCLHVCQUExRTtBQUNBLFlBQU1DLHNCQUFzQixHQUFHRCx1QkFBdUIsQ0FBQ0Msc0JBQXZEOztBQUNBRCw2QkFBdUIsQ0FBQ0Msc0JBQXhCLEdBQWlELFVBQVNweEIsQ0FBVCxFQUFZdU8sQ0FBWixFQUFlOGMsQ0FBZixFQUFrQnZaLENBQWxCLEVBQXFCbkksQ0FBckIsRUFBdUI7QUFDcEUsY0FBTXJPLEtBQUssR0FBRzgxQixzQkFBc0IsQ0FBQ1ksSUFBdkIsQ0FBNEIsSUFBNUIsRUFBa0MsR0FBR3owQixTQUFyQyxDQUFkO0FBQ0FqQyxhQUFLLENBQUMyMkIsZ0JBQU4sR0FBeUI7QUFDckI5SixpQkFBTyxDQUFDK0osSUFBRCxFQUFPQyxJQUFQLEVBQVk7QUFDZixnQkFBSUMsU0FBUyxHQUFHRCxJQUFJLENBQUNsekIsTUFBTCxHQUFjLENBQWQsSUFBbUIsUUFBUWl6QixJQUEzQztBQUNBRywwQkFBYyxDQUFDRCxTQUFELENBQWQ7QUFDQSxtQkFBT0EsU0FBUDtBQUNILFdBTG9COztBQU1yQkUsc0JBQVksQ0FBQy9qQixDQUFELEVBQUc7QUFDWCxnQkFBSWdrQixPQUFPLEdBQUdsQixnQkFBZ0IsQ0FBQ3B4QixPQUFqQixDQUF5QnF4QixpQkFBekIsQ0FBMkMvaUIsQ0FBM0MsRUFBOEN2TyxDQUE5QyxDQUFkO0FBQ0EsbUJBQU91eUIsT0FBUDtBQUNILFdBVG9COztBQVVyQkMsdUJBQWEsQ0FBQ3h5QixDQUFELEVBQUl1TyxDQUFKLEVBQU84YyxDQUFQLEVBQVV2WixDQUFWLEVBQWFuSSxDQUFiLEVBQWU7QUFDeEIsbUJBQU84b0IsQ0FBQyxDQUFDenlCLENBQUQsRUFBSXVPLENBQUosRUFBTzVFLENBQUMsQ0FBQytvQixNQUFULEVBQWlCckgsQ0FBakIsRUFBb0J2WixDQUFwQixFQUF1QnlmLFFBQVEsQ0FBQ3R4QixPQUFULENBQWlCc3hCLFFBQWpCLENBQTBCQyxjQUFqRCxFQUFpRUQsUUFBUSxDQUFDdHhCLE9BQVQsQ0FBaUJzeEIsUUFBakIsQ0FBMEJvQixLQUEzRixFQUFrR3pCLGtCQUFrQixDQUFDanhCLE9BQW5CLENBQTJCMnlCLEtBQTdILEVBQXFJLFVBQVM1eUIsQ0FBVCxFQUFZO0FBQ3JKLHFCQUFPO0FBQ0g2eUIscUJBQUssRUFBRTd5QixDQURKO0FBRUgzRSxtQkFBRyxFQUFFMkUsQ0FBQyxDQUFDcEcsRUFBRixJQUFRb0csQ0FBQyxDQUFDOHlCLFVBQVYsSUFBd0I5eUIsQ0FBQyxDQUFDdUMsSUFGNUI7QUFHSHd3Qix3QkFBUSxFQUFFLEdBSFA7QUFJSG5aLHFCQUFLLEVBQUUsUUFBUTVaLENBQUMsQ0FBQ2d6QixPQUFWLEdBQW9CdkIsV0FBVyxDQUFDeHhCLE9BQVosQ0FBb0J5eEIsUUFBcEIsQ0FBNkIxeEIsQ0FBQyxDQUFDZ3pCLE9BQS9CLENBQXBCLEdBQThEO0FBSmxFLGVBQVA7QUFNSCxhQVBPLEVBT0gsVUFBU2h6QixDQUFULEVBQVk7QUFDYixxQkFBTyxNQUFNQSxDQUFOLEdBQVUsR0FBakI7QUFDSCxhQVRPLENBQVI7QUFVSCxXQXJCb0I7O0FBc0JyQml6QixzQkFBWSxDQUFDcjVCLEVBQUQsRUFBS2dnQixLQUFMLEVBQVc7QUFDbkIsZ0JBQUk4WSxNQUFNLEdBQUc5WSxLQUFLLENBQUM4WSxNQUFuQjtBQUNBLGdCQUFJLFFBQVFBLE1BQVIsSUFBa0IsUUFBUUEsTUFBTSxDQUFDOTRCLEVBQUQsQ0FBcEMsRUFBMEMsT0FBTyxFQUFQO0FBQzFDLGdCQUFJaTVCLEtBQUssR0FBR0gsTUFBTSxDQUFDOTRCLEVBQUQsQ0FBbEI7QUFBQSxnQkFDSXM1QixVQUFVLEdBQUdMLEtBQUssQ0FBQ00sUUFBTixHQUFpQixHQUFqQixHQUF1QixFQUR4QztBQUVBLG1CQUFPTixLQUFLLENBQUNPLE9BQU4sSUFBaUIsUUFBUVAsS0FBSyxDQUFDajVCLEVBQS9CLEdBQW9DLE1BQU1pNUIsS0FBSyxDQUFDdHdCLElBQVosR0FBbUIsR0FBdkQsR0FBNkQsTUFBTTJ3QixVQUFOLEdBQW1CLEdBQW5CLElBQTBCTCxLQUFLLENBQUNRLFlBQU4sSUFBc0JSLEtBQUssQ0FBQ3R3QixJQUF0RCxJQUE4RCxHQUE5RCxHQUFvRXN3QixLQUFLLENBQUNqNUIsRUFBMUUsR0FBK0UsR0FBbko7QUFDSCxXQTVCb0I7O0FBNkJyQjA1QixvQkFBVSxDQUFDMTVCLEVBQUQsRUFBS2dnQixLQUFMLEVBQVc7QUFDakIsZ0JBQUk4WSxNQUFNLEdBQUc5WSxLQUFLLENBQUM4WSxNQUFuQjtBQUNBLGdCQUFJLFFBQVFBLE1BQVIsSUFBa0IsUUFBUUEsTUFBTSxDQUFDOTRCLEVBQUQsQ0FBcEMsRUFBMEMsT0FBTyxFQUFQO0FBQzFDLGdCQUFJaTVCLEtBQUssR0FBR0gsTUFBTSxDQUFDOTRCLEVBQUQsQ0FBbEI7QUFBQSxnQkFDSXM1QixVQUFVLEdBQUdMLEtBQUssQ0FBQ00sUUFBTixHQUFpQixHQUFqQixHQUF1QixFQUR4QztBQUVBLG1CQUFPTixLQUFLLENBQUNPLE9BQU4sSUFBaUIsUUFBUVAsS0FBSyxDQUFDajVCLEVBQS9CLEdBQW9DLE1BQU1pNUIsS0FBSyxDQUFDdHdCLElBQVosR0FBbUIsR0FBdkQsR0FBNkQsTUFBTTJ3QixVQUFOLEdBQW1CLEdBQW5CLElBQTBCTCxLQUFLLENBQUNRLFlBQU4sSUFBc0JSLEtBQUssQ0FBQ3R3QixJQUF0RCxJQUE4RCxHQUE5RCxHQUFvRXN3QixLQUFLLENBQUNqNUIsRUFBMUUsR0FBK0UsR0FBbko7QUFDSDs7QUFuQ29CLFNBQXpCO0FBcUNBLGVBQU8wQixLQUFQO0FBQ0gsT0F4Q0Q7QUF5Q0gsS0E1Q0QsTUE0Q0s7QUFDRHNJLGFBQU8sQ0FBQ3NILEtBQVIsQ0FBYyxJQUFJaEgsS0FBSixDQUFVLHNEQUFWLENBQWQ7QUFDSDtBQUVEOzs7QUFDQSxXQUFPLENBQUN0TCwyQ0FBSSxDQUFDK1YsZ0JBQWIsRUFBK0IsTUFBTSxJQUFJa0QsT0FBSixDQUFZM0IsT0FBTyxJQUFJNkIsVUFBVSxDQUFDN0IsT0FBRCxFQUFVLEdBQVYsQ0FBakMsQ0FBTjs7QUFDL0IsUUFBSSxDQUFDLEtBQUtxakIsaUJBQVYsRUFBNEI7QUFDeEIsV0FBS0MsaUJBQUwsR0FBeUIvM0IsOENBQUssQ0FBQzZELFdBQU4sQ0FBa0IxRywyQ0FBSSxDQUFDK1YsZ0JBQXZCLEVBQXlDLFNBQXpDLEVBQW9EO0FBQUNDLGNBQU0sRUFBRy9QLElBQUQsSUFBVTtBQUM1RixnQkFBTXNDLE9BQU8sR0FBRzFGLDhDQUFLLENBQUM0akIsYUFBTixDQUFvQnhnQixJQUFJLENBQUNnUSxlQUFMLENBQXFCLENBQXJCLENBQXBCLEVBQTZDLHNDQUE3QyxDQUFoQjtBQUNBLGNBQUcsQ0FBQzFOLE9BQUosRUFBWTtBQUNaLGdCQUFNWSxPQUFPLEdBQUd0Ryw4Q0FBSyxDQUFDNGpCLGFBQU4sQ0FBb0J4Z0IsSUFBSSxDQUFDZ1EsZUFBTCxDQUFxQixDQUFyQixDQUFwQixFQUE2QyxzQ0FBN0MsQ0FBaEI7QUFDQSxjQUFHLENBQUM5TSxPQUFELElBQVksQ0FBQ0EsT0FBTyxDQUFDOUMsTUFBeEIsRUFBK0IsT0FKNkQsQ0FNNUY7O0FBRUE7Ozs7Ozs7OztBQVFBLGNBQUl5ekIsTUFBTSxHQUFHLEVBQWI7QUFFQSxnQkFBTWUsVUFBVSxHQUFHLEVBQW5COztBQUNBLGVBQUksSUFBSXJzQixJQUFSLElBQWdCckYsT0FBaEIsRUFBd0I7QUFDcEIsZ0JBQUksT0FBT3FGLElBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDM0Jxc0Isd0JBQVUsQ0FBQzlvQixJQUFYLENBQWdCdkQsSUFBaEI7QUFDQTtBQUNIOztBQUFBO0FBQ0QsZ0JBQUlzTSxNQUFKO0FBQ0EsZ0JBQUlnZ0IsU0FBUyxHQUFHLEtBQWhCOztBQUVBLGVBQUc7QUFDQ2hnQixvQkFBTSxHQUFHMFYsU0FBUyxDQUFDeUgsVUFBVixDQUFxQjhDLElBQXJCLENBQTBCdnNCLElBQTFCLENBQVQ7O0FBQ0Esa0JBQUlzTSxNQUFKLEVBQVk7QUFDUmdnQix5QkFBUyxHQUFHLElBQVo7QUFDQSxvQkFBRyxDQUFDMUMsY0FBSixFQUFtQkEsY0FBYyxHQUFHanhCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVZ3hCLGtCQUExQyxFQUE4RCxDQUE5RCxDQUFqQjtBQUNuQixzQkFBTTRCLEtBQUssR0FBRzdCLGNBQWMsQ0FBQy93QixPQUFmLENBQXVCZ3hCLGtCQUF2QixDQUEwQ3ZkLE1BQU0sQ0FBQyxDQUFELENBQWhELENBQWQ7O0FBQ0Esb0JBQUdtZixLQUFILEVBQVM7QUFDTEgsd0JBQU0sQ0FBQy9uQixJQUFQLENBQVk7QUFDUndvQiw0QkFBUSxFQUFFTixLQUFLLENBQUNNLFFBRFI7QUFFUjV3Qix3QkFBSSxFQUFFc3dCLEtBQUssQ0FBQ3R3QixJQUZKO0FBR1IzSSxzQkFBRSxFQUFFaTVCLEtBQUssQ0FBQ2o1QixFQUhGO0FBSVJnNkIsdUJBQUcsRUFBRWxnQixNQUFNLENBQUMsQ0FBRDtBQUpILG1CQUFaO0FBTUgsaUJBUEQsTUFPSztBQUNEZ2Ysd0JBQU0sQ0FBQy9uQixJQUFQLENBQVk7QUFDUndvQiw0QkFBUSxFQUFFemYsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVcEgsVUFBVixDQUFxQixJQUFyQixDQURGO0FBRVIvSix3QkFBSSxFQUFFbVIsTUFBTSxDQUFDLENBQUQsQ0FGSjtBQUdSOVosc0JBQUUsRUFBRThaLE1BQU0sQ0FBQyxDQUFELENBSEY7QUFJUmtnQix1QkFBRyxFQUFFbGdCLE1BQU0sQ0FBQyxDQUFEO0FBSkgsbUJBQVo7QUFNSDtBQUNKO0FBQ0osYUF0QkQsUUFzQlNBLE1BdEJUOztBQXdCQSxnQkFBR2dnQixTQUFILEVBQWE7QUFDVCxvQkFBTUcsS0FBSyxHQUFHenNCLElBQUksQ0FBQ3VGLEtBQUwsQ0FBVyxHQUFYLEVBQWdCeEssR0FBaEIsQ0FBb0IsQ0FBQzJ4QixJQUFELEVBQU9oRyxLQUFQLEVBQWNpRyxHQUFkLEtBQXNCO0FBQ3BELG9CQUFHLENBQUNELElBQUosRUFBUyxPQUFPLEVBQVA7QUFDVCxzQkFBTWpCLEtBQUssR0FBR0gsTUFBTSxDQUFDejZCLElBQVAsQ0FBWStILENBQUMsSUFBSUEsQ0FBQyxDQUFDNHpCLEdBQUYsSUFBU0UsSUFBMUIsQ0FBZDtBQUNBLG9CQUFHLENBQUNqQixLQUFKLEVBQVUsT0FBT2lCLElBQVA7QUFDVixvQkFBRyxDQUFDaEQsaUJBQUosRUFBc0JBLGlCQUFpQixHQUFHL3dCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDK3dCLFdBQXJCLEVBQWtDLENBQWxDLENBQXBCO0FBQ3RCLHVCQUFPaDRCLEtBQUssQ0FBQ0MsYUFBTixDQUFvQjgzQixpQkFBaUIsQ0FBQ0MsV0FBdEMsRUFBbUQ7QUFDdEQ4Qix1QkFBSyxFQUFFO0FBQ0h0d0Isd0JBQUksRUFBRyxJQUFHc3dCLEtBQUssQ0FBQ3R3QixJQUFLLEdBRGxCO0FBRUh5eEIsMkJBQU8sRUFBRW5CLEtBQUssQ0FBQ2o1QixFQUZaO0FBR0h1NUIsNEJBQVEsRUFBRU4sS0FBSyxDQUFDTSxRQUhiO0FBSUhjLDZCQUFTLEVBQUVGLEdBQUcsQ0FBQzkwQixNQUFKLEtBQWUsQ0FBZixJQUFvQjhDLE9BQU8sQ0FBQzlDLE1BQVIsS0FBbUI7QUFKL0M7QUFEK0MsaUJBQW5ELENBQVA7QUFRSCxlQWJhLEVBYVhpMUIsTUFiVyxDQWFKLENBQUN6RyxRQUFELEVBQVcwRyxPQUFYLEtBQXVCO0FBQzdCLG9CQUFHMUcsUUFBUSxDQUFDeHVCLE1BQVQsS0FBb0IsQ0FBdkIsRUFBeUIsT0FBTyxDQUFDazFCLE9BQUQsQ0FBUDs7QUFDekIsb0JBQUcsT0FBT0EsT0FBUCxLQUFtQixRQUF0QixFQUErQjtBQUMzQixzQkFBRyxPQUFPMUcsUUFBUSxDQUFDQSxRQUFRLENBQUN4dUIsTUFBVCxHQUFrQixDQUFuQixDQUFmLEtBQXlDLFFBQTVDLEVBQXFEO0FBQ2pEd3VCLDRCQUFRLENBQUNBLFFBQVEsQ0FBQ3h1QixNQUFULEdBQWtCLENBQW5CLENBQVIsSUFBa0MsSUFBR2sxQixPQUFRLEVBQTdDO0FBQ0EsMkJBQU8xRyxRQUFQO0FBQ0g7O0FBQ0RBLDBCQUFRLENBQUM5aUIsSUFBVCxDQUFjLE1BQUl3cEIsT0FBbEI7QUFDQSx5QkFBTzFHLFFBQVA7QUFDSDs7QUFDREEsd0JBQVEsQ0FBQzlpQixJQUFULENBQWMsR0FBZCxFQUFtQndwQixPQUFuQjtBQUNBLHVCQUFPMUcsUUFBUDtBQUNILGVBekJhLEVBeUJYLEVBekJXLENBQWQ7QUEwQkFnRyx3QkFBVSxDQUFDOW9CLElBQVgsQ0FBZ0IsR0FBR2twQixLQUFuQjtBQUNILGFBNUJELE1BNEJLO0FBQ0RKLHdCQUFVLENBQUM5b0IsSUFBWCxDQUFnQnZELElBQWhCO0FBQ0g7QUFDSjs7QUFDRCxpQkFBTXZJLElBQUksQ0FBQ2dRLGVBQUwsQ0FBcUIsQ0FBckIsRUFBd0JDLHNCQUF4QixDQUErQ2pJLEtBQS9DLENBQXFEOUUsT0FBckQsQ0FBNkQsQ0FBN0QsQ0FBTixFQUFzRTtBQUNsRWxELGdCQUFJLENBQUNnUSxlQUFMLENBQXFCLENBQXJCLEVBQXdCQyxzQkFBeEIsQ0FBK0NqSSxLQUEvQyxDQUFxRDlFLE9BQXJELENBQTZEcXlCLEtBQTdEO0FBQ0g7O0FBQ0QsaUJBQU1YLFVBQVUsQ0FBQyxDQUFELENBQWhCLEVBQW9CO0FBQ2hCNTBCLGdCQUFJLENBQUNnUSxlQUFMLENBQXFCLENBQXJCLEVBQXdCQyxzQkFBeEIsQ0FBK0NqSSxLQUEvQyxDQUFxRDlFLE9BQXJELENBQTZENEksSUFBN0QsQ0FBa0U4b0IsVUFBVSxDQUFDVyxLQUFYLEVBQWxFO0FBQ0g7QUFDSjtBQXpGNEUsT0FBcEQsQ0FBekI7QUEwRkg7QUFFSjs7QUFFRHB6QixTQUFPLEdBQUU7QUFDTCxRQUFJLENBQUMsS0FBS3d5QixpQkFBVixFQUE2QjtBQUM3QixTQUFLQSxpQkFBTDtBQUNBLFNBQUtBLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7O0FBbEtnQyxDQUF0QixFQUFmOztBQXFLQSxTQUFTZixDQUFULENBQVd6eUIsQ0FBWCxFQUFjdU8sQ0FBZCxFQUFpQjhjLENBQWpCLEVBQW9CdlosQ0FBcEIsRUFBdUJ1aUIsQ0FBdkIsRUFBMEJubkIsQ0FBMUIsRUFBNkJELENBQTdCLEVBQWdDcW5CLENBQWhDLEVBQW1DcGdCLENBQW5DLEVBQXNDeEcsQ0FBdEMsRUFBeUM7QUFDckMsTUFBSSxRQUFRMmQsQ0FBUixJQUFhLE1BQU1BLENBQUMsQ0FBQ3BzQixNQUF6QixFQUFpQyxPQUFPLElBQVA7QUFDakMsTUFBSXMxQixDQUFDLEdBQUdsSixDQUFDLENBQUNscEIsR0FBRixDQUFPLFVBQVNuQyxDQUFULEVBQVlxckIsQ0FBWixFQUFlO0FBQzFCLFdBQU90eUIsS0FBSyxDQUFDQyxhQUFOLENBQW9CczdCLENBQXBCLEVBQXVCMzVCLE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYztBQUN4Q3BXLGFBQU8sRUFBRW83QixDQUQrQjtBQUV4Q0csYUFBTyxFQUFFMWlCLENBRitCO0FBR3hDdU0sY0FBUSxFQUFFOVAsQ0FBQyxLQUFLOGMsQ0FId0I7QUFJeEN5QyxXQUFLLEVBQUV6QztBQUppQyxLQUFkLEVBSzNCblgsQ0FBQyxDQUFDbFUsQ0FBRCxFQUFJcXJCLENBQUosQ0FMMEIsQ0FBdkIsQ0FBUDtBQU1ILEdBUE8sQ0FBUjtBQVFBLFNBQU8sQ0FBQ29KLENBQUMsQ0FBQ3ZuQixDQUFELEVBQUlELENBQUosRUFBT2pOLENBQVAsRUFBVTBOLENBQVYsQ0FBRixFQUFnQjZtQixDQUFoQixDQUFQO0FBQ0g7O0FBRUQsU0FBU0UsQ0FBVCxDQUFXejBCLENBQVgsRUFBY3VPLENBQWQsRUFBaUI4YyxDQUFqQixFQUFvQnZaLENBQXBCLEVBQXVCO0FBQ25CLE1BQUluSSxDQUFDLEdBQUkwaEIsQ0FBQyxDQUFDcHNCLE1BQUYsR0FBVyxDQUFYLEdBQWVlLENBQUMsQ0FBQzJULE1BQUYsQ0FBUztBQUM3QitnQixVQUFNLEVBQUU1aUIsQ0FBQyxDQUFDdVosQ0FBRDtBQURvQixHQUFULENBQWYsR0FFSjljLENBRkw7O0FBR0EsTUFBR2hDLEtBQUssQ0FBQ0MsT0FBTixDQUFjN0MsQ0FBZCxDQUFILEVBQW9CO0FBQ2hCQSxLQUFDLENBQUMyZCxPQUFGLENBQVV2dUIsS0FBSyxDQUFDQyxhQUFOLENBQW9CLFFBQXBCLEVBQThCLEVBQTlCLEVBQWtDLGNBQWxDLENBQVY7QUFDSCxHQUZELE1BRUs7QUFDRDJRLEtBQUMsR0FBRyxpQkFBZUEsQ0FBbkI7QUFDSDs7QUFDRCxTQUFPNVEsS0FBSyxDQUFDQyxhQUFOLENBQW9CazRCLGtCQUFrQixDQUFDanhCLE9BQW5CLENBQTJCMDBCLEtBQS9DLEVBQXNEO0FBQ3pEeDlCLFNBQUssRUFBRXdTO0FBRGtELEdBQXRELEVBRUpBLENBRkksQ0FBUDtBQUdIOztBQUNEOHFCLENBQUMsQ0FBQ3Q4QixXQUFGLEdBQWdCLGNBQWhCO0FBRUEsSUFBSXk4QixpQkFBaUIsR0FBRzcwQixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTQwQixlQUExQyxFQUEyRCxDQUEzRCxDQUF4QjtBQUNBLElBQUlBLGVBQWUsR0FBR0QsaUJBQWlCLElBQUlBLGlCQUFpQixDQUFDMzBCLE9BQWxCLENBQTBCNDBCLGVBQXJFO0FBQ0EsSUFBSUMsUUFBUSxHQUFHLEtBQWY7QUFDQSxJQUFJdnBCLFVBQVUsR0FBRyxLQUFqQjs7QUFFQSxTQUFTOG1CLGNBQVQsQ0FBd0IwQyxNQUF4QixFQUErQjtBQUMzQkQsVUFBUSxHQUFHQyxNQUFYO0FBQ0EsTUFBR3hwQixVQUFILEVBQWM7QUFDZCxNQUFHLENBQUNxcEIsaUJBQUosRUFBc0JBLGlCQUFpQixHQUFHNzBCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVNDBCLGVBQTFDLEVBQTJELENBQTNELENBQXBCO0FBQ3RCLE1BQUcsQ0FBQ0QsaUJBQUosRUFBc0I7QUFDdEIsTUFBRyxDQUFDQyxlQUFKLEVBQW9CQSxlQUFlLEdBQUdELGlCQUFpQixDQUFDMzBCLE9BQWxCLENBQTBCNDBCLGVBQTVDO0FBRXBCdHBCLFlBQVUsR0FBRyxJQUFiOztBQUNBcXBCLG1CQUFpQixDQUFDMzBCLE9BQWxCLENBQTBCNDBCLGVBQTFCLEdBQTRDLFVBQVNoQyxLQUFULEVBQWU7QUFDdkQsUUFBR2lDLFFBQUgsRUFBWTtBQUNSLFVBQUdqQyxLQUFLLENBQUNtQyxVQUFOLElBQW9CbkMsS0FBSyxDQUFDb0MsU0FBN0IsRUFBdUMsT0FBTyxJQUFQO0FBQ3ZDLGFBQU8sS0FBUDtBQUNIOztBQUNELFdBQU9KLGVBQWUsQ0FBQzdDLElBQWhCLENBQXFCLElBQXJCLEVBQTJCLEdBQUd6MEIsU0FBOUIsQ0FBUDtBQUNILEdBTkQ7QUFPSCxDOzs7Ozs7Ozs7Ozs7QUN4T0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNMjNCLEtBQUssR0FBRyxJQUFkO0FBQ0EsTUFBTW5mLEtBQUssR0FBRyxFQUFkO0FBQ0EsTUFBTW9mLE1BQU0sR0FBRyxFQUFmO0FBQ0E7Ozs7Ozs7QUFPZSxtRUFBSSxNQUFNL2MsZUFBTixDQUFzQjtBQUNyQzViLGFBQVcsR0FBRSxDQUFFOztBQUVmK2lCLE9BQUssQ0FBQ0gsVUFBRCxFQUFheGxCLEVBQWIsRUFBZ0I7QUFDakJpSixXQUFPLENBQUNpZCxRQUFSLENBQWlCLE1BQU07QUFDbkJzVix1QkFBaUIsQ0FBQ2hXLFVBQUQsRUFBYXhsQixFQUFiLENBQWpCO0FBQ0gsS0FGRDtBQUdIOztBQUVEeUosT0FBSyxHQUFFO0FBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZGSDs7QUF2R29DLENBQTFCLEVBQWY7O0FBMEdBLFNBQVNneUIsWUFBVCxDQUFzQnZZLElBQXRCLEVBQTRCamUsSUFBNUIsRUFBa0NqRixFQUFsQyxFQUFxQztBQUNqQ2lGLE1BQUksR0FBR0EsSUFBSSxDQUFDZ2QsUUFBTCxDQUFjLE1BQWQsRUFBc0JsUCxLQUF0QixDQUE0QixXQUE1QixDQUFQO0FBQ0EsTUFBSTJvQixTQUFTLEdBQUcsS0FBaEI7O0FBQ0EsT0FBSSxJQUFJQyxPQUFSLElBQW1CMTJCLElBQW5CLEVBQXdCO0FBQ3BCLFNBQUksSUFBSTIyQixHQUFSLElBQWUsQ0FDWCxPQURXLEVBRVgsT0FGVyxFQUdYLE9BSFcsRUFJWCxLQUpXLEVBS1gsS0FMVyxFQU1YLFNBTlcsRUFPWCxlQVBXLEVBUVgsY0FSVyxFQVNYLE1BVFcsRUFVWCxXQVZXLEVBV1gsZUFYVyxDQUFmLEVBWUU7QUFDRSxVQUFHRCxPQUFPLENBQUNsM0IsV0FBUixHQUFzQkMsUUFBdEIsQ0FBK0JrM0IsR0FBRyxDQUFDbjNCLFdBQUosRUFBL0IsQ0FBSCxFQUFxRDtBQUNqRGkzQixpQkFBUyxHQUFHLHFCQUFaO0FBQ0E7QUFDSDtBQUNKOztBQUNELFFBQUdBLFNBQUgsRUFBYTtBQUNoQjs7QUFFRCxNQUFHLENBQUNBLFNBQUosRUFBYztBQUNWOzs7QUFHQSxVQUFNRyxXQUFXLEdBQUc1MkIsSUFBSSxDQUFDSyxPQUFMLENBQWEsc0NBQWIsRUFBcUQsRUFBckQsRUFBeURxTyxJQUF6RCxFQUFwQixDQUpVLENBSXlFOztBQUNuRixRQUFJLHFCQUFELENBQXdCekwsSUFBeEIsQ0FBNkIyekIsV0FBN0IsQ0FBSCxFQUE2QztBQUN6Q0gsZUFBUyxHQUFHLHlCQUFaO0FBQ0g7O0FBRUQsUUFBRyxDQUFDQSxTQUFKLEVBQWM7QUFDVixZQUFNSSxPQUFPLEdBQUc7QUFDWjtBQUNBLG9DQUZZLEVBR1osNENBSFksRUFHa0M7O0FBQzlDO0FBQ0EsK0JBTFksRUFNWix1Q0FOWSxDQU02QjtBQU43QixPQUFoQjs7QUFRQSxXQUFJLElBQUlDLEtBQVIsSUFBaUJELE9BQWpCLEVBQXlCO0FBQ3JCLFlBQUdKLFNBQUgsRUFBYTtBQUNiQSxpQkFBUyxHQUFHSyxLQUFLLENBQUM3ekIsSUFBTixDQUFXMnpCLFdBQVgsSUFBMEIseUJBQTFCLEdBQXNELEtBQWxFO0FBQ0g7QUFDSjtBQUNKOztBQUVELE1BQUcsQ0FBQ0gsU0FBSixFQUFjO0FBQ2R2ZixPQUFLLENBQUMrRyxJQUFELENBQUwsR0FBYztBQUNWOFksV0FBTyxFQUFFLElBREM7QUFFVnJ6QixRQUFJLEVBQUVzekIsU0FBUyxDQUFDL1ksSUFBRCxDQUFULENBQWdCblEsS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkJoVSxHQUEzQixFQUZJO0FBR1ZlLFFBQUksRUFBRW04QixTQUFTLENBQUMvWSxJQUFELENBQVQsQ0FBZ0J6USxRQUFoQixDQUF5QixLQUF6QixJQUFrQyxRQUFsQyxHQUE2QyxPQUh6QztBQUlWeXBCLFFBQUksRUFBRVI7QUFKSSxHQUFkO0FBT0ExeEIsU0FBTyxDQUFDQyxHQUFSLENBQWEsK0JBQThCa1MsS0FBSyxDQUFDK0csSUFBRCxDQUFMLENBQVlwakIsSUFBWixDQUFpQjJFLFdBQWpCLEVBQStCLEtBQUkwWCxLQUFLLENBQUMrRyxJQUFELENBQUwsQ0FBWXZhLElBQUssRUFBL0Y7QUFFQXd6QixrQkFBZ0IsQ0FBQ244QixFQUFELEVBQUttYyxLQUFLLENBQUMrRyxJQUFELENBQVYsRUFBa0IvRyxLQUFLLENBQUMrRyxJQUFELENBQUwsQ0FBWXZhLElBQTlCLENBQWhCO0FBQ0g7O0FBRUQsTUFBTXN6QixTQUFTLEdBQUcsRUFBbEI7O0FBRUEsU0FBU1QsaUJBQVQsQ0FBMkJoVyxVQUEzQixFQUF1Q3hsQixFQUF2QyxFQUEwQztBQUN0QyxNQUFHLENBQUNpRCxRQUFRLENBQUN3ZSxjQUFULENBQXdCemhCLEVBQXhCLENBQUosRUFBZ0M7QUFDaEMsTUFBRyxDQUFDd2xCLFVBQVUsQ0FBQ2hoQixHQUFYLENBQWVrTyxVQUFmLENBQTBCLDZCQUExQixDQUFKLEVBQTZELE9BQU96UCxRQUFRLENBQUN3ZSxjQUFULENBQXdCemhCLEVBQXhCLEVBQTRCc1UsTUFBNUIsRUFBUDtBQUM3RCxNQUFHLENBQUNrUixVQUFVLENBQUN4TixRQUFYLENBQW9CdkYsUUFBcEIsQ0FBNkIsWUFBN0IsQ0FBRCxJQUErQyxDQUFDK1MsVUFBVSxDQUFDeE4sUUFBWCxDQUFvQnZGLFFBQXBCLENBQTZCLFlBQTdCLENBQW5ELEVBQThGLE9BQU94UCxRQUFRLENBQUN3ZSxjQUFULENBQXdCemhCLEVBQXhCLEVBQTRCc1UsTUFBNUIsRUFBUDs7QUFFOUYsTUFBSThuQixRQUFRLEdBQUcsQ0FBQ2xaLElBQUQsRUFBT2plLElBQVAsS0FBZ0I7QUFDM0IsUUFBRyxDQUFDa1gsS0FBSyxDQUFDK0csSUFBRCxDQUFULEVBQWdCO0FBQ1pnTix1REFBUyxDQUFDLG9FQUFrRWhOLElBQW5FLEVBQXlFO0FBQUU7QUFDaEZrTixlQUFPLEVBQUU7QUFDTCx3QkFBYzdNLCtDQUFBLENBQWdCOFkscUJBQWhCLEdBQXdDQyxTQURqRCxDQUMyRDs7QUFEM0Q7QUFEcUUsT0FBekUsQ0FBVCxDQUlHL1YsSUFKSCxDQUlRLE1BQU00QixHQUFOLElBQWE7QUFDakIsWUFBR0EsR0FBRyxDQUFDOEcsTUFBSixLQUFlLEdBQWxCLEVBQXNCLE9BQU93TSxZQUFZLENBQUN2WSxJQUFELEVBQU9qZSxJQUFQLEVBQWFqRixFQUFiLENBQW5CO0FBQ3RCLGNBQU11OEIsTUFBTSxHQUFHLE1BQU1wVSxHQUFHLENBQUNrSCxJQUFKLEVBQXJCO0FBRUFsVCxhQUFLLENBQUMrRyxJQUFELENBQUwsR0FBY3FaLE1BQWQ7QUFFQUosd0JBQWdCLENBQUNuOEIsRUFBRCxFQUFLdThCLE1BQUwsRUFBYS9XLFVBQVUsQ0FBQ3hOLFFBQXhCLENBQWhCO0FBQ0gsT0FYRCxFQVdHc1gsS0FYSCxDQVdTLE1BQUksQ0FBRSxDQVhmO0FBWUgsS0FiRCxNQWFLO0FBQ0QsWUFBTWlOLE1BQU0sR0FBR3BnQixLQUFLLENBQUMrRyxJQUFELENBQXBCO0FBRUFpWixzQkFBZ0IsQ0FBQ244QixFQUFELEVBQUt1OEIsTUFBTCxFQUFhL1csVUFBVSxDQUFDeE4sUUFBeEIsQ0FBaEI7QUFDSDtBQUNKLEdBbkJEOztBQXFCQSxNQUFHdWpCLE1BQU0sQ0FBQy9WLFVBQVUsQ0FBQ2hoQixHQUFaLENBQVQsRUFBMEIsT0FBTzQzQixRQUFRLENBQUNiLE1BQU0sQ0FBQy9WLFVBQVUsQ0FBQ2hoQixHQUFaLENBQVAsQ0FBZjtBQUUxQjByQixtREFBUyxDQUFDMUssVUFBVSxDQUFDaGhCLEdBQVosRUFBaUI7QUFDdEI0ckIsV0FBTyxFQUFFO0FBQ0wsb0JBQWM3TSwrQ0FBQSxDQUFnQjhZLHFCQUFoQixHQUF3Q0M7QUFEakQ7QUFEYSxHQUFqQixDQUFULENBSUcvVixJQUpILENBSVE0QixHQUFHLElBQUk7QUFDWCxRQUFHQSxHQUFHLENBQUM4RyxNQUFKLEtBQWUsR0FBbEIsRUFBc0IsTUFBTSxJQUFJM2tCLEtBQUosQ0FBVSxxQkFBVixDQUFOO0FBQ3RCLFVBQU00WSxJQUFJLEdBQUdzWixpREFBQSxDQUFrQixRQUFsQixDQUFiO0FBQ0EsUUFBSXYzQixJQUFJLEdBQUd3M0IsTUFBTSxDQUFDQyxLQUFQLENBQWEsQ0FBYixDQUFYO0FBQ0F2VSxPQUFHLENBQUNqbEIsSUFBSixDQUFTMGxCLEVBQVQsQ0FBWSxNQUFaLEVBQW9CK1QsS0FBSyxJQUFJO0FBQ3pCMTNCLFVBQUksR0FBR3czQixNQUFNLENBQUNHLE1BQVAsQ0FBYyxDQUFDMzNCLElBQUQsRUFBTzAzQixLQUFQLENBQWQsQ0FBUDtBQUNBelosVUFBSSxDQUFDNE4sTUFBTCxDQUFZNkwsS0FBWjtBQUNILEtBSEQ7QUFJQXhVLE9BQUcsQ0FBQ2psQixJQUFKLENBQVMwbEIsRUFBVCxDQUFZLEtBQVosRUFBbUIsTUFBTTtBQUNyQixZQUFNaVUsVUFBVSxHQUFHM1osSUFBSSxDQUFDNFosTUFBTCxDQUFZLEtBQVosQ0FBbkI7QUFFQXZCLFlBQU0sQ0FBQy9WLFVBQVUsQ0FBQ2hoQixHQUFaLENBQU4sR0FBeUJxNEIsVUFBekI7QUFDQVosZUFBUyxDQUFDWSxVQUFELENBQVQsR0FBd0JyWCxVQUFVLENBQUNoaEIsR0FBbkM7QUFFQTQzQixjQUFRLENBQUNTLFVBQUQsRUFBYTUzQixJQUFiLENBQVI7QUFDSCxLQVBEO0FBUUgsR0FwQkQsRUFvQkdxcUIsS0FwQkgsQ0FvQlMsTUFBSSxDQUFFLENBcEJmO0FBcUJIOztBQUVELElBQUl5TixnQkFBZ0IsR0FBRzUyQixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQyQixtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBdkI7QUFDQSxJQUFJQyxXQUFXLEdBQUc5MkIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM4MkIsY0FBckIsRUFBcUMsQ0FBckMsQ0FBbEI7QUFFQTs7Ozs7O0FBS0EsU0FBU2YsZ0JBQVQsQ0FBMEJuOEIsRUFBMUIsRUFBOEJ1OEIsTUFBOUIsRUFBc0N2a0IsUUFBdEMsRUFBK0M7QUFDM0MsUUFBTW1PLEdBQUcsR0FBR2xqQixRQUFRLENBQUN3ZSxjQUFULENBQXdCemhCLEVBQXhCLENBQVo7QUFDQSxNQUFHLENBQUNtbUIsR0FBRCxJQUFRQSxHQUFHLENBQUNDLFVBQUosQ0FBZS9nQixNQUFmLEdBQXdCLENBQW5DLEVBQXFDLE9BRk0sQ0FFQzs7QUFFNUMsTUFBRyxDQUFDMDNCLGdCQUFKLEVBQXFCQSxnQkFBZ0IsR0FBRzUyQixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQyQixtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBbkI7QUFDckIsTUFBRyxDQUFDQyxXQUFKLEVBQWdCQSxXQUFXLEdBQUc5MkIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM4MkIsY0FBckIsRUFBcUMsQ0FBckMsQ0FBZDtBQUdoQmx6QixTQUFPLENBQUNDLEdBQVIsQ0FBWXN5QixNQUFaOztBQUNBLE1BQUdBLE1BQU0sQ0FBQ1AsT0FBVixFQUFrQjtBQUNkLFFBQUc7QUFDQzdWLFNBQUcsQ0FBQ3NILFVBQUosQ0FBZWpZLEtBQWYsQ0FBcUIybkIsV0FBckIsR0FBbUMsa0JBQW5DO0FBQ0E7Ozs7O0FBSUEsVUFBSUMsUUFBUSxHQUFJNXZCLElBQUQsSUFBVTtBQUNyQixhQUFJLElBQUkwRyxLQUFSLElBQWlCMUcsSUFBSSxDQUFDMkcsUUFBdEIsRUFBK0I7QUFDM0IsY0FBR0QsS0FBSyxDQUFDMFosT0FBTixLQUFrQixHQUFyQixFQUF5QjtBQUNyQjFaLGlCQUFLLENBQUNxSyxnQkFBTixDQUF1QixPQUF2QixFQUFpQ25ZLENBQUQsSUFBTztBQUNuQ0EsZUFBQyxDQUFDdkgsY0FBRjtBQUNBdUgsZUFBQyxDQUFDdWxCLHdCQUFGO0FBRUE5cEIsNERBQUssQ0FBQzRLLHFCQUFOLENBQ0ksMENBREosRUFFSSxTQUFPOHZCLE1BQU0sQ0FBQ3o4QixJQUFQLENBQVkyRSxXQUFaLEVBQVAsR0FBaUMsS0FBakMsR0FBdUN1VCxRQUF2QyxHQUFnRCwyQkFBaEQsR0FBNEV1a0IsTUFBTSxDQUFDTCxJQUFuRixHQUF3RixxRkFGNUYsRUFHSTtBQUNJdmUsMkJBQVcsRUFBRSxpQkFEakI7QUFFSWpSLDBCQUFVLEVBQUUsU0FGaEI7QUFHSTJ3QixzQkFBTSxFQUFFLElBSFo7QUFJSUMsd0JBQVEsRUFBRSxNQUFNLENBQUUsQ0FKdEI7QUFLSTFmLHlCQUFTLEVBQUUsTUFBTTtBQUNiMkYsaUVBQUEsQ0FBZ0JnYSxLQUFoQixDQUFzQkMsWUFBdEIsQ0FBbUN0cEIsS0FBSyxDQUFDc08sSUFBekM7QUFDSDtBQVBMLGVBSEo7QUFhSCxhQWpCRDtBQWtCSCxXQW5CRCxNQW1CTSxJQUFHLENBQUMsS0FBRCxFQUFROWQsUUFBUixDQUFpQndQLEtBQUssQ0FBQzBaLE9BQU4sQ0FBY25wQixXQUFkLEVBQWpCLENBQUgsRUFBaUQ7QUFDbkQyNEIsb0JBQVEsQ0FBQ2xwQixLQUFELENBQVI7QUFDSDtBQUNKO0FBQ0osT0F6QkQ7O0FBMEJBa3BCLGNBQVEsQ0FBQ2pYLEdBQUcsQ0FBQ3NILFVBQUwsQ0FBUjtBQUNILEtBakNELENBaUNDLE9BQU1ybkIsQ0FBTixFQUFRO0FBQ0w0RCxhQUFPLENBQUNzSCxLQUFSLENBQWNsTCxDQUFkO0FBQ0g7O0FBQ0RwSCwrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQmhvQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCcStCLHVEQUF6QixFQUFzQztBQUFDaDFCLFVBQUksRUFBRTh6QixNQUFNLENBQUN6OEIsSUFBUCxHQUFZLEdBQVosR0FBZ0J5OEIsTUFBTSxDQUFDNXpCLElBQXZCLEdBQTRCO0FBQW5DLEtBQXRDLEVBQ2pCM0osMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUV5OUIsZ0JBQWdCLENBQUNDLG1CQUE3QjtBQUFrRHhuQixXQUFLLEVBQUU7QUFBQ2tSLGFBQUssRUFBRSxNQUFSO0FBQWdCbU8sY0FBTSxFQUFFO0FBQXhCO0FBQXpELEtBQWhDLEVBQ0k3MUIsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU2RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3FnQixHQUFyQixFQUEwQixDQUExQixFQUE2QkEsR0FBekM7QUFBOEMscUJBQWMsT0FBNUQ7QUFBb0VDLFdBQUssRUFBQyxNQUExRTtBQUFpRm1PLFlBQU0sRUFBQyxNQUF4RjtBQUErRjZJLGFBQU8sRUFBQztBQUF2RyxLQUFoQyxFQUNJMStCLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFDN0J1K0IsT0FBQyxFQUFDLEdBRDJCO0FBRTdCQyxPQUFDLEVBQUMsR0FGMkI7QUFHN0JsWCxXQUFLLEVBQUMsSUFIdUI7QUFJN0JtTyxZQUFNLEVBQUMsSUFKc0I7QUFLN0JnSixVQUFJLEVBQUMsdUNBTHdCO0FBTTdCQyxVQUFJLEVBQUMsU0FOd0I7QUFPN0JELFVBQUksRUFBQywyQkFQd0I7QUFRN0J2K0IsZUFBUyxFQUFDNkcsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMyM0IsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBO0FBUnBCLEtBQWpDLENBREosQ0FESixDQURpQixDQUFyQixFQWVHNVgsR0FmSDtBQWdCSCxHQXJERCxNQXFETSxJQUFHLENBQUNvVyxNQUFNLENBQUN5QixRQUFYLEVBQW9CO0FBQ3RCN1gsT0FBRyxDQUFDc0gsVUFBSixDQUFlalksS0FBZixDQUFxQjJuQixXQUFyQixHQUFtQyxTQUFuQztBQUNBbitCLCtDQUFJLENBQUMrbkIsUUFBTCxDQUFjQyxNQUFkLENBQXFCaG9CLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJxK0IsdURBQXpCLEVBQXNDO0FBQUNoMUIsVUFBSSxFQUFFOHpCLE1BQU0sQ0FBQ3o4QixJQUFQLEdBQVksR0FBWixHQUFnQnk4QixNQUFNLENBQUM1ekIsSUFBdkIsR0FBNEI7QUFBbkMsS0FBdEMsRUFDakIzSiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRXk5QixnQkFBZ0IsQ0FBQ0MsbUJBQTdCO0FBQWtEeG5CLFdBQUssRUFBRTtBQUFDa1IsYUFBSyxFQUFFLE1BQVI7QUFBZ0JtTyxjQUFNLEVBQUU7QUFBeEI7QUFBekQsS0FBaEMsRUFDSTcxQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRXk5QixnQkFBZ0IsQ0FBQ2tCLFVBQTdCO0FBQXlDLHFCQUFjLE9BQXZEO0FBQStEdlgsV0FBSyxFQUFDLE1BQXJFO0FBQTRFbU8sWUFBTSxFQUFDLE1BQW5GO0FBQTBGNkksYUFBTyxFQUFDO0FBQWxHLEtBQWhDLEVBQ0kxK0IsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDMCtCLFVBQUksRUFBQyxTQUFOO0FBQWlCLG1CQUFZLFNBQTdCO0FBQXVDbkQsT0FBQyxFQUFDO0FBQXpDLEtBQWpDLENBREosQ0FESixFQUlJMzdCLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFMjlCLFdBQVcsQ0FBQ0M7QUFBeEIsS0FBaEMsRUFDSWwrQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUMscUJBQWMsT0FBZjtBQUF1QnNuQixXQUFLLEVBQUMsTUFBN0I7QUFBb0NtTyxZQUFNLEVBQUMsTUFBM0M7QUFBa0Q2SSxhQUFPLEVBQUM7QUFBMUQsS0FBaEMsRUFDSTErQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUMwK0IsVUFBSSxFQUFDLFNBQU47QUFBZ0JuRCxPQUFDLEVBQUM7QUFBbEIsS0FBakMsQ0FESixDQURKLENBSkosQ0FEaUIsQ0FBckIsRUFXR3hVLEdBWEg7QUFZSCxHQWRLLE1BY0Q7QUFDREEsT0FBRyxDQUFDc0gsVUFBSixDQUFlalksS0FBZixDQUFxQjJuQixXQUFyQixHQUFtQyxTQUFuQztBQUNBbitCLCtDQUFJLENBQUMrbkIsUUFBTCxDQUFjQyxNQUFkLENBQXFCaG9CLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJxK0IsdURBQXpCLEVBQXNDO0FBQUNoMUIsVUFBSSxFQUFFOHpCLE1BQU0sQ0FBQ3o4QixJQUFQLEdBQVksR0FBWixHQUFnQnk4QixNQUFNLENBQUM1ekIsSUFBdkIsR0FBNEIsMkNBQW5DO0FBQStFNk0sV0FBSyxFQUFDO0FBQXJGLEtBQXRDLEVBQ2pCeFcsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUV5OUIsZ0JBQWdCLENBQUNDLG1CQUE3QjtBQUFrRHhuQixXQUFLLEVBQUU7QUFBQ2tSLGFBQUssRUFBRSxNQUFSO0FBQWdCbU8sY0FBTSxFQUFFO0FBQXhCO0FBQXpELEtBQWhDLEVBQ0k3MUIsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUV5OUIsZ0JBQWdCLENBQUNrQixVQUE3QjtBQUF5QyxxQkFBYyxPQUF2RDtBQUErRHZYLFdBQUssRUFBQyxNQUFyRTtBQUE0RW1PLFlBQU0sRUFBQyxNQUFuRjtBQUEwRjZJLGFBQU8sRUFBQyxhQUFsRztBQUFnSFEsWUFBTSxFQUFDLFNBQXZIO0FBQWlJMW9CLFdBQUssRUFBQztBQUFDOVYsYUFBSyxFQUFDO0FBQVA7QUFBdkksS0FBaEMsRUFDSVYsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDMCtCLFVBQUksRUFBQyxjQUFOO0FBQXNCLG1CQUFZLFNBQWxDO0FBQTRDbkQsT0FBQyxFQUFDO0FBQTlDLEtBQWpDLENBREosQ0FESixFQUlJMzdCLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFMjlCLFdBQVcsQ0FBQ0M7QUFBeEIsS0FBaEMsRUFDSWwrQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUMscUJBQWMsT0FBZjtBQUF1QnNuQixXQUFLLEVBQUMsTUFBN0I7QUFBb0NtTyxZQUFNLEVBQUMsTUFBM0M7QUFBa0Q2SSxhQUFPLEVBQUM7QUFBMUQsS0FBaEMsRUFDSTErQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUMwK0IsVUFBSSxFQUFDLFNBQU47QUFBZ0JuRCxPQUFDLEVBQUM7QUFBbEIsS0FBakMsQ0FESixDQURKLENBSkosQ0FEaUIsQ0FBckIsRUFXR3hVLEdBWEg7QUFZSDtBQUNKLEM7Ozs7Ozs7Ozs7OztBQ2xWRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1nWSxZQUFOLENBQW1CO0FBQ2YsTUFBSTF1QixNQUFKLEdBQWE7QUFBQyxXQUFPbE4sdURBQWMsQ0FBQzJVLGFBQXRCO0FBQXFDOztBQURwQzs7QUFJbkJpbkIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUIwWixXQUF2QixHQUFxQyxrQkFBa0I7QUFDbkQsT0FBS21oQixjQUFMO0FBQ0F4OUIsMERBQWMsQ0FBQzhpQixNQUFmLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLEVBQTRCLElBQUksTUFBTW5oQix1REFBYyxDQUFDMGEsV0FBZixFQUFWLENBQTVCO0FBQ0EsUUFBTTJCLE9BQU8sR0FBRzdkLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWIsbURBQVosQ0FBaEI7O0FBQ0EsT0FBSyxJQUFJbVMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3NMLE9BQU8sQ0FBQ3ZaLE1BQTVCLEVBQW9DaU8sQ0FBQyxFQUFyQyxFQUF5QztBQUNyQyxRQUFJakgsTUFBSixFQUFZMUQsSUFBWjs7QUFFQSxRQUFJO0FBQ0EwRCxZQUFNLEdBQUdsTCxtREFBUyxDQUFDeWQsT0FBTyxDQUFDdEwsQ0FBRCxDQUFSLENBQVQsQ0FBc0JqSCxNQUEvQjtBQUNBMUQsVUFBSSxHQUFHMEQsTUFBTSxDQUFDcVAsT0FBUCxFQUFQO0FBQ0EsVUFBSXJQLE1BQU0sQ0FBQ2d5QixJQUFQLElBQWUsT0FBT2h5QixNQUFNLENBQUNneUIsSUFBZCxJQUF1QixVQUExQyxFQUFzRGh5QixNQUFNLENBQUNneUIsSUFBUDtBQUN6RCxLQUpELENBSUUsT0FBT2htQixHQUFQLEVBQVk7QUFDVmpYLDREQUFZLENBQUN1SCxJQUFELENBQVosR0FBcUIsS0FBckI7QUFDQTlHLG9EQUFLLENBQUN3VyxHQUFOLENBQVUsU0FBVixFQUFxQjFQLElBQUksR0FBRyx1QkFBNUIsRUFBcUQwUCxHQUFyRDtBQUNBelgsOERBQWMsQ0FBQ21RLElBQWYsQ0FBb0I7QUFBQ3BJLFlBQUksRUFBRUEsSUFBUDtBQUFhcVQsWUFBSSxFQUFFN2EsbURBQVMsQ0FBQ3lkLE9BQU8sQ0FBQ3RMLENBQUQsQ0FBUixDQUFULENBQXNCMEUsUUFBekM7QUFBbUR6USxlQUFPLEVBQUUsNEJBQTVEO0FBQTBGK0osYUFBSyxFQUFFO0FBQUMvSixpQkFBTyxFQUFFOFEsR0FBRyxDQUFDOVEsT0FBZDtBQUF1QjBVLGVBQUssRUFBRTVELEdBQUcsQ0FBQzREO0FBQWxDO0FBQWpHLE9BQXBCO0FBQ0E7QUFDSDs7QUFFRCxRQUFJLENBQUM3YSxzREFBWSxDQUFDdUgsSUFBRCxDQUFqQixFQUF5QnZILHNEQUFZLENBQUN1SCxJQUFELENBQVosR0FBcUIsS0FBckI7O0FBRXpCLFFBQUl2SCxzREFBWSxDQUFDdUgsSUFBRCxDQUFoQixFQUF3QjtBQUNwQixVQUFJO0FBQ0EwRCxjQUFNLENBQUM1QyxLQUFQO0FBQ0EsWUFBSWxKLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUNpRyxTQUFOLENBQWlCLEdBQUV1RSxNQUFNLENBQUNxUCxPQUFQLEVBQWlCLEtBQUlyUCxNQUFNLENBQUNwUCxVQUFQLEVBQW9CLGVBQTVEO0FBQ3BDLE9BSEQsQ0FHRSxPQUFPb2IsR0FBUCxFQUFZO0FBQ1ZqWCw4REFBWSxDQUFDdUgsSUFBRCxDQUFaLEdBQXFCLEtBQXJCO0FBQ0E5RyxzREFBSyxDQUFDd1csR0FBTixDQUFVLFNBQVYsRUFBcUIxUCxJQUFJLEdBQUcsd0JBQTVCLEVBQXNEMFAsR0FBdEQ7QUFDQXpYLGdFQUFjLENBQUNtUSxJQUFmLENBQW9CO0FBQUNwSSxjQUFJLEVBQUVBLElBQVA7QUFBYXFULGNBQUksRUFBRTdhLG1EQUFTLENBQUN5ZCxPQUFPLENBQUN0TCxDQUFELENBQVIsQ0FBVCxDQUFzQjBFLFFBQXpDO0FBQW1EelEsaUJBQU8sRUFBRSw2QkFBNUQ7QUFBMkYrSixlQUFLLEVBQUU7QUFBQy9KLG1CQUFPLEVBQUU4USxHQUFHLENBQUM5USxPQUFkO0FBQXVCMFUsaUJBQUssRUFBRTVELEdBQUcsQ0FBQzREO0FBQWxDO0FBQWxHLFNBQXBCO0FBQ0g7QUFDSjtBQUNKOztBQUNELE9BQUtxaUIsY0FBTDs7QUFFQXY3QixxQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JwRixNQUFwQixDQUEyQjArQixxQkFBM0IsR0FBbUR6VCxFQUFuRCxDQUFzRCxzQkFBdEQsRUFBOEUsS0FBSzJWLGFBQUwsQ0FBbUJ0NkIsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBOUUsRUFqQ21ELENBa0NuRDs7QUFDSCxDQW5DRDs7QUFxQ0FrNkIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJpN0IsV0FBdkIsR0FBcUMsVUFBU255QixNQUFULEVBQWlCdUQsTUFBTSxHQUFHLEtBQTFCLEVBQWlDO0FBQ2xFLE1BQUk7QUFDQXpPLHVEQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCNUMsS0FBekI7QUFDQSxRQUFJbEosd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3FQLE1BQXBDLEVBQTRDL04sOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRTNHLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcVAsT0FBekIsRUFBbUMsS0FBSXZhLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcFAsVUFBekIsRUFBc0MsZUFBaEc7QUFDL0MsR0FIRCxDQUlBLE9BQU9vYixHQUFQLEVBQVk7QUFDUixRQUFJOVgsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3FQLE1BQXBDLEVBQTRDL04sOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRTNHLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcVAsT0FBekIsRUFBbUMsS0FBSXZhLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcFAsVUFBekIsRUFBc0Msd0JBQWhHLEVBQXlIO0FBQUM2QyxVQUFJLEVBQUU7QUFBUCxLQUF6SDtBQUM1Q3NCLDBEQUFZLENBQUNpTCxNQUFELENBQVosR0FBdUIsS0FBdkI7QUFDQSxTQUFLaXlCLGNBQUw7QUFDQXo4QixrREFBSyxDQUFDd1csR0FBTixDQUFVLFNBQVYsRUFBcUJoTSxNQUFNLEdBQUcsd0JBQTlCLEVBQXdEZ00sR0FBeEQ7QUFDSDtBQUNKLENBWEQ7O0FBYUE4bEIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJrN0IsVUFBdkIsR0FBb0MsVUFBU3B5QixNQUFULEVBQWlCdUQsTUFBTSxHQUFHLEtBQTFCLEVBQWlDO0FBQ2pFLE1BQUk7QUFDQXpPLHVEQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcUYsSUFBekI7QUFDQSxRQUFJblIsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3FQLE1BQXBDLEVBQTRDL04sOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRTNHLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcVAsT0FBekIsRUFBbUMsS0FBSXZhLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcFAsVUFBekIsRUFBc0MsZUFBaEc7QUFDL0MsR0FIRCxDQUlBLE9BQU9vYixHQUFQLEVBQVk7QUFDUixRQUFJOVgsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3FQLE1BQXBDLEVBQTRDL04sOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRTNHLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcVAsT0FBekIsRUFBbUMsS0FBSXZhLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcFAsVUFBekIsRUFBc0Msd0JBQWhHLEVBQXlIO0FBQUM2QyxVQUFJLEVBQUU7QUFBUCxLQUF6SDtBQUM1QytCLGtEQUFLLENBQUN3VyxHQUFOLENBQVUsU0FBVixFQUFxQmxYLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCcVAsT0FBekIsS0FBcUMsd0JBQTFELEVBQW9GckQsR0FBcEY7QUFDSDtBQUNKLENBVEQ7O0FBV0E4bEIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJtN0IsWUFBdkIsR0FBc0MsVUFBVXJ5QixNQUFWLEVBQWtCdUQsTUFBTSxHQUFHLEtBQTNCLEVBQWtDO0FBQ3BFLE1BQUl4TyxzREFBWSxDQUFDaUwsTUFBRCxDQUFoQixFQUEwQjtBQUMxQmpMLHdEQUFZLENBQUNpTCxNQUFELENBQVosR0FBdUIsSUFBdkI7QUFDQSxPQUFLaXlCLGNBQUw7QUFDQSxPQUFLRSxXQUFMLENBQWlCbnlCLE1BQWpCLEVBQXlCdUQsTUFBekI7QUFDSCxDQUxEOztBQU9BdXVCLFlBQVksQ0FBQzU2QixTQUFiLENBQXVCMkQsTUFBdkIsR0FBZ0MsVUFBVW1GLE1BQVYsRUFBa0J1RCxNQUFNLEdBQUcsS0FBM0IsRUFBa0M7QUFDOUQsU0FBTyxLQUFLOHVCLFlBQUwsQ0FBa0JyeUIsTUFBbEIsRUFBMEJ1RCxNQUExQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXV1QixZQUFZLENBQUM1NkIsU0FBYixDQUF1Qm83QixhQUF2QixHQUF1QyxVQUFVdHlCLE1BQVYsRUFBa0J1RCxNQUFNLEdBQUcsS0FBM0IsRUFBa0M7QUFDckUsTUFBSSxDQUFDeE8sc0RBQVksQ0FBQ2lMLE1BQUQsQ0FBakIsRUFBMkI7QUFDM0JqTCx3REFBWSxDQUFDaUwsTUFBRCxDQUFaLEdBQXVCLEtBQXZCO0FBQ0EsT0FBS2l5QixjQUFMO0FBQ0EsT0FBS0csVUFBTCxDQUFnQnB5QixNQUFoQixFQUF3QnVELE1BQXhCO0FBQ0gsQ0FMRDs7QUFPQXV1QixZQUFZLENBQUM1NkIsU0FBYixDQUF1QjZELE9BQXZCLEdBQWlDLFVBQVVpRixNQUFWLEVBQWtCdUQsTUFBTSxHQUFHLEtBQTNCLEVBQWtDO0FBQy9ELFNBQU8sS0FBSyt1QixhQUFMLENBQW1CdHlCLE1BQW5CLEVBQTJCdUQsTUFBM0IsQ0FBUDtBQUNILENBRkQ7O0FBSUF1dUIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJxN0IsWUFBdkIsR0FBc0MsVUFBVXZ5QixNQUFWLEVBQWtCO0FBQ3BELE1BQUlqTCxzREFBWSxDQUFDaUwsTUFBRCxDQUFoQixFQUEwQixLQUFLc3lCLGFBQUwsQ0FBbUJ0eUIsTUFBbkIsRUFBMUIsS0FDSyxLQUFLcXlCLFlBQUwsQ0FBa0JyeUIsTUFBbEI7QUFDUixDQUhEOztBQUtBOHhCLFlBQVksQ0FBQzU2QixTQUFiLENBQXVCb00sTUFBdkIsR0FBZ0MsVUFBVXRELE1BQVYsRUFBa0J1RCxNQUFNLEdBQUcsS0FBM0IsRUFBa0M7QUFDOUQsU0FBTyxLQUFLZ3ZCLFlBQUwsQ0FBa0J2eUIsTUFBbEIsRUFBMEJ1RCxNQUExQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXV1QixZQUFZLENBQUM1NkIsU0FBYixDQUF1QnNWLFVBQXZCLEdBQW9DLGdCQUFlYixRQUFmLEVBQXlCO0FBQ3pELFFBQU0xRyxLQUFLLEdBQUcsTUFBTS9PLHVEQUFjLENBQUN3WixXQUFmLENBQTJCL0QsUUFBM0IsRUFBcUMsUUFBckMsQ0FBcEI7O0FBQ0EsTUFBSTFHLEtBQUosRUFBVztBQUNQLFFBQUkvUSx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUNzQiw4Q0FBSyxDQUFDOGMsaUJBQU4sQ0FBd0I7QUFBQ0MsYUFBTyxFQUFFLENBQUN0TixLQUFEO0FBQVYsS0FBeEI7QUFDakMsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUNpRyxTQUFOLENBQWlCLEdBQUVrUSxRQUFTLHVCQUE1QixFQUFvRDtBQUFDbFksVUFBSSxFQUFFO0FBQVAsS0FBcEQ7QUFDakMsV0FBTytCLDhDQUFLLENBQUN3VyxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRUwsUUFBUyx1QkFBeEMsRUFBZ0UxRyxLQUFoRSxDQUFQO0FBQ0g7O0FBQ0QsUUFBTWpGLE1BQU0sR0FBR3RMLE1BQU0sQ0FBQzZiLE1BQVAsQ0FBY3piLG1EQUFkLEVBQXlCOUMsSUFBekIsQ0FBOEJ3Z0MsQ0FBQyxJQUFJQSxDQUFDLENBQUM3bUIsUUFBRixJQUFjQSxRQUFqRCxFQUEyRDNMLE1BQTFFOztBQUNBLE1BQUk7QUFBRSxRQUFJQSxNQUFNLENBQUNneUIsSUFBUCxJQUFlLE9BQU9oeUIsTUFBTSxDQUFDZ3lCLElBQWQsSUFBdUIsVUFBMUMsRUFBc0RoeUIsTUFBTSxDQUFDZ3lCLElBQVA7QUFBZSxHQUEzRSxDQUNBLE9BQU9obUIsR0FBUCxFQUFZO0FBQUMsUUFBSTlYLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUM4YyxpQkFBTixDQUF3QjtBQUFDQyxhQUFPLEVBQUUsQ0FBQ3ZHLEdBQUQ7QUFBVixLQUF4QjtBQUEyQzs7QUFDekZ4VyxnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUVvQyxNQUFNLENBQUNxUCxPQUFQLEVBQWlCLEtBQUlyUCxNQUFNLENBQUNwUCxVQUFQLEVBQW9CLGNBQXhFO0FBQ0EsTUFBSXNELHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUNpRyxTQUFOLENBQWlCLEdBQUV1RSxNQUFNLENBQUNxUCxPQUFQLEVBQWlCLEtBQUlyUCxNQUFNLENBQUNwUCxVQUFQLEVBQW9CLGNBQTVELEVBQTJFO0FBQUM2QyxRQUFJLEVBQUU7QUFBUCxHQUEzRTtBQUNqQ3NDLG1EQUFRLENBQUN5RyxRQUFULENBQWtCLGVBQWxCLEVBQW1Dd0QsTUFBTSxDQUFDcVAsT0FBUCxFQUFuQztBQUNILENBYkQ7O0FBZUF5aUIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJnVixZQUF2QixHQUFzQyxVQUFTdW1CLGNBQVQsRUFBeUI7QUFDM0QsUUFBTUMsUUFBUSxHQUFHaCtCLE1BQU0sQ0FBQzZiLE1BQVAsQ0FBY3piLG1EQUFkLEVBQXlCOUMsSUFBekIsQ0FBOEJ3Z0MsQ0FBQyxJQUFJQSxDQUFDLENBQUM3bUIsUUFBRixJQUFjOG1CLGNBQWpELEtBQW9FMzlCLG1EQUFTLENBQUMyOUIsY0FBRCxDQUE5RjtBQUNBLE1BQUksQ0FBQ0MsUUFBTCxFQUFlO0FBQ2YsUUFBTTF5QixNQUFNLEdBQUcweUIsUUFBUSxDQUFDMXlCLE1BQVQsQ0FBZ0JxUCxPQUFoQixFQUFmO0FBQ0EsTUFBSXRhLHNEQUFZLENBQUNpTCxNQUFELENBQWhCLEVBQTBCLEtBQUtzeUIsYUFBTCxDQUFtQnR5QixNQUFuQixFQUEyQixJQUEzQjtBQUMxQixRQUFNaUYsS0FBSyxHQUFHL08sdURBQWMsQ0FBQzJaLGFBQWYsQ0FBNkIvYSxtREFBUyxDQUFDa0wsTUFBRCxDQUFULENBQWtCMkwsUUFBL0MsRUFBeUQsUUFBekQsQ0FBZDtBQUNBLFNBQU83VyxtREFBUyxDQUFDa0wsTUFBRCxDQUFoQjs7QUFDQSxNQUFJaUYsS0FBSixFQUFXO0FBQ1AsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUM4YyxpQkFBTixDQUF3QjtBQUFDQyxhQUFPLEVBQUUsQ0FBQ3ROLEtBQUQ7QUFBVixLQUF4QjtBQUNqQyxRQUFJL1Esd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXVFLE1BQU8sMERBQTFCLEVBQXFGO0FBQUN2TSxVQUFJLEVBQUU7QUFBUCxLQUFyRjtBQUNqQyxXQUFPK0IsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFaE0sTUFBTywwREFBdEMsRUFBaUdpRixLQUFqRyxDQUFQO0FBQ0g7O0FBQ0R6UCxnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUVvQyxNQUFPLGdCQUF0QztBQUNBLE1BQUk5TCx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUNzQiw4Q0FBSyxDQUFDaUcsU0FBTixDQUFpQixHQUFFdUUsTUFBTyxnQkFBMUIsRUFBMkM7QUFBQ3ZNLFFBQUksRUFBRTtBQUFQLEdBQTNDO0FBQ2pDc0MsbURBQVEsQ0FBQ3lHLFFBQVQsQ0FBa0IsaUJBQWxCLEVBQXFDd0QsTUFBckM7QUFDSCxDQWZEOztBQWlCQTh4QixZQUFZLENBQUM1NkIsU0FBYixDQUF1QnVyQixNQUF2QixHQUFnQyxVQUFTZ1EsY0FBVCxFQUF5QjtBQUNyRCxRQUFNQyxRQUFRLEdBQUdoK0IsTUFBTSxDQUFDNmIsTUFBUCxDQUFjemIsbURBQWQsRUFBeUI5QyxJQUF6QixDQUE4QndnQyxDQUFDLElBQUlBLENBQUMsQ0FBQzdtQixRQUFGLElBQWM4bUIsY0FBakQsS0FBb0UzOUIsbURBQVMsQ0FBQzI5QixjQUFELENBQTlGO0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7QUFDZixPQUFLeG1CLFlBQUwsQ0FBa0J3bUIsUUFBUSxDQUFDL21CLFFBQTNCOztBQUNBLFFBQU1nUixRQUFRLEdBQUdqbUIsbUJBQU8sQ0FBQyxrQkFBRCxDQUFQLENBQWdCdVQsT0FBaEIsQ0FBd0IvVCx1REFBYyxDQUFDMlUsYUFBdkMsRUFBc0Q2bkIsUUFBUSxDQUFDL21CLFFBQS9ELENBQWpCOztBQUNBalYscUJBQU8sQ0FBQyxjQUFELENBQVAsQ0FBY3NuQixVQUFkLENBQXlCckIsUUFBekI7QUFDSCxDQU5EOztBQVFBbVYsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJ3VixZQUF2QixHQUFzQyxnQkFBZStsQixjQUFmLEVBQStCO0FBQ2pFLFFBQU1DLFFBQVEsR0FBR2grQixNQUFNLENBQUM2YixNQUFQLENBQWN6YixtREFBZCxFQUF5QjlDLElBQXpCLENBQThCd2dDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN21CLFFBQUYsSUFBYzhtQixjQUFqRCxLQUFvRTM5QixtREFBUyxDQUFDMjlCLGNBQUQsQ0FBOUY7QUFDQSxNQUFJLENBQUNDLFFBQUwsRUFBZSxPQUFPLEtBQUtsbUIsVUFBTCxDQUFnQmltQixjQUFoQixDQUFQO0FBQ2YsUUFBTXp5QixNQUFNLEdBQUcweUIsUUFBUSxDQUFDMXlCLE1BQVQsQ0FBZ0JxUCxPQUFoQixFQUFmO0FBQ0EsUUFBTXpVLE9BQU8sR0FBRzdGLHNEQUFZLENBQUNpTCxNQUFELENBQTVCO0FBQ0EsTUFBSXBGLE9BQUosRUFBYSxLQUFLdzNCLFVBQUwsQ0FBZ0JweUIsTUFBaEIsRUFBd0IsSUFBeEI7QUFDYixRQUFNaUYsS0FBSyxHQUFHLE1BQU0vTyx1REFBYyxDQUFDOFosYUFBZixDQUE2QmxiLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0IyTCxRQUEvQyxFQUF5RCxRQUF6RCxDQUFwQjs7QUFDQSxNQUFJMUcsS0FBSixFQUFXO0FBQ1AsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUM4YyxpQkFBTixDQUF3QjtBQUFDQyxhQUFPLEVBQUUsQ0FBQ3ROLEtBQUQ7QUFBVixLQUF4QjtBQUNqQyxRQUFJL1Esd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXVFLE1BQU8seUJBQTFCLEVBQW9EO0FBQUN2TSxVQUFJLEVBQUU7QUFBUCxLQUFwRDtBQUNqQyxXQUFPK0IsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFaE0sTUFBTyx5QkFBdEMsRUFBZ0VpRixLQUFoRSxDQUFQO0FBQ0g7O0FBQ0QsTUFBSW5RLG1EQUFTLENBQUNrTCxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCZ3lCLElBQXpCLElBQWlDLE9BQU9sOUIsbURBQVMsQ0FBQ2tMLE1BQUQsQ0FBVCxDQUFrQkEsTUFBbEIsQ0FBeUJneUIsSUFBaEMsSUFBeUMsVUFBOUUsRUFBMEZsOUIsbURBQVMsQ0FBQ2tMLE1BQUQsQ0FBVCxDQUFrQkEsTUFBbEIsQ0FBeUJneUIsSUFBekI7QUFDMUYsTUFBSXAzQixPQUFKLEVBQWEsS0FBS3UzQixXQUFMLENBQWlCbnlCLE1BQWpCLEVBQXlCLElBQXpCO0FBQ2J4SyxnREFBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUVvQyxNQUFPLEtBQUlsTCxtREFBUyxDQUFDa0wsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QnBQLFVBQXpCLEVBQXNDLGdCQUFoRjtBQUNBLE1BQUlzRCx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUNzQiw4Q0FBSyxDQUFDaUcsU0FBTixDQUFpQixHQUFFdUUsTUFBTyxLQUFJbEwsbURBQVMsQ0FBQ2tMLE1BQUQsQ0FBVCxDQUFrQkEsTUFBbEIsQ0FBeUJwUCxVQUF6QixFQUFzQyxnQkFBcEUsRUFBcUY7QUFBQzZDLFFBQUksRUFBRTtBQUFQLEdBQXJGO0FBQ2pDc0MsbURBQVEsQ0FBQ3lHLFFBQVQsQ0FBa0IsaUJBQWxCLEVBQXFDd0QsTUFBckM7QUFDSCxDQWpCRDs7QUFtQkE4eEIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJxTSxNQUF2QixHQUFnQyxVQUFTakgsSUFBVCxFQUFlO0FBQzNDLFNBQU8sS0FBS29RLFlBQUwsQ0FBa0JwUSxJQUFsQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXcxQixZQUFZLENBQUM1NkIsU0FBYixDQUF1Qnk3QixJQUF2QixHQUE4QixVQUFTRixjQUFULEVBQXlCO0FBQ25EOTBCLFNBQU8sQ0FBQ0MsR0FBUixDQUFZLFVBQVU2MEIsY0FBdEI7QUFDQSxRQUFNQyxRQUFRLEdBQUdoK0IsTUFBTSxDQUFDNmIsTUFBUCxDQUFjemIsbURBQWQsRUFBeUI5QyxJQUF6QixDQUE4QndnQyxDQUFDLElBQUlBLENBQUMsQ0FBQzdtQixRQUFGLElBQWM4bUIsY0FBakQsS0FBb0UzOUIsbURBQVMsQ0FBQzI5QixjQUFELENBQTlGO0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7O0FBQ2YsUUFBTS9WLFFBQVEsR0FBR2ptQixtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0J1VCxPQUFoQixDQUF3Qi9ULHVEQUFjLENBQUMyVSxhQUF2QyxFQUFzRDZuQixRQUFRLENBQUMvbUIsUUFBL0QsQ0FBakI7O0FBQ0FoTyxTQUFPLENBQUNDLEdBQVIsQ0FBWSxVQUFVK2UsUUFBdEI7O0FBQ0FqbUIscUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CdzZCLEtBQXBCLENBQTBCMEIsUUFBMUIsQ0FBb0MsR0FBRWpXLFFBQVMsRUFBL0M7QUFDSCxDQVBEOztBQVNBbVYsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUIyN0IsZ0JBQXZCLEdBQTBDLFlBQVc7QUFDakQsUUFBTXZHLE9BQU8sR0FBR3AyQix1REFBYyxDQUFDZ2EsY0FBZixDQUE4QixRQUE5QixDQUFoQjs7QUFDQSxPQUFLLE1BQU12RSxRQUFYLElBQXVCMmdCLE9BQU8sQ0FBQzVkLEtBQS9CLEVBQXNDLEtBQUtsQyxVQUFMLENBQWdCYixRQUFoQjs7QUFDdEMsT0FBSyxNQUFNclAsSUFBWCxJQUFtQmd3QixPQUFPLENBQUM5YixPQUEzQixFQUFvQyxLQUFLdEUsWUFBTCxDQUFrQjVQLElBQWxCO0FBQ3ZDLENBSkQ7O0FBTUF3MUIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUI2NkIsY0FBdkIsR0FBd0MsWUFBWTtBQUNoRCxRQUFNZSxLQUFLLEdBQUc3OEIsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsU0FBMUIsQ0FBZDs7QUFDQSxNQUFJMmUsS0FBSixFQUFXO0FBQ1BwK0IsVUFBTSxDQUFDMFUsTUFBUCxDQUFjclUsc0RBQWQsRUFBNEIrOUIsS0FBNUI7QUFDSDtBQUNKLENBTEQ7O0FBT0FoQixZQUFZLENBQUM1NkIsU0FBYixDQUF1Qis2QixjQUF2QixHQUF3QyxZQUFZO0FBQ2hEaDhCLG9EQUFTLENBQUMyb0IsZUFBVixDQUEwQixTQUExQixFQUFxQzdwQixzREFBckM7QUFDSCxDQUZEOztBQUlBKzhCLFlBQVksQ0FBQzU2QixTQUFiLENBQXVCNjdCLFVBQXZCLEdBQW9DLFlBQVk7QUFDNUMsUUFBTXhnQixPQUFPLEdBQUc3ZCxNQUFNLENBQUNpQixJQUFQLENBQVliLG1EQUFaLENBQWhCOztBQUNBLE9BQUssSUFBSW1TLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdzTCxPQUFPLENBQUN2WixNQUE1QixFQUFvQ2lPLENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBTWpILE1BQU0sR0FBR2xMLG1EQUFTLENBQUN5ZCxPQUFPLENBQUN0TCxDQUFELENBQVIsQ0FBVCxDQUFzQmpILE1BQXJDO0FBQ0EsUUFBSSxDQUFDakwsc0RBQVksQ0FBQ2lMLE1BQU0sQ0FBQ3FQLE9BQVAsRUFBRCxDQUFqQixFQUFxQzs7QUFDckMsUUFBSSxPQUFPclAsTUFBTSxDQUFDZ3pCLFNBQWQsS0FBNEIsVUFBaEMsRUFBNEM7QUFDeEMsVUFBSTtBQUFFaHpCLGNBQU0sQ0FBQ2d6QixTQUFQO0FBQXFCLE9BQTNCLENBQ0EsT0FBT2huQixHQUFQLEVBQVk7QUFBRXhXLHNEQUFLLENBQUN3VyxHQUFOLENBQVUsU0FBVixFQUFxQixrQ0FBa0NoTSxNQUFNLENBQUNxUCxPQUFQLEVBQWxDLEdBQXFELEdBQTFFLEVBQStFckQsR0FBL0U7QUFBc0Y7QUFDdkc7QUFDSjtBQUNKLENBVkQ7O0FBWUE4bEIsWUFBWSxDQUFDNTZCLFNBQWIsQ0FBdUJnN0IsYUFBdkIsR0FBdUMsWUFBWTtBQUMvQyxRQUFNM2YsT0FBTyxHQUFHN2QsTUFBTSxDQUFDaUIsSUFBUCxDQUFZYixtREFBWixDQUFoQjs7QUFDQSxPQUFLLElBQUltUyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHc0wsT0FBTyxDQUFDdlosTUFBNUIsRUFBb0NpTyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFVBQU1qSCxNQUFNLEdBQUdsTCxtREFBUyxDQUFDeWQsT0FBTyxDQUFDdEwsQ0FBRCxDQUFSLENBQVQsQ0FBc0JqSCxNQUFyQztBQUNBLFFBQUksQ0FBQ2pMLHNEQUFZLENBQUNpTCxNQUFNLENBQUNxUCxPQUFQLEVBQUQsQ0FBakIsRUFBcUM7O0FBQ3JDLFFBQUksT0FBT3JQLE1BQU0sQ0FBQ2l6QixRQUFkLEtBQTJCLFVBQS9CLEVBQTJDO0FBQ3ZDLFVBQUk7QUFBRWp6QixjQUFNLENBQUNpekIsUUFBUDtBQUFvQixPQUExQixDQUNBLE9BQU9qbkIsR0FBUCxFQUFZO0FBQUV4VyxzREFBSyxDQUFDd1csR0FBTixDQUFVLFNBQVYsRUFBcUIsaUNBQWlDaE0sTUFBTSxDQUFDcVAsT0FBUCxFQUFqQyxHQUFvRCxHQUF6RSxFQUE4RXJELEdBQTlFO0FBQXFGO0FBQ3RHO0FBQ0o7QUFDSixDQVZEOztBQVlBOGxCLFlBQVksQ0FBQzU2QixTQUFiLENBQXVCMGQsV0FBdkIsR0FBcUMsVUFBUzdhLENBQVQsRUFBWTtBQUM3QyxRQUFNd1ksT0FBTyxHQUFHN2QsTUFBTSxDQUFDaUIsSUFBUCxDQUFZYixtREFBWixDQUFoQjs7QUFDQSxPQUFLLElBQUltUyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHc0wsT0FBTyxDQUFDdlosTUFBNUIsRUFBb0NpTyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFVBQU1qSCxNQUFNLEdBQUdsTCxtREFBUyxDQUFDeWQsT0FBTyxDQUFDdEwsQ0FBRCxDQUFSLENBQVQsQ0FBc0JqSCxNQUFyQztBQUNBLFFBQUksQ0FBQ2pMLHNEQUFZLENBQUNpTCxNQUFNLENBQUNxUCxPQUFQLEVBQUQsQ0FBakIsRUFBcUM7O0FBQ3JDLFFBQUksT0FBT3JQLE1BQU0sQ0FBQ2lxQixRQUFkLEtBQTJCLFVBQS9CLEVBQTJDO0FBQ3ZDLFVBQUk7QUFBRWpxQixjQUFNLENBQUNpcUIsUUFBUCxDQUFnQmx3QixDQUFoQjtBQUFxQixPQUEzQixDQUNBLE9BQU9pUyxHQUFQLEVBQVk7QUFBRXhXLHNEQUFLLENBQUN3VyxHQUFOLENBQVUsU0FBVixFQUFxQixpQ0FBaUNoTSxNQUFNLENBQUNxUCxPQUFQLEVBQWpDLEdBQW9ELEdBQXpFLEVBQThFckQsR0FBOUU7QUFBcUY7QUFDdEc7QUFDSjtBQUNKLENBVkQ7O0FBWWUsbUVBQUk4bEIsWUFBSixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ25PQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNb0IsZ0JBQU4sQ0FBdUI7QUFFdEMzOEIsYUFBVyxHQUFHO0FBQ1YsU0FBSzQ4QixhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJ2N0IsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDSDs7QUFFRCxNQUFJNGlCLFNBQUosR0FBZ0I7QUFDWixXQUFPN25CLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJxZ0MsK0RBQXpCLEVBQWdDO0FBQUNDLFlBQU0sRUFBRSxlQUFUO0FBQTBCMS9CLFFBQUUsRUFBRTtBQUE5QixLQUFoQyxFQUE0RWhCLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJ1Z0MsdUVBQXpCLEVBQTRDO0FBQUNELFlBQU0sRUFBRTtBQUFULEtBQTVDLENBQTVFLENBQVA7QUFDSDs7QUFFRCxNQUFJRSxJQUFKLEdBQVc7QUFDUCxVQUFNQyxLQUFLLEdBQUc1OEIsUUFBUSxDQUFDd2UsY0FBVCxDQUF3QixlQUF4QixDQUFkOztBQUNBLFFBQUksQ0FBQ29lLEtBQUwsRUFBWTtBQUNSLFVBQUksQ0FBQyxLQUFLQyxVQUFMLEVBQUwsRUFBd0IsT0FBTyxJQUFQO0FBQ3hCLGFBQU8sS0FBS0YsSUFBWjtBQUNIOztBQUNELFdBQU9DLEtBQVA7QUFDSDs7QUFFREMsWUFBVSxHQUFHO0FBQ1QsUUFBSSxDQUNBQyxlQURBLElBRUEsQ0FDQTU1QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQ1QixNQUFGLElBQVk1NUIsQ0FBQyxDQUFDaWIsS0FBakMsRUFBd0MsQ0FBeEMsRUFBMkMyZSxNQUEzQyxDQUFrRGp0QixLQUFsRCxDQUF3RCxHQUF4RCxFQUE2RCxDQUE3RCxDQURBLENBRko7QUFLQSxVQUFNaXRCLE1BQU0sR0FBR3QwQixpREFBRyxDQUFDeWdCLEtBQUosQ0FBVSxlQUFhNFQsZUFBdkIsQ0FBZjtBQUNBLFFBQUksQ0FBQ0MsTUFBTCxFQUFhLE9BQU8sS0FBUDtBQUNiQSxVQUFNLENBQUMxVCxNQUFQLENBQWM1Z0IsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBa0IsMEJBQWxCLENBQWQ7QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFRDRuQixRQUFNLEdBQUc7QUFDTCxVQUFNNFksSUFBSSxHQUFHLEtBQUtBLElBQWxCOztBQUNBLFFBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1A1MUIsYUFBTyxDQUFDQyxHQUFSLENBQVksZ0NBQVo7QUFDQTtBQUNIOztBQUNEakwsK0NBQUksQ0FBQytuQixRQUFMLENBQWNDLE1BQWQsQ0FBcUIsS0FBS0gsU0FBMUIsRUFBcUMrWSxJQUFyQztBQUNIOztBQUVELE1BQUlLLE1BQUosR0FBYTtBQUNULFVBQU1DLEdBQUcsR0FBR3gwQixpREFBRyxDQUFDdE0sYUFBSixDQUFtQiw4QkFBNkJKLDJDQUFJLENBQUMrZ0IsWUFBTCxDQUFrQkUsUUFBUyxJQUEzRSxDQUFaO0FBQ0EsUUFBSSxDQUFDMWYsd0RBQWMsQ0FBQyxVQUFELENBQW5CLEVBQWlDMi9CLEdBQUcsQ0FBQzFxQixLQUFKLENBQVVzUSxPQUFWLEdBQW9CLE1BQXBCO0FBQ2pDLFVBQU1xSCxLQUFLLEdBQUd6aEIsaURBQUcsQ0FBQ3RNLGFBQUosQ0FBbUIsa0NBQWlDLG9CQUFvQkosMkNBQUksQ0FBQytnQixZQUFMLENBQWtCb2dCLGdCQUFpQixnQkFBM0csQ0FBZDtBQUNBaFQsU0FBSyxDQUFDNU8sZ0JBQU4sQ0FBdUIsT0FBdkIsRUFBZ0MsTUFBTTtBQUFDLFdBQUt5SSxNQUFMO0FBQWUsS0FBdEQ7QUFDQWtaLE9BQUcsQ0FBQzVULE1BQUosQ0FBV2EsS0FBWDtBQUNBLFdBQU8rUyxHQUFQO0FBQ0g7O0FBRURWLGVBQWEsR0FBRztBQUNaLFFBQUksQ0FDQVksaUJBREEsSUFFQSxDQUNBajZCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDaTZCLFFBQUYsSUFBY2o2QixDQUFDLENBQUNrNkIsY0FBbkMsRUFBbUQsQ0FBbkQsRUFBc0RELFFBRHRELENBRko7QUFLQSxRQUFJMzBCLGlEQUFHLENBQUN5Z0IsS0FBSixDQUFVLFlBQVYsQ0FBSixFQUE2QjtBQUM3QixVQUFNck0sT0FBTyxHQUFHOWdCLDJDQUFJLENBQUMrZ0IsWUFBTCxDQUFrQkQsT0FBbEIsQ0FBMEIvTSxLQUExQixDQUFnQyxHQUFoQyxFQUFxQyxDQUFyQyxDQUFoQjtBQUNBLFVBQU04USxNQUFNLEdBQUduWSxpREFBRyxDQUFDeWdCLEtBQUosQ0FBVyxJQUFHck0sT0FBUSxLQUFJc2dCLGlCQUFrQixnQkFBNUMsQ0FBZjtBQUNBMTBCLHFEQUFHLENBQUM5RixLQUFKLENBQVVpZSxNQUFWLEVBQWtCLEtBQUtvYyxNQUF2QjtBQUNIOztBQUVETSxXQUFTLEdBQUc7QUFDUixRQUFJLEtBQUtDLFVBQVQsRUFBcUI7QUFDckIsVUFBTUMsU0FBUyxHQUFHQyx1REFBYyxDQUFDcmlDLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDK0gsT0FBRixJQUFhL0gsQ0FBQyxDQUFDK0gsT0FBRixDQUFVOUgsV0FBVixJQUF5QixpQkFBL0QsQ0FBbEI7QUFDQSxVQUFNb2lDLFlBQVksR0FBR0QsdURBQWMsQ0FBQ3ppQyxpQkFBZixDQUFpQyxRQUFqQyxDQUFyQjtBQUNBLFFBQUksQ0FBQ3dpQyxTQUFELElBQWMsQ0FBQ0UsWUFBbkIsRUFBaUM5K0IsOENBQUssQ0FBQ0MsSUFBTixDQUFXLGNBQVgsRUFBMkIsZ0NBQTNCO0FBQ2pDLFNBQUswK0IsVUFBTCxHQUFrQjMrQiw4Q0FBSyxDQUFDNkQsV0FBTixDQUFrQis2QixTQUFTLEdBQUdBLFNBQUgsR0FBZUUsWUFBWSxDQUFDcDlCLFNBQXZELEVBQWtFazlCLFNBQVMsR0FBRyxTQUFILEdBQWUsUUFBMUYsRUFBb0c7QUFBQzc2QixXQUFLLEVBQUUsS0FBSzQ1QjtBQUFiLEtBQXBHLENBQWxCOztBQUNBLFNBQUtBLGFBQUw7QUFDSDs7QUFFRG9CLGNBQVksR0FBRztBQUNYLFNBQUtKLFVBQUw7QUFDQSxXQUFPLEtBQUtBLFVBQVo7QUFDQTkwQixxREFBRyxDQUFDeWdCLEtBQUosQ0FBVSxZQUFWLEVBQXdCN1gsTUFBeEI7QUFDSDs7QUExRXFDLENBQTNCLEVBQWYsRTs7Ozs7Ozs7Ozs7O0FDVEE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7QUFFQSxNQUFNaVAsUUFBUSxHQUFHeGdCLG1CQUFPLENBQUMsMEJBQUQsQ0FBeEI7O0FBQ0EsTUFBTW9ULEVBQUUsR0FBR3BULG1CQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQSxNQUFNbVQsSUFBSSxHQUFHblQsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFFQSxNQUFNODlCLGFBQWEsR0FBR3RkLFFBQVEsQ0FBQzVsQixNQUFULENBQWdCa2pDLGFBQXRDO0FBQ0EsTUFBTUMsV0FBVyxHQUFHdmQsUUFBUSxDQUFDNWxCLE1BQVQsQ0FBZ0IwK0IscUJBQWhCLEVBQXBCO0FBR2UsbUVBQUksTUFBTTBFLGFBQU4sQ0FBb0I7QUFDbkNuK0IsYUFBVyxHQUFHO0FBQ1YsUUFBSW8rQixhQUFhLEdBQUcsRUFBcEI7QUFDQSxRQUFJLzNCLE9BQU8sQ0FBQ2c0QixRQUFSLEtBQXFCLE9BQXpCLEVBQWtDRCxhQUFhLEdBQUc5cUIsSUFBSSxDQUFDSSxPQUFMLENBQWFyTixPQUFPLENBQUNpNEIsR0FBUixDQUFZQyxZQUF6QixFQUF1Qyx5QkFBdkMsQ0FBaEIsQ0FBbEMsS0FDSyxJQUFJbDRCLE9BQU8sQ0FBQ2c0QixRQUFSLEtBQXFCLE9BQXpCLEVBQWtDRCxhQUFhLEdBQUc5cUIsSUFBSSxDQUFDSSxPQUFMLENBQWFyTixPQUFPLENBQUNpNEIsR0FBUixDQUFZRSxJQUF6QixFQUErQix1QkFBL0IsQ0FBaEIsQ0FBbEMsS0FDQSxJQUFJbjRCLE9BQU8sQ0FBQ2c0QixRQUFSLEtBQXFCLFFBQXpCLEVBQW1DRCxhQUFhLEdBQUc5cUIsSUFBSSxDQUFDSSxPQUFMLENBQWFyTixPQUFPLENBQUNpNEIsR0FBUixDQUFZRSxJQUF6QixFQUErQiwyQ0FBL0IsQ0FBaEIsQ0FBbkMsS0FDQUosYUFBYSxHQUFHOXFCLElBQUksQ0FBQ0ksT0FBTCxDQUFhck4sT0FBTyxDQUFDaTRCLEdBQVIsQ0FBWUUsSUFBekIsRUFBK0Isa0JBQS9CLENBQWhCO0FBQ0xKLGlCQUFhLElBQUksdURBQWpCOztBQUNBLFFBQUk3cUIsRUFBRSxDQUFDeUUsVUFBSCxDQUFjb21CLGFBQWQsQ0FBSixFQUFrQztBQUM5QixZQUFNSyxRQUFRLEdBQUdsckIsRUFBRSxDQUFDdUcsV0FBSCxDQUFlc2tCLGFBQWYsQ0FBakI7QUFDQUEsbUJBQWEsR0FBRzlxQixJQUFJLENBQUNJLE9BQUwsQ0FBYTBxQixhQUFiLEVBQTRCSyxRQUFRLENBQUNBLFFBQVEsQ0FBQ2g4QixNQUFULEdBQWtCLENBQW5CLENBQXBDLENBQWhCO0FBQ0g7O0FBQ0QsU0FBSzI3QixhQUFMLEdBQXFCQSxhQUFyQjtBQUNBLFNBQUtNLG9CQUFMLEdBQTRCbnJCLEVBQUUsQ0FBQ3lFLFVBQUgsQ0FBY29tQixhQUFkLENBQTVCO0FBQ0EsU0FBSy9LLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjaHlCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFFQWxFLHNEQUFRLENBQUMsZ0JBQUQsQ0FBUixDQUEyQkksTUFBM0IsR0FBb0MsQ0FBQyxLQUFLbWhDLG9CQUExQztBQUNIOztBQUVEckwsVUFBUSxHQUFHO0FBQ1AsUUFBSSxDQUFDLEtBQUtxTCxvQkFBVixFQUFnQztBQUNoQ1QsaUJBQWEsQ0FBQ1UsdUJBQWQsQ0FBc0MsdUJBQXRDO0FBQ0EsVUFBTUMsVUFBVSxHQUFHWCxhQUFhLENBQUNZLG9CQUFkLENBQW1DLEtBQUtULGFBQXhDLENBQW5CO0FBRUEsUUFBSVEsVUFBSixFQUFnQjMvQiw4Q0FBSyxDQUFDb0ksR0FBTixDQUFVLGdCQUFWLEVBQTRCLHdDQUE1QixFQUFoQixLQUNLcEksOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE0QixvREFBNUI7QUFDUjs7QUFFRDVPLE9BQUssR0FBRztBQUNKaTRCLGdCQUFZLENBQUMsTUFBTVosV0FBVyxDQUFDbFksRUFBWixDQUFlLGlCQUFmLEVBQWtDLEtBQUtxTixRQUF2QyxDQUFQLENBQVo7QUFDQSxRQUFJNkssV0FBVyxDQUFDYSxnQkFBWixFQUFKLEVBQW9DLEtBQUsxTCxRQUFMO0FBQ3ZDOztBQUVEdmtCLE1BQUksR0FBRztBQUNIb3ZCLGVBQVcsQ0FBQ3R3QixjQUFaLENBQTJCLGlCQUEzQixFQUE4QyxLQUFLeWxCLFFBQW5EO0FBQ0g7O0FBbkNrQyxDQUF4QixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ1hBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNMkwsZ0JBQU4sQ0FBdUI7QUFFdENoL0IsYUFBVyxHQUFHO0FBQ1YsU0FBS2kvQixjQUFMLEdBQXNCLEtBQUtBLGNBQUwsQ0FBb0I1OUIsSUFBcEIsQ0FBeUIsSUFBekIsQ0FBdEI7QUFDQSxTQUFLOEssUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0EsU0FBSzY5QixjQUFMLEdBQXNCLEtBQUtBLGNBQUwsQ0FBb0I3OUIsSUFBcEIsQ0FBeUIsSUFBekIsQ0FBdEI7QUFDQSxTQUFLODlCLE9BQUwsR0FBZSxJQUFJQyw2REFBSixDQUE2QixLQUFLSCxjQUFsQyxDQUFmLENBSlUsQ0FLVjtBQUNBOztBQUNBLFNBQUtJLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQmgrQixJQUFsQixDQUF1QixJQUF2QixDQUFwQjtBQUNIOztBQUVELE1BQUkyN0IsSUFBSixHQUFXO0FBQ1AsVUFBTUMsS0FBSyxHQUFHbjBCLGtEQUFHLENBQUN5Z0IsS0FBSixDQUFVLDRCQUFWLENBQWQ7O0FBQ0EsUUFBSSxDQUFDMFQsS0FBTCxFQUFZO0FBQ1IsVUFBSSxDQUFDLEtBQUtDLFVBQUwsRUFBTCxFQUF3QixPQUFPLElBQVA7QUFDeEIsYUFBTyxLQUFLRixJQUFaO0FBQ0g7O0FBQ0QsV0FBT0MsS0FBUDtBQUNIOztBQUVEQyxZQUFVLEdBQUc7QUFDVCxRQUFJLENBQ0EzZSxjQURBLEVBRUErZ0IsWUFGQSxJQUdBLENBQ0EvN0IsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNpYixLQUFGLElBQVdqYixDQUFDLENBQUNrYixTQUFoQyxFQUEyQyxDQUEzQyxFQUE4Q0QsS0FBOUMsQ0FBb0R0TyxLQUFwRCxDQUEwRCxHQUExRCxFQUErRCxDQUEvRCxDQURBLEVBRUE1TSxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3dLLG1CQUFyQixFQUEwQyxDQUExQyxDQUZBLENBSEo7QUFPQSxVQUFNbXhCLE9BQU8sR0FBR3IyQixrREFBRyxDQUFDeWdCLEtBQUosQ0FBVSxNQUFJaEwsY0FBSixHQUFtQixJQUFuQixHQUF3QitnQixZQUFZLENBQUN0eEIsbUJBQWIsQ0FBaUNtQyxLQUFqQyxDQUF1QyxHQUF2QyxFQUE0QyxDQUE1QyxDQUF4QixHQUF1RSxLQUF2RSxHQUE2RW9PLGNBQTdFLEdBQTRGLDRCQUF0RyxDQUFoQjtBQUNBLFFBQUksQ0FBQzRnQixPQUFMLEVBQWMsT0FBTyxLQUFQO0FBQ2QsVUFBTW5DLElBQUksR0FBR2wwQixrREFBRyxDQUFDdE0sYUFBSixDQUFtQiw4Q0FBNkM4aUMsWUFBWSxDQUFDQyxhQUFjLG1CQUEzRixDQUFiO0FBQ0FKLFdBQU8sQ0FBQ3pWLE1BQVIsQ0FBZXNULElBQWY7QUFFQS85QixrREFBSyxDQUFDeU0sU0FBTixDQUFnQnN4QixJQUFoQixFQUFzQixNQUFNO0FBQ3hCNWdDLGlEQUFJLENBQUMrbkIsUUFBTCxDQUFjcWIsc0JBQWQsQ0FBcUN4QyxJQUFyQztBQUNILEtBRkQ7QUFHQSxXQUFPLElBQVA7QUFDSDs7QUFFRCxNQUFJeUMsWUFBSixHQUFtQjtBQUNmLFVBQU10aUMsUUFBUSxHQUFHLEtBQUt1aUMsV0FBTCxDQUFpQixNQUFqQixDQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSUMsR0FBSixDQUFRemlDLFFBQVEsQ0FBQ3dJLEdBQVQsQ0FBYThLLENBQUMsSUFBSUEsQ0FBQyxDQUFDaFQsUUFBcEIsQ0FBUixDQUFKLENBQW5CO0FBQ0EsVUFBTW9pQyxRQUFRLEdBQUdGLFVBQVUsQ0FBQ2g2QixHQUFYLENBQWV1TCxDQUFDLElBQUk7QUFBQyxhQUFPO0FBQUN2VyxhQUFLLEVBQUV1VyxDQUFSO0FBQVcvVCxnQkFBUSxFQUFFQSxRQUFRLENBQUM4TSxNQUFULENBQWdCd0csQ0FBQyxJQUFJQSxDQUFDLENBQUNoVCxRQUFGLElBQWN5VCxDQUFuQztBQUFyQixPQUFQO0FBQW9FLEtBQXpGLENBQWpCO0FBQ0EsV0FBTzJ1QixRQUFQO0FBQ0g7O0FBRUQsTUFBSUMsaUJBQUosR0FBd0I7QUFDcEIsVUFBTTNpQyxRQUFRLEdBQUcsS0FBS3VpQyxXQUFMLENBQWlCLFdBQWpCLENBQWpCO0FBQ0EsVUFBTUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJQyxHQUFKLENBQVF6aUMsUUFBUSxDQUFDd0ksR0FBVCxDQUFhOEssQ0FBQyxJQUFJQSxDQUFDLENBQUNoVCxRQUFwQixDQUFSLENBQUosQ0FBbkI7QUFDQSxVQUFNb2lDLFFBQVEsR0FBR0YsVUFBVSxDQUFDaDZCLEdBQVgsQ0FBZXVMLENBQUMsSUFBSTtBQUFDLGFBQU87QUFBQ3ZXLGFBQUssRUFBRXVXLENBQVI7QUFBVy9ULGdCQUFRLEVBQUVBLFFBQVEsQ0FBQzhNLE1BQVQsQ0FBZ0J3RyxDQUFDLElBQUlBLENBQUMsQ0FBQ2hULFFBQUYsSUFBY3lULENBQW5DO0FBQXJCLE9BQVA7QUFBb0UsS0FBekYsQ0FBakI7QUFDQSxXQUFPMnVCLFFBQVA7QUFDSDs7QUFFRCxNQUFJRSxnQkFBSixHQUF1QjtBQUNuQixXQUFPLEtBQUtMLFdBQUwsQ0FBaUIsUUFBakIsQ0FBUDtBQUNIOztBQUVELE1BQUlNLGNBQUosR0FBcUI7QUFDakIsV0FBTyxLQUFLTixXQUFMLENBQWlCLFFBQWpCLENBQVA7QUFDSDs7QUFFREEsYUFBVyxDQUFDamlDLFFBQUQsRUFBVztBQUNsQixXQUFPVSxNQUFNLENBQUNpQixJQUFQLENBQVlqQyxrREFBWixFQUFzQnU2QixNQUF0QixDQUE2QixDQUFDSCxHQUFELEVBQU0xNEIsR0FBTixLQUFjO0FBQzlDLFlBQU1rZixPQUFPLEdBQUc1Z0Isa0RBQVEsQ0FBQzBCLEdBQUQsQ0FBeEI7O0FBQ0EsVUFBSWtmLE9BQU8sQ0FBQ3ZnQixHQUFSLEtBQWdCQyxRQUFoQixJQUE0QnNnQixPQUFPLENBQUN6Z0IsV0FBcEMsSUFBbUQsQ0FBQ3lnQixPQUFPLENBQUN4Z0IsTUFBaEUsRUFBd0U7QUFDcEV3Z0IsZUFBTyxDQUFDbFksSUFBUixHQUFlaEgsR0FBZjtBQUNBMDRCLFdBQUcsQ0FBQ3BwQixJQUFKLENBQVM0UCxPQUFUO0FBQ0g7O0FBQ0QsYUFBT3daLEdBQVA7QUFDSCxLQVBNLEVBT0osRUFQSSxDQUFQO0FBUUg7O0FBRUQwSCxnQkFBYyxDQUFDN2hDLEVBQUQsRUFBSztBQUNmLFVBQU1taUMsYUFBYSxHQUFHejJCLGtEQUFHLENBQUN5Z0IsS0FBSixDQUFVLHdDQUFWLENBQXRCO0FBQ0FnVyxpQkFBYSxDQUFDM3NCLEtBQWQsQ0FBb0JzUSxPQUFwQixHQUE4QixNQUE5QjtBQUNBLFNBQUs4WixJQUFMLENBQVVwcUIsS0FBVixDQUFnQnNRLE9BQWhCLEdBQTBCLEVBQTFCOztBQUNBLFlBQVE5bEIsRUFBUjtBQUNJLFdBQUssTUFBTDtBQUNJLGFBQUs2aUMsa0JBQUw7QUFDQTs7QUFDSixXQUFLLFdBQUw7QUFDSSxhQUFLQyxxQkFBTDtBQUNBOztBQUNKLFdBQUssU0FBTDtBQUNBLFdBQUssUUFBTDtBQUNJLGFBQUtDLGVBQUwsQ0FBcUIvaUMsRUFBckI7QUFDQTs7QUFDSixXQUFLLFdBQUw7QUFDSSxhQUFLZ2pDLHVCQUFMO0FBQ0E7O0FBQ0osV0FBSyxRQUFMO0FBQ0ksYUFBS0Msc0JBQUw7QUFDQTs7QUFDSixXQUFLLGFBQUw7QUFDSSxhQUFLQyxrQkFBTDtBQUNBO0FBbkJSO0FBcUJIOztBQUVEN2pDLFNBQU8sR0FBRyxDQUFFOztBQUVaMFAsVUFBUSxDQUFDL08sRUFBRCxFQUFLbWpDLE9BQUwsRUFBYztBQUNsQixTQUFLckIsY0FBTCxDQUFvQjloQyxFQUFwQixFQUF3Qm1qQyxPQUF4QjtBQUNIOztBQUVEckIsZ0JBQWMsQ0FBQzloQyxFQUFELEVBQUtpSCxPQUFMLEVBQWM7QUFDeEIxRyw0REFBYyxDQUFDUCxFQUFELENBQWQsR0FBcUJpSCxPQUFyQjs7QUFFQSxRQUFJakgsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSWlILE9BQUosRUFBYXlFLGtEQUFHLENBQUM0bUIsUUFBSixDQUFhcnZCLFFBQVEsQ0FBQ0MsSUFBdEIsRUFBNEIsWUFBNUIsRUFBYixLQUNLd0ksa0RBQUcsQ0FBQzZtQixXQUFKLENBQWdCdHZCLFFBQVEsQ0FBQ0MsSUFBekIsRUFBK0IsWUFBL0I7QUFDUjs7QUFFRCxRQUFJbEQsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSWlILE9BQUosRUFBYXlFLGtEQUFHLENBQUM0bUIsUUFBSixDQUFhcnZCLFFBQVEsQ0FBQ0MsSUFBdEIsRUFBNEIsaUJBQTVCLEVBQWIsS0FDS3dJLGtEQUFHLENBQUM2bUIsV0FBSixDQUFnQnR2QixRQUFRLENBQUNDLElBQXpCLEVBQStCLGlCQUEvQjtBQUNSOztBQUVELFFBQUlsRCxFQUFFLElBQUksVUFBVixFQUFzQjtBQUNsQixVQUFJaUgsT0FBSixFQUFhbThCLHVEQUFtQixDQUFDN0MsU0FBcEIsR0FBYixLQUNLNkMsdURBQW1CLENBQUN4QyxZQUFwQjtBQUNSOztBQUVELFFBQUk1Z0MsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSWlILE9BQUosRUFBYW84QixtREFBUyxDQUFDNTVCLEtBQVYsR0FBYixLQUNLNDVCLG1EQUFTLENBQUMzeEIsSUFBVjtBQUNSOztBQUVELFFBQUkxUixFQUFFLElBQUksVUFBVixFQUFzQjtBQUNsQixVQUFJaUgsT0FBSixFQUFheUUsa0RBQUcsQ0FBQzRtQixRQUFKLENBQWE1bUIsa0RBQUcsQ0FBQ3lnQixLQUFKLENBQVUsWUFBVixDQUFiLEVBQXNDLFVBQXRDLEVBQWIsS0FDS3pnQixrREFBRyxDQUFDNm1CLFdBQUosQ0FBZ0I3bUIsa0RBQUcsQ0FBQ3lnQixLQUFKLENBQVUsWUFBVixDQUFoQixFQUF5QyxVQUF6QztBQUNSOztBQUVELFFBQUlsbEIsT0FBTyxJQUFJakgsRUFBRSxJQUFJLFVBQXJCLEVBQWlDc2pDLCtDQUFNLENBQUMxK0IsWUFBUDs7QUFFakMsUUFBSTVFLEVBQUUsSUFBSSxVQUFWLEVBQXNCO0FBQ2xCLFVBQUlpSCxPQUFKLEVBQWFzOEIsb0RBQVcsQ0FBQzF1QixpQkFBWixHQUFiLEtBQ0swdUIsb0RBQVcsQ0FBQzd0QixpQkFBWjtBQUNSOztBQUVELFFBQUkxVixFQUFFLElBQUksV0FBVixFQUF1QjtBQUNuQixVQUFJaUgsT0FBSixFQUFhekUseURBQWUsQ0FBQ2lILEtBQWhCLEdBQWIsS0FDS2pILHlEQUFlLENBQUNrUCxJQUFoQjtBQUNSOztBQUVELFFBQUkxUixFQUFFLElBQUksV0FBVixFQUF1QjtBQUNuQixVQUFJaUgsT0FBSixFQUFhO0FBQ1QxRSwrREFBYyxDQUFDaVYsWUFBZixDQUE0QixRQUE1QjtBQUNBalYsK0RBQWMsQ0FBQ2lWLFlBQWYsQ0FBNEIsT0FBNUI7QUFDSCxPQUhELE1BSUs7QUFDRGpWLCtEQUFjLENBQUMwVyxjQUFmLENBQThCLFFBQTlCO0FBQ0ExVywrREFBYyxDQUFDMFcsY0FBZixDQUE4QixPQUE5QjtBQUNIO0FBQ0o7O0FBRUQsUUFBSWpaLEVBQUUsSUFBSSxXQUFWLEVBQXVCO0FBQ25CNkIsb0RBQUssQ0FBQzBKLG1CQUFOLENBQTBCLGFBQTFCLEVBQXlDdEUsT0FBekM7QUFDQSxVQUFJQSxPQUFKLEVBQWFwRiw4Q0FBSyxDQUFDMEosbUJBQU4sQ0FBMEIsaUJBQTFCLEVBQTZDLElBQTdDLEVBQWIsS0FDSzFKLDhDQUFLLENBQUMwSixtQkFBTixDQUEwQixpQkFBMUIsRUFBNkMsU0FBN0M7QUFDUjs7QUFHRCxRQUFJdkwsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSWlILE9BQUosRUFBYXU4QixpREFBSyxDQUFDblksa0JBQU4sR0FBYixLQUNLbVksaURBQUssQ0FBQ2pZLGlCQUFOO0FBQ1I7O0FBRUQsUUFBSXZyQixFQUFFLElBQUksV0FBVixFQUF1QjtBQUNuQixVQUFJaUgsT0FBSixFQUFhdThCLGlEQUFLLENBQUNsWSxpQkFBTixHQUFiLEtBQ0trWSxpREFBSyxDQUFDaFksZ0JBQU47QUFDUjs7QUFFRCxRQUFJeHJCLEVBQUUsS0FBSyxlQUFYLEVBQTRCO0FBQ3hCLFVBQUlpSCxPQUFKLEVBQWE4NUIsc0RBQWEsQ0FBQ3QzQixLQUFkLEdBQWIsS0FDS3MzQixzREFBYSxDQUFDcnZCLElBQWQ7QUFDUjs7QUFDRCxRQUFJMVIsRUFBRSxLQUFLLGFBQVgsRUFBMEI7QUFDdEIsVUFBSWlILE9BQUosRUFBYW5LLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJ5OUIsUUFBakIsQ0FBMEJDLE9BQTFCLEdBQW9DLElBQXBDLENBQWIsS0FDSzVtQyxNQUFNLENBQUNrSixTQUFQLENBQWlCeTlCLFFBQWpCLENBQTBCQyxPQUExQixHQUFvQyxLQUFwQztBQUNSOztBQUNELFFBQUkxakMsRUFBRSxLQUFLLGFBQVgsRUFBMEI7QUFDdEIsVUFBSWlILE9BQUosRUFBYW5LLE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJ5OUIsUUFBakIsQ0FBMEJFLGVBQTFCLEdBQTRDLElBQTVDLENBQWIsS0FDSzdtQyxNQUFNLENBQUNrSixTQUFQLENBQWlCeTlCLFFBQWpCLENBQTBCRSxlQUExQixHQUE0QyxLQUE1QztBQUNSOztBQUNELFFBQUkzakMsRUFBRSxLQUFLLHNCQUFYLEVBQW1DO0FBQy9CLFVBQUlpSCxPQUFKLEVBQWE7QUFDVGlDLG9FQUFrQixDQUFDaEMsTUFBbkI7QUFDQSxjQUFNMDhCLGFBQWEsR0FBR3o5QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhLE9BQU9ELENBQUMsQ0FBQ0MsT0FBVCxLQUFxQixRQUFsQyxJQUE4QyxxQkFBcUJELENBQUMsQ0FBQ0MsT0FBeEYsRUFBaUcsQ0FBakcsQ0FBdEI7O0FBQ0EsWUFBR3U5QixhQUFhLElBQUksQ0FBQ0EsYUFBYSxDQUFDdjlCLE9BQWQsQ0FBc0J3OUIsZUFBM0MsRUFBMkQ7QUFDdkQxOUIsbUJBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVeTlCLG9CQUExQyxFQUFnRSxDQUFoRSxFQUFtRXo5QixPQUFuRSxDQUEyRXk5QixvQkFBM0UsQ0FBZ0c7QUFDNUZELDJCQUFlLEVBQUU7QUFEMkUsV0FBaEc7QUFHSDtBQUNKLE9BUkQsTUFTSzM2Qiw0REFBa0IsQ0FBQzlCLE9BQW5CO0FBQ1I7O0FBQ0QsUUFBSXBILEVBQUUsS0FBSyxhQUFYLEVBQTBCO0FBQ3RCLFVBQUlpSCxPQUFKLEVBQWF0SixnREFBTSxDQUFDb21DLGdCQUFQLEdBQTBCQyxjQUExQixDQUF5QyxJQUF6QyxFQUFiLEtBQ0tybUMsZ0RBQU0sQ0FBQ29tQyxnQkFBUCxHQUEwQkMsY0FBMUIsQ0FBeUMsS0FBekM7QUFDUjs7QUFDRCxRQUFJaGtDLEVBQUUsS0FBSyxhQUFYLEVBQTBCO0FBQ3RCLFVBQUdpSCxPQUFILEVBQVc7QUFDUGc5QiwwREFBUSxDQUFDLzhCLE1BQVQ7QUFDSCxPQUZELE1BRUs7QUFDRCs4QiwwREFBUSxDQUFDNzhCLE9BQVQ7QUFDSDtBQUNKOztBQUNELFFBQUlwSCxFQUFFLEtBQUssYUFBWCxFQUEwQjtBQUN0QixVQUFHaUgsT0FBSCxFQUFXO0FBQ1BpOUIsNkRBQVcsQ0FBQ2g5QixNQUFaO0FBQ0gsT0FGRCxNQUVLO0FBQ0RnOUIsNkRBQVcsQ0FBQzk4QixPQUFaO0FBQ0g7QUFDSjs7QUFFRCxTQUFLcVosWUFBTDtBQUNIOztBQUVELFFBQU1wQyxrQkFBTixHQUEyQjtBQUN2QixRQUFJOWQsd0RBQWMsQ0FBQ3dnQyxhQUFuQixFQUFrQ0Esc0RBQWEsQ0FBQ3QzQixLQUFkO0FBQ2xDLFFBQUlsSix3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0NtTCxrREFBRyxDQUFDNG1CLFFBQUosQ0FBYXJ2QixRQUFRLENBQUNDLElBQXRCLEVBQTRCLFlBQTVCO0FBQ2hDLFFBQUkzQyx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0NtTCxrREFBRyxDQUFDNG1CLFFBQUosQ0FBYXJ2QixRQUFRLENBQUNDLElBQXRCLEVBQTRCLGlCQUE1QjtBQUNoQyxRQUFJM0Msd0RBQWMsQ0FBQyxVQUFELENBQWxCLEVBQWdDNmlDLHVEQUFtQixDQUFDN0MsU0FBcEI7QUFDaEMsUUFBSWhnQyx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0M4aUMsbURBQVMsQ0FBQzU1QixLQUFWO0FBQ2hDLFFBQUlsSix3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0NtTCxrREFBRyxDQUFDNG1CLFFBQUosQ0FBYTVtQixrREFBRyxDQUFDeWdCLEtBQUosQ0FBVSxZQUFWLENBQWIsRUFBc0MsVUFBdEM7QUFDaEMsUUFBSTVyQix3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0MraUMsK0NBQU0sQ0FBQzErQixZQUFQO0FBQ2hDLFFBQUlyRSx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0NnakMsb0RBQVcsQ0FBQzF1QixpQkFBWjtBQUNoQyxRQUFJdFUsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDaUMseURBQWUsQ0FBQ2lILEtBQWhCO0FBQ2pDLFFBQUlsSix3REFBYyxDQUFDLGFBQUQsQ0FBbEIsRUFBbUN6RCxNQUFNLENBQUNrSixTQUFQLENBQWlCeTlCLFFBQWpCLENBQTBCQyxPQUExQixHQUFvQyxJQUFwQztBQUNuQyxRQUFJbmpDLHdEQUFjLENBQUMsYUFBRCxDQUFsQixFQUFtQ3pELE1BQU0sQ0FBQ2tKLFNBQVAsQ0FBaUJ5OUIsUUFBakIsQ0FBMEJFLGVBQTFCLEdBQTRDLElBQTVDO0FBQ25DLFFBQUlwakMsd0RBQWMsQ0FBQyxzQkFBRCxDQUFsQixFQUE0QzJJLDREQUFrQixDQUFDaEMsTUFBbkI7QUFDNUMsUUFBSTNHLHdEQUFjLENBQUMsYUFBRCxDQUFsQixFQUFtQzVDLGdEQUFNLENBQUNvbUMsZ0JBQVAsR0FBMEJDLGNBQTFCLENBQXlDLElBQXpDO0FBQ25DLFFBQUl6akMsd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1DMGpDLGtEQUFRLENBQUMvOEIsTUFBVDtBQUNuQyxRQUFJM0csd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1DMmpDLHFEQUFXLENBQUNoOUIsTUFBWjs7QUFFbkMsUUFBSTNHLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQztBQUM3QmdDLDZEQUFjLENBQUNpVixZQUFmLENBQTRCLFFBQTVCO0FBQ0FqViw2REFBYyxDQUFDaVYsWUFBZixDQUE0QixPQUE1QjtBQUNIOztBQUVELFFBQUlqWCx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0NpakMsaURBQUssQ0FBQ25ZLGtCQUFOO0FBQ2hDLFFBQUk5cUIsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDaWpDLGlEQUFLLENBQUNsWSxpQkFBTjtBQUVqQyxTQUFLN0ssWUFBTDtBQUNIOztBQUVEQSxjQUFZLEdBQUc7QUFDWG5lLHNEQUFTLENBQUMyb0IsZUFBVixDQUEwQixVQUExQixFQUFzQzFxQix3REFBdEM7QUFDQStCLHNEQUFTLENBQUMyb0IsZUFBVixDQUEwQixLQUExQixFQUFpQ3pxQixxREFBakM7QUFDSDs7QUFFRGtnQixjQUFZLEdBQUc7QUFDWDNmLFVBQU0sQ0FBQzBVLE1BQVAsQ0FBY2xWLHdEQUFkLEVBQThCK0Isa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsVUFBMUIsQ0FBOUI7QUFDQXpmLFVBQU0sQ0FBQzBVLE1BQVAsQ0FBY2pWLHFEQUFkLEVBQTJCOEIsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsS0FBMUIsQ0FBM0I7QUFDSDs7QUFFRHloQixjQUFZLEdBQUc7QUFDWGpqQywrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY3FiLHNCQUFkLENBQXFDLEtBQUt4QyxJQUExQztBQUNBLFNBQUtBLElBQUwsQ0FBVXBxQixLQUFWLENBQWdCc1EsT0FBaEIsR0FBMEIsTUFBMUI7QUFDQXBhLHNEQUFHLENBQUN5Z0IsS0FBSixDQUFVLE1BQUlobUIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMrN0IsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBLGFBQXZDLENBQXFEcHZCLEtBQXJELENBQTJELEdBQTNELEVBQWdFLENBQWhFLENBQUosR0FBdUUsbUJBQWpGLEVBQXNHeUMsS0FBdEcsQ0FBNEdzUSxPQUE1RyxHQUFzSCxFQUF0SDtBQUNIOztBQUVEcEUsZUFBYSxHQUFHO0FBQ1osVUFBTXlpQixJQUFJLEdBQUdsaEMsUUFBUSxDQUFDNFMsZ0JBQVQsQ0FBMEIscUNBQTFCLENBQWI7O0FBQ0EsU0FBSyxNQUFNakMsT0FBWCxJQUFzQnV3QixJQUF0QixFQUE0QjtBQUN4QnZ3QixhQUFPLENBQUM2WCxtQkFBUixDQUE0QixPQUE1QixFQUFxQyxLQUFLd1csWUFBMUM7QUFDQXJ1QixhQUFPLENBQUMySyxnQkFBUixDQUF5QixPQUF6QixFQUFrQyxLQUFLMGpCLFlBQXZDO0FBQ0g7O0FBQ0QsU0FBS0YsT0FBTCxDQUFhL2EsTUFBYjtBQUNIOztBQUVELE1BQUlvZCxhQUFKLEdBQW9CO0FBQ2hCLFdBQU9wbEMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmlsQyxxREFBekIsRUFBbUM7QUFBQ0MsbUJBQWEsRUFBRSxJQUFoQjtBQUFzQkMsVUFBSSxFQUFFLElBQTVCO0FBQWtDQyxVQUFJLEVBQUU7QUFBeEMsS0FBbkMsRUFDSHhsQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCcWxDLG1FQUF6QixFQUFpRDtBQUFDaGpDLFNBQUcsRUFBRSxTQUFOO0FBQWlCc04sY0FBUSxFQUFFLEtBQUtBLFFBQWhDO0FBQTBDMHpCLGNBQVEsRUFBRSxLQUFLSjtBQUF6RCxLQUFqRCxDQURHLEVBRUhyakMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNsQyxrREFBekIsRUFBZ0M7QUFBQ2pqQyxTQUFHLEVBQUU7QUFBTixLQUFoQyxDQUZHLENBQVA7QUFJSDs7QUFFRCxNQUFJa2pDLGtCQUFKLEdBQXlCO0FBQ3JCLFdBQU8zbEMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmlsQyxxREFBekIsRUFBbUM7QUFBQ0MsbUJBQWEsRUFBRSxJQUFoQjtBQUFzQkMsVUFBSSxFQUFFLElBQTVCO0FBQWtDQyxVQUFJLEVBQUU7QUFBeEMsS0FBbkMsRUFDSHhsQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCcWxDLG1FQUF6QixFQUFpRDtBQUFDaGpDLFNBQUcsRUFBRSxVQUFOO0FBQWtCc04sY0FBUSxFQUFFLEtBQUtBLFFBQWpDO0FBQTJDMHpCLGNBQVEsRUFBRSxLQUFLQztBQUExRCxLQUFqRCxDQURHLEVBRUgxakMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNsQyxrREFBekIsRUFBZ0M7QUFBQ2pqQyxTQUFHLEVBQUU7QUFBTixLQUFoQyxDQUZHLENBQVA7QUFJSDs7QUFFRCxNQUFJbWpDLGlCQUFKLEdBQXdCO0FBQ3BCLFdBQU81bEMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmlsQyxxREFBekIsRUFBbUM7QUFBQ0MsbUJBQWEsRUFBRSxJQUFoQjtBQUFzQkMsVUFBSSxFQUFFLElBQTVCO0FBQWtDQyxVQUFJLEVBQUU7QUFBeEMsS0FBbkMsRUFDSHhsQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCeWxDLDZEQUF6QixFQUErQztBQUMzQ3BqQyxTQUFHLEVBQUUsVUFEc0M7QUFFM0NzTixjQUFRLEVBQUUsS0FBS0EsUUFGNEI7QUFHM0NoUCxjQUFRLEVBQUUsS0FBSzRpQztBQUg0QixLQUEvQyxDQURHLEVBTUgzakMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNsQyxrREFBekIsRUFBZ0M7QUFBQ2pqQyxTQUFHLEVBQUU7QUFBTixLQUFoQyxDQU5HLENBQVA7QUFRSDs7QUFFRCxNQUFJcWpDLHFCQUFKLEdBQTRCO0FBQ3hCLFdBQU85bEMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmlsQyxxREFBekIsRUFBbUM7QUFBQ0MsbUJBQWEsRUFBRSxJQUFoQjtBQUFzQkMsVUFBSSxFQUFFLElBQTVCO0FBQWtDQyxVQUFJLEVBQUU7QUFBeEMsS0FBbkMsRUFDSHhsQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCMmxDLHlEQUF6QixFQUEyQztBQUN2Q3RqQyxTQUFHLEVBQUU7QUFEa0MsS0FBM0MsQ0FERyxFQUlIekMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNsQyxrREFBekIsRUFBZ0M7QUFBQ2pqQyxTQUFHLEVBQUU7QUFBTixLQUFoQyxDQUpHLENBQVA7QUFNSDs7QUFFRCxNQUFJdWpDLGtCQUFKLEdBQXlCO0FBQ3JCLFdBQU9obUMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmlsQyxxREFBekIsRUFBbUM7QUFBQ0MsbUJBQWEsRUFBRSxJQUFoQjtBQUFzQkMsVUFBSSxFQUFFLElBQTVCO0FBQWtDQyxVQUFJLEVBQUU7QUFBeEMsS0FBbkMsRUFDSHhsQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCNmxDLHNEQUF6QixFQUFvQztBQUFDeGpDLFNBQUcsRUFBRTtBQUFOLEtBQXBDLENBREcsRUFFSHpDLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJzbEMsa0RBQXpCLEVBQWdDO0FBQUNqakMsU0FBRyxFQUFFO0FBQU4sS0FBaEMsQ0FGRyxDQUFQO0FBSUg7O0FBRURvaEMsb0JBQWtCLEdBQUc7QUFDakIsVUFBTWpELElBQUksR0FBRyxLQUFLQSxJQUFsQjtBQUNBLFFBQUksQ0FBQ0EsSUFBTCxFQUFXLE9BQU8vOUIsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxlQUFWLEVBQTJCLGtFQUEzQixDQUFQO0FBQ1hyWiwrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQixLQUFLb2QsYUFBMUIsRUFBeUN4RSxJQUF6QztBQUNIOztBQUVEb0QseUJBQXVCLEdBQUc7QUFDdEIsVUFBTXBELElBQUksR0FBRyxLQUFLQSxJQUFsQjtBQUNBLFFBQUksQ0FBQ0EsSUFBTCxFQUFXLE9BQU8vOUIsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxlQUFWLEVBQTJCLGtFQUEzQixDQUFQO0FBQ1hyWiwrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQixLQUFLMmQsa0JBQTFCLEVBQThDL0UsSUFBOUM7QUFDSDs7QUFFRHFELHdCQUFzQixHQUFHO0FBQ3JCLFVBQU1yRCxJQUFJLEdBQUcsS0FBS0EsSUFBbEI7QUFDQSxRQUFJLENBQUNBLElBQUwsRUFBVyxPQUFPLzlCLDhDQUFLLENBQUN3VyxHQUFOLENBQVUsZUFBVixFQUEyQixrRUFBM0IsQ0FBUDtBQUNYclosK0NBQUksQ0FBQytuQixRQUFMLENBQWNDLE1BQWQsQ0FBcUIsS0FBSzRkLGlCQUExQixFQUE2Q2hGLElBQTdDO0FBQ0g7O0FBRURzRCxvQkFBa0IsR0FBRztBQUNqQixVQUFNdEQsSUFBSSxHQUFHLEtBQUtBLElBQWxCO0FBQ0EsUUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBTy85Qiw4Q0FBSyxDQUFDd1csR0FBTixDQUFVLGVBQVYsRUFBMkIsa0VBQTNCLENBQVA7QUFDWHJaLCtDQUFJLENBQUMrbkIsUUFBTCxDQUFjQyxNQUFkLENBQXFCLEtBQUs4ZCxxQkFBMUIsRUFBaURsRixJQUFqRDtBQUNIOztBQUVEa0QsdUJBQXFCLEdBQUc7QUFDcEIsVUFBTWxELElBQUksR0FBRyxLQUFLQSxJQUFsQjtBQUNBLFFBQUksQ0FBQ0EsSUFBTCxFQUFXLE9BQU8vOUIsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxlQUFWLEVBQTJCLGtFQUEzQixDQUFQO0FBQ1hyWiwrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQixLQUFLZ2Usa0JBQTFCLEVBQThDcEYsSUFBOUM7QUFDSCxHQXRWcUMsQ0F3VnRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBbUQsaUJBQWUsQ0FBQ2pqQyxJQUFELEVBQU87QUFDbEIsUUFBSSxDQUFDLEtBQUs4L0IsSUFBVixFQUFnQixPQUFPLzlCLDhDQUFLLENBQUN3VyxHQUFOLENBQVUsZUFBVixFQUEyQixrRUFBM0IsQ0FBUCxDQURFLENBRWxCO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFVBQU02c0IsV0FBTixTQUEwQmxtQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBVzhoQixTQUFyQyxDQUErQztBQUMzQ3ZpQyxpQkFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsY0FBTUEsS0FBTjtBQUNBLGFBQUs2dEIsTUFBTCxHQUFjLEtBQUs3dEIsS0FBTCxDQUFXbk4sSUFBWCxDQUFnQndGLE9BQWhCLENBQXdCLEdBQXhCLEVBQTZCLEVBQTdCLENBQWQ7QUFDQSxhQUFLeUosUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0g7O0FBRURtaEMsdUJBQWlCLEdBQUc7QUFDaEJoakMseURBQVEsQ0FBQ3dtQixFQUFULENBQWEsR0FBRSxLQUFLa1MsTUFBTyxXQUEzQixFQUF1QyxLQUFLL3JCLFFBQTVDO0FBQ0EzTSx5REFBUSxDQUFDd21CLEVBQVQsQ0FBYSxHQUFFLEtBQUtrUyxNQUFPLFNBQTNCLEVBQXFDLEtBQUsvckIsUUFBMUM7QUFDQTNNLHlEQUFRLENBQUN3bUIsRUFBVCxDQUFhLEdBQUUsS0FBS2tTLE1BQU8sV0FBM0IsRUFBdUMsS0FBSy9yQixRQUE1QztBQUNIOztBQUVEczJCLDBCQUFvQixHQUFHO0FBQ25CampDLHlEQUFRLENBQUNrTyxHQUFULENBQWMsR0FBRSxLQUFLd3FCLE1BQU8sV0FBNUIsRUFBd0MsS0FBSy9yQixRQUE3QztBQUNBM00seURBQVEsQ0FBQ2tPLEdBQVQsQ0FBYyxHQUFFLEtBQUt3cUIsTUFBTyxTQUE1QixFQUFzQyxLQUFLL3JCLFFBQTNDO0FBQ0EzTSx5REFBUSxDQUFDa08sR0FBVCxDQUFjLEdBQUUsS0FBS3dxQixNQUFPLFdBQTVCLEVBQXdDLEtBQUsvckIsUUFBN0M7QUFDSDs7QUFFREEsY0FBUSxHQUFHO0FBQ1AsYUFBSzlCLEtBQUwsQ0FBVzhCLFFBQVgsQ0FBb0IsS0FBSzlCLEtBQUwsQ0FBV25OLElBQS9CO0FBQ0g7O0FBRURrbkIsWUFBTSxHQUFHO0FBQUMsZUFBTyxLQUFLL1osS0FBTCxDQUFXa0gsUUFBbEI7QUFBNEI7O0FBdkJLOztBQXlCL0MsVUFBTW14QixjQUFjLEdBQUdKLFdBQVcsQ0FBQzNoQyxTQUFaLENBQXNCeWpCLE1BQTdDO0FBQ0FqbUIsVUFBTSxDQUFDWSxjQUFQLENBQXNCdWpDLFdBQVcsQ0FBQzNoQyxTQUFsQyxFQUE2QyxRQUE3QyxFQUF1RDtBQUNuRGdpQyxnQkFBVSxFQUFFLEtBRHVDO0FBRW5EcGhDLGtCQUFZLEVBQUUsS0FGcUM7QUFHbkQrRixTQUFHLEVBQUUsWUFBVztBQUFDRixlQUFPLENBQUNsSSxJQUFSLENBQWEscUdBQWI7QUFBcUgsT0FIbkY7QUFJbkRGLFNBQUcsRUFBRSxNQUFNMGpDO0FBSndDLEtBQXZEO0FBTUEsVUFBTWgyQixJQUFJLEdBQUd4UCxJQUFJLEtBQUssU0FBVCxHQUFxQmlCLE1BQU0sQ0FBQzZiLE1BQVAsQ0FBY3piLG1EQUFkLENBQXJCLEdBQWdESixNQUFNLENBQUM2YixNQUFQLENBQWMxYixrREFBZCxDQUE3RDtBQUNBLFdBQU9sQywyQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQmhvQiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCOGxDLFdBQXpCLEVBQXNDO0FBQUNwbEMsVUFBRDtBQUFPaVAsY0FBUSxFQUFFLEtBQUs4eUI7QUFBdEIsS0FBdEMsRUFBNkU3aUMsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm9tQyxzREFBekIsRUFBbUM7QUFBQzFsQyxVQUFEO0FBQU93UDtBQUFQLEtBQW5DLENBQTdFLENBQXJCLEVBQXFKLEtBQUtzd0IsSUFBMUosQ0FBUDtBQUNIOztBQXRZcUMsQ0FBM0IsRUFBZixFOzs7Ozs7Ozs7Ozs7QUM5QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFZSxNQUFNb0Msd0JBQU4sQ0FBK0I7QUFFMUNwL0IsYUFBVyxDQUFDdkQsT0FBRCxFQUFVb21DLGdCQUFWLEVBQTRCO0FBQ25DLFNBQUtwbUMsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS29tQyxnQkFBTCxHQUF3QkEsZ0JBQXhCO0FBQ0g7O0FBRUQsTUFBSWpvQyxLQUFKLEdBQVk7QUFDUixXQUFPLENBQUM7QUFDSmlMLFVBQUksRUFBRSx3QkFERjtBQUVKekksUUFBRSxFQUFFO0FBRkEsS0FBRCxFQUdKO0FBQ0N5SSxVQUFJLEVBQUUsU0FEUDtBQUVDekksUUFBRSxFQUFFO0FBRkwsS0FISSxFQU1KO0FBQ0N5SSxVQUFJLEVBQUUsUUFEUDtBQUVDekksUUFBRSxFQUFFO0FBRkwsS0FOSSxFQVNKO0FBQ0N5SSxVQUFJLEVBQUUsWUFEUDtBQUVDekksUUFBRSxFQUFFO0FBRkwsS0FUSSxDQUFQO0FBYUg7O0FBRUQsTUFBSTBsQyxPQUFKLEdBQWE7QUFDVCxXQUFPLENBQ0g7QUFDSWo5QixVQUFJLEVBQUUsb0JBRFY7QUFFSXpJLFFBQUUsRUFBRTtBQUZSLEtBREcsRUFJQTtBQUNDeUksVUFBSSxFQUFFLGNBRFA7QUFFQ3pJLFFBQUUsRUFBRTtBQUZMLEtBSkEsRUFPQTtBQUNDeUksVUFBSSxFQUFFLGNBRFA7QUFFQ3pJLFFBQUUsRUFBRTtBQUZMLEtBUEEsQ0FBUDtBQVlIOztBQUVELE1BQUk2bUIsU0FBSixHQUFnQjtBQUNaO0FBRUEsVUFBTThlLGVBQWUsR0FBRzNtQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCaWpCLHVEQUF6QixFQUFzQztBQUFDM2lCLFdBQUssRUFBRSxPQUFSO0FBQWlCNGlCLFVBQUksRUFBRSxLQUF2QjtBQUE4QjdaLFVBQUksRUFBRTtBQUFwQyxLQUF0QyxFQUNwQnpKLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFLHFCQUFaO0FBQW1DRCxhQUFPLEVBQUUsTUFBTTtBQUFDd0Msc0RBQUssQ0FBQ2tkLGtCQUFOLENBQXlCbGYsc0RBQXpCO0FBQXdDO0FBQTNGLEtBQWhDLEVBQ0liLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJ3bUMseURBQXpCLEVBQWtDO0FBQUN0bUMsZUFBUyxFQUFFLFNBQVo7QUFBdUJDLFVBQUksRUFBRTtBQUE3QixLQUFsQyxDQURKLENBRG9CLENBQXhCO0FBS0EsVUFBTXNtQyxpQkFBaUIsR0FBRzdtQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCaWpCLHVEQUF6QixFQUFzQztBQUFDM2lCLFdBQUssRUFBRSxPQUFSO0FBQWlCNGlCLFVBQUksRUFBRSxLQUF2QjtBQUE4QjdaLFVBQUksRUFBRTtBQUFwQyxLQUF0QyxFQUN0QnpKLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFLHFCQUFaO0FBQW1DRCxhQUFPLEVBQUUsTUFBTTtBQUFDd0Msc0RBQUssQ0FBQ2tkLGtCQUFOLENBQXlCM2hCLG9EQUF6QjtBQUFzQztBQUF6RixLQUFoQyxFQUNJNEIsMkNBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QndtQyx5REFBekIsRUFBa0M7QUFBQ3RtQyxlQUFTLEVBQUUsU0FBWjtBQUF1QkMsVUFBSSxFQUFFO0FBQTdCLEtBQWxDLENBREosQ0FEc0IsQ0FBMUI7QUFLQSxXQUFPLENBQ0hQLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUMsSUFBakMsRUFBdUNKLDJDQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIwbUMsbURBQXpCLEVBQWtDO0FBQUN6bUMsYUFBTyxFQUFFLEtBQUtBLE9BQWY7QUFBd0IwbUMsZ0JBQVUsRUFBRSxXQUFwQztBQUFpREMsa0JBQVksRUFBRUgsaUJBQS9EO0FBQWtGcm9DLFdBQUssRUFBRSxLQUFLa29DO0FBQTlGLEtBQWxDLENBQXZDLENBREcsRUFFSDFtQywyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDLElBQWpDLEVBQXVDSiwyQ0FBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCMG1DLG1EQUF6QixFQUFrQztBQUFDem1DLGFBQU8sRUFBRSxLQUFLQSxPQUFmO0FBQXdCMG1DLGdCQUFVLEVBQUUsYUFBcEM7QUFBbURDLGtCQUFZLEVBQUVMLGVBQWpFO0FBQWtGbm9DLFdBQUssRUFBRSxLQUFLQTtBQUE5RixLQUFsQyxDQUF2QyxDQUZHLENBQVA7QUFJSDs7QUFFRCxNQUFJb2lDLElBQUosR0FBVztBQUNQLFVBQU1DLEtBQUssR0FBR24wQixpREFBRyxDQUFDeWdCLEtBQUosQ0FBVSxzQkFBVixDQUFkOztBQUNBLFFBQUksQ0FBQzBULEtBQUwsRUFBWTtBQUNSLFVBQUksQ0FBQyxLQUFLQyxVQUFMLEVBQUwsRUFBd0IsT0FBTyxJQUFQO0FBQ3hCLGFBQU8sS0FBS0YsSUFBWjtBQUNIOztBQUNELFdBQU9DLEtBQVA7QUFDSDs7QUFFREMsWUFBVSxHQUFHO0FBQ1QsVUFBTXFFLElBQUksR0FBR3o0QixpREFBRyxDQUFDa21CLFFBQUosQ0FBYSwwREFBYixDQUFiO0FBQ0EsVUFBTXFVLFNBQVMsR0FBRzlCLElBQUksQ0FBQ0EsSUFBSSxDQUFDOStCLE1BQUwsR0FBYyxDQUFmLENBQXRCO0FBQ0EsUUFBSSxDQUFDNGdDLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0FBQ2hCQSxhQUFTLENBQUN0a0IsYUFBVixDQUF3QjRSLFlBQXhCLENBQXFDN25CLGlEQUFHLENBQUN0TSxhQUFKLENBQW1CLGdDQUFuQixDQUFyQyxFQUEwRjZtQyxTQUFTLENBQUNsWSxzQkFBcEc7QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFRC9HLFFBQU0sR0FBRztBQUNMLFVBQU00WSxJQUFJLEdBQUcsS0FBS0EsSUFBbEI7O0FBQ0EsUUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDUDUxQixhQUFPLENBQUNDLEdBQVIsQ0FBWSxpRkFBWjtBQUNBO0FBQ0g7O0FBQ0RqTCwrQ0FBSSxDQUFDK25CLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQixLQUFLSCxTQUExQixFQUFxQytZLElBQXJDO0FBQ0EvOUIsa0RBQUssQ0FBQ3lNLFNBQU4sQ0FBZ0JzeEIsSUFBaEIsRUFBc0IsTUFBTTtBQUN4QjVnQyxpREFBSSxDQUFDK25CLFFBQUwsQ0FBY3FiLHNCQUFkLENBQXFDeEMsSUFBckM7QUFDSCxLQUZEO0FBR0g7O0FBcEZ5QyxDOzs7Ozs7Ozs7Ozs7QUNUOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTXNHLFdBQU4sQ0FBa0I7QUFDZCxNQUFJejJCLE1BQUosR0FBYTtBQUFDLFdBQU9sTix1REFBYyxDQUFDK1UsWUFBdEI7QUFBb0M7O0FBRHBDOztBQUlsQjR1QixXQUFXLENBQUMzaUMsU0FBWixDQUFzQjJaLFVBQXRCLEdBQW1DLGtCQUFrQjtBQUNqRCxPQUFLaXBCLGFBQUw7QUFDQXRsQyx5REFBYSxDQUFDNmlCLE1BQWQsQ0FBcUIsQ0FBckIsRUFBd0IsQ0FBeEIsRUFBMkIsSUFBSSxNQUFNbmhCLHVEQUFjLENBQUMyYSxVQUFmLEVBQVYsQ0FBM0I7QUFDQSxRQUFNMkIsTUFBTSxHQUFHOWQsTUFBTSxDQUFDaUIsSUFBUCxDQUFZZCxrREFBWixDQUFmOztBQUVBLE9BQUssSUFBSW9TLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd1TCxNQUFNLENBQUN4WixNQUEzQixFQUFtQ2lPLENBQUMsRUFBcEMsRUFBd0M7QUFDcEMsVUFBTTh5QixLQUFLLEdBQUdsbEMsa0RBQVEsQ0FBQzJkLE1BQU0sQ0FBQ3ZMLENBQUQsQ0FBUCxDQUF0QjtBQUNBLFFBQUksQ0FBQ2pTLHFEQUFXLENBQUMra0MsS0FBSyxDQUFDejlCLElBQVAsQ0FBaEIsRUFBOEJ0SCxxREFBVyxDQUFDK2tDLEtBQUssQ0FBQ3o5QixJQUFQLENBQVgsR0FBMEIsS0FBMUI7QUFDOUIsUUFBSXRILHFEQUFXLENBQUMra0MsS0FBSyxDQUFDejlCLElBQVAsQ0FBZixFQUE2QitDLGlEQUFHLENBQUNDLFFBQUosQ0FBYUQsaURBQUcsQ0FBQ0UsUUFBSixDQUFhdzZCLEtBQUssQ0FBQ3BtQyxFQUFuQixDQUFiLEVBQXFDcW1DLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDMzZCLEdBQVAsQ0FBN0M7QUFDaEM7O0FBQ0QsT0FBSyxNQUFNMjZCLEtBQVgsSUFBb0Iva0MscURBQXBCLEVBQWlDO0FBQzdCLFFBQUksQ0FBQ0gsa0RBQVEsQ0FBQ2tsQyxLQUFELENBQWIsRUFBc0IsT0FBTy9rQyxxREFBVyxDQUFDK2tDLEtBQUQsQ0FBbEI7QUFDekI7O0FBQ0QsT0FBS0UsYUFBTCxHQWJpRCxDQWNqRDtBQUNILENBZkQ7O0FBaUJBSixXQUFXLENBQUMzaUMsU0FBWixDQUFzQmdqQyxXQUF0QixHQUFvQyxVQUFTNTlCLElBQVQsRUFBZWlILE1BQU0sR0FBRyxLQUF4QixFQUErQjtBQUMvRHZPLHVEQUFXLENBQUNzSCxJQUFELENBQVgsR0FBb0IsSUFBcEI7QUFDQSxPQUFLMjlCLGFBQUw7QUFDQSxRQUFNRixLQUFLLEdBQUdsbEMsa0RBQVEsQ0FBQ3lILElBQUQsQ0FBdEI7QUFDQStDLG1EQUFHLENBQUNDLFFBQUosQ0FBYUQsaURBQUcsQ0FBQ0UsUUFBSixDQUFhdzZCLEtBQUssQ0FBQ3BtQyxFQUFuQixDQUFiLEVBQXFDcW1DLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDMzZCLEdBQVAsQ0FBN0M7QUFDQSxNQUFJbEwsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3FQLE1BQXBDLEVBQTRDL04sOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXMrQixLQUFLLENBQUN6OUIsSUFBSyxLQUFJeTlCLEtBQUssQ0FBQ3ZvQyxPQUFRLG9CQUFoRDtBQUMvQyxDQU5EOztBQVFBcW9DLFdBQVcsQ0FBQzNpQyxTQUFaLENBQXNCMkQsTUFBdEIsR0FBK0IsVUFBVXlCLElBQVYsRUFBZ0JpSCxNQUFNLEdBQUcsS0FBekIsRUFBZ0M7QUFDM0QsU0FBTyxLQUFLMjJCLFdBQUwsQ0FBaUI1OUIsSUFBakIsRUFBdUJpSCxNQUF2QixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXMyQixXQUFXLENBQUMzaUMsU0FBWixDQUFzQmlqQyxZQUF0QixHQUFxQyxVQUFTNzlCLElBQVQsRUFBZWlILE1BQU0sR0FBRyxLQUF4QixFQUErQjtBQUNoRXZPLHVEQUFXLENBQUNzSCxJQUFELENBQVgsR0FBb0IsS0FBcEI7QUFDQSxPQUFLMjlCLGFBQUw7QUFDQSxRQUFNRixLQUFLLEdBQUdsbEMsa0RBQVEsQ0FBQ3lILElBQUQsQ0FBdEI7QUFDQStDLG1EQUFHLENBQUNJLFdBQUosQ0FBZ0JKLGlEQUFHLENBQUNFLFFBQUosQ0FBYXc2QixLQUFLLENBQUNwbUMsRUFBbkIsQ0FBaEI7QUFDQSxNQUFJTyx3REFBYyxDQUFDLFdBQUQsQ0FBZCxJQUErQixDQUFDcVAsTUFBcEMsRUFBNEMvTiw4Q0FBSyxDQUFDaUcsU0FBTixDQUFpQixHQUFFcytCLEtBQUssQ0FBQ3o5QixJQUFLLEtBQUl5OUIsS0FBSyxDQUFDdm9DLE9BQVEscUJBQWhEO0FBQy9DLENBTkQ7O0FBUUFxb0MsV0FBVyxDQUFDM2lDLFNBQVosQ0FBc0I2RCxPQUF0QixHQUFnQyxVQUFVdUIsSUFBVixFQUFnQmlILE1BQU0sR0FBRyxLQUF6QixFQUFnQztBQUM1RCxTQUFPLEtBQUs0MkIsWUFBTCxDQUFrQjc5QixJQUFsQixFQUF3QmlILE1BQXhCLENBQVA7QUFDSCxDQUZEOztBQUlBczJCLFdBQVcsQ0FBQzNpQyxTQUFaLENBQXNCa2pDLFdBQXRCLEdBQW9DLFVBQVNMLEtBQVQsRUFBZ0I7QUFDaEQsTUFBSS9rQyxxREFBVyxDQUFDK2tDLEtBQUQsQ0FBZixFQUF3QixLQUFLSSxZQUFMLENBQWtCSixLQUFsQixFQUF4QixLQUNLLEtBQUtHLFdBQUwsQ0FBaUJILEtBQWpCO0FBQ1IsQ0FIRDs7QUFLQUYsV0FBVyxDQUFDM2lDLFNBQVosQ0FBc0JvTSxNQUF0QixHQUErQixVQUFVaEgsSUFBVixFQUFnQmlILE1BQU0sR0FBRyxLQUF6QixFQUFnQztBQUMzRCxTQUFPLEtBQUs2MkIsV0FBTCxDQUFpQjk5QixJQUFqQixFQUF1QmlILE1BQXZCLENBQVA7QUFDSCxDQUZEOztBQUlBczJCLFdBQVcsQ0FBQzNpQyxTQUFaLENBQXNCdVYsU0FBdEIsR0FBa0MsZ0JBQWVkLFFBQWYsRUFBeUI7QUFDdkQsUUFBTTFHLEtBQUssR0FBRyxNQUFNL08sdURBQWMsQ0FBQ3daLFdBQWYsQ0FBMkIvRCxRQUEzQixFQUFxQyxPQUFyQyxDQUFwQjs7QUFDQSxNQUFJMUcsS0FBSixFQUFXO0FBQ1AsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUM4YyxpQkFBTixDQUF3QjtBQUFDRSxZQUFNLEVBQUUsQ0FBQ3ZOLEtBQUQ7QUFBVCxLQUF4QjtBQUNqQyxRQUFJL1Esd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRWtRLFFBQVMsb0RBQTVCLEVBQWlGO0FBQUNsWSxVQUFJLEVBQUU7QUFBUCxLQUFqRjtBQUNqQyxXQUFPK0IsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFTCxRQUFTLHVCQUF4QyxFQUFnRTFHLEtBQWhFLENBQVA7QUFDSDs7QUFDRCxRQUFNODBCLEtBQUssR0FBR3JsQyxNQUFNLENBQUM2YixNQUFQLENBQWMxYixrREFBZCxFQUF3QjdDLElBQXhCLENBQTZCd2dDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN21CLFFBQUYsSUFBY0EsUUFBaEQsQ0FBZDtBQUNBblcsZ0RBQUssQ0FBQ29JLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFbThCLEtBQUssQ0FBQ3o5QixJQUFLLEtBQUl5OUIsS0FBSyxDQUFDdm9DLE9BQVEsY0FBNUQ7QUFDQSxNQUFJMEMsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXMrQixLQUFLLENBQUN6OUIsSUFBSyxLQUFJeTlCLEtBQUssQ0FBQ3ZvQyxPQUFRLGNBQWhELEVBQStEO0FBQUNpQyxRQUFJLEVBQUU7QUFBUCxHQUEvRDtBQUNqQ3NDLG1EQUFRLENBQUN5RyxRQUFULENBQWtCLGNBQWxCLEVBQWtDdTlCLEtBQUssQ0FBQ3o5QixJQUF4QztBQUNILENBWEQ7O0FBYUF1OUIsV0FBVyxDQUFDM2lDLFNBQVosQ0FBc0JpVixXQUF0QixHQUFvQyxVQUFTc21CLGNBQVQsRUFBeUI7QUFDekQsUUFBTTRILE9BQU8sR0FBRzNsQyxNQUFNLENBQUM2YixNQUFQLENBQWMxYixrREFBZCxFQUF3QjdDLElBQXhCLENBQTZCd2dDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN21CLFFBQUYsSUFBYzhtQixjQUFoRCxLQUFtRTU5QixrREFBUSxDQUFDNDlCLGNBQUQsQ0FBM0Y7QUFDQSxNQUFJLENBQUM0SCxPQUFMLEVBQWM7QUFDZCxRQUFNTixLQUFLLEdBQUdNLE9BQU8sQ0FBQy85QixJQUF0QjtBQUNBLE1BQUl0SCxxREFBVyxDQUFDK2tDLEtBQUQsQ0FBZixFQUF3QixLQUFLSSxZQUFMLENBQWtCSixLQUFsQixFQUF5QixJQUF6QjtBQUN4QixRQUFNOTBCLEtBQUssR0FBRy9PLHVEQUFjLENBQUMyWixhQUFmLENBQTZCaGIsa0RBQVEsQ0FBQ2tsQyxLQUFELENBQVIsQ0FBZ0JwdUIsUUFBN0MsRUFBdUQsT0FBdkQsQ0FBZDtBQUNBLFNBQU85VyxrREFBUSxDQUFDa2xDLEtBQUQsQ0FBZjs7QUFDQSxNQUFJOTBCLEtBQUosRUFBVztBQUNQLFFBQUkvUSx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUNzQiw4Q0FBSyxDQUFDOGMsaUJBQU4sQ0FBd0I7QUFBQ0UsWUFBTSxFQUFFLENBQUN2TixLQUFEO0FBQVQsS0FBeEI7QUFDakMsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUNpRyxTQUFOLENBQWlCLEdBQUVzK0IsS0FBTSwwREFBekIsRUFBb0Y7QUFBQ3RtQyxVQUFJLEVBQUU7QUFBUCxLQUFwRjtBQUNqQyxXQUFPK0IsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFK3RCLEtBQU0sMERBQXJDLEVBQWdHOTBCLEtBQWhHLENBQVA7QUFDSDs7QUFDRHpQLGdEQUFLLENBQUNvSSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRW04QixLQUFNLGdCQUFyQztBQUNBLE1BQUk3bEMsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXMrQixLQUFNLGdCQUF6QixFQUEwQztBQUFDdG1DLFFBQUksRUFBRTtBQUFQLEdBQTFDO0FBQ2pDc0MsbURBQVEsQ0FBQ3lHLFFBQVQsQ0FBa0IsZ0JBQWxCLEVBQW9DdTlCLEtBQXBDO0FBQ0gsQ0FmRDs7QUFpQkFGLFdBQVcsQ0FBQzNpQyxTQUFaLENBQXNCdXJCLE1BQXRCLEdBQStCLFVBQVNnUSxjQUFULEVBQXlCO0FBQ3BELFFBQU1DLFFBQVEsR0FBR2grQixNQUFNLENBQUM2YixNQUFQLENBQWMxYixrREFBZCxFQUF3QjdDLElBQXhCLENBQTZCd2dDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN21CLFFBQUYsSUFBYzhtQixjQUFoRCxLQUFtRTU5QixrREFBUSxDQUFDNDlCLGNBQUQsQ0FBNUY7QUFDQSxNQUFJLENBQUNDLFFBQUwsRUFBZTtBQUNmLE9BQUt2bUIsV0FBTCxDQUFpQnVtQixRQUFRLENBQUMvbUIsUUFBMUI7O0FBQ0EsUUFBTWdSLFFBQVEsR0FBR2ptQixtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0J1VCxPQUFoQixDQUF3Qi9ULHVEQUFjLENBQUMyVSxhQUF2QyxFQUFzRDZuQixRQUFRLENBQUMvbUIsUUFBL0QsQ0FBakI7O0FBQ0FqVixxQkFBTyxDQUFDLGNBQUQsQ0FBUCxDQUFjc25CLFVBQWQsQ0FBeUJyQixRQUF6QjtBQUNILENBTkQ7O0FBUUFrZCxXQUFXLENBQUMzaUMsU0FBWixDQUFzQnlWLFdBQXRCLEdBQW9DLGdCQUFlOGxCLGNBQWYsRUFBK0I7QUFDL0QsUUFBTTRILE9BQU8sR0FBRzNsQyxNQUFNLENBQUM2YixNQUFQLENBQWMxYixrREFBZCxFQUF3QjdDLElBQXhCLENBQTZCd2dDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN21CLFFBQUYsSUFBYzhtQixjQUFoRCxLQUFtRTU5QixrREFBUSxDQUFDNDlCLGNBQUQsQ0FBM0Y7QUFDQSxNQUFJLENBQUM0SCxPQUFMLEVBQWMsT0FBTyxLQUFLNXRCLFNBQUwsQ0FBZWdtQixjQUFmLENBQVA7QUFDZCxRQUFNc0gsS0FBSyxHQUFHTSxPQUFPLENBQUMvOUIsSUFBdEI7QUFDQSxRQUFNMkksS0FBSyxHQUFHLE1BQU0vTyx1REFBYyxDQUFDOFosYUFBZixDQUE2Qm5iLGtEQUFRLENBQUNrbEMsS0FBRCxDQUFSLENBQWdCcHVCLFFBQTdDLEVBQXVELE9BQXZELENBQXBCO0FBQ0EsTUFBSTNXLHFEQUFXLENBQUMra0MsS0FBRCxDQUFmLEVBQXdCLEtBQUtJLFlBQUwsQ0FBa0JKLEtBQWxCLEVBQXlCLElBQXpCLEdBQWdDLEtBQUtHLFdBQUwsQ0FBaUJILEtBQWpCLEVBQXdCLElBQXhCLENBQWhDOztBQUN4QixNQUFJOTBCLEtBQUosRUFBVztBQUNQLFFBQUkvUSx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUNzQiw4Q0FBSyxDQUFDOGMsaUJBQU4sQ0FBd0I7QUFBQ0UsWUFBTSxFQUFFLENBQUN2TixLQUFEO0FBQVQsS0FBeEI7QUFDakMsUUFBSS9RLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3NCLDhDQUFLLENBQUNpRyxTQUFOLENBQWlCLEdBQUVzK0IsS0FBTSx5QkFBekIsRUFBbUQ7QUFBQ3RtQyxVQUFJLEVBQUU7QUFBUCxLQUFuRDtBQUNqQyxXQUFPK0IsOENBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFK3RCLEtBQU0seUJBQXJDLEVBQStEOTBCLEtBQS9ELENBQVA7QUFDSDs7QUFDRHpQLGdEQUFLLENBQUNvSSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRW04QixLQUFNLEtBQUlsbEMsa0RBQVEsQ0FBQ2tsQyxLQUFELENBQVIsQ0FBZ0J2b0MsT0FBUSxnQkFBakU7QUFDQSxNQUFJMEMsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDc0IsOENBQUssQ0FBQ2lHLFNBQU4sQ0FBaUIsR0FBRXMrQixLQUFNLEtBQUlsbEMsa0RBQVEsQ0FBQ2tsQyxLQUFELENBQVIsQ0FBZ0J2b0MsT0FBUSxnQkFBckQsRUFBc0U7QUFBQ2lDLFFBQUksRUFBRTtBQUFQLEdBQXRFO0FBQ2pDc0MsbURBQVEsQ0FBQ3lHLFFBQVQsQ0FBa0IsZ0JBQWxCLEVBQW9DdTlCLEtBQXBDO0FBQ0gsQ0FkRDs7QUFnQkFGLFdBQVcsQ0FBQzNpQyxTQUFaLENBQXNCcU0sTUFBdEIsR0FBK0IsVUFBU2pILElBQVQsRUFBZTtBQUMxQyxTQUFPLEtBQUtxUSxXQUFMLENBQWlCclEsSUFBakIsQ0FBUDtBQUNILENBRkQ7O0FBSUF1OUIsV0FBVyxDQUFDM2lDLFNBQVosQ0FBc0J5N0IsSUFBdEIsR0FBNkIsVUFBU0YsY0FBVCxFQUF5QjtBQUNsRCxRQUFNQyxRQUFRLEdBQUdoK0IsTUFBTSxDQUFDNmIsTUFBUCxDQUFjMWIsa0RBQWQsRUFBd0I3QyxJQUF4QixDQUE2QndnQyxDQUFDLElBQUlBLENBQUMsQ0FBQzdtQixRQUFGLElBQWM4bUIsY0FBaEQsS0FBbUU1OUIsa0RBQVEsQ0FBQzQ5QixjQUFELENBQTVGO0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7O0FBQ2YsUUFBTS9WLFFBQVEsR0FBR2ptQixtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0J1VCxPQUFoQixDQUF3Qi9ULHVEQUFjLENBQUMrVSxZQUF2QyxFQUFxRHluQixRQUFRLENBQUMvbUIsUUFBOUQsQ0FBakI7O0FBQ0FqVixxQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0J3NkIsS0FBcEIsQ0FBMEIwQixRQUExQixDQUFvQyxHQUFFalcsUUFBUyxFQUEvQztBQUNILENBTEQ7O0FBT0FrZCxXQUFXLENBQUMzaUMsU0FBWixDQUFzQm9qQyxlQUF0QixHQUF3QyxZQUFXO0FBQy9DLFFBQU1oTyxPQUFPLEdBQUdwMkIsdURBQWMsQ0FBQ2dhLGNBQWYsQ0FBOEIsT0FBOUIsQ0FBaEI7O0FBQ0EsT0FBSyxNQUFNdkUsUUFBWCxJQUF1QjJnQixPQUFPLENBQUM1ZCxLQUEvQixFQUFzQyxLQUFLakMsU0FBTCxDQUFlZCxRQUFmOztBQUN0QyxPQUFLLE1BQU1yUCxJQUFYLElBQW1CZ3dCLE9BQU8sQ0FBQzliLE9BQTNCLEVBQW9DLEtBQUtyRSxXQUFMLENBQWlCN1AsSUFBakI7QUFDdkMsQ0FKRDs7QUFNQXU5QixXQUFXLENBQUMzaUMsU0FBWixDQUFzQjRpQyxhQUF0QixHQUFzQyxZQUFXO0FBQzdDLFFBQU1oSCxLQUFLLEdBQUc3OEIsa0RBQVMsQ0FBQ2tlLGVBQVYsQ0FBMEIsUUFBMUIsQ0FBZDs7QUFDQSxNQUFJMmUsS0FBSixFQUFXO0FBQ1BwK0IsVUFBTSxDQUFDMFUsTUFBUCxDQUFjcFUscURBQWQsRUFBMkI4OUIsS0FBM0I7QUFDSDtBQUNKLENBTEQ7O0FBT0ErRyxXQUFXLENBQUMzaUMsU0FBWixDQUFzQitpQyxhQUF0QixHQUFzQyxZQUFZO0FBQzlDaGtDLG9EQUFTLENBQUMyb0IsZUFBVixDQUEwQixRQUExQixFQUFvQzVwQixxREFBcEM7QUFDSCxDQUZEOztBQUllLG1FQUFJNmtDLFdBQUosRUFBZixFOzs7Ozs7Ozs7Ozs7QUMvSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNcmtDLEtBQU4sQ0FBWTtBQUN2QjtBQUNBLGFBQVcrSSxXQUFYLEdBQXlCO0FBQUUsV0FBT0MsSUFBSSxDQUFDQyxHQUFMLENBQVM3SCxRQUFRLENBQUM4SCxlQUFULENBQXlCQyxXQUFsQyxFQUErQ2xPLE1BQU0sQ0FBQ21PLFVBQVAsSUFBcUIsQ0FBcEUsQ0FBUDtBQUFnRjtBQUMzRzs7O0FBQ0EsYUFBV0MsWUFBWCxHQUEwQjtBQUFFLFdBQU9MLElBQUksQ0FBQ0MsR0FBTCxDQUFTN0gsUUFBUSxDQUFDOEgsZUFBVCxDQUF5QkksWUFBbEMsRUFBZ0RyTyxNQUFNLENBQUNzTyxXQUFQLElBQXNCLENBQXRFLENBQVA7QUFBa0Y7O0FBRTlHLGFBQVdWLGdCQUFYLEdBQThCO0FBQzFCLFdBQU8sS0FBS2s4QixpQkFBTCxHQUF5QixJQUFoQztBQUNIOztBQUVELFNBQU92N0IsdUJBQVAsR0FBaUM7QUFDN0IsV0FBTztBQUNIdzdCLGlCQUFXLEVBQUUsSUFEVjtBQUVIQyxXQUFLLEVBQUU7QUFGSixLQUFQO0FBSUg7O0FBRUQsU0FBT3g3QixtQkFBUCxDQUEyQjdKLEdBQTNCLEVBQWdDO0FBQzVCLFFBQUlBLEdBQUcsS0FBSyxhQUFaLEVBQTJCLE9BQU8sSUFBUDtBQUMzQixRQUFJQSxHQUFHLEtBQUssT0FBWixFQUFxQixPQUFPLEtBQVA7QUFDckIsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsU0FBTzhKLG1CQUFQLENBQTJCOUosR0FBM0IsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQ25DLFFBQUlELEdBQUcsS0FBSyxhQUFaLEVBQTJCLE9BQU8sSUFBUDtBQUMzQixRQUFJQSxHQUFHLEtBQUssT0FBWixFQUFxQixPQUFPLEtBQVA7QUFDckIsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsU0FBT3FaLFFBQVAsQ0FBZ0IzUyxPQUFoQixFQUF5QjtBQUNyQixRQUFJQSxPQUFPLENBQUM0K0IsVUFBUixDQUFtQixDQUFuQixNQUEwQixNQUE5QixFQUFzQztBQUNsQzUrQixhQUFPLEdBQUdBLE9BQU8sQ0FBQ3FMLEtBQVIsQ0FBYyxDQUFkLENBQVY7QUFDSDs7QUFDRCxXQUFPckwsT0FBUDtBQUNIOztBQUVELFNBQU82K0IsV0FBUCxHQUFxQjtBQUNqQixXQUFPdDdCLGlEQUFHLENBQUN5Z0IsS0FBSixDQUFVLE1BQUlobUIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM2Z0MsZUFBRixJQUFxQjdnQyxDQUFDLENBQUM4Z0MsWUFBMUMsRUFBd0QsQ0FBeEQsRUFBMkRELGVBQTNELENBQTJFbDBCLEtBQTNFLENBQWlGLEdBQWpGLEVBQXNGLENBQXRGLENBQUosR0FBNkYsV0FBdkcsQ0FBUDtBQUNIOztBQUVELFNBQU9vMEIsVUFBUCxDQUFrQkMsUUFBbEIsRUFBNEIzK0IsSUFBNUIsRUFBa0M7QUFDOUIyK0IsWUFBUSxDQUFDQyxLQUFUO0FBQ0FELFlBQVEsQ0FBQ0UsY0FBVCxHQUEwQixDQUExQjtBQUNBRixZQUFRLENBQUNHLFlBQVQsR0FBd0JILFFBQVEsQ0FBQzFsQyxLQUFULENBQWUyRCxNQUF2QztBQUNBcEMsWUFBUSxDQUFDdWtDLFdBQVQsQ0FBcUIsWUFBckIsRUFBbUMsS0FBbkMsRUFBMEMvK0IsSUFBMUM7QUFDSDs7QUFFRCxTQUFPbUQsUUFBUCxDQUFnQjVMLEVBQWhCLEVBQW9CO0FBQ2hCLFdBQU9BLEVBQUUsQ0FBQ3NGLE9BQUgsQ0FBVyxvQkFBWCxFQUFpQyxHQUFqQyxDQUFQO0FBQ0g7O0FBRUQsU0FBTzJFLEdBQVAsQ0FBV3c5QixVQUFYLEVBQXVCbGdDLE9BQXZCLEVBQWdDO0FBQzVCeUMsV0FBTyxDQUFDQyxHQUFSLENBQWEscUJBQW9CdzlCLFVBQVcsT0FBTWxnQyxPQUFRLEVBQTFELEVBQTZELG1DQUE3RCxFQUFrRyxpQkFBbEcsRUFBcUgsRUFBckg7QUFDSDs7QUFFRCxTQUFPekYsSUFBUCxDQUFZMmxDLFVBQVosRUFBd0JsZ0MsT0FBeEIsRUFBaUM7QUFDN0J5QyxXQUFPLENBQUNsSSxJQUFSLENBQWMscUJBQW9CMmxDLFVBQVcsT0FBTWxnQyxPQUFRLEVBQTNELEVBQThELG1DQUE5RCxFQUFtRyxpQkFBbkcsRUFBc0gsRUFBdEg7QUFDSDs7QUFFRCxTQUFPOFEsR0FBUCxDQUFXb3ZCLFVBQVgsRUFBdUJsZ0MsT0FBdkIsRUFBZ0MrSixLQUFoQyxFQUF1QztBQUNuQ3RILFdBQU8sQ0FBQ0MsR0FBUixDQUFhLHFCQUFvQnc5QixVQUFXLE9BQU1sZ0MsT0FBUSxFQUExRCxFQUE2RCwrQkFBN0QsRUFBOEYsYUFBOUYsRUFBNkcsRUFBN0c7O0FBQ0EsUUFBSStKLEtBQUosRUFBVztBQUNQdEgsYUFBTyxDQUFDMDlCLGNBQVIsQ0FBdUIsY0FBY3AyQixLQUFLLENBQUMvSixPQUEzQyxFQUFvRCxhQUFwRDtBQUNBeUMsYUFBTyxDQUFDc0gsS0FBUixDQUFjQSxLQUFLLENBQUMySyxLQUFwQjtBQUNBalMsYUFBTyxDQUFDMjlCLFFBQVI7QUFDSDtBQUNKOztBQUVELFNBQU9DLE1BQVAsQ0FBY3YwQixDQUFkLEVBQWlCO0FBQ2IsV0FBT0EsQ0FBQyxDQUFDL04sT0FBRixDQUFVLHVCQUFWLEVBQW1DLE1BQW5DLENBQVA7QUFDSDs7QUFFRCxTQUFPb0osUUFBUCxDQUFnQnpKLElBQWhCLEVBQXNCO0FBQ2xCLFFBQUk7QUFDQSxhQUFPa1csSUFBSSxDQUFDZ1AsS0FBTCxDQUFXbGxCLElBQVgsQ0FBUDtBQUNILEtBRkQsQ0FHQSxPQUFPb1QsR0FBUCxFQUFZO0FBQ1IsYUFBTyxLQUFQO0FBQ0g7QUFDSjs7QUFFRCxTQUFPa0QsT0FBUCxDQUFlMVgsR0FBZixFQUFvQjtBQUNoQixRQUFJQSxHQUFHLElBQUksSUFBUCxJQUFlQSxHQUFHLElBQUlFLFNBQXRCLElBQW1DRixHQUFHLElBQUksRUFBOUMsRUFBa0QsT0FBTyxJQUFQO0FBQ2xELFFBQUksT0FBT0EsR0FBUCxLQUFnQixRQUFwQixFQUE4QixPQUFPLEtBQVA7QUFDOUIsUUFBSThPLEtBQUssQ0FBQ0MsT0FBTixDQUFjL08sR0FBZCxDQUFKLEVBQXdCLE9BQU9BLEdBQUcsQ0FBQ3dCLE1BQUosSUFBYyxDQUFyQjs7QUFDeEIsU0FBSyxNQUFNNUQsR0FBWCxJQUFrQm9DLEdBQWxCLEVBQXVCO0FBQ25CLFVBQUlBLEdBQUcsQ0FBQ3VJLGNBQUosQ0FBbUIzSyxHQUFuQixDQUFKLEVBQTZCLE9BQU8sS0FBUDtBQUNoQzs7QUFDRCxXQUFPLElBQVA7QUFDSDs7QUFFRCxTQUFPK00sY0FBUCxDQUFzQkMsTUFBdEIsRUFBOEJsSCxPQUE5QixFQUF1QztBQUNuQyxXQUFPLENBQUMsR0FBR3NnQyxNQUFKLEtBQWU7QUFDbEIsVUFBSTtBQUFFLGVBQU9wNUIsTUFBTSxDQUFDLEdBQUdvNUIsTUFBSixDQUFiO0FBQTJCLE9BQWpDLENBQ0EsT0FBT3poQyxDQUFQLEVBQVU7QUFBRSxhQUFLaVMsR0FBTCxDQUFTLGlCQUFULEVBQTRCLHVCQUF1QjlRLE9BQW5ELEVBQTREbkIsQ0FBNUQ7QUFBaUU7QUFDaEYsS0FIRDtBQUlIOztBQUVELFNBQU9WLFdBQVAsQ0FBbUIwSSxJQUFuQixFQUF5QkMsVUFBekIsRUFBcUMxQixPQUFyQyxFQUE4QztBQUMxQyxVQUFNO0FBQUNxSSxZQUFEO0FBQVNwUCxXQUFUO0FBQWdCa2lDLGFBQWhCO0FBQXlCdmUsVUFBSSxHQUFHLEtBQWhDO0FBQXVDd2UsWUFBTSxHQUFHLEtBQWhEO0FBQXVEQyxXQUFLLEdBQUc7QUFBL0QsUUFBd0VyN0IsT0FBOUU7QUFDQSxVQUFNcE8sV0FBVyxHQUFHb08sT0FBTyxDQUFDcE8sV0FBUixJQUF1QjZQLElBQUksQ0FBQzdQLFdBQTVCLElBQTJDNlAsSUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUI5UCxXQUE1RCxJQUEyRTZQLElBQUksQ0FBQ3pGLElBQWhGLElBQXdGeUYsSUFBSSxDQUFDeEwsV0FBTCxDQUFpQnJFLFdBQXpHLElBQXdINlAsSUFBSSxDQUFDeEwsV0FBTCxDQUFpQitGLElBQTdKO0FBQ0EsUUFBSSxDQUFDby9CLE1BQUwsRUFBYS85QixPQUFPLENBQUNDLEdBQVIsQ0FBWSxPQUFaLEVBQXFCb0UsVUFBckIsRUFBaUMsSUFBakMsRUFBdUM5UCxXQUF2QyxFQUg2QixDQUd3Qjs7QUFDbEUsUUFBSSxDQUFDNlAsSUFBSSxDQUFDQyxVQUFELENBQVQsRUFBdUI7QUFDbkIsVUFBSTI1QixLQUFKLEVBQVc1NUIsSUFBSSxDQUFDQyxVQUFELENBQUosR0FBbUIsWUFBVyxDQUFFLENBQWhDLENBQVgsS0FDSyxPQUFPckUsT0FBTyxDQUFDc0gsS0FBUixDQUFjakQsVUFBZCxFQUEwQixvQkFBMUIsRUFBZ0Q5UCxXQUFoRCxDQUFQLENBRmMsQ0FFdUQ7QUFDN0U7O0FBQ0QsVUFBTTBwQyxVQUFVLEdBQUc3NUIsSUFBSSxDQUFDQyxVQUFELENBQXZCOztBQUNBLFVBQU11bkIsTUFBTSxHQUFHLE1BQU07QUFDakIsVUFBSSxDQUFDbVMsTUFBTCxFQUFhLzlCLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLFNBQVosRUFBdUJvRSxVQUF2QixFQUFtQyxJQUFuQyxFQUF5QzlQLFdBQXpDLEVBREksQ0FDbUQ7O0FBQ3BFNlAsVUFBSSxDQUFDQyxVQUFELENBQUosR0FBbUI0NUIsVUFBbkI7QUFDSCxLQUhEOztBQUlBNzVCLFFBQUksQ0FBQ0MsVUFBRCxDQUFKLEdBQW1CLFlBQVc7QUFDMUIsWUFBTXBKLElBQUksR0FBRztBQUNUcWYsa0JBQVUsRUFBRSxJQURIO0FBRVRyUCx1QkFBZSxFQUFFdFIsU0FGUjtBQUdUdWtDLG1CQUFXLEVBQUV0UyxNQUhKO0FBSVR1UyxzQkFBYyxFQUFFRixVQUpQO0FBS1RHLDBCQUFrQixFQUFFLE1BQU1uakMsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUNrakMsY0FBTCxDQUFvQnprQyxLQUFwQixDQUEwQnVCLElBQUksQ0FBQ3FmLFVBQS9CLEVBQTJDcmYsSUFBSSxDQUFDZ1EsZUFBaEQ7QUFMcEMsT0FBYjs7QUFPQSxVQUFJNnlCLE9BQUosRUFBYTtBQUNULGNBQU1PLE9BQU8sR0FBR3htQyxLQUFLLENBQUMyTSxjQUFOLENBQXFCczVCLE9BQXJCLEVBQThCLDJCQUEyQjE1QixJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQjlQLFdBQTFFLEVBQXVGMEcsSUFBdkYsQ0FBaEI7QUFDQSxZQUFJb2pDLE9BQU8sS0FBS3RrQyxTQUFoQixFQUEyQmtCLElBQUksQ0FBQ0UsV0FBTCxHQUFtQmtqQyxPQUFuQjtBQUM5QixPQUhELE1BSUs7QUFDRCxZQUFJcnpCLE1BQUosRUFBWW5ULEtBQUssQ0FBQzJNLGNBQU4sQ0FBcUJ3RyxNQUFyQixFQUE2QiwwQkFBMEI1RyxJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQjlQLFdBQXhFLEVBQXFGMEcsSUFBckY7QUFDWkEsWUFBSSxDQUFDbWpDLGtCQUFMO0FBQ0EsWUFBSXhpQyxLQUFKLEVBQVcvRCxLQUFLLENBQUMyTSxjQUFOLENBQXFCNUksS0FBckIsRUFBNEIseUJBQXlCd0ksSUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUI5UCxXQUF0RSxFQUFtRjBHLElBQW5GO0FBQ2Q7O0FBQ0QsVUFBSXNrQixJQUFKLEVBQVVxTSxNQUFNO0FBQ2hCLGFBQU8zd0IsSUFBSSxDQUFDRSxXQUFaO0FBQ0gsS0FuQkQ7O0FBb0JBcEUsVUFBTSxDQUFDMFUsTUFBUCxDQUFjckgsSUFBSSxDQUFDQyxVQUFELENBQWxCLEVBQWdDNDVCLFVBQWhDO0FBQ0E3NUIsUUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUJpNkIsZUFBakIsR0FBbUMsSUFBbkM7QUFDQWw2QixRQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQjlQLFdBQWpCLEdBQStCQSxXQUEvQjs7QUFDQSxRQUFJLENBQUM2UCxJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQmdILGdCQUF0QixFQUF3QztBQUNwQ2pILFVBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCZ0gsZ0JBQWpCLEdBQW9DNHlCLFVBQXBDOztBQUNBNzVCLFVBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCNFQsUUFBakIsR0FBNEIsWUFBVztBQUFDLGVBQU9nbUIsVUFBVSxDQUFDaG1CLFFBQVgsRUFBUDtBQUE4QixPQUF0RTtBQUNIOztBQUNELFdBQU8yVCxNQUFQO0FBQ0g7O0FBRUQsU0FBT3RuQixTQUFQLENBQWlCZCxJQUFqQixFQUF1QmUsUUFBdkIsRUFBaUM7QUFDN0IsVUFBTStuQixRQUFRLEdBQUcsSUFBSXpWLGdCQUFKLENBQXNCQyxTQUFELElBQWU7QUFDakQsV0FBSyxJQUFJeGlCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd3aUIsU0FBUyxDQUFDemIsTUFBOUIsRUFBc0MvRyxDQUFDLEVBQXZDLEVBQTJDO0FBQ3ZDLGNBQU0waUIsUUFBUSxHQUFHRixTQUFTLENBQUN4aUIsQ0FBRCxDQUExQjtBQUNBLGNBQU1pNEIsS0FBSyxHQUFHNWpCLEtBQUssQ0FBQ2tiLElBQU4sQ0FBVzdNLFFBQVEsQ0FBQ3dWLFlBQXBCLENBQWQ7QUFDQSxjQUFNQyxXQUFXLEdBQUdGLEtBQUssQ0FBQzFjLE9BQU4sQ0FBY3JNLElBQWQsSUFBc0IsQ0FBQyxDQUEzQztBQUNBLGNBQU1rcEIsV0FBVyxHQUFHSCxLQUFLLENBQUMvRSxJQUFOLENBQVcyQyxNQUFNLElBQUlBLE1BQU0sQ0FBQzVmLFFBQVAsQ0FBZ0IvRyxJQUFoQixDQUFyQixDQUFwQjs7QUFDQSxZQUFJaXBCLFdBQVcsSUFBSUMsV0FBbkIsRUFBZ0M7QUFDNUJKLGtCQUFRLENBQUNpUyxVQUFUO0FBQ0FoNkIsa0JBQVE7QUFDWDtBQUNKO0FBQ0osS0FYZ0IsQ0FBakI7QUFhQStuQixZQUFRLENBQUMxVSxPQUFULENBQWlCM2UsUUFBUSxDQUFDQyxJQUExQixFQUFnQztBQUFDNGUsYUFBTyxFQUFFLElBQVY7QUFBZ0JELGVBQVMsRUFBRTtBQUEzQixLQUFoQztBQUNIOztBQUVELFNBQU80RCxhQUFQLENBQXFCNWhCLEdBQXJCLEVBQTBCcVMsSUFBMUIsRUFBZ0M7QUFDNUIsV0FBT0EsSUFBSSxDQUFDbkQsS0FBTCxDQUFXLFVBQVgsRUFBdUJ1bkIsTUFBdkIsQ0FBOEIsVUFBU3oyQixHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDckQsYUFBT0QsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUQsQ0FBakI7QUFDSCxLQUZNLEVBRUpELEdBRkksQ0FBUDtBQUdIO0FBRUQ7Ozs7Ozs7Ozs7O0FBU0EsU0FBT2lFLFNBQVAsQ0FBaUJLLE9BQWpCLEVBQTBCd0UsT0FBTyxHQUFHLEVBQXBDLEVBQXdDO0FBQ3BDLFFBQUksQ0FBQzFKLFFBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsWUFBdkIsQ0FBTCxFQUEyQztBQUN2QyxZQUFNcWEsU0FBUyxHQUFHbnBCLFFBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsTUFBSTVMLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMjdCLE9BQUYsSUFBYTM3QixDQUFDLENBQUNvaUMsU0FBbEMsRUFBNkMsQ0FBN0MsRUFBZ0R6RyxPQUFoRCxDQUF3RGh2QixLQUF4RCxDQUE4RCxHQUE5RCxFQUFtRSxDQUFuRSxDQUFKLEdBQTBFLFFBQWpHLEtBQThHLElBQWhJO0FBQ0EsWUFBTTAxQixVQUFVLEdBQUdyYyxTQUFTLEdBQUdBLFNBQVMsQ0FBQ3JhLGFBQVYsQ0FBd0IsTUFBSTVMLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDc2lDLFdBQXJCLEVBQWtDLENBQWxDLEVBQXFDQSxXQUFqRSxDQUFILEdBQW1GLElBQS9HO0FBQ0EsWUFBTUMsSUFBSSxHQUFHdmMsU0FBUyxHQUFHQSxTQUFTLENBQUNyYSxhQUFWLENBQXdCLE1BQXhCLENBQUgsR0FBcUMsSUFBM0Q7QUFDQSxZQUFNMGEsSUFBSSxHQUFHTCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ2dKLHFCQUFWLEdBQWtDM0ksSUFBckMsR0FBNEMsR0FBbEU7QUFDQSxZQUFNbWMsS0FBSyxHQUFHSCxVQUFVLEdBQUdBLFVBQVUsQ0FBQ3JULHFCQUFYLEdBQW1DM0ksSUFBdEMsR0FBNkMsQ0FBckU7QUFDQSxZQUFNL0YsS0FBSyxHQUFHa2lCLEtBQUssR0FBR0EsS0FBSyxHQUFHeGMsU0FBUyxDQUFDZ0oscUJBQVYsR0FBa0MzSSxJQUE3QyxHQUFvRDVxQixLQUFLLENBQUMrSSxXQUFOLEdBQW9CNmhCLElBQXBCLEdBQTJCLEdBQWxHO0FBQ0EsWUFBTW9jLE1BQU0sR0FBR0YsSUFBSSxHQUFHQSxJQUFJLENBQUN6VCxZQUFSLEdBQXVCLEVBQTFDO0FBQ0EsWUFBTTRULFlBQVksR0FBRzdsQyxRQUFRLENBQUM3RCxhQUFULENBQXVCLEtBQXZCLENBQXJCO0FBQ0EwcEMsa0JBQVksQ0FBQzUxQixTQUFiLENBQXVCZSxHQUF2QixDQUEyQixXQUEzQjtBQUNBNjBCLGtCQUFZLENBQUN0ekIsS0FBYixDQUFtQlEsV0FBbkIsQ0FBK0IsTUFBL0IsRUFBdUN5VyxJQUFJLEdBQUcsSUFBOUM7QUFDQXFjLGtCQUFZLENBQUN0ekIsS0FBYixDQUFtQlEsV0FBbkIsQ0FBK0IsT0FBL0IsRUFBd0MwUSxLQUFLLEdBQUcsSUFBaEQ7QUFDQW9pQixrQkFBWSxDQUFDdHpCLEtBQWIsQ0FBbUJRLFdBQW5CLENBQStCLFFBQS9CLEVBQXlDNnlCLE1BQU0sR0FBRyxJQUFsRDtBQUNBNWxDLGNBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsWUFBdkIsRUFBcUM1TyxXQUFyQyxDQUFpRDJsQyxZQUFqRDtBQUNIOztBQUNELFVBQU07QUFBQ2hwQyxVQUFJLEdBQUcsRUFBUjtBQUFZaXBDLFVBQUksR0FBRyxJQUFuQjtBQUF5QkMsYUFBTyxHQUFHO0FBQW5DLFFBQTJDcjhCLE9BQWpEO0FBQ0EsVUFBTXM4QixTQUFTLEdBQUdobUMsUUFBUSxDQUFDN0QsYUFBVCxDQUF1QixLQUF2QixDQUFsQjtBQUNBNnBDLGFBQVMsQ0FBQy8xQixTQUFWLENBQW9CZSxHQUFwQixDQUF3QixVQUF4QjtBQUNBLFFBQUluVSxJQUFKLEVBQVVtcEMsU0FBUyxDQUFDLzFCLFNBQVYsQ0FBb0JlLEdBQXBCLENBQXdCLFdBQVduVSxJQUFuQztBQUNWLFFBQUlBLElBQUksSUFBSWlwQyxJQUFaLEVBQWtCRSxTQUFTLENBQUMvMUIsU0FBVixDQUFvQmUsR0FBcEIsQ0FBd0IsTUFBeEI7QUFDbEJnMUIsYUFBUyxDQUFDQyxTQUFWLEdBQXNCL2dDLE9BQXRCO0FBQ0FsRixZQUFRLENBQUM4TyxhQUFULENBQXVCLFlBQXZCLEVBQXFDNU8sV0FBckMsQ0FBaUQ4bEMsU0FBakQ7QUFDQTl3QixjQUFVLENBQUMsTUFBTTtBQUNiOHdCLGVBQVMsQ0FBQy8xQixTQUFWLENBQW9CZSxHQUFwQixDQUF3QixTQUF4QjtBQUNBa0UsZ0JBQVUsQ0FBQyxNQUFNO0FBQ2I4d0IsaUJBQVMsQ0FBQzMwQixNQUFWO0FBQ0EsWUFBSSxDQUFDclIsUUFBUSxDQUFDNFMsZ0JBQVQsQ0FBMEIsc0JBQTFCLEVBQWtEeFEsTUFBdkQsRUFBK0RwQyxRQUFRLENBQUM4TyxhQUFULENBQXVCLFlBQXZCLEVBQXFDdUMsTUFBckM7QUFDbEUsT0FIUyxFQUdQLEdBSE8sQ0FBVjtBQUlILEtBTlMsRUFNUDAwQixPQU5PLENBQVY7QUFPSDs7QUFFRCxTQUFPeDhCLEtBQVAsQ0FBYWpQLEtBQWIsRUFBb0I0SyxPQUFwQixFQUE2QjtBQUN6QixRQUFJZ2hDLFdBQVcsR0FBR2hqQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dqQyxLQUFGLElBQVdoakMsQ0FBQyxDQUFDaWpDLEtBQWIsSUFBc0IsQ0FBQ2pqQyxDQUFDLENBQUNrakMsZ0JBQTVDLEVBQThELENBQTlELENBQWxCO0FBQ0EsUUFBSUMsWUFBWSxHQUFHcGpDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDb2pDLE1BQUYsSUFBWXBqQyxDQUFDLENBQUNxakMscUJBQWQsSUFBdUNyakMsQ0FBQyxDQUFDa2pDLGdCQUE1RCxFQUE4RSxDQUE5RSxDQUFuQjtBQUNBLFFBQUlJLGFBQWEsR0FBR3ZqQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ29qQyxNQUFGLElBQVlwakMsQ0FBQyxDQUFDcWpDLHFCQUFkLElBQXVDcmpDLENBQUMsQ0FBQ3VqQyxTQUE1RCxFQUF1RSxDQUF2RSxDQUFwQjtBQUNBLFVBQU1QLEtBQUssR0FBRzE5QixpREFBRyxDQUFDdE0sYUFBSixDQUFtQjtrREFDUytHLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd2pDLFFBQUYsSUFBY3hqQyxDQUFDLENBQUN5akMsaUJBQW5DLEVBQXNELENBQXRELEVBQXlERCxRQUFTOytDQUNyRVQsV0FBVyxDQUFDQyxLQUFNO3lEQUNSRCxXQUFXLENBQUNFLEtBQU07cURBQ3RCRSxZQUFZLENBQUNDLE1BQU87eURBQ2hCanNDLEtBQU07Ozs7OzhDQUtqQjRLLE9BQVE7Ozs7cURBSURvaEMsWUFBWSxDQUFDenJDLE1BQU8sSUFBRzRyQyxhQUFhLENBQUM1ckMsTUFBTzs7Ozs7MkJBZDNFLENBQWQ7QUFvQkFzckMsU0FBSyxDQUFDcjNCLGFBQU4sQ0FBb0IsZ0JBQXBCLEVBQXNDd00sZ0JBQXRDLENBQXVELE9BQXZELEVBQWdFLE1BQU07QUFDbEU3Uyx1REFBRyxDQUFDNG1CLFFBQUosQ0FBYThXLEtBQWIsRUFBb0IsU0FBcEI7QUFDQWp4QixnQkFBVSxDQUFDLE1BQU07QUFDYml4QixhQUFLLENBQUM5MEIsTUFBTjtBQUNBdzFCLHdCQUFnQixDQUFDaDBCLE9BQWpCLENBQTBCbWdCLFFBQUQsSUFBYztBQUNuQyxjQUFHO0FBQ0NBLG9CQUFRO0FBQ1gsV0FGRCxDQUVDLE9BQU03dkIsQ0FBTixFQUFRO0FBQ0w0RCxtQkFBTyxDQUFDc0gsS0FBUixDQUFjbEwsQ0FBZDtBQUNIO0FBQ0osU0FORDtBQU9ILE9BVFMsRUFTUCxHQVRPLENBQVY7QUFVSCxLQVpEO0FBYUFnakMsU0FBSyxDQUFDcjNCLGFBQU4sQ0FBb0IsY0FBcEIsRUFBb0N3TSxnQkFBcEMsQ0FBcUQsT0FBckQsRUFBOEQsTUFBTTtBQUNoRTdTLHVEQUFHLENBQUM0bUIsUUFBSixDQUFhOFcsS0FBYixFQUFvQixTQUFwQjtBQUNBanhCLGdCQUFVLENBQUMsTUFBTTtBQUNiaXhCLGFBQUssQ0FBQzkwQixNQUFOO0FBQ0F3MUIsd0JBQWdCLENBQUNoMEIsT0FBakIsQ0FBMEJtZ0IsUUFBRCxJQUFjO0FBQ25DLGNBQUc7QUFDQ0Esb0JBQVE7QUFDWCxXQUZELENBRUMsT0FBTTd2QixDQUFOLEVBQVE7QUFDTDRELG1CQUFPLENBQUNzSCxLQUFSLENBQWNsTCxDQUFkO0FBQ0g7QUFDSixTQU5EO0FBT0gsT0FUUyxFQVNQLEdBVE8sQ0FBVjtBQVVILEtBWkQ7QUFhQXNGLHFEQUFHLENBQUN5Z0IsS0FBSixDQUFVLFlBQVYsRUFBd0JHLE1BQXhCLENBQStCOGMsS0FBL0I7QUFDQSxVQUFNVSxnQkFBZ0IsR0FBRyxFQUF6QjtBQUNBLFdBQU87QUFDSDV3QixXQUFLLEVBQUUsTUFBTTtBQUNUeE4seURBQUcsQ0FBQzRtQixRQUFKLENBQWE4VyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0FqeEIsa0JBQVUsQ0FBQyxNQUFNO0FBQ2JpeEIsZUFBSyxDQUFDOTBCLE1BQU47QUFDQXcxQiwwQkFBZ0IsQ0FBQ2gwQixPQUFqQixDQUEwQm1nQixRQUFELElBQWM7QUFDbkMsZ0JBQUc7QUFDQ0Esc0JBQVE7QUFDWCxhQUZELENBRUMsT0FBTTd2QixDQUFOLEVBQVE7QUFDTDRELHFCQUFPLENBQUNzSCxLQUFSLENBQWNsTCxDQUFkO0FBQ0g7QUFDSixXQU5EO0FBT0gsU0FUUyxFQVNQLEdBVE8sQ0FBVjtBQVVILE9BYkU7QUFjSHNaLGFBQU8sRUFBR3VXLFFBQUQsSUFBYztBQUNuQjZULHdCQUFnQixDQUFDLzRCLElBQWpCLENBQXNCa2xCLFFBQXRCO0FBQ0g7QUFoQkUsS0FBUDtBQWtCSDs7QUFFRCxTQUFPdFgsaUJBQVAsQ0FBeUI7QUFBQ0MsV0FBTyxFQUFFbXJCLFlBQVksR0FBRyxFQUF6QjtBQUE2QmxyQixVQUFNLEVBQUVtckIsV0FBVyxHQUFHO0FBQW5ELEdBQXpCLEVBQWlGO0FBQzdFLFFBQUksQ0FBQ0QsWUFBRCxJQUFpQixDQUFDQyxXQUF0QixFQUFtQztBQUNuQyxRQUFJLENBQUNELFlBQVksQ0FBQzFrQyxNQUFkLElBQXdCLENBQUMya0MsV0FBVyxDQUFDM2tDLE1BQXpDLEVBQWlEO0FBQ2pELFFBQUk4akMsV0FBVyxHQUFHaGpDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ2pDLEtBQUYsSUFBV2hqQyxDQUFDLENBQUNpakMsS0FBYixJQUFzQixDQUFDampDLENBQUMsQ0FBQ2tqQyxnQkFBNUMsRUFBOEQsQ0FBOUQsQ0FBbEI7QUFDQSxRQUFJQyxZQUFZLEdBQUdwakMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNvakMsTUFBRixJQUFZcGpDLENBQUMsQ0FBQ3FqQyxxQkFBZCxJQUF1Q3JqQyxDQUFDLENBQUNrakMsZ0JBQTVELEVBQThFLENBQTlFLENBQW5CO0FBQ0EsUUFBSUksYUFBYSxHQUFHdmpDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDb2pDLE1BQUYsSUFBWXBqQyxDQUFDLENBQUNxakMscUJBQWQsSUFBdUNyakMsQ0FBQyxDQUFDdWpDLFNBQTVELEVBQXVFLENBQXZFLENBQXBCO0FBQ0EsVUFBTVAsS0FBSyxHQUFHMTlCLGlEQUFHLENBQUN0TSxhQUFKLENBQW1CO2tEQUNTK0csU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN3akMsUUFBRixJQUFjeGpDLENBQUMsQ0FBQ3lqQyxpQkFBbkMsRUFBc0QsQ0FBdEQsRUFBeURELFFBQVM7Z0VBQ3BEVCxXQUFXLENBQUNDLEtBQU07eURBQ3pCRCxXQUFXLENBQUNFLEtBQU07cURBQ3RCRSxZQUFZLENBQUNDLE1BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cURBbUJwQkQsWUFBWSxDQUFDenJDLE1BQU8sSUFBRzRyQyxhQUFhLENBQUM1ckMsTUFBTzs7Ozs7MkJBdkIzRSxDQUFkOztBQThCQSxhQUFTbXNDLFdBQVQsQ0FBcUJqdEIsTUFBckIsRUFBNkI7QUFDekIsWUFBTW9QLFNBQVMsR0FBRzFnQixpREFBRyxDQUFDdE0sYUFBSixDQUFtQixzQkFBbkIsQ0FBbEI7O0FBQ0EsV0FBSyxNQUFNaVosR0FBWCxJQUFrQjJFLE1BQWxCLEVBQTBCO0FBQ3RCLGNBQU0xTCxLQUFLLEdBQUc1RixpREFBRyxDQUFDdE0sYUFBSixDQUFtQjs0RUFDMkJpWixHQUFHLENBQUMxUCxJQUFKLEdBQVcwUCxHQUFHLENBQUMxUCxJQUFmLEdBQXNCMFAsR0FBRyxDQUFDMkQsSUFBSzsrRUFDNUIzRCxHQUFHLENBQUM5USxPQUFROzJHQUNnQjhRLEdBQUcsQ0FBQy9HLEtBQUosR0FBWStHLEdBQUcsQ0FBQy9HLEtBQUosQ0FBVS9KLE9BQXRCLEdBQWdDLEVBQUc7dUNBSGhILENBQWQ7QUFLQTZrQixpQkFBUyxDQUFDRSxNQUFWLENBQWlCaGIsS0FBakI7O0FBQ0EsWUFBSStHLEdBQUcsQ0FBQy9HLEtBQVIsRUFBZTtBQUNYQSxlQUFLLENBQUN1RSxnQkFBTixDQUF1QixHQUF2QixFQUE0QkMsT0FBNUIsQ0FBb0N5WCxFQUFFLElBQUlBLEVBQUUsQ0FBQ2hQLGdCQUFILENBQW9CLE9BQXBCLEVBQThCblksQ0FBRCxJQUFPO0FBQzFFQSxhQUFDLENBQUN2SCxjQUFGO0FBQ0FnRCxpQkFBSyxDQUFDd1csR0FBTixDQUFVLGdCQUFWLEVBQTZCLHFCQUFvQkEsR0FBRyxDQUFDMVAsSUFBSixHQUFXMFAsR0FBRyxDQUFDMVAsSUFBZixHQUFzQjBQLEdBQUcsQ0FBQzJELElBQUssR0FBaEYsRUFBb0YzRCxHQUFHLENBQUMvRyxLQUF4RjtBQUNILFdBSHlDLENBQTFDO0FBSUg7QUFDSjs7QUFDRCxhQUFPOGEsU0FBUDtBQUNIOztBQUVELFVBQU0rWCxJQUFJLEdBQUcsQ0FBQzhGLFdBQVcsQ0FBQ0YsWUFBRCxDQUFaLEVBQTRCRSxXQUFXLENBQUNELFdBQUQsQ0FBdkMsQ0FBYjtBQUVBWixTQUFLLENBQUN2ekIsZ0JBQU4sQ0FBdUIsZUFBdkIsRUFBd0NDLE9BQXhDLENBQWdEeVgsRUFBRSxJQUFJQSxFQUFFLENBQUNoUCxnQkFBSCxDQUFvQixPQUFwQixFQUE4Qm5ZLENBQUQsSUFBTztBQUN0RkEsT0FBQyxDQUFDdkgsY0FBRjtBQUNBLFlBQU00bEIsUUFBUSxHQUFHMmtCLEtBQUssQ0FBQ3IzQixhQUFOLENBQW9CLHdCQUFwQixDQUFqQjtBQUNBLFVBQUkwUyxRQUFKLEVBQWMvWSxpREFBRyxDQUFDNm1CLFdBQUosQ0FBZ0I5TixRQUFoQixFQUEwQixVQUExQjtBQUNkL1ksdURBQUcsQ0FBQzRtQixRQUFKLENBQWFsc0IsQ0FBQyxDQUFDcWMsTUFBZixFQUF1QixVQUF2QjtBQUNBLFlBQU00ZCxRQUFRLEdBQUcrSSxLQUFLLENBQUNyM0IsYUFBTixDQUFvQixXQUFwQixDQUFqQjtBQUNBc3VCLGNBQVEsQ0FBQ3pnQixTQUFULEdBQXFCLEVBQXJCO0FBQ0F5Z0IsY0FBUSxDQUFDL1QsTUFBVCxDQUFnQjZYLElBQUksQ0FBQ3o0QixpREFBRyxDQUFDd29CLEtBQUosQ0FBVTl0QixDQUFDLENBQUNxYyxNQUFaLENBQUQsQ0FBcEI7QUFDSCxLQVJxRCxDQUF0RDtBQVVBMm1CLFNBQUssQ0FBQ3IzQixhQUFOLENBQW9CLGdCQUFwQixFQUFzQ3dNLGdCQUF0QyxDQUF1RCxPQUF2RCxFQUFnRSxNQUFNO0FBQ2xFN1MsdURBQUcsQ0FBQzRtQixRQUFKLENBQWE4VyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0FqeEIsZ0JBQVUsQ0FBQyxNQUFNO0FBQUVpeEIsYUFBSyxDQUFDOTBCLE1BQU47QUFBaUIsT0FBMUIsRUFBNEIsR0FBNUIsQ0FBVjtBQUNILEtBSEQ7QUFJQTgwQixTQUFLLENBQUNyM0IsYUFBTixDQUFvQixjQUFwQixFQUFvQ3dNLGdCQUFwQyxDQUFxRCxPQUFyRCxFQUE4RCxNQUFNO0FBQ2hFN1MsdURBQUcsQ0FBQzRtQixRQUFKLENBQWE4VyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0FqeEIsZ0JBQVUsQ0FBQyxNQUFNO0FBQUVpeEIsYUFBSyxDQUFDOTBCLE1BQU47QUFBaUIsT0FBMUIsRUFBNEIsR0FBNUIsQ0FBVjtBQUNILEtBSEQ7QUFJQTVJLHFEQUFHLENBQUN5Z0IsS0FBSixDQUFVLFlBQVYsRUFBd0JHLE1BQXhCLENBQStCOGMsS0FBL0I7QUFDQSxRQUFJVyxZQUFZLENBQUMxa0MsTUFBakIsRUFBeUIrakMsS0FBSyxDQUFDcjNCLGFBQU4sQ0FBb0IsZUFBcEIsRUFBcUNuVCxLQUFyQyxHQUF6QixLQUNLd3FDLEtBQUssQ0FBQ3Z6QixnQkFBTixDQUF1QixlQUF2QixFQUF3QyxDQUF4QyxFQUEyQ2pYLEtBQTNDO0FBQ1I7O0FBRUQsU0FBT21nQixrQkFBUCxDQUEwQnBTLE9BQU8sR0FBRyxFQUFwQyxFQUF3QztBQUNwQyxVQUFNek8sVUFBVSxHQUFHRix1REFBYyxDQUFDRyxXQUFmLENBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLEVBQTZDLEtBQTdDLEVBQW9ELFlBQXBELENBQW5CO0FBQ0EsVUFBTStyQyxnQkFBZ0IsR0FBR2xzQyx1REFBYyxDQUFDRyxXQUFmLENBQTJCLE9BQTNCLEVBQW9DLFVBQXBDLENBQXpCO0FBQ0EsVUFBTUosV0FBVyxHQUFHQyx1REFBYyxDQUFDQyxpQkFBZixDQUFpQyxNQUFqQyxDQUFwQjtBQUNBLFVBQU1rc0MsU0FBUyxHQUFHbnNDLHVEQUFjLENBQUNHLFdBQWYsQ0FBMkIsT0FBM0IsQ0FBbEI7QUFDQSxVQUFNaXNDLE1BQU0sR0FBR3BzQyx1REFBYyxDQUFDRyxXQUFmLENBQTJCLE1BQTNCLEVBQW1DLFNBQW5DLENBQWY7QUFDQSxVQUFNa3NDLFNBQVMsR0FBR3JzQyx1REFBYyxDQUFDSyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ2dzQyxZQUFGLElBQWtCaHNDLENBQUMsQ0FBQ2dzQyxZQUFGLENBQWVDLFVBQWYsSUFBNkIsS0FBeEUsQ0FBbEI7QUFDQSxVQUFNQyxjQUFjLEdBQUd4c0MsdURBQWMsQ0FBQ0csV0FBZixDQUEyQixjQUEzQixFQUEyQyxPQUEzQyxDQUF2QjtBQUNBLFFBQUksQ0FBQ2tzQyxTQUFELElBQWMsQ0FBQ25zQyxVQUFmLElBQTZCLENBQUNnc0MsZ0JBQTlCLElBQWtELENBQUNuc0MsV0FBbkQsSUFBa0UsQ0FBQ29zQyxTQUFuRSxJQUFnRixDQUFDQyxNQUFqRixJQUEyRixDQUFDSSxjQUFoRyxFQUFnSDtBQUVoSCxVQUFNO0FBQ0Yvc0MsV0FBSyxHQUFHLGdHQUROO0FBRUZKLGlCQUFXLEdBQUcsRUFGWjtBQUdGQyxhQUFPLEdBQUcsRUFIUjtBQUlGQyxXQUFLLEdBQUcsWUFKTjtBQUtGRyxjQUFRLEdBQUksSUFBR1Asb0RBQVcsRUFMeEI7QUFNRlc7QUFORSxRQU9GNk8sT0FQSjtBQVFBLFVBQU04OUIsRUFBRSxHQUFHenJDLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBdEI7QUFDQSxVQUFNc3JDLGNBQWMsR0FBRyxDQUFDRCxFQUFFLENBQUMsS0FBRCxFQUFRO0FBQUNoYSxTQUFHLEVBQUVoekI7QUFBTixLQUFSLENBQUgsQ0FBdkI7QUFDQSxRQUFJSixXQUFKLEVBQWlCcXRDLGNBQWMsQ0FBQzM1QixJQUFmLENBQW9CMDVCLEVBQUUsQ0FBQyxHQUFELEVBQU0sSUFBTixFQUFZRCxjQUFjLENBQUNyZ0IsS0FBZixDQUFxQjlzQixXQUFyQixDQUFaLENBQXRCOztBQUNqQixTQUFLLElBQUl5VyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHeFcsT0FBTyxDQUFDK0gsTUFBNUIsRUFBb0N5TyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFlBQU0rVSxLQUFLLEdBQUd2ckIsT0FBTyxDQUFDd1csQ0FBRCxDQUFyQjtBQUNBLFlBQU1oVSxJQUFJLEdBQUdvcUMsZ0JBQWdCLENBQUNyaEIsS0FBSyxDQUFDL29CLElBQVAsQ0FBaEIsR0FBK0JvcUMsZ0JBQWdCLENBQUNyaEIsS0FBSyxDQUFDL29CLElBQVAsQ0FBL0MsR0FBOERvcUMsZ0JBQWdCLENBQUNudkIsS0FBNUY7QUFDQSxZQUFNNHZCLE1BQU0sR0FBRzcyQixDQUFDLElBQUksQ0FBTCxHQUFTbzJCLGdCQUFnQixDQUFDVSxTQUExQixHQUFzQyxFQUFyRDtBQUNBRixvQkFBYyxDQUFDMzVCLElBQWYsQ0FBb0IwNUIsRUFBRSxDQUFDLElBQUQsRUFBTztBQUFDbnJDLGlCQUFTLEVBQUcsR0FBRVEsSUFBSyxJQUFHNnFDLE1BQU87QUFBOUIsT0FBUCxFQUEwQzloQixLQUFLLENBQUN0ckIsS0FBaEQsQ0FBdEI7QUFDQSxZQUFNK1IsSUFBSSxHQUFHbTdCLEVBQUUsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhNWhCLEtBQUssQ0FBQ3JyQixLQUFOLENBQVkrSyxHQUFaLENBQWdCK0ssQ0FBQyxJQUFJbTNCLEVBQUUsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhRCxjQUFjLENBQUNyZ0IsS0FBZixDQUFxQjdXLENBQXJCLENBQWIsQ0FBdkIsQ0FBYixDQUFmO0FBQ0FvM0Isb0JBQWMsQ0FBQzM1QixJQUFmLENBQW9CekIsSUFBcEI7QUFDSDs7QUFDRCxVQUFNdTdCLFlBQVksR0FBRyxZQUFXO0FBQzVCLGFBQU9KLEVBQUUsQ0FBQ04sU0FBUyxDQUFDVyxLQUFYLEVBQWtCO0FBQUNDLFlBQUksRUFBRSxDQUFQO0FBQVVDLGNBQU0sRUFBRTtBQUFsQixPQUFsQixFQUNMUCxFQUFFLENBQUNMLE1BQU0sQ0FBQy9qQyxPQUFSLEVBQWlCO0FBQUM0a0MsV0FBRyxFQUFFYixNQUFNLENBQUNjLElBQVAsQ0FBWUM7QUFBbEIsT0FBakIsRUFBd0M1dEMsS0FBeEMsQ0FERyxFQUVMa3RDLEVBQUUsQ0FBQzFzQyxXQUFELEVBQWE7QUFBQ3dCLFlBQUksRUFBRXhCLFdBQVcsQ0FBQ3lCLEtBQVosQ0FBa0JDLEtBQXpCO0FBQWdDQyxhQUFLLEVBQUUzQixXQUFXLENBQUM0QixNQUFaLENBQW1CQyxRQUExRDtBQUFvRU4saUJBQVMsRUFBRTRxQyxnQkFBZ0IsQ0FBQ2tCO0FBQWhHLE9BQWIsRUFBb0gxdEMsUUFBcEgsQ0FGRyxDQUFUO0FBSUgsS0FMRDs7QUFPQSxVQUFNMnRDLFlBQVksR0FBRyxNQUFNO0FBQ3ZCLFlBQU1qdEMsTUFBTSxHQUFHSix1REFBYyxDQUFDSyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsWUFBTUMsYUFBYSxHQUFHUix1REFBYyxDQUFDRyxXQUFmLENBQTJCLHdCQUEzQixLQUF3RDtBQUFDTSxjQUFNLEVBQUUsZUFBVDtBQUEwQkMsOEJBQXNCLEVBQUU7QUFBbEQsT0FBOUU7O0FBQ0EsWUFBTUMsaUJBQWlCLEdBQUlDLEtBQUQsSUFBVztBQUNqQ0EsYUFBSyxDQUFDQyxjQUFOO0FBQ0FELGFBQUssQ0FBQ0UsZUFBTjtBQUNBWixrQkFBVSxDQUFDYSxHQUFYO0FBQ0FDLG1EQUFJLENBQUNzc0MsT0FBTDtBQUNILE9BTEQ7O0FBTUEsWUFBTXBzQyxXQUFXLEdBQUdkLE1BQU0sR0FBR3FzQyxFQUFFLENBQUNyc0MsTUFBRCxFQUFTO0FBQUNpQixlQUFPLEVBQUVWO0FBQVYsT0FBVCxFQUF1QywwQkFBdkMsQ0FBTCxHQUEwRThyQyxFQUFFLENBQUMsR0FBRCxFQUFNO0FBQUNuckMsaUJBQVMsRUFBRyxHQUFFZCxhQUFhLENBQUNDLE1BQU8sSUFBR0QsYUFBYSxDQUFDRSxzQkFBdUIsRUFBNUU7QUFBK0VXLGVBQU8sRUFBRVY7QUFBeEYsT0FBTixFQUFrSCwwQkFBbEgsQ0FBdEc7QUFDQSxZQUFNNHNDLGFBQWEsR0FBR2QsRUFBRSxDQUFDMXNDLFdBQUQsRUFBYTtBQUFDd0IsWUFBSSxFQUFFeEIsV0FBVyxDQUFDeUIsS0FBWixDQUFrQkMsS0FBekI7QUFBZ0NDLGFBQUssRUFBRTNCLFdBQVcsQ0FBQzRCLE1BQVosQ0FBbUJDO0FBQTFELE9BQWIsRUFBa0YsZ0JBQWxGLEVBQW9HVixXQUFwRyxDQUF4QjtBQUNBLGFBQU91ckMsRUFBRSxDQUFDTixTQUFTLENBQUNXLEtBQVgsRUFBa0I7QUFBQ0MsWUFBSSxFQUFFLENBQVA7QUFBVUMsY0FBTSxFQUFFO0FBQWxCLE9BQWxCLEVBQXdDbHRDLE1BQU0sR0FBR0EsTUFBSCxHQUFZeXRDLGFBQTFELENBQVQ7QUFDSCxLQVpEOztBQWNBLFdBQU9ydEMsVUFBVSxDQUFDNlMsSUFBWCxDQUFnQixVQUFTOUQsS0FBVCxFQUFnQjtBQUNuQyxhQUFPdzlCLEVBQUUsQ0FBQ0osU0FBRCxFQUFZdHBDLE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYztBQUMvQm5XLGlCQUFTLEVBQUU0cUMsZ0JBQWdCLENBQUM5ZCxTQURHO0FBRS9CbWUsa0JBQVUsRUFBRSxJQUZtQjtBQUcvQmlCLGdCQUFRLEVBQUUzYSxDQUFDLElBQUlBLENBSGdCO0FBSS9CblIsZUFBTyxFQUFFbVIsQ0FBQyxJQUFJQSxDQUppQjtBQUsvQmdhLG9CQUFZLEVBQUVBLFlBTGlCO0FBTS9CUSxvQkFBWSxFQUFFQSxZQU5pQjtBQU8vQmwzQixnQkFBUSxFQUFFdTJCO0FBUHFCLE9BQWQsRUFRbEJ6OUIsS0FSa0IsQ0FBWixDQUFUO0FBU0gsS0FWTSxDQUFQO0FBV0g7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsU0FBT1IscUJBQVAsQ0FBNkJsUCxLQUE3QixFQUFvQzRLLE9BQXBDLEVBQTZDd0UsT0FBTyxHQUFHLEVBQXZELEVBQTJEO0FBQ3ZELFVBQU16TyxVQUFVLEdBQUdGLHVEQUFjLENBQUNHLFdBQWYsQ0FBMkIsTUFBM0IsRUFBbUMsUUFBbkMsRUFBNkMsS0FBN0MsRUFBb0QsWUFBcEQsQ0FBbkI7QUFDQSxVQUFNc3RDLFFBQVEsR0FBR3p0Qyx1REFBYyxDQUFDQyxpQkFBZixDQUFpQyxVQUFqQyxDQUFqQjtBQUNBLFVBQU15dEMsaUJBQWlCLEdBQUcxdEMsdURBQWMsQ0FBQ0ssSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNnc0MsWUFBRixJQUFrQmhzQyxDQUFDLENBQUNtRCxHQUFwQixJQUEyQm5ELENBQUMsQ0FBQ21ELEdBQUYsTUFBVyxlQUEvRCxDQUExQjtBQUNBLFFBQUksQ0FBQ3ZELFVBQUQsSUFBZSxDQUFDd3RDLGlCQUFoQixJQUFxQyxDQUFDRCxRQUExQyxFQUFvRCxPQUFPNXBDLEtBQUssQ0FBQzJLLEtBQU4sQ0FBWWpQLEtBQVosRUFBbUI0SyxPQUFuQixDQUFQOztBQUVwRCxVQUFNd2pDLGFBQWEsR0FBRyxNQUFNLENBQUUsQ0FBOUI7O0FBQ0EsVUFBTTtBQUFDL3RCLGVBQVMsR0FBRyt0QixhQUFiO0FBQTRCck8sY0FBUSxHQUFHcU8sYUFBdkM7QUFBc0RodUIsaUJBQVcsR0FBRyxNQUFwRTtBQUE0RWpSLGdCQUFVLEdBQUcsUUFBekY7QUFBbUcyd0IsWUFBTSxHQUFHLEtBQTVHO0FBQW1INTdCLFNBQUcsR0FBR3NDO0FBQXpILFFBQXNJNEksT0FBNUk7QUFFQSxRQUFJLENBQUNnRyxLQUFLLENBQUNDLE9BQU4sQ0FBY3pLLE9BQWQsQ0FBTCxFQUE2QkEsT0FBTyxHQUFHLENBQUNBLE9BQUQsQ0FBVjtBQUM3QkEsV0FBTyxHQUFHQSxPQUFPLENBQUNJLEdBQVIsQ0FBWXVMLENBQUMsSUFBSSxPQUFPQSxDQUFQLEtBQWMsUUFBZCxHQUF5QjlVLDJDQUFJLENBQUNHLEtBQUwsQ0FBV0MsYUFBWCxDQUF5QnFzQyxRQUF6QixFQUFtQyxJQUFuQyxFQUF5QzMzQixDQUF6QyxDQUF6QixHQUF1RUEsQ0FBeEYsQ0FBVjtBQUNBLFdBQU81VixVQUFVLENBQUM2UyxJQUFYLENBQWdCMjZCLGlCQUFoQixFQUFtQztBQUN0Q2xDLFlBQU0sRUFBRWpzQyxLQUQ4QjtBQUV0QzRXLGNBQVEsRUFBRWhNLE9BRjRCO0FBR3RDeWpDLFNBQUcsRUFBRXZPLE1BSGlDO0FBSXRDMWYsaUJBQVcsRUFBRUEsV0FKeUI7QUFLdENqUixnQkFBVSxFQUFFQSxVQUwwQjtBQU10Q2tSLGVBQVMsRUFBRUEsU0FOMkI7QUFPdEMwZixjQUFRLEVBQUVBO0FBUDRCLEtBQW5DLEVBUUo3N0IsR0FSSSxDQUFQO0FBU0g7O0FBRUQsU0FBT2lQLFFBQVAsQ0FBZ0JwUixTQUFoQixFQUEwQjtBQUN0QixRQUFHLENBQUNBLFNBQUosRUFBYyxPQUFPQSxTQUFQO0FBQ2QsV0FBT0EsU0FBUyxDQUFDeVQsS0FBVixDQUFnQixHQUFoQixFQUFxQmxHLE1BQXJCLENBQTRCekcsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQ3NNLFVBQUYsQ0FBYSxLQUFiLENBQWxDLEVBQXVEZSxJQUF2RCxDQUE0RCxHQUE1RCxDQUFQO0FBQ0g7O0FBMWNzQjtBQTZjM0I1UixLQUFLLENBQUNpRyxTQUFOLEdBQWtCakcsS0FBSyxDQUFDMk0sY0FBTixDQUFxQjNNLEtBQUssQ0FBQ2lHLFNBQTNCLEVBQXNDLHVCQUF0QyxDQUFsQjtBQUVBaEwsTUFBTSxDQUFDa0osU0FBUCxDQUFpQjZsQyxhQUFqQixDQUErQmhxQyxLQUEvQixHQUF1Q0EsS0FBdkMsQzs7Ozs7Ozs7Ozs7O0FDcGRBO0FBQUE7QUFBQTtBQUVlLG1FQUFJLE1BQU1pcUMsRUFBTixDQUFTO0FBRXhCbHBDLGFBQVcsR0FBRztBQUNWLFNBQUttcEMsY0FBTCxHQUFzQixLQUF0Qjs7QUFDQSxTQUFLL3RDLGNBQUwsR0FBc0IsQ0FBQyxNQUFNO0FBQ3pCLFlBQU1ndUMsR0FBRyxHQUFHQyxZQUFZLENBQUNsN0IsSUFBYixDQUFrQixDQUFDLEVBQUQsRUFBSztBQUFDbTdCLG9CQUFZLEVBQUUsQ0FBQzk1QixNQUFELEVBQVNvSixPQUFULEVBQWtCd3dCLEdBQWxCLEtBQTBCNTVCLE1BQU0sQ0FBQ29KLE9BQVAsR0FBaUJ3d0I7QUFBMUQsT0FBTCxFQUFxRSxDQUFDLENBQUMsY0FBRCxDQUFELENBQXJFLENBQWxCLENBQVo7QUFDQSxhQUFPQSxHQUFHLENBQUMxdEMsQ0FBSixDQUFNNHRDLFlBQWI7QUFDQSxhQUFPRixHQUFHLENBQUNsNEIsQ0FBSixDQUFNbzRCLFlBQWI7O0FBRUEsWUFBTUMsYUFBYSxHQUFHQyxTQUFTLElBQUk7QUFDL0IsWUFBSUEsU0FBUyxDQUFDOTNCLE1BQVYsSUFBb0I4M0IsU0FBUyxDQUFDbGlDLEdBQTlCLElBQXFDa2lDLFNBQVMsQ0FBQ0MsS0FBL0MsSUFBd0RELFNBQVMsQ0FBQ3hxQyxHQUFsRSxJQUF5RSxDQUFDd3FDLFNBQVMsQ0FBQ0UsSUFBeEYsRUFBOEYsT0FBTyxJQUFQO0FBQzlGLFlBQUlGLFNBQVMsQ0FBQ0csUUFBVixJQUFzQkgsU0FBUyxDQUFDSSxRQUFoQyxJQUE0Q0osU0FBUyxDQUFDSyxTQUExRCxFQUFxRSxPQUFPLElBQVA7QUFDckUsZUFBTyxLQUFQO0FBQ0gsT0FKRDs7QUFNQSxZQUFNQyxPQUFPLEdBQUdOLFNBQVMsSUFBSTtBQUN6QixZQUFJQSxTQUFTLENBQUM5M0IsTUFBVixJQUFvQjgzQixTQUFTLENBQUNsaUMsR0FBOUIsSUFBcUNraUMsU0FBUyxDQUFDQyxLQUEvQyxJQUF3REQsU0FBUyxDQUFDeHFDLEdBQWxFLElBQXlFLENBQUN3cUMsU0FBUyxDQUFDRSxJQUF4RixFQUE4RixPQUFPLElBQVA7QUFDOUYsWUFBSSxDQUFDRixTQUFTLENBQUNHLFFBQVgsSUFBdUIsQ0FBQ0gsU0FBUyxDQUFDSSxRQUFsQyxJQUE4QyxDQUFDSixTQUFTLENBQUNLLFNBQTdELEVBQXdFLE9BQU9MLFNBQVA7QUFDeEUsY0FBTU8sS0FBSyxHQUFHLElBQUkvb0MsS0FBSixDQUFVd29DLFNBQVYsRUFBcUI7QUFDL0Ivb0Msa0NBQXdCLEVBQUUsVUFBU1EsR0FBVCxFQUFjQyxJQUFkLEVBQW9CO0FBQzFDLGdCQUFJQSxJQUFJLEtBQUssVUFBVCxJQUF1QkEsSUFBSSxLQUFLLFVBQWhDLElBQThDQSxJQUFJLEtBQUssV0FBM0QsRUFBd0UsT0FBT0MsU0FBUDtBQUN4RSxtQkFBT2hELE1BQU0sQ0FBQ3NDLHdCQUFQLENBQWdDUSxHQUFoQyxFQUFxQ0MsSUFBckMsQ0FBUDtBQUNILFdBSjhCO0FBSy9CbEMsYUFBRyxFQUFFLFVBQVNpQyxHQUFULEVBQWMrb0MsSUFBZCxFQUFvQjtBQUNyQixnQkFBSUEsSUFBSSxJQUFJLFVBQVosRUFBd0IsT0FBTyxNQUFNLDBGQUFiO0FBQ3hCLGdCQUFJQSxJQUFJLElBQUksVUFBWixFQUF3QixPQUFPLE1BQU0sdUJBQWI7QUFDeEIsZ0JBQUlBLElBQUksSUFBSSxXQUFaLEVBQXlCLE9BQU8sTUFBTSxJQUFiLENBSEosQ0FJckI7O0FBQ0EsbUJBQU8vb0MsR0FBRyxDQUFDK29DLElBQUQsQ0FBVjtBQUNIO0FBWDhCLFNBQXJCLENBQWQ7QUFhQSxlQUFPRCxLQUFQO0FBQ0gsT0FqQkQ7O0FBbUJBLFlBQU10dUMsSUFBSSxHQUFJd08sTUFBRCxJQUFZO0FBQ3JCLGFBQUssTUFBTXlHLENBQVgsSUFBZ0IwNEIsR0FBRyxDQUFDbDRCLENBQXBCLEVBQXVCO0FBQ25CLGNBQUlrNEIsR0FBRyxDQUFDbDRCLENBQUosQ0FBTTFILGNBQU4sQ0FBcUJrSCxDQUFyQixDQUFKLEVBQTZCO0FBQ3pCLGtCQUFNaFYsQ0FBQyxHQUFHMHRDLEdBQUcsQ0FBQ2w0QixDQUFKLENBQU1SLENBQU4sRUFBU2tJLE9BQW5CO0FBQ0EsZ0JBQUlsZCxDQUFDLElBQUlBLENBQUMsQ0FBQ3VVLFVBQVAsSUFBcUJ2VSxDQUFDLENBQUMrSCxPQUF2QixJQUFrQ3dHLE1BQU0sQ0FBQ3ZPLENBQUMsQ0FBQytILE9BQUgsQ0FBNUMsRUFBeUQsT0FBT3FtQyxPQUFPLENBQUNwdUMsQ0FBQyxDQUFDK0gsT0FBSCxDQUFkO0FBQ3pELGdCQUFJL0gsQ0FBQyxJQUFJdU8sTUFBTSxDQUFDdk8sQ0FBRCxDQUFmLEVBQW9CLE9BQU9vdUMsT0FBTyxDQUFDcHVDLENBQUQsQ0FBZDtBQUN2QjtBQUNKLFNBUG9CLENBUXJCOzs7QUFDQSxlQUFPLElBQVA7QUFDSCxPQVZEOztBQVlBLFlBQU15TyxPQUFPLEdBQUlGLE1BQUQsSUFBWTtBQUN4QixjQUFNc0YsT0FBTyxHQUFHLEVBQWhCOztBQUNBLGFBQUssTUFBTW1CLENBQVgsSUFBZ0IwNEIsR0FBRyxDQUFDbDRCLENBQXBCLEVBQXVCO0FBQ25CLGNBQUlrNEIsR0FBRyxDQUFDbDRCLENBQUosQ0FBTTFILGNBQU4sQ0FBcUJrSCxDQUFyQixDQUFKLEVBQTZCO0FBQ3pCLGtCQUFNaFYsQ0FBQyxHQUFHMHRDLEdBQUcsQ0FBQ2w0QixDQUFKLENBQU1SLENBQU4sRUFBU2tJLE9BQW5CO0FBQ0EsZ0JBQUlsZCxDQUFDLElBQUlBLENBQUMsQ0FBQ3VVLFVBQVAsSUFBcUJ2VSxDQUFDLENBQUMrSCxPQUF2QixJQUFrQ3dHLE1BQU0sQ0FBQ3ZPLENBQUMsQ0FBQytILE9BQUgsQ0FBNUMsRUFBeUQ4TCxPQUFPLENBQUNwQixJQUFSLENBQWEyN0IsT0FBTyxDQUFDcHVDLENBQUMsQ0FBQytILE9BQUgsQ0FBcEIsRUFBekQsS0FDSyxJQUFJL0gsQ0FBQyxJQUFJdU8sTUFBTSxDQUFDdk8sQ0FBRCxDQUFmLEVBQW9CNlQsT0FBTyxDQUFDcEIsSUFBUixDQUFhMjdCLE9BQU8sQ0FBQ3B1QyxDQUFELENBQXBCO0FBQzVCO0FBQ0o7O0FBQ0QsZUFBTzZULE9BQVA7QUFDSCxPQVZEOztBQVlBLFlBQU1qRixzQkFBc0IsR0FBSTIvQixTQUFELElBQWV4dUMsSUFBSSxDQUFDK1QsTUFBTSxJQUFJeTZCLFNBQVMsQ0FBQ2phLEtBQVYsQ0FBZ0I5dUIsSUFBSSxJQUFJc08sTUFBTSxDQUFDdE8sSUFBRCxDQUFOLEtBQWlCQyxTQUF6QyxDQUFYLENBQWxEOztBQUNBLFlBQU1zSixnQkFBZ0IsR0FBSXkvQixVQUFELElBQWdCenVDLElBQUksQ0FBQytULE1BQU0sSUFBSUEsTUFBTSxDQUFDN08sU0FBUCxJQUFvQnVwQyxVQUFVLENBQUNsYSxLQUFYLENBQWlCbWEsU0FBUyxJQUFJMzZCLE1BQU0sQ0FBQzdPLFNBQVAsQ0FBaUJ3cEMsU0FBakIsTUFBZ0NocEMsU0FBOUQsQ0FBL0IsQ0FBN0M7O0FBQ0EsWUFBTTlGLGlCQUFpQixHQUFJTSxXQUFELElBQWlCRixJQUFJLENBQUMrVCxNQUFNLElBQUlBLE1BQU0sQ0FBQzdULFdBQVAsS0FBdUJBLFdBQWxDLENBQS9DOztBQUVBLGFBQU87QUFBQ0YsWUFBRDtBQUFPME8sZUFBUDtBQUFnQkcsOEJBQWhCO0FBQXdDRyx3QkFBeEM7QUFBMERwUDtBQUExRCxPQUFQO0FBQ0gsS0EzRHFCLEdBQXRCOztBQTZEQSxTQUFLK3VDLFFBQUwsR0FBZ0I7QUFDWjNwQixXQUFLLEVBQUUsS0FBS3JsQixjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsV0FBRCxFQUFjLGVBQWQsRUFBK0IsVUFBL0IsRUFBMkMsZUFBM0MsRUFBNEQsY0FBNUQsQ0FBM0MsQ0FESztBQUVaNlosY0FBUSxFQUFFLEtBQUsvb0IsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLGFBQUQsQ0FBM0M7QUFGRSxLQUFoQjs7QUFJQSxTQUFLSyxtQkFBTCxHQUEyQm5ILENBQUMsSUFBSUEsQ0FBQyxDQUFDckYsTUFBTSxDQUFDaUIsSUFBUCxDQUFZb0UsQ0FBWixFQUFlL0gsSUFBZixDQUFvQnlSLENBQUMsSUFBSUEsQ0FBQyxDQUFDNEMsVUFBRixDQUFhLHlCQUFiLENBQXpCLENBQUQsQ0FBakM7QUFDSDs7QUFFRDBMLFlBQVUsR0FBRyxDQUVaOztBQUVENnVCLFNBQU8sR0FBRztBQUFDLFNBQUtDLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RCxrQkFBNUQ7QUFBaUY7O0FBQzVGQyxVQUFRLEdBQUc7QUFBQyxTQUFLQyxZQUFMLENBQWtCQyxVQUFsQixDQUE2QixtQkFBN0I7QUFBbUQ7O0FBRS9EaEMsU0FBTyxHQUFHO0FBQUMsU0FBSzRCLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RCxTQUE1RDtBQUF3RTs7QUFDbkZJLFVBQVEsR0FBRztBQUFDLFNBQUtGLFlBQUwsQ0FBa0JDLFVBQWxCLENBQTZCLG9CQUE3QjtBQUFvRDs7QUFFaEVydUMsUUFBTSxHQUFHO0FBQUMsU0FBS2l1QyxhQUFMLENBQW1CQyx3Q0FBbkIsQ0FBNEQsU0FBNUQ7QUFBd0U7O0FBQ2xGSyxTQUFPLEdBQUc7QUFBQyxTQUFLSCxZQUFMLENBQWtCQyxVQUFsQixDQUE2QixvQkFBN0I7QUFBb0Q7QUFFL0Q7Ozs7O0FBR0EsTUFBSWpxQixLQUFKLEdBQVk7QUFBQyxXQUFPLEtBQUsycEIsUUFBTCxDQUFjM3BCLEtBQXJCO0FBQTRCO0FBQ3pDOzs7OztBQUdBLE1BQUlsa0IsS0FBSixHQUFZO0FBQUMsV0FBTyxLQUFLNnRDLFFBQUwsQ0FBYzNwQixLQUFyQjtBQUE0QjtBQUN6Qzs7Ozs7QUFHQSxNQUFJMEQsUUFBSixHQUFlO0FBQUMsV0FBTyxLQUFLaW1CLFFBQUwsQ0FBY2ptQixRQUFyQjtBQUErQjtBQUMvQzs7Ozs7QUFHQSxNQUFJdmMsUUFBSixHQUFlO0FBQUMsV0FBTyxLQUFLd2lDLFFBQUwsQ0FBY2ptQixRQUFyQjtBQUErQjtBQUMvQzs7Ozs7QUFHQSxNQUFJMG1CLGNBQUosR0FBcUI7QUFBQyxXQUFPLEtBQUtULFFBQUwsQ0FBYzNwQixLQUFkLENBQW9COGhCLFNBQTNCO0FBQXNDO0FBQzVEOzs7OztBQUdBLE1BQUkxNkIsY0FBSixHQUFxQjtBQUFDLFdBQU8sS0FBS3VpQyxRQUFMLENBQWMzcEIsS0FBZCxDQUFvQjhoQixTQUEzQjtBQUFzQzs7QUFFNUQsTUFBSXVJLGFBQUosR0FBb0I7QUFBQyxXQUFPLEtBQUsxdkMsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLHdCQUFELENBQTNDLEtBQTBFO0FBQUN6TyxZQUFNLEVBQUUsZUFBVDtBQUEwQkMsNEJBQXNCLEVBQUU7QUFBbEQsS0FBakY7QUFBcUs7O0FBQzFMLE1BQUlpdkMsa0JBQUosR0FBeUI7QUFBQyxXQUFPLEtBQUszdkMsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLGVBQUQsQ0FBM0MsQ0FBUDtBQUFzRTs7QUFDaEcsTUFBSTBnQyxjQUFKLEdBQXFCO0FBQUMsV0FBTyxLQUFLNXZDLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxTQUFELEVBQVksZUFBWixDQUEzQyxDQUFQO0FBQWlGOztBQUN2RyxNQUFJNlMsWUFBSixHQUFtQjtBQUNyQixVQUFNNkQsYUFBYSxHQUFHemQsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMwWixPQUFGLElBQWExWixDQUFDLENBQUN5bkMsaUJBQWxDLEVBQXFELENBQXJELENBQXRCO0FBQ00sVUFBTWhxQixNQUFNLEdBQUcxZCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzBuQyxXQUFGLElBQWlCMW5DLENBQUMsQ0FBQ3FlLFFBQXRDLEVBQWdELENBQWhELENBQWY7QUFDQSxVQUFNWCxJQUFJLEdBQUczZCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQytaLGFBQXJCLEVBQW9DLENBQXBDLENBQWI7QUFDQSxXQUFPcGYsTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEVBQWQsRUFBa0JtTyxhQUFsQixFQUFpQ0MsTUFBakMsRUFBeUNDLElBQXpDLENBQVA7QUFDTjs7QUFFRSxNQUFJaXFCLHVCQUFKLEdBQThCO0FBQUMsV0FBTyxLQUFLL3ZDLGNBQUwsQ0FBb0JLLElBQXBCLENBQXlCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ2dzQyxZQUFGLElBQWtCaHNDLENBQUMsQ0FBQ2dzQyxZQUFGLENBQWVsK0IsY0FBZixDQUE4QixnQkFBOUIsQ0FBaEQsQ0FBUDtBQUF5Rzs7QUFDeEksTUFBSTJJLGdCQUFKLEdBQXVCO0FBQUMsV0FBTyxLQUFLL1csY0FBTCxDQUFvQkssSUFBcEIsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDK0gsT0FBRixJQUFhL0gsQ0FBQyxDQUFDK0gsT0FBRixDQUFVOUgsV0FBdkIsSUFBc0NELENBQUMsQ0FBQytILE9BQUYsQ0FBVTlILFdBQVYsSUFBeUIsU0FBN0YsQ0FBUDtBQUFnSDs7QUFDeEksTUFBSW9ILGFBQUosR0FBb0I7QUFBQyxXQUFPLEtBQUszSCxjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsWUFBRCxDQUEzQyxDQUFQO0FBQW1FOztBQUN4RixNQUFJOGdDLGNBQUosR0FBcUI7QUFBQyxXQUFPLEtBQUtod0MsY0FBTCxDQUFvQkMsaUJBQXBCLENBQXNDLFNBQXRDLENBQVA7QUFBeUQ7O0FBQy9FLE1BQUltdkIsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS3B2QixjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsVUFBRCxDQUEzQyxDQUFQO0FBQWlFOztBQUNyRixNQUFJZ2dDLGFBQUosR0FBb0I7QUFBQyxXQUFPLEtBQUtsdkMsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLGNBQUQsQ0FBM0MsQ0FBUDtBQUFxRTs7QUFDMUYsTUFBSW1nQyxZQUFKLEdBQW1CO0FBQUMsV0FBTyxLQUFLcnZDLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxZQUFELENBQTNDLENBQVA7QUFBbUU7O0FBQ3ZGLE1BQUkrZ0MsUUFBSixHQUFlO0FBQUMsV0FBTyxLQUFLandDLGNBQUwsQ0FBb0JLLElBQXBCLENBQXlCQyxDQUFDLElBQUlBLENBQUMsQ0FBQzR2QyxJQUFGLElBQVU1dkMsQ0FBQyxDQUFDNnZDLElBQVosSUFBb0IsQ0FBQzd2QyxDQUFDLENBQUMrSixNQUF2QixJQUFpQyxDQUFDL0osQ0FBQyxDQUFDOHZDLE1BQXBDLElBQThDLENBQUM5dkMsQ0FBQyxDQUFDK0osTUFBakQsSUFBMkQsQ0FBQy9KLENBQUMsQ0FBQyt2QyxtQkFBOUQsSUFBcUYsQ0FBQy92QyxDQUFDLENBQUNnd0MsT0FBdEgsQ0FBUDtBQUF1STs7QUFDdkosTUFBSUMsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS3Z3QyxjQUFMLENBQW9CSyxJQUFwQixDQUF5QkMsQ0FBQyxJQUFJQSxDQUFDLENBQUMyakIsUUFBRixJQUFjLFdBQVcvWixJQUFYLENBQWdCNUosQ0FBQyxDQUFDMmpCLFFBQUYsRUFBaEIsQ0FBNUMsQ0FBUDtBQUFtRjs7QUFDdkcsTUFBSXVzQixVQUFKLEdBQWlCO0FBQUMsV0FBTyxLQUFLeHdDLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxVQUFELENBQTNDLENBQVA7QUFBaUU7O0FBQ25GLE1BQUl1aEMsU0FBSixHQUFnQjtBQUFDLFdBQU8sS0FBS3p3QyxjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsZ0JBQUQsQ0FBM0MsQ0FBUDtBQUF1RTs7QUFDeEYsTUFBSXdoQyxZQUFKLEdBQW1CO0FBQUMsV0FBTyxLQUFLMXdDLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxZQUFELENBQTNDLENBQVA7QUFBbUU7O0FBQ3ZGLE1BQUl5aEMsY0FBSixHQUFxQjtBQUFDLFdBQU8sS0FBSzN3QyxjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsb0JBQUQsQ0FBM0MsQ0FBUDtBQUEyRTs7QUFDakcsTUFBSTBoQyxxQkFBSixHQUE0QjtBQUFDLFdBQU8sS0FBSzV3QyxjQUFMLENBQW9Ca1Asc0JBQXBCLENBQTJDLENBQUMsc0JBQUQsQ0FBM0MsQ0FBUDtBQUE2RTs7QUFFMUcyaEMsUUFBTSxDQUFDQyxNQUFELEVBQVM7QUFDWCxVQUFNQyxNQUFNLEdBQUcsS0FBS04sU0FBTCxDQUFlM25DLGNBQWYsR0FBZ0M5RyxFQUEvQztBQUNBLFFBQUkrdUMsTUFBTSxJQUFJRCxNQUFkLEVBQXNCO0FBQ3RCLFVBQU1FLGdCQUFnQixHQUFHLEtBQUtOLFlBQUwsQ0FBa0JPLGVBQWxCLENBQWtDSCxNQUFsQyxDQUF6QjtBQUNBLFFBQUlFLGdCQUFKLEVBQXNCLE9BQU8sS0FBS0oscUJBQUwsQ0FBMkJNLG9CQUEzQixDQUFnREYsZ0JBQWhELENBQVA7QUFDdEIsU0FBS0wsY0FBTCxDQUFvQlEsa0JBQXBCLENBQXVDSixNQUF2QyxFQUErQ0QsTUFBL0M7QUFDSDs7QUFFRE0sZUFBYSxDQUFDaHZDLEdBQUQsRUFBTTtBQUNmLFdBQU9XLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWpDLGtEQUFaLEVBQXNCdTZCLE1BQXRCLENBQTZCLENBQUNILEdBQUQsRUFBTTE0QixHQUFOLEtBQWM7QUFDOUMsWUFBTWtmLE9BQU8sR0FBRzVnQixrREFBUSxDQUFDMEIsR0FBRCxDQUF4Qjs7QUFDQSxVQUFJa2YsT0FBTyxDQUFDdmdCLEdBQVIsS0FBZ0JBLEdBQWhCLElBQXVCdWdCLE9BQU8sQ0FBQ3pnQixXQUEvQixJQUE4QyxDQUFDeWdCLE9BQU8sQ0FBQ3hnQixNQUEzRCxFQUFtRTtBQUMvRHdnQixlQUFPLENBQUNsWSxJQUFSLEdBQWVoSCxHQUFmO0FBQ0EwNEIsV0FBRyxDQUFDcHBCLElBQUosQ0FBUzRQLE9BQVQ7QUFDSDs7QUFBQyxhQUFPd1osR0FBUDtBQUNMLEtBTk0sRUFNSixFQU5JLENBQVA7QUFPSDs7QUF2SnVCLENBQWIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNGQTtBQUFBO0FBQUE7QUFFQSxNQUFNM2tCLEtBQUssR0FBSTs7Ozs7Ozs7Ozs7O0NBQWY7QUFjZSxtRUFBSSxNQUFNNjVCLFNBQU4sQ0FBZ0I7QUFDL0I1bEMsT0FBSyxHQUFHO0FBQ0ppQyxxREFBRyxDQUFDQyxRQUFKLENBQWEsV0FBYixFQUEwQjZKLEtBQTFCO0FBQ0g7O0FBRUQ5RCxNQUFJLEdBQUc7QUFDSGhHLHFEQUFHLENBQUNJLFdBQUosQ0FBZ0IsV0FBaEI7QUFDSDs7QUFQOEIsQ0FBcEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNoQkE7QUFBQSxNQUFNa2dDLEdBQUcsR0FBR0MsWUFBWSxDQUFDbDdCLElBQWIsQ0FBa0IsQ0FBQyxFQUFELEVBQUs7QUFBQ203QixjQUFZLEVBQUUsQ0FBQzk1QixNQUFELEVBQVNvSixPQUFULEVBQWtCd3dCLEdBQWxCLEtBQTBCNTVCLE1BQU0sQ0FBQ29KLE9BQVAsR0FBaUJ3d0I7QUFBMUQsQ0FBTCxFQUFxRSxDQUFDLENBQUMsY0FBRCxDQUFELENBQXJFLENBQWxCLENBQVo7QUFDQSxPQUFPQSxHQUFHLENBQUMxdEMsQ0FBSixDQUFNNHRDLFlBQWI7QUFDQSxPQUFPRixHQUFHLENBQUNsNEIsQ0FBSixDQUFNbzRCLFlBQWI7O0FBQ0EsTUFBTTd0QyxJQUFJLEdBQUl3TyxNQUFELElBQVk7QUFDckIsT0FBSyxNQUFNeUcsQ0FBWCxJQUFnQjA0QixHQUFHLENBQUNsNEIsQ0FBcEIsRUFBdUI7QUFDbkIsUUFBSWs0QixHQUFHLENBQUNsNEIsQ0FBSixDQUFNMUgsY0FBTixDQUFxQmtILENBQXJCLENBQUosRUFBNkI7QUFDekIsWUFBTWhWLENBQUMsR0FBRzB0QyxHQUFHLENBQUNsNEIsQ0FBSixDQUFNUixDQUFOLEVBQVNrSSxPQUFuQjtBQUNBLFVBQUlsZCxDQUFDLElBQUlBLENBQUMsQ0FBQ3VVLFVBQVAsSUFBcUJ2VSxDQUFDLENBQUMrSCxPQUF2QixJQUFrQ3dHLE1BQU0sQ0FBQ3ZPLENBQUMsQ0FBQytILE9BQUgsQ0FBNUMsRUFBeUQsT0FBTy9ILENBQUMsQ0FBQytILE9BQVQ7QUFDekQsVUFBSS9ILENBQUMsSUFBSXVPLE1BQU0sQ0FBQ3ZPLENBQUQsQ0FBZixFQUFvQixPQUFPQSxDQUFQO0FBQ3ZCO0FBQ0osR0FQb0IsQ0FRckI7OztBQUNBLFNBQU8sSUFBUDtBQUNILENBVkQ7O0FBWUEsTUFBTXlPLE9BQU8sR0FBSUYsTUFBRCxJQUFZO0FBQ3hCLFFBQU1zRixPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsT0FBSyxNQUFNbUIsQ0FBWCxJQUFnQjA0QixHQUFHLENBQUNsNEIsQ0FBcEIsRUFBdUI7QUFDbkIsUUFBSWs0QixHQUFHLENBQUNsNEIsQ0FBSixDQUFNMUgsY0FBTixDQUFxQmtILENBQXJCLENBQUosRUFBNkI7QUFDekIsWUFBTWhWLENBQUMsR0FBRzB0QyxHQUFHLENBQUNsNEIsQ0FBSixDQUFNUixDQUFOLEVBQVNrSSxPQUFuQjtBQUNBLFVBQUlsZCxDQUFDLElBQUlBLENBQUMsQ0FBQ3VVLFVBQVAsSUFBcUJ2VSxDQUFDLENBQUMrSCxPQUF2QixJQUFrQ3dHLE1BQU0sQ0FBQ3ZPLENBQUMsQ0FBQytILE9BQUgsQ0FBNUMsRUFBeUQ4TCxPQUFPLENBQUNwQixJQUFSLENBQWF6UyxDQUFDLENBQUMrSCxPQUFmLEVBQXpELEtBQ0ssSUFBSS9ILENBQUMsSUFBSXVPLE1BQU0sQ0FBQ3ZPLENBQUQsQ0FBZixFQUFvQjZULE9BQU8sQ0FBQ3BCLElBQVIsQ0FBYXpTLENBQWI7QUFDNUI7QUFDSjs7QUFDRCxTQUFPNlQsT0FBUDtBQUNILENBVkQ7O0FBWUEsTUFBTWhVLFdBQVcsR0FBRyxDQUFDLEdBQUcwdUMsU0FBSixLQUFrQnh1QyxJQUFJLENBQUMrVCxNQUFNLElBQUl5NkIsU0FBUyxDQUFDamEsS0FBVixDQUFnQjl1QixJQUFJLElBQUlzTyxNQUFNLENBQUN0TyxJQUFELENBQU4sS0FBaUJDLFNBQXpDLENBQVgsQ0FBMUM7O0FBQ0EsTUFBTXNKLGdCQUFnQixHQUFHLENBQUMsR0FBR3kvQixVQUFKLEtBQW1CenVDLElBQUksQ0FBQytULE1BQU0sSUFBSUEsTUFBTSxDQUFDN08sU0FBUCxJQUFvQnVwQyxVQUFVLENBQUNsYSxLQUFYLENBQWlCbWEsU0FBUyxJQUFJMzZCLE1BQU0sQ0FBQzdPLFNBQVAsQ0FBaUJ3cEMsU0FBakIsTUFBZ0NocEMsU0FBOUQsQ0FBL0IsQ0FBaEQ7O0FBQ0EsTUFBTTlGLGlCQUFpQixHQUFJTSxXQUFELElBQWlCRixJQUFJLENBQUMrVCxNQUFNLElBQUlBLE1BQU0sQ0FBQzdULFdBQVAsS0FBdUJBLFdBQWxDLENBQS9DOztBQUVlO0FBQUNGLE1BQUQ7QUFBTzBPLFNBQVA7QUFBZ0I1TyxhQUFoQjtBQUE2QmtQLGtCQUE3QjtBQUErQ3BQO0FBQS9DLENBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkE7QUFFQSxJQUFJcXhDLFlBQVksR0FBR25wQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTlCLElBQXZCLElBQStCNkIsQ0FBQyxDQUFDQyxPQUFGLENBQVVrcEMsa0JBQTVELEVBQWdGLENBQWhGLENBQW5CO0FBRWUsTUFBTWxmLGtCQUFOLFNBQWlDbHhCLEtBQUssQ0FBQ2dtQyxTQUF2QyxDQUFpRDtBQUM1RG5lLFFBQU0sR0FBRTtBQUNKLFVBQU0vWixLQUFLLEdBQUcsS0FBS0EsS0FBbkI7QUFFQSxXQUFPQSxLQUFLLENBQUN1VixJQUFOLENBQVdDLE1BQWxCO0FBRUF6WSxXQUFPLENBQUNDLEdBQVIsQ0FBWWdELEtBQVo7QUFFQSxXQUNJLG9CQUFDLEtBQUQsQ0FBTyxNQUFQO0FBQWMsVUFBSSxFQUFFLFlBQVVBLEtBQUssQ0FBQytZLElBQU4sQ0FBV2htQjtBQUF6QyxPQUFpRGlOLEtBQUssQ0FBQ3VWLElBQXZEO0FBQTZELGFBQU8sRUFBR2xiLEVBQUQsSUFBUTtBQUMxRUEsVUFBRSxDQUFDekksY0FBSDtBQUNBLFlBQUcsQ0FBQ3l3QyxZQUFKLEVBQWlCQSxZQUFZLEdBQUducEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVU5QixJQUF2QixJQUErQjZCLENBQUMsQ0FBQ0MsT0FBRixDQUFVa3BDLGtCQUE1RCxFQUFnRixDQUFoRixDQUFmO0FBQ2pCRCxvQkFBWSxDQUFDanBDLE9BQWIsQ0FBcUI5QixJQUFyQixDQUEwQjBJLEtBQUssQ0FBQytZLElBQU4sQ0FBV2htQixFQUFyQztBQUNIO0FBSkQsUUFLSTtBQUFLLGFBQU8sRUFBQztBQUFiLE9BQWlDaU4sS0FBSyxDQUFDd1osR0FBdkM7QUFBNEMsWUFBTSxFQUFDO0FBQW5ELFFBQ0k7QUFBTSxPQUFDLEVBQUMsOERBQVI7QUFBdUUsVUFBSSxFQUFDO0FBQTVFLE1BREosRUFFSTtBQUFNLE9BQUMsRUFBQyx1SkFBUjtBQUFnSyxVQUFJLEVBQUM7QUFBckssTUFGSixDQUxKLENBREo7QUFZSDs7QUFwQjJELEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUNKakQsTUFBTTZKLGNBQU4sU0FBNkJueEIsS0FBSyxDQUFDZ21DLFNBQW5DLENBQTZDO0FBQ3hEbmUsUUFBTSxHQUFFO0FBQ0osVUFBTS9aLEtBQUssR0FBRyxLQUFLQSxLQUFuQjtBQUVBLFdBQ0k7QUFBSyxhQUFPLEVBQUM7QUFBYixPQUFpQ0EsS0FBSyxDQUFDd1osR0FBdkM7QUFBNEMsWUFBTSxFQUFDO0FBQW5ELFFBQ0k7QUFBTSxPQUFDLEVBQUMsOERBQVI7QUFBdUUsVUFBSSxFQUFDO0FBQTVFLE1BREosRUFFSTtBQUFNLE9BQUMsRUFBQyx1SkFBUjtBQUFnSyxVQUFJLEVBQUM7QUFBckssTUFGSixDQURKO0FBTUg7O0FBVnVELEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBN0MsTUFBTS9ELGFBQU4sU0FBNEJ2akIsS0FBSyxDQUFDZ21DLFNBQWxDLENBQTRDO0FBQ3ZEbmUsUUFBTSxHQUFFO0FBQ0osVUFBTS9aLEtBQUssR0FBRyxLQUFLQSxLQUFuQjtBQUNBLFdBQ0k7QUFBSyxhQUFPLEVBQUM7QUFBYixPQUFrQ0EsS0FBbEM7QUFBeUMsWUFBTSxFQUFDLE1BQWhEO0FBQXVELFdBQUssRUFBRUEsS0FBSyxDQUFDMU47QUFBcEUsUUFDSSxrQ0FDSTtBQUFnQixRQUFFLEVBQUMsV0FBbkI7QUFBK0IsUUFBRSxFQUFFLElBQW5DO0FBQXlDLFFBQUUsRUFBRSxDQUFDLEtBQTlDO0FBQXFELFFBQUUsRUFBRSxJQUF6RDtBQUErRCxRQUFFLEVBQUUsQ0FBQyxNQUFwRTtBQUE0RSx1QkFBaUIsRUFBQyx5QkFBOUY7QUFBd0gsbUJBQWEsRUFBQztBQUF0SSxPQUNJO0FBQU0sWUFBTSxFQUFFLENBQWQ7QUFBaUIsZUFBUyxFQUFDO0FBQTNCLE1BREosRUFFSTtBQUFNLFlBQU0sRUFBRSxDQUFkO0FBQWlCLGVBQVMsRUFBQztBQUEzQixNQUZKLENBREosRUFLSTtBQUFnQixRQUFFLEVBQUMsV0FBbkI7QUFBK0IsUUFBRSxFQUFFLEtBQW5DO0FBQTBDLFFBQUUsRUFBRSxDQUFDLEtBQS9DO0FBQXNELFFBQUUsRUFBRSxLQUExRDtBQUFpRSxRQUFFLEVBQUUsQ0FBQyxNQUF0RTtBQUE4RSx1QkFBaUIsRUFBQyx5QkFBaEc7QUFBMEgsbUJBQWEsRUFBQztBQUF4SSxPQUNJO0FBQU0sWUFBTSxFQUFFLENBQWQ7QUFBaUIsZUFBUyxFQUFDO0FBQTNCLE1BREosRUFFSTtBQUFNLFlBQU0sRUFBRSxDQUFkO0FBQWlCLGVBQVMsRUFBQztBQUEzQixNQUZKLENBTEosRUFTSTtBQUFnQixRQUFFLEVBQUMsV0FBbkI7QUFBK0IsUUFBRSxFQUFFLEVBQW5DO0FBQXVDLFFBQUUsRUFBRSxDQUFDLEdBQTVDO0FBQWlELFFBQUUsRUFBRSxFQUFyRDtBQUF5RCxRQUFFLEVBQUUsQ0FBQyxNQUE5RDtBQUFzRSx1QkFBaUIsRUFBQyx5QkFBeEY7QUFBa0gsbUJBQWEsRUFBQztBQUFoSSxPQUNJO0FBQU0sWUFBTSxFQUFFLENBQWQ7QUFBaUIsZUFBUyxFQUFDO0FBQTNCLE1BREosRUFFSTtBQUFNLFlBQU0sRUFBRSxDQUFkO0FBQWlCLGVBQVMsRUFBQztBQUEzQixNQUZKLENBVEosQ0FESixFQWVJO0FBQU0sVUFBSSxFQUFDLE1BQVg7QUFBa0IsT0FBQyxFQUFDO0FBQXBCLE1BZkosRUFnQkk7QUFBTSxPQUFDLEVBQUMsMEZBQVI7QUFBbUcsVUFBSSxFQUFDO0FBQXhHLE1BaEJKLEVBaUJJO0FBQU0sT0FBQyxFQUFDLDJGQUFSO0FBQW9HLFVBQUksRUFBQztBQUF6RyxNQWpCSixFQWtCSTtBQUFNLE9BQUMsRUFBQyx1bEJBQVI7QUFBZ21CLFVBQUksRUFBQztBQUFybUIsTUFsQkosQ0FESjtBQXNCSDs7QUF6QnNELEM7Ozs7Ozs7Ozs7OztBQ0EzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQSxNQUFNSixLQUFLLEdBQUdILG1EQUFJLENBQUNHLEtBQW5CO0FBRUEsSUFBSXF3QyxhQUFhLEdBQUdycEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrK0IsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBcEI7QUFDQSxJQUFJbUwsYUFBYSxHQUFHdHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDc3BDLGVBQXJCLEVBQXNDLENBQXRDLENBQXBCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHeHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd3BDLGFBQXJCLEVBQW9DLENBQXBDLENBQWxCO0FBQ0EsSUFBSUMsVUFBVSxHQUFHMXBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNGMsTUFBckIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSxJQUFJOHNCLGdCQUFnQixHQUFHM3BDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnBDLHNCQUFyQixFQUE2QyxDQUE3QyxDQUF2QjtBQUNBLE1BQU1DLFdBQVcsR0FBRzdwQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTB4QixTQUExQyxFQUFxRCxDQUFyRCxFQUF3RDF4QixPQUE1RTtBQUNBLE1BQU1HLGtCQUFrQixHQUFHTCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTRwQyxnQkFBMUMsRUFBNEQsQ0FBNUQsRUFBK0Q1cEMsT0FBMUY7QUFDQSxNQUFNNnBDLGFBQWEsR0FBRy9wQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVThwQyxXQUExQyxFQUF1RCxDQUF2RCxFQUEwRDlwQyxPQUFoRjtBQUNBLE1BQU1RLFVBQVUsR0FBR1YsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVTLGNBQTFDLEVBQTBELENBQTFELEVBQTZEVCxPQUFoRjtBQUVlLE1BQU0wK0IsZ0JBQU4sU0FBK0I1bEMsS0FBSyxDQUFDZ21DLFNBQXJDLENBQStDO0FBQzFEdmlDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCtaLFFBQU0sR0FBRztBQUNMLFFBQUcsQ0FBQ3dvQixhQUFKLEVBQWtCQSxhQUFhLEdBQUdycEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrK0IsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBaEI7QUFDbEIsUUFBRyxDQUFDbUwsYUFBSixFQUFrQkEsYUFBYSxHQUFHdHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDc3BDLGVBQXJCLEVBQXNDLENBQXRDLENBQWhCO0FBQ2xCLFFBQUcsQ0FBQ0MsV0FBSixFQUFnQkEsV0FBVyxHQUFHeHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd3BDLGFBQXJCLEVBQW9DLENBQXBDLENBQWQ7QUFDaEIsUUFBRyxDQUFDQyxVQUFKLEVBQWVBLFVBQVUsR0FBRzFwQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzRjLE1BQXJCLEVBQTZCLENBQTdCLENBQWI7QUFDZixXQUFRO0FBQUssZUFBUyxFQUFFd3NCLGFBQWEsQ0FBQ2xMLGFBQWQsR0FBNEIsR0FBNUIsR0FBZ0NrTCxhQUFhLENBQUNZLG9CQUE5QyxHQUFtRSx5QkFBbkY7QUFDSixXQUFLLEVBQUU7QUFBQ0MsZUFBTyxFQUFFO0FBQVY7QUFESCxPQUVBLG9CQUFDLHNEQUFEO0FBQW1CLFVBQUksRUFBQztBQUF4QixNQUZBLEVBR0EsaUNBQ0k7QUFBSSxlQUFTLEVBQUVWLFdBQVcsQ0FBQ0MsYUFBWixHQUEwQixHQUExQixHQUE4QkMsVUFBVSxDQUFDUyxNQUF6QyxHQUFnRCxHQUFoRCxHQUFvRGIsYUFBYSxDQUFDYyxFQUFsRSxHQUFxRSxHQUFyRSxHQUF5RWQsYUFBYSxDQUFDQztBQUF0RyxpQkFESixFQUlJLG9CQUFDLFdBQUQ7QUFBYSxhQUFPLEVBQUUsS0FBS2MsZUFBTCxFQUF0QjtBQUE4QyxjQUFRLEVBQUM7QUFBdkQsTUFKSixFQUtJO0FBQUksZUFBUyxFQUFFYixXQUFXLENBQUNDLGFBQVosR0FBMEIsR0FBMUIsR0FBOEJDLFVBQVUsQ0FBQ1MsTUFBekMsR0FBZ0QsR0FBaEQsR0FBb0RiLGFBQWEsQ0FBQ2MsRUFBbEUsR0FBcUUsR0FBckUsR0FBeUVkLGFBQWEsQ0FBQ0M7QUFBdEcsb0JBTEosRUFRSSxvQkFBQyxXQUFEO0FBQWEsYUFBTyxFQUFFLEtBQUtlLGFBQUwsRUFBdEI7QUFBNEMsY0FBUSxFQUFDO0FBQXJELE1BUkosRUFTSTtBQUFJLGVBQVMsRUFBRWQsV0FBVyxDQUFDQyxhQUFaLEdBQTBCLEdBQTFCLEdBQThCQyxVQUFVLENBQUNTLE1BQXpDLEdBQWdELEdBQWhELEdBQW9EYixhQUFhLENBQUNjLEVBQWxFLEdBQXFFLEdBQXJFLEdBQXlFZCxhQUFhLENBQUNDO0FBQXRHLDRCQVRKLEVBWUksb0JBQUMsV0FBRDtBQUFhLGFBQU8sRUFBRSxLQUFLZ0IsZUFBTCxFQUF0QjtBQUE4QyxjQUFRLEVBQUM7QUFBdkQsTUFaSixDQUhBLEVBaUJBO0FBQUssZUFBUyxFQUFFdnFDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDdXFDLGNBQXJCLEVBQXFDLENBQXJDLEVBQXdDQTtBQUF4RCxNQWpCQSxDQUFSO0FBbUJIOztBQUVERCxpQkFBZSxHQUFFO0FBQ2IsVUFBTUUsV0FBVyxHQUFHVixhQUFhLENBQUNDLFdBQWQsRUFBcEI7QUFDQSxVQUFNVSxRQUFRLEdBQUc5dkMsTUFBTSxDQUFDaUIsSUFBUCxDQUFZNHVDLFdBQVosRUFBeUIvakMsTUFBekIsQ0FBZ0N6RyxDQUFDLElBQUlBLENBQUMsS0FBSyxLQUEzQyxFQUFrRG1DLEdBQWxELENBQXNEbkMsQ0FBQyxJQUFJd3FDLFdBQVcsQ0FBQ3hxQyxDQUFELENBQXRFLENBQWpCO0FBRUEsUUFBR3lxQyxRQUFRLENBQUN4ckMsTUFBVCxLQUFvQixDQUF2QixFQUF5QixPQUFPLG9EQUFQO0FBRXpCLFdBQU93ckMsUUFBUSxDQUFDdG9DLEdBQVQsQ0FBYW5DLENBQUMsSUFBSTtBQUNyQixhQUFRLFNBQVFBLENBQUMsQ0FBQzBxQyxTQUFVO1FBQ2hDMXFDLENBQUMsQ0FBQzJxQyxVQUFGLENBQWFDLEVBQWIsQ0FBZ0IsQ0FBaEIsRUFBbUJ6OUIsV0FBbkIsS0FBaUNuTixDQUFDLENBQUMycUMsVUFBRixDQUFhQyxFQUFiLENBQWdCeDlCLEtBQWhCLENBQXNCLENBQXRCLENBQXlCO1lBQ3REcE4sQ0FBQyxDQUFDMnFDLFVBQUYsQ0FBYUUsTUFBTztZQUNwQjdxQyxDQUFDLENBQUM2b0IsTUFBTztZQUNUN29CLENBQUMsQ0FBQzhxQyxNQUFGLEdBQVcsS0FBWCxHQUFtQixJQUFLO2dCQUNwQjlxQyxDQUFDLENBQUMrcUMsVUFBRixDQUFhOXJDLE1BQU8sRUFMeEI7QUFNSCxLQVBNLEVBT0pvTyxJQVBJLENBT0MsT0FBSyxJQUFJMjlCLE1BQUosQ0FBVyxFQUFYLENBQUwsR0FBb0IsSUFQckIsQ0FBUDtBQVFIOztBQUVEWixpQkFBZSxHQUFFO0FBQ2IsVUFBTXhxQixJQUFJLEdBQUduZixVQUFVLENBQUNDLGNBQVgsRUFBYjtBQUNBOzs7O0FBR0EsVUFBTXVxQyxTQUFTLEdBQUdyckIsSUFBSSxDQUFDcXJCLFNBQXZCO0FBRUEsV0FBUSxlQUFjcnJCLElBQUksQ0FBQ2plLFFBQVM7bUJBQ3pCaWUsSUFBSSxDQUFDaGUsYUFBYztTQUM3QmdlLElBQUksQ0FBQ2lsQixHQUFJO1FBQ1ZqbEIsSUFBSSxDQUFDaG1CLEVBQUc7WUFDSmdtQixJQUFJLENBQUNzckIsTUFBTzttREFDMkJ0ckIsSUFBSSxDQUFDaG1CLEVBQUcsSUFBR2dtQixJQUFJLENBQUNzckIsTUFBTyxJQUFHdHJCLElBQUksQ0FBQ3NyQixNQUFMLENBQVk1K0IsVUFBWixDQUF1QixJQUF2QixJQUErQixLQUEvQixHQUF1QyxLQUFNO21CQUN0RzIrQixTQUFTLENBQUNFLE9BQVYsRUFBRCxDQUFzQnR2QixRQUF0QixHQUFpQzFjLFFBQWpDLENBQTBDLENBQTFDLEVBQTZDLEdBQTdDLENBQWtELElBQUcsQ0FBQzhyQyxTQUFTLENBQUNHLFFBQVYsS0FBcUIsQ0FBdEIsRUFBeUJ2dkIsUUFBekIsR0FBb0MxYyxRQUFwQyxDQUE2QyxDQUE3QyxFQUFnRCxHQUFoRCxDQUFxRCxJQUFJOHJDLFNBQVMsQ0FBQ0ksV0FBVixFQUFELENBQTBCeHZCLFFBQTFCLEdBQXFDMWMsUUFBckMsQ0FBOEMsQ0FBOUMsRUFBaUQsR0FBakQsQ0FBc0QsSUFBRzhyQyxTQUFTLENBQUNLLFFBQVYsR0FBcUJ6dkIsUUFBckIsR0FBZ0MxYyxRQUFoQyxDQUF5QyxDQUF6QyxFQUE0QyxHQUE1QyxDQUFpRCxLQUFJOHJDLFNBQVMsQ0FBQ00sVUFBVixHQUF1QjF2QixRQUF2QixHQUFrQzFjLFFBQWxDLENBQTJDLENBQTNDLEVBQThDLEdBQTlDLENBQW1ELE9BQU04ckMsU0FBUyxDQUFDTyxVQUFWLEVBQXVCO1dBQ25UNXJCLElBQUksQ0FBQzZyQixLQUFNO2VBQ1A3ckIsSUFBSSxDQUFDOHJCLHNCQUFMLEdBQThCLEtBQTlCLEdBQXNDLElBQUs7V0FDL0M5ckIsSUFBSSxDQUFDK3JCLEtBQU07U0FDYi9yQixJQUFJLENBQUNnc0IsVUFBTCxHQUFrQixLQUFsQixHQUEwQixJQUFLO3dCQUNoQmhzQixJQUFJLENBQUNpc0IsTUFBTCxHQUFjLEtBQWQsR0FBc0IsSUFBSztXQUN4Q2pzQixJQUFJLENBQUNrc0IsS0FBTCxJQUFjLE1BQU87Y0FDbEJsc0IsSUFBSSxDQUFDbXNCLFFBQVMsRUFicEI7QUFjSDs7QUFFRDFCLGVBQWEsR0FBRTtBQUVYLFVBQU01c0IsTUFBTSxHQUFHOWlCLE1BQU0sQ0FBQzZiLE1BQVAsQ0FBY296QixXQUFXLENBQUNqWSxTQUFaLEVBQWQsQ0FBZjtBQUNBLFVBQU1xYSxTQUFTLEdBQUdyeEMsTUFBTSxDQUFDaUIsSUFBUCxDQUFZd0Usa0JBQWtCLENBQUN5cEMsZ0JBQW5CLEVBQVosQ0FBbEI7QUFDQSxVQUFNb0MsT0FBTyxHQUFHRCxTQUFTLENBQUN2bEMsTUFBVixDQUFpQnpHLENBQUMsSUFBSUksa0JBQWtCLENBQUM4ckMsUUFBbkIsQ0FBNEJsc0MsQ0FBNUIsQ0FBdEIsQ0FBaEI7QUFDQSxVQUFNUSxPQUFPLEdBQUd3ckMsU0FBUyxDQUFDdmxDLE1BQVYsQ0FBaUJ6RyxDQUFDLElBQUlJLGtCQUFrQixDQUFDK3JDLFNBQW5CLENBQTZCbnNDLENBQTdCLENBQXRCLENBQWhCO0FBRUEsV0FBUSxtQkFBa0J5ZCxNQUFNLENBQUN4ZSxNQUFPO2VBQ2pDK3NDLFNBQVMsQ0FBQy9zQyxNQUFPO21CQUNiZ3RDLE9BQU8sQ0FBQ2h0QyxNQUFPO3lCQUNUdUIsT0FBTyxDQUFDdkIsTUFBTyxnQkFIaEM7QUFJSDs7QUFqRnlEO0FBcUY5RCxJQUFJbXRDLFlBQVksR0FBR3JzQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3FzQyxTQUFyQixFQUFnQyxDQUFoQyxDQUFuQjtBQUNBLElBQUlDLGNBQWMsR0FBR3ZzQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3dQLE1BQXJCLEVBQTZCLENBQTdCLENBQXJCO0FBQ0EsSUFBSSs4QixjQUFjLEdBQUd4c0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMrTyxjQUFyQixFQUFxQyxDQUFyQyxDQUFyQjs7QUFFQSxNQUFNeTlCLFdBQU4sU0FBMEJ6ekMsS0FBSyxDQUFDZ21DLFNBQWhDLENBQTBDO0FBQ3RDbmUsUUFBTSxHQUFFO0FBQ0osUUFBRyxDQUFDMHJCLGNBQUosRUFBbUJBLGNBQWMsR0FBR3ZzQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3dQLE1BQXJCLEVBQTZCLENBQTdCLENBQWpCO0FBQ25CLFFBQUcsQ0FBQys4QixjQUFKLEVBQW1CQSxjQUFjLEdBQUd4c0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMrTyxjQUFyQixFQUFxQyxDQUFyQyxDQUFqQjtBQUNuQixRQUFHLENBQUMyNkIsZ0JBQUosRUFBcUJBLGdCQUFnQixHQUFHM3BDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnBDLHNCQUFyQixFQUE2QyxDQUE3QyxDQUFuQjtBQUNyQixRQUFHLENBQUN5QyxZQUFKLEVBQWlCQSxZQUFZLEdBQUdyc0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNxc0MsU0FBckIsRUFBZ0MsQ0FBaEMsQ0FBZjtBQUNqQixXQUFRO0FBQUssV0FBSyxFQUFHLEdBQUVDLGNBQWMsQ0FBQzk4QixNQUFPLElBQUcrOEIsY0FBYyxDQUFDeDlCLGNBQWU7QUFBdEUsT0FDSixpQ0FDSTtBQUFNLFdBQUssRUFBRyxHQUFFMjZCLGdCQUFnQixDQUFDQyxzQkFBdUIsT0FBeEQ7QUFBZ0UsNkJBQXVCLEVBQUU7QUFBQzhDLGNBQU0sRUFBRUwsWUFBWSxDQUFDQyxTQUFiLENBQXVCLEtBQUt4bEMsS0FBTCxDQUFXNmxDLFFBQWxDLEVBQTRDLEtBQUs3bEMsS0FBTCxDQUFXOUUsT0FBdkQsRUFBZ0V6RztBQUF6RTtBQUF6RixNQURKLENBREksRUFNSjtBQUFLLGVBQVMsRUFBRXlFLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnNDLGFBQXJCLEVBQW9DLENBQXBDLEVBQXVDQTtBQUF2RCxNQU5JLENBQVI7QUFRSDs7QUFkcUMsQzs7Ozs7Ozs7Ozs7O0FDbEgxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU01ekMsS0FBSyxHQUFHSCxtREFBSSxDQUFDRyxLQUFuQjtBQUNBLE1BQU11dUMsYUFBYSxHQUFHMXVDLG1EQUFJLENBQUMwdUMsYUFBM0I7QUFFZSxNQUFNc0YsY0FBTixTQUE2QmgwQyxtREFBSSxDQUFDeXVDLGNBQWxDLENBQWlEO0FBRTVEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLOEIsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0EsU0FBS2d2QyxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JodkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLaXZDLGVBQUw7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtsbUMsS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUIvbUMsTUFBakIsSUFBMkIsT0FBTyxLQUFLWSxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi9tQyxNQUFqQixDQUF3QmduQyxnQkFBL0IsS0FBcUQsVUFBbkc7QUFDQSxTQUFLaHhDLGFBQUwsR0FBcUIsRUFBckI7QUFFQSxTQUFLMjhCLElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVUvNkIsSUFBVixDQUFlLElBQWYsQ0FBWjtBQUNBLFNBQUs2cUIsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWTdxQixJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLMkwsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWTNMLElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNIOztBQUVEaXZDLGlCQUFlLEdBQUc7QUFDZCxTQUFLM3BDLEtBQUwsR0FBYTtBQUNUNDVCLGFBQU8sRUFBRSxLQUFLbDJCLEtBQUwsQ0FBV2hHLE9BRFg7QUFFVGxILGNBQVEsRUFBRSxLQUZEO0FBR1R1ekMsYUFBTyxFQUFFO0FBSEEsS0FBYjtBQUtIOztBQUVETCxjQUFZLEdBQUc7QUFDWCxRQUFJLENBQUMsS0FBS0UsV0FBVixFQUF1QjtBQUN2QixTQUFLSSxRQUFMLENBQWM7QUFBQ3h6QyxjQUFRLEVBQUU7QUFBWCxLQUFkO0FBQ0g7O0FBRUR5ekMsZUFBYSxHQUFHO0FBQ1osU0FBS0MsUUFBTCxDQUFjbFosT0FBZCxDQUFzQjNhLFNBQXRCLEdBQWtDLEVBQWxDO0FBQ0EsU0FBSzJ6QixRQUFMLENBQWM7QUFBQ0csa0JBQVksRUFBRTtBQUFmLEtBQWQ7QUFDSDs7QUFFREMsb0JBQWtCLEdBQUc7QUFDakIsUUFBSSxDQUFDLEtBQUtwcUMsS0FBTCxDQUFXeEosUUFBaEIsRUFBMEI7O0FBQzFCLFFBQUksT0FBTyxLQUFLc0MsYUFBWixLQUE4QixRQUFsQyxFQUE0QztBQUN4QyxXQUFLdXhDLElBQUwsQ0FBVUMsYUFBVixDQUF3QjF3QyxXQUF4QixDQUFvQyxLQUFLZCxhQUF6QztBQUNIOztBQUVELFFBQUksQ0FBQzlCLHdEQUFjLENBQUMsV0FBRCxDQUFuQixFQUFrQztBQUNsQ21oQyxnQkFBWSxDQUFDLE1BQU07QUFDZixZQUFNb1MsUUFBUSxHQUFHLENBQUMxbkIsU0FBRCxFQUFZeFksT0FBWixLQUF3QjtBQUNyQyxjQUFNbWdDLElBQUksR0FBRzNuQixTQUFTLENBQUM0bkIsU0FBdkI7QUFDQSxjQUFNQyxPQUFPLEdBQUdGLElBQUksR0FBRzNuQixTQUFTLENBQUNqaEIsWUFBakM7QUFDQSxjQUFNK29DLElBQUksR0FBR3RnQyxPQUFPLENBQUN1Z0MsU0FBckI7QUFDQSxjQUFNQyxPQUFPLEdBQUdGLElBQUksR0FBR3RnQyxPQUFPLENBQUN6SSxZQUEvQjtBQUNBLGVBQVMrb0MsSUFBSSxHQUFHSCxJQUFQLElBQWVLLE9BQU8sR0FBR0gsT0FBbEM7QUFDSCxPQU5EOztBQVFBLFlBQU1oaEIsUUFBUSxHQUFHLEtBQUsyZ0IsSUFBTCxDQUFVUyxRQUEzQjtBQUNBLFlBQU1qb0IsU0FBUyxHQUFHNkcsUUFBUSxDQUFDc0IsT0FBVCxDQUFpQixXQUFqQixDQUFsQjtBQUNBLFVBQUksQ0FBQ3VmLFFBQVEsQ0FBQzFuQixTQUFELEVBQVk2RyxRQUFaLENBQWIsRUFBb0M7QUFDcEMsWUFBTXFoQixjQUFjLEdBQUc1b0MseURBQUcsQ0FBQ3lwQixNQUFKLENBQVdsQyxRQUFYLENBQXZCO0FBQ0EsWUFBTXNoQixlQUFlLEdBQUc3b0MseURBQUcsQ0FBQ3lwQixNQUFKLENBQVcvSSxTQUFYLENBQXhCO0FBQ0EsWUFBTTdMLFFBQVEsR0FBRzZMLFNBQVMsQ0FBQzRuQixTQUEzQjtBQUNBLFlBQU1RLFFBQVEsR0FBR0YsY0FBYyxDQUFDL25CLEdBQWYsR0FBcUJnb0IsZUFBZSxDQUFDaG9CLEdBQXJDLEdBQTJDSCxTQUFTLENBQUM0bkIsU0FBckQsR0FBaUUsRUFBbEY7QUFDQXRvQywrREFBRyxDQUFDaWxCLE9BQUosQ0FBWTtBQUNSSSxnQkFBUSxFQUFFLEdBREY7QUFFUkQsY0FBTSxFQUFFLFVBQVNLLFFBQVQsRUFBbUI7QUFDdkIsY0FBSXFqQixRQUFRLEdBQUdqMEIsUUFBZixFQUF5QjZMLFNBQVMsQ0FBQzRuQixTQUFWLEdBQXNCenpCLFFBQVEsR0FBSTRRLFFBQVEsSUFBSXFqQixRQUFRLEdBQUdqMEIsUUFBZixDQUExQyxDQUF6QixLQUNLNkwsU0FBUyxDQUFDNG5CLFNBQVYsR0FBc0J6ekIsUUFBUSxHQUFJNFEsUUFBUSxJQUFJNVEsUUFBUSxHQUFHaTBCLFFBQWYsQ0FBMUM7QUFDUjtBQUxPLE9BQVo7QUFPSCxLQXZCVyxDQUFaO0FBd0JIOztBQUdEQyxXQUFTLENBQUMveUMsS0FBRCxFQUFRO0FBQ2IsUUFBSSxDQUFDQSxLQUFMLEVBQVksT0FBTyxLQUFQO0FBQ1osV0FBTyxPQUFPQSxLQUFQLElBQWdCLFFBQWhCLEdBQTJCQSxLQUEzQixHQUFtQ0EsS0FBSyxDQUFDdWdCLFFBQU4sRUFBMUM7QUFDSDs7QUFFRCxNQUFJeXlCLGlCQUFKLEdBQXdCO0FBQ3BCLFFBQUk7QUFBRSxXQUFLcnlDLGFBQUwsR0FBcUIsS0FBSzRLLEtBQUwsQ0FBV21tQyxLQUFYLENBQWlCL21DLE1BQWpCLENBQXdCZ25DLGdCQUF4QixFQUFyQjtBQUFrRSxLQUF4RSxDQUNBLE9BQU9oN0IsR0FBUCxFQUFZO0FBQUV4Vyw0REFBSyxDQUFDd1csR0FBTixDQUFVLFNBQVYsRUFBcUIsc0NBQXNDLEtBQUsxUCxJQUEzQyxHQUFrRCxHQUF2RSxFQUE0RTBQLEdBQTVFO0FBQW1GOztBQUVqRyxXQUFPclosbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUUsb0RBQVo7QUFBa0VxMUMsU0FBRyxFQUFFO0FBQXZFLEtBQWhDLEVBQ0MzMUMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDb1csV0FBSyxFQUFFO0FBQUMsaUJBQVMsT0FBVjtBQUFtQixrQkFBVTtBQUE3QixPQUFSO0FBQWlEblcsYUFBTyxFQUFFLE1BQU07QUFDeEYsYUFBS3UwQyxJQUFMLENBQVVDLGFBQVYsQ0FBd0JqMEIsU0FBeEIsR0FBb0MsRUFBcEM7QUFDQSxhQUFLMnpCLFFBQUwsQ0FBYztBQUFDeHpDLGtCQUFRLEVBQUU7QUFBWCxTQUFkO0FBQ0g7QUFIMkIsS0FBaEMsRUFJQWYsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QncxQyw2Q0FBekIsRUFBK0IsSUFBL0IsQ0FKQSxDQURELEVBT0gsT0FBTyxLQUFLdnlDLGFBQVosS0FBOEIsUUFBOUIsSUFBMENyRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNZLFFBQUUsRUFBRyxtQkFBa0IsS0FBSzJJLElBQUssRUFBbEM7QUFBcUNySixlQUFTLEVBQUUsaUJBQWhEO0FBQW1FcTFDLFNBQUcsRUFBRTtBQUF4RSxLQUFoQyxDQVB2QyxFQVFILE9BQU8sS0FBS3R5QyxhQUFaLEtBQThCLFFBQTlCLElBQTBDckQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDWSxRQUFFLEVBQUcsbUJBQWtCLEtBQUsySSxJQUFLLEVBQWxDO0FBQXFDckosZUFBUyxFQUFFLGlCQUFoRDtBQUFtRXExQyxTQUFHLEVBQUUsZUFBeEU7QUFBeUZFLDZCQUF1QixFQUFFO0FBQUNoQyxjQUFNLEVBQUUsS0FBS3h3QztBQUFkO0FBQWxILEtBQWhDLENBUnZDLENBQVA7QUFVSDs7QUFFRHl5QyxZQUFVLENBQUNuc0MsSUFBRCxFQUFPOUssT0FBUCxFQUFnQjJKLE1BQWhCLEVBQXdCO0FBQzlCLFVBQU1qSyxLQUFLLEdBQUcsc0NBQXNDd1YsS0FBdEMsQ0FBNEMsaUJBQTVDLENBQWQ7QUFDQSxVQUFNZ2lDLFNBQVMsR0FBR3gzQyxLQUFLLENBQUN1NEIsU0FBTixDQUFnQnppQixDQUFDLElBQUlBLENBQUMsSUFBSSxVQUExQixDQUFsQjtBQUNBLFFBQUkwaEMsU0FBSixFQUFleDNDLEtBQUssQ0FBQ3czQyxTQUFELENBQUwsR0FBbUI1MUMsS0FBSyxDQUFDQyxhQUFOLENBQW9CLE1BQXBCLEVBQTRCO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQTVCLEVBQTBEcUosSUFBMUQsQ0FBbkI7QUFDZixVQUFNcXNDLFlBQVksR0FBR3ozQyxLQUFLLENBQUN1NEIsU0FBTixDQUFnQnppQixDQUFDLElBQUlBLENBQUMsSUFBSSxhQUExQixDQUFyQjtBQUNBLFFBQUkwaEMsU0FBSixFQUFleDNDLEtBQUssQ0FBQ3kzQyxZQUFELENBQUwsR0FBc0I3MUMsS0FBSyxDQUFDQyxhQUFOLENBQW9CLE1BQXBCLEVBQTRCO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQTVCLEVBQWdFekIsT0FBaEUsQ0FBdEI7QUFDZixVQUFNbzNDLFdBQVcsR0FBRzEzQyxLQUFLLENBQUN1NEIsU0FBTixDQUFnQnppQixDQUFDLElBQUlBLENBQUMsSUFBSSxZQUExQixDQUFwQjs7QUFDQSxRQUFJMGhDLFNBQUosRUFBZTtBQUNYLFlBQU05bkMsS0FBSyxHQUFHO0FBQUMzTixpQkFBUyxFQUFFO0FBQVosT0FBZDs7QUFDQSxVQUFJa0ksTUFBTSxDQUFDK2EsSUFBUCxJQUFlL2EsTUFBTSxDQUFDeEgsRUFBMUIsRUFBOEI7QUFDMUJpTixhQUFLLENBQUMzTixTQUFOLElBQW9CLElBQUdvdUMsYUFBYSxDQUFDanZDLE1BQU8sSUFBR2l2QyxhQUFhLENBQUNodkMsc0JBQXVCLEVBQXBGO0FBQ0F1TyxhQUFLLENBQUN3VixNQUFOLEdBQWUsUUFBZjtBQUVBLFlBQUlqYixNQUFNLENBQUMrYSxJQUFYLEVBQWlCdFYsS0FBSyxDQUFDdVYsSUFBTixHQUFhaGIsTUFBTSxDQUFDK2EsSUFBcEI7QUFDakIsWUFBSS9hLE1BQU0sQ0FBQ3hILEVBQVgsRUFBZWlOLEtBQUssQ0FBQzVOLE9BQU4sR0FBZ0IsTUFBTTtBQUFDTCw2REFBSSxDQUFDd3ZDLFVBQUwsQ0FBZ0IwRyxRQUFoQjtBQUE0QmwyQyw2REFBSSxDQUFDNnZDLE1BQUwsQ0FBWXJuQyxNQUFNLENBQUN4SCxFQUFuQjtBQUF3QixTQUEzRTtBQUNsQjs7QUFDRHpDLFdBQUssQ0FBQzAzQyxXQUFELENBQUwsR0FBcUI5MUMsS0FBSyxDQUFDQyxhQUFOLENBQW9Cb0ksTUFBTSxDQUFDK2EsSUFBUCxJQUFlL2EsTUFBTSxDQUFDeEgsRUFBdEIsR0FBMkIsR0FBM0IsR0FBaUMsTUFBckQsRUFBNkRpTixLQUE3RCxFQUFvRXpGLE1BQU0sQ0FBQ21CLElBQTNFLENBQXJCO0FBQ0g7O0FBQ0QsV0FBT3BMLEtBQUssQ0FBQzZmLElBQU4sRUFBUDtBQUNIOztBQUVEKzNCLFVBQVEsQ0FBQzUzQyxLQUFELEVBQVFpSCxHQUFSLEVBQWE7QUFDakIsVUFBTXlJLEtBQUssR0FBRztBQUFDM04sZUFBUyxFQUFFLDJCQUFaO0FBQXlDbWpCLFlBQU0sRUFBRTtBQUFqRCxLQUFkO0FBQ0EsUUFBSSxPQUFPamUsR0FBUCxJQUFlLFFBQW5CLEVBQTZCeUksS0FBSyxDQUFDdVYsSUFBTixHQUFhaGUsR0FBYjtBQUM3QixRQUFJLE9BQU9BLEdBQVAsSUFBZSxVQUFuQixFQUErQnlJLEtBQUssQ0FBQzVOLE9BQU4sR0FBaUJrMkIsS0FBRCxJQUFXO0FBQUNBLFdBQUssQ0FBQzEyQixjQUFOO0FBQXdCMDJCLFdBQUssQ0FBQ3oyQixlQUFOO0FBQXlCMEYsU0FBRztBQUFJLEtBQXBGO0FBQy9CLFdBQU94RixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEdBQXpCLEVBQThCNk4sS0FBOUIsRUFBcUMxUCxLQUFyQyxDQUFQO0FBQ0g7O0FBRUQ2M0MsWUFBVSxDQUFDNzNDLEtBQUQsRUFBUTRXLFFBQVIsRUFBa0JraEMsTUFBbEIsRUFBMEI7QUFDaEMsV0FBTyxvQkFBQyxvREFBRDtBQUFhLFdBQUssRUFBQyxPQUFuQjtBQUEyQixVQUFJLEVBQUMsS0FBaEM7QUFBc0MsVUFBSSxFQUFFOTNDO0FBQTVDLE9BQ0g7QUFBSyxlQUFTLEVBQUMsaUJBQWY7QUFBaUMsYUFBTyxFQUFFODNDO0FBQTFDLE9BQW1EbGhDLFFBQW5ELENBREcsQ0FBUDtBQUdIOztBQUVELE1BQUltaEMsS0FBSixHQUFZO0FBQ1IsVUFBTUEsS0FBSyxHQUFHLEVBQWQ7QUFDQSxVQUFNbEMsS0FBSyxHQUFHLEtBQUtubUMsS0FBTCxDQUFXbW1DLEtBQXpCO0FBQ0EsUUFBSUEsS0FBSyxDQUFDdDNCLE9BQVYsRUFBbUJ3NUIsS0FBSyxDQUFDdmtDLElBQU4sQ0FBVyxLQUFLb2tDLFFBQUwsQ0FBYyxTQUFkLEVBQXlCL0IsS0FBSyxDQUFDdDNCLE9BQS9CLENBQVg7QUFDbkIsUUFBSXMzQixLQUFLLENBQUN2M0IsTUFBVixFQUFrQnk1QixLQUFLLENBQUN2a0MsSUFBTixDQUFXLEtBQUtva0MsUUFBTCxDQUFjLFFBQWQsRUFBd0IvQixLQUFLLENBQUN2M0IsTUFBOUIsQ0FBWDs7QUFDbEIsUUFBSXUzQixLQUFLLENBQUNtQyxNQUFWLEVBQWtCO0FBQ2RELFdBQUssQ0FBQ3ZrQyxJQUFOLENBQVcsS0FBS29rQyxRQUFMLENBQWMsZ0JBQWQsRUFBZ0MsTUFBTTtBQUM3QyxjQUFNSyxNQUFNLEdBQUcsYUFBZjtBQUNBLFlBQUlsOUIsSUFBSSxHQUFHODZCLEtBQUssQ0FBQ21DLE1BQWpCO0FBQ0EsWUFBSUMsTUFBTSxDQUFDdHRDLElBQVAsQ0FBWW9RLElBQVosQ0FBSixFQUF1QkEsSUFBSSxHQUFHQSxJQUFJLENBQUNsVCxLQUFMLENBQVdvd0MsTUFBWCxFQUFtQixDQUFuQixDQUFQO0FBQ3ZCeDJDLDJEQUFJLENBQUN3dkMsVUFBTCxDQUFnQjBHLFFBQWhCO0FBQ0FsMkMsMkRBQUksQ0FBQ2t1QyxhQUFMLENBQW1CQyx3Q0FBbkIsQ0FBNEQ3MEIsSUFBNUQ7QUFDSCxPQU5VLENBQVg7QUFPSDs7QUFDRCxRQUFJODZCLEtBQUssQ0FBQ3FDLE1BQVYsRUFBa0JILEtBQUssQ0FBQ3ZrQyxJQUFOLENBQVcsS0FBS29rQyxRQUFMLENBQWMsUUFBZCxFQUF3Qi9CLEtBQUssQ0FBQ3FDLE1BQTlCLENBQVg7QUFDbEIsUUFBSXJDLEtBQUssQ0FBQ3NDLE9BQVYsRUFBbUJKLEtBQUssQ0FBQ3ZrQyxJQUFOLENBQVcsS0FBS29rQyxRQUFMLENBQWMsU0FBZCxFQUF5Qi9CLEtBQUssQ0FBQ3NDLE9BQS9CLENBQVg7QUFDbkIsV0FBT0osS0FBUDtBQUNIOztBQUVELE1BQUl4M0MsTUFBSixHQUFhO0FBQ1QsVUFBTXczQyxLQUFLLEdBQUcsS0FBS0EsS0FBbkI7QUFDQSxXQUFPLENBQUNBLEtBQUssQ0FBQ2p3QyxNQUFOLElBQWdCLEtBQUs4dEMsV0FBdEIsS0FBc0NuMEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUN6Q04sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFqQyxFQUNJLEdBQUlnMkMsS0FBSyxDQUFDL3NDLEdBQU4sQ0FBVSxDQUFDcUwsT0FBRCxFQUFVc2dCLEtBQVYsS0FBb0JBLEtBQUssR0FBR29oQixLQUFLLENBQUNqd0MsTUFBTixHQUFlLENBQXZCLEdBQTJCLENBQUN1TyxPQUFELEVBQVUsS0FBVixDQUEzQixHQUE4Q0EsT0FBNUUsRUFBcUZ3SixJQUFyRixFQURSLENBRHlDLEVBSXpDLEtBQUsrMUIsV0FBTCxJQUFvQm4wQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLFFBQXpCLEVBQW1DO0FBQUNDLGFBQU8sRUFBRSxLQUFLNHpDLFlBQWY7QUFBNkIzekMsZUFBUyxFQUFFLCtCQUF4QztBQUF5RXEyQyxjQUFRLEVBQUUsQ0FBQyxLQUFLcHNDLEtBQUwsQ0FBVzQ1QjtBQUEvRixLQUFuQyxFQUE0SSxVQUE1SSxDQUpxQixDQUE3QztBQU1IOztBQUVEcDBCLFVBQVEsR0FBRztBQUNQLFNBQUs5QixLQUFMLENBQVcwQyxNQUFYLElBQXFCLEtBQUsxQyxLQUFMLENBQVcwQyxNQUFYLENBQWtCLEtBQUtoSCxJQUF2QixDQUFyQjtBQUNBLFNBQUs0cUMsUUFBTCxDQUFjO0FBQUNwUSxhQUFPLEVBQUUsQ0FBQyxLQUFLNTVCLEtBQUwsQ0FBVzQ1QjtBQUF0QixLQUFkO0FBQ0g7O0FBRURuRSxNQUFJLEdBQUc7QUFBQyxTQUFLL3hCLEtBQUwsQ0FBVyt4QixJQUFYLENBQWdCLEtBQUtyMkIsSUFBckI7QUFBNEI7O0FBQ3BDbW1CLFFBQU0sR0FBRztBQUFDLFNBQUs3aEIsS0FBTCxDQUFXcUgsTUFBWCxDQUFrQixLQUFLM0wsSUFBdkI7QUFBOEI7O0FBQ3hDaUgsUUFBTSxHQUFHO0FBQUMsU0FBSzNDLEtBQUwsQ0FBVzJDLE1BQVgsQ0FBa0IsS0FBS2pILElBQXZCO0FBQThCOztBQUV4QyxNQUFJQSxJQUFKLEdBQVc7QUFBQyxXQUFPLEtBQUs4ckMsU0FBTCxDQUFlLEtBQUt4bkMsS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUIvbUMsTUFBakIsR0FBMEIsS0FBS1ksS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUIvbUMsTUFBakIsQ0FBd0JxUCxPQUF4QixFQUExQixHQUE4RCxLQUFLek8sS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUJ6cUMsSUFBOUYsQ0FBUDtBQUE0Rzs7QUFDeEgsTUFBSW5CLE1BQUosR0FBYTtBQUFDLFdBQU8sS0FBS2l0QyxTQUFMLENBQWUsS0FBS3huQyxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi9tQyxNQUFqQixHQUEwQixLQUFLWSxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi9tQyxNQUFqQixDQUF3QnNQLFNBQXhCLEVBQTFCLEdBQWdFLEtBQUsxTyxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQjVyQyxNQUFoRyxDQUFQO0FBQWdIOztBQUM5SCxNQUFJbkssV0FBSixHQUFrQjtBQUFDLFdBQU8sS0FBS28zQyxTQUFMLENBQWUsS0FBS3huQyxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi9tQyxNQUFqQixHQUEwQixLQUFLWSxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi9tQyxNQUFqQixDQUF3QnVQLGNBQXhCLEVBQTFCLEdBQXFFLEtBQUszTyxLQUFMLENBQVdtbUMsS0FBWCxDQUFpQi8xQyxXQUFyRyxDQUFQO0FBQTBIOztBQUM3SSxNQUFJUSxPQUFKLEdBQWM7QUFBQyxXQUFPLEtBQUs0MkMsU0FBTCxDQUFlLEtBQUt4bkMsS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUIvbUMsTUFBakIsR0FBMEIsS0FBS1ksS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUIvbUMsTUFBakIsQ0FBd0JwUCxVQUF4QixFQUExQixHQUFpRSxLQUFLZ1EsS0FBTCxDQUFXbW1DLEtBQVgsQ0FBaUJ2MUMsT0FBakcsQ0FBUDtBQUFrSDs7QUFFakltcEIsUUFBTSxHQUFHO0FBQ0wsUUFBSSxLQUFLemQsS0FBTCxDQUFXeEosUUFBZixFQUF5QixPQUFPLEtBQUsyMEMsaUJBQVo7QUFDekIsVUFBTTtBQUFDa0IsY0FBRDtBQUFXQztBQUFYLFFBQXlCLEtBQUs1b0MsS0FBTCxDQUFXbW1DLEtBQTFDO0FBRUEsV0FBT3AwQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ0hOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDUU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUErRSxLQUFLdzFDLFVBQUwsQ0FBZ0IsS0FBS25zQyxJQUFyQixFQUEyQixLQUFLOUssT0FBaEMsRUFBeUM7QUFBQzhLLFVBQUksRUFBRSxLQUFLbkIsTUFBWjtBQUFvQnhILFFBQUUsRUFBRTQxQyxRQUF4QjtBQUFrQ3J6QixVQUFJLEVBQUVzekI7QUFBeEMsS0FBekMsQ0FBL0UsQ0FEUixFQUVRNzJDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSSxLQUFLMk4sS0FBTCxDQUFXK3hCLElBQVgsSUFBbUIsS0FBS29XLFVBQUwsQ0FBZ0IsTUFBaEIsRUFBd0Isb0JBQUMsbURBQUQ7QUFBVSxlQUFTLEVBQUM7QUFBcEIsTUFBeEIsRUFBMEQsS0FBS3BXLElBQS9ELENBRHZCLEVBRUksS0FBSy94QixLQUFMLENBQVdxSCxNQUFYLElBQXFCLEtBQUs4Z0MsVUFBTCxDQUFnQixRQUFoQixFQUEwQixvQkFBQyxxREFBRDtBQUFZLGVBQVMsRUFBQztBQUF0QixNQUExQixFQUE4RCxLQUFLdG1CLE1BQW5FLENBRnpCLEVBR0ksS0FBSzdoQixLQUFMLENBQVcyQyxNQUFYLElBQXFCLEtBQUt3bEMsVUFBTCxDQUFnQixRQUFoQixFQUEwQixvQkFBQyxtREFBRDtBQUFZLGVBQVMsRUFBQztBQUF0QixNQUExQixFQUE4RCxLQUFLeGxDLE1BQW5FLENBSHpCLEVBSUl6USxLQUFLLENBQUNDLGFBQU4sQ0FBb0IwMkMsMERBQXBCLEVBQTRCO0FBQUMvbUMsY0FBUSxFQUFFLEtBQUtBLFFBQWhCO0FBQTBCbzBCLGFBQU8sRUFBRSxLQUFLNTVCLEtBQUwsQ0FBVzQ1QjtBQUE5QyxLQUE1QixDQUpKLENBRlIsQ0FERyxFQVVIbmtDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUEwRyxLQUFLakMsV0FBL0csQ0FESixDQVZHLEVBYUgsS0FBS1MsTUFiRixDQUFQO0FBZUg7O0FBeEwyRDtBQTJMaEUsTUFBTXduQyxjQUFjLEdBQUcwTixjQUFjLENBQUN6dkMsU0FBZixDQUF5QnlqQixNQUFoRDtBQUNBam1CLE1BQU0sQ0FBQ1ksY0FBUCxDQUFzQnF4QyxjQUFjLENBQUN6dkMsU0FBckMsRUFBZ0QsUUFBaEQsRUFBMEQ7QUFDdERnaUMsWUFBVSxFQUFFLEtBRDBDO0FBRXREcGhDLGNBQVksRUFBRSxLQUZ3QztBQUd0RCtGLEtBQUcsRUFBRSxZQUFXO0FBQUNGLFdBQU8sQ0FBQ2xJLElBQVIsQ0FBYSxxR0FBYjtBQUFxSCxHQUhoRjtBQUl0REYsS0FBRyxFQUFFLE1BQU0wakM7QUFKMkMsQ0FBMUQsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNeVEsT0FBTyxHQUFHLzNDLGdFQUFjLENBQUNDLGlCQUFmLENBQWlDLFNBQWpDLENBQWhCO0FBRUEsTUFBTWtCLEtBQUssR0FBR0gsb0RBQUksQ0FBQ3FrQixLQUFuQjtBQUVlLE1BQU1taUIsUUFBTixTQUF1QnhtQyxvREFBSSxDQUFDeXVDLGNBQTVCLENBQTJDO0FBQ3REN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLMUQsS0FBTCxHQUFhO0FBQUMraUMsVUFBSSxFQUFFLE1BQVA7QUFBZTBKLGVBQVMsRUFBRSxJQUExQjtBQUFnQzdwQixXQUFLLEVBQUU7QUFBdkMsS0FBYjtBQUNBLFNBQUs4cEIsU0FBTCxHQUFpQixLQUFLaHBDLEtBQUwsQ0FBV25OLElBQVgsSUFBbUIsU0FBcEM7QUFDQSxTQUFLdVAsTUFBTCxHQUFjLEtBQUs0bUMsU0FBTCxHQUFpQjcwQyxzREFBakIsR0FBZ0NDLHFEQUE5QztBQUNBLFNBQUtrTyxPQUFMLEdBQWUsS0FBSzBtQyxTQUFMLEdBQWlCL3pDLDhEQUFqQixHQUFnQ0MsNkRBQS9DO0FBRUEsU0FBS21xQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVcm9DLElBQVYsQ0FBZSxJQUFmLENBQVo7QUFDQSxTQUFLaXlDLE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWFqeUMsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS29FLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlwRSxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDSDs7QUFFRGt5QyxZQUFVLEdBQUc7QUFDVHB6Qyx1QkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0J3NkIsS0FBcEIsQ0FBMEIwQixRQUExQixDQUFtQyxLQUFLZ1gsU0FBTCxHQUFpQjF6QywrREFBYyxDQUFDMlUsYUFBaEMsR0FBZ0QzVSwrREFBYyxDQUFDK1UsWUFBbEc7QUFDSDs7QUFFRDBuQixNQUFJLENBQUNyMkIsSUFBRCxFQUFPO0FBQ1BxQixXQUFPLENBQUNDLEdBQVIsQ0FBWXRCLElBQVo7QUFDQSxTQUFLNEcsT0FBTCxDQUFheXZCLElBQWIsQ0FBa0JyMkIsSUFBbEI7QUFDSDs7QUFFRCxRQUFNbW1CLE1BQU4sQ0FBYW5tQixJQUFiLEVBQW1CO0FBQ2YsVUFBTXl0QyxZQUFZLEdBQUcsTUFBTSxLQUFLQyxhQUFMLENBQW1CMXRDLElBQW5CLENBQTNCO0FBQ0EsUUFBSSxDQUFDeXRDLFlBQUwsRUFBbUI7QUFDbkIsU0FBSzdtQyxPQUFMLENBQWF1ZixNQUFiLENBQW9Cbm1CLElBQXBCO0FBQ0g7O0FBRUQwdEMsZUFBYSxDQUFDMXRDLElBQUQsRUFBTztBQUNoQixXQUFPLElBQUlzUCxPQUFKLENBQVkzQixPQUFPLElBQUk7QUFDMUI3VCw2REFBSyxDQUFDZ0sscUJBQU4sQ0FBNEIsZUFBNUIsRUFBOEMsbUNBQWtDOUQsSUFBSyxHQUFyRixFQUF5RjtBQUNyRjAwQixjQUFNLEVBQUUsSUFENkU7QUFFckYxZixtQkFBVyxFQUFFLFFBRndFO0FBR3JGQyxpQkFBUyxFQUFFLE1BQU07QUFBQ3RILGlCQUFPLENBQUMsSUFBRCxDQUFQO0FBQWUsU0FIb0Q7QUFJckZnbkIsZ0JBQVEsRUFBRSxNQUFNO0FBQUNobkIsaUJBQU8sQ0FBQyxLQUFELENBQVA7QUFBZ0I7QUFKb0QsT0FBekY7QUFNSCxLQVBNLENBQVA7QUFRSDs7QUFFRCxNQUFJZ2dDLFdBQUosR0FBa0I7QUFDZCxXQUFPLENBQ0g7QUFBQ25wQixXQUFLLEVBQUUsTUFBUjtBQUFnQnpyQixXQUFLLEVBQUU7QUFBdkIsS0FERyxFQUVIO0FBQUN5ckIsV0FBSyxFQUFFLFFBQVI7QUFBa0J6ckIsV0FBSyxFQUFFO0FBQXpCLEtBRkcsRUFHSDtBQUFDeXJCLFdBQUssRUFBRSxTQUFSO0FBQW1CenJCLFdBQUssRUFBRTtBQUExQixLQUhHLEVBSUg7QUFBQ3lyQixXQUFLLEVBQUUsZ0JBQVI7QUFBMEJ6ckIsV0FBSyxFQUFFO0FBQWpDLEtBSkcsRUFLSDtBQUFDeXJCLFdBQUssRUFBRSxlQUFSO0FBQXlCenJCLFdBQUssRUFBRTtBQUFoQyxLQUxHLEVBTUg7QUFBQ3lyQixXQUFLLEVBQUUsV0FBUjtBQUFxQnpyQixXQUFLLEVBQUU7QUFBNUIsS0FORyxDQUFQO0FBUUg7O0FBRUQsTUFBSTYwQyxVQUFKLEdBQWlCO0FBQ2IsV0FBTyxDQUNIO0FBQUNwcEIsV0FBSyxFQUFFLFdBQVI7QUFBcUJ6ckIsV0FBSyxFQUFFO0FBQTVCLEtBREcsRUFFSDtBQUFDeXJCLFdBQUssRUFBRSxZQUFSO0FBQXNCenJCLFdBQUssRUFBRTtBQUE3QixLQUZHLENBQVA7QUFJSDs7QUFFRHcwQyxTQUFPLENBQUN4MEMsS0FBRCxFQUFRO0FBQ1gsU0FBSzZ4QyxRQUFMLENBQWM7QUFBQ3lDLGVBQVMsRUFBRXQwQztBQUFaLEtBQWQ7QUFDSDs7QUFFRDRxQyxNQUFJLENBQUM1cUMsS0FBRCxFQUFRO0FBQ1IsU0FBSzZ4QyxRQUFMLENBQWM7QUFBQ2pILFVBQUksRUFBRTVxQztBQUFQLEtBQWQ7QUFDSDs7QUFFRDJHLFFBQU0sQ0FBQ2t0QixLQUFELEVBQVE7QUFDVixTQUFLZ2UsUUFBTCxDQUFjO0FBQUNwbkIsV0FBSyxFQUFFb0osS0FBSyxDQUFDOVMsTUFBTixDQUFhL2dCLEtBQWIsQ0FBbUI4MEMsaUJBQW5CO0FBQVIsS0FBZDtBQUNIOztBQUVEQyxVQUFRLENBQUNyRCxLQUFELEVBQVE7QUFDWixXQUFPO0FBQ0gzeEMsU0FBRyxFQUFFLEtBQUtpYSxPQUFMLENBQWEwM0IsS0FBYixDQURGO0FBRUhuc0MsYUFBTyxFQUFFLEtBQUtvSSxNQUFMLENBQVksS0FBS3FNLE9BQUwsQ0FBYTAzQixLQUFiLENBQVosQ0FGTjtBQUdIempDLFlBQU0sRUFBRSxLQUFLSixPQUFMLENBQWFJLE1BQWIsQ0FBb0IxTCxJQUFwQixDQUF5QixLQUFLc0wsT0FBOUIsQ0FITDtBQUlIO0FBQ0ErRSxZQUFNLEVBQUUsS0FBS3dhLE1BQUwsQ0FBWTdxQixJQUFaLENBQWlCLElBQWpCLENBTEw7QUFNSG12QyxXQUFLLEVBQUVBO0FBTkosS0FBUDtBQVFIOztBQUVEcUIsV0FBUyxDQUFDL3lDLEtBQUQsRUFBUTtBQUNiLFFBQUksQ0FBQ0EsS0FBTCxFQUFZLE9BQU8sS0FBUDtBQUNaLFdBQU8sT0FBT0EsS0FBUCxJQUFnQixRQUFoQixHQUEyQkEsS0FBM0IsR0FBbUNBLEtBQUssQ0FBQ3VnQixRQUFOLEVBQTFDO0FBQ0g7O0FBRUR5MEIsV0FBUyxHQUFHO0FBQ1IsVUFBTUMsWUFBWSxHQUFHLEtBQUsxcEMsS0FBTCxDQUFXcUMsSUFBWCxDQUFnQmc5QixJQUFoQixDQUFxQixDQUFDdjhCLENBQUQsRUFBSTZtQyxDQUFKLEtBQVU7QUFDaEQsWUFBTUMsR0FBRyxHQUFHLEtBQUt0dEMsS0FBTCxDQUFXK2lDLElBQVgsQ0FBZ0JqeUIsTUFBaEIsQ0FBdUIsQ0FBdkIsRUFBMEI5RyxXQUExQixLQUEwQyxLQUFLaEssS0FBTCxDQUFXK2lDLElBQVgsQ0FBZ0I5NEIsS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBdEQ7QUFDQSxZQUFNc2pDLEtBQUssR0FBRy9tQyxDQUFDLENBQUMxRCxNQUFGLElBQVkwRCxDQUFDLENBQUMxRCxNQUFGLENBQVUsTUFBS3dxQyxHQUFJLEVBQW5CLENBQVosR0FBb0MsS0FBS3BDLFNBQUwsQ0FBZTFrQyxDQUFDLENBQUMxRCxNQUFGLENBQVUsTUFBS3dxQyxHQUFJLEVBQW5CLEdBQWYsQ0FBcEMsR0FBOEU5bUMsQ0FBQyxDQUFDLEtBQUt4RyxLQUFMLENBQVcraUMsSUFBWixDQUE3RjtBQUNBLFlBQU15SyxNQUFNLEdBQUdILENBQUMsQ0FBQ3ZxQyxNQUFGLElBQVl1cUMsQ0FBQyxDQUFDdnFDLE1BQUYsQ0FBVSxNQUFLd3FDLEdBQUksRUFBbkIsQ0FBWixHQUFvQyxLQUFLcEMsU0FBTCxDQUFlbUMsQ0FBQyxDQUFDdnFDLE1BQUYsQ0FBVSxNQUFLd3FDLEdBQUksRUFBbkIsR0FBZixDQUFwQyxHQUErRUQsQ0FBQyxDQUFDLEtBQUtydEMsS0FBTCxDQUFXK2lDLElBQVosQ0FBL0Y7QUFDQSxVQUFJLE9BQU93SyxLQUFQLElBQWlCLFFBQXJCLEVBQStCLE9BQU9BLEtBQUssQ0FBQ04saUJBQU4sR0FBMEJRLGFBQTFCLENBQXdDRCxNQUFNLENBQUNQLGlCQUFQLEVBQXhDLENBQVA7QUFDL0IsVUFBSU0sS0FBSyxHQUFHQyxNQUFaLEVBQW9CLE9BQU8sQ0FBUDtBQUNwQixVQUFJQSxNQUFNLEdBQUdELEtBQWIsRUFBb0IsT0FBTyxDQUFDLENBQVI7QUFDcEIsYUFBTyxDQUFQO0FBQ0gsS0FSb0IsQ0FBckI7QUFTQSxRQUFJLENBQUMsS0FBS3Z0QyxLQUFMLENBQVd5c0MsU0FBaEIsRUFBMkJXLFlBQVksQ0FBQ1QsT0FBYjtBQUMzQixVQUFNZSxRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJbG5DLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc0bUMsWUFBWSxDQUFDdHhDLE1BQWpDLEVBQXlDMEssQ0FBQyxFQUExQyxFQUE4QztBQUMxQyxZQUFNcWpDLEtBQUssR0FBR3VELFlBQVksQ0FBQzVtQyxDQUFELENBQTFCOztBQUNBLFVBQUksS0FBS3hHLEtBQUwsQ0FBVzRpQixLQUFmLEVBQXNCO0FBQ2xCLFlBQUlvQyxPQUFPLEdBQUcsSUFBZDtBQUNBLGNBQU01bEIsSUFBSSxHQUFHLEtBQUsrUyxPQUFMLENBQWEwM0IsS0FBYixDQUFiO0FBQ0EsY0FBTTVyQyxNQUFNLEdBQUcsS0FBS21VLFNBQUwsQ0FBZXkzQixLQUFmLENBQWY7QUFDQSxjQUFNLzFDLFdBQVcsR0FBRyxLQUFLdWUsY0FBTCxDQUFvQnczQixLQUFwQixDQUFwQjtBQUNBLGNBQU12MUMsT0FBTyxHQUFHLEtBQUtaLFVBQUwsQ0FBZ0JtMkMsS0FBaEIsQ0FBaEI7QUFDQSxZQUFJenFDLElBQUosRUFBVTRsQixPQUFPLEdBQUc1bEIsSUFBSSxDQUFDNnRDLGlCQUFMLEdBQXlCOXhDLFFBQXpCLENBQWtDLEtBQUs2RSxLQUFMLENBQVc0aUIsS0FBN0MsQ0FBVjtBQUNWLFlBQUkza0IsTUFBSixFQUFZK21CLE9BQU8sR0FBR0EsT0FBTyxJQUFJL21CLE1BQU0sQ0FBQ2d2QyxpQkFBUCxHQUEyQjl4QyxRQUEzQixDQUFvQyxLQUFLNkUsS0FBTCxDQUFXNGlCLEtBQS9DLENBQXJCO0FBQ1osWUFBSTl1QixXQUFKLEVBQWlCa3hCLE9BQU8sR0FBR0EsT0FBTyxJQUFJbHhCLFdBQVcsQ0FBQ201QyxpQkFBWixHQUFnQzl4QyxRQUFoQyxDQUF5QyxLQUFLNkUsS0FBTCxDQUFXNGlCLEtBQXBELENBQXJCO0FBQ2pCLFlBQUl0dUIsT0FBSixFQUFhMHdCLE9BQU8sR0FBR0EsT0FBTyxJQUFJMXdCLE9BQU8sQ0FBQzI0QyxpQkFBUixHQUE0Qjl4QyxRQUE1QixDQUFxQyxLQUFLNkUsS0FBTCxDQUFXNGlCLEtBQWhELENBQXJCO0FBQ2IsWUFBSSxDQUFDb0MsT0FBTCxFQUFjO0FBQ2pCOztBQUNELFlBQU10aEIsS0FBSyxHQUFHLEtBQUt3cEMsUUFBTCxDQUFjckQsS0FBZCxDQUFkO0FBQ0E2RCxjQUFRLENBQUNsbUMsSUFBVCxDQUFjLG9CQUFDLHNEQUFELFFBQWUsb0JBQUMsa0RBQUQsZUFBZTlELEtBQWY7QUFBc0IsY0FBTSxFQUFFLENBQUMxTSx3REFBYyxDQUFDLFdBQUQsQ0FBZixJQUFnQyxLQUFLZ1AsT0FBTCxDQUFhSyxNQUFiLENBQW9CM0wsSUFBcEIsQ0FBeUIsS0FBS3NMLE9BQTlCO0FBQTlELFNBQWYsQ0FBZDtBQUNIOztBQUNELFdBQU8wbkMsUUFBUDtBQUNIOztBQUVEdjdCLFNBQU8sQ0FBQzAzQixLQUFELEVBQVE7QUFBQyxXQUFPLEtBQUtxQixTQUFMLENBQWVyQixLQUFLLENBQUMvbUMsTUFBTixHQUFlK21DLEtBQUssQ0FBQy9tQyxNQUFOLENBQWFxUCxPQUFiLEVBQWYsR0FBd0MwM0IsS0FBSyxDQUFDenFDLElBQTdELENBQVA7QUFBMkU7O0FBQzNGZ1QsV0FBUyxDQUFDeTNCLEtBQUQsRUFBUTtBQUFDLFdBQU8sS0FBS3FCLFNBQUwsQ0FBZXJCLEtBQUssQ0FBQy9tQyxNQUFOLEdBQWUrbUMsS0FBSyxDQUFDL21DLE1BQU4sQ0FBYXNQLFNBQWIsRUFBZixHQUEwQ3kzQixLQUFLLENBQUM1ckMsTUFBL0QsQ0FBUDtBQUErRTs7QUFDakdvVSxnQkFBYyxDQUFDdzNCLEtBQUQsRUFBUTtBQUFDLFdBQU8sS0FBS3FCLFNBQUwsQ0FBZXJCLEtBQUssQ0FBQy9tQyxNQUFOLEdBQWUrbUMsS0FBSyxDQUFDL21DLE1BQU4sQ0FBYXVQLGNBQWIsRUFBZixHQUErQ3czQixLQUFLLENBQUMvMUMsV0FBcEUsQ0FBUDtBQUF5Rjs7QUFDaEhKLFlBQVUsQ0FBQ20yQyxLQUFELEVBQVE7QUFBQyxXQUFPLEtBQUtxQixTQUFMLENBQWVyQixLQUFLLENBQUMvbUMsTUFBTixHQUFlK21DLEtBQUssQ0FBQy9tQyxNQUFOLENBQWFwUCxVQUFiLEVBQWYsR0FBMkNtMkMsS0FBSyxDQUFDdjFDLE9BQWhFLENBQVA7QUFBaUY7O0FBRXBHbXBCLFFBQU0sR0FBRztBQUNMLFVBQU1rd0IsV0FBVyxHQUFHLG9CQUFDLE9BQUQ7QUFBUyxXQUFLLEVBQUMsT0FBZjtBQUF1QixjQUFRLEVBQUMsS0FBaEM7QUFBc0MsVUFBSSxFQUFDO0FBQTNDLE9BQ2RqcUMsS0FBRCxJQUNELG9CQUFDLG1EQUFELGVBQWdCQSxLQUFoQjtBQUF1QixlQUFTLEVBQUMsb0NBQWpDO0FBQXNFLFVBQUksRUFBQyxNQUEzRTtBQUFrRixhQUFPLEVBQUUsWUFBWTtBQUNuRyxZQUFJLEtBQUtncEMsU0FBVCxFQUFvQi96Qyw4REFBWSxDQUFDZzlCLGdCQUFiLEdBQXBCLEtBQ0svOEIsNkRBQVcsQ0FBQ3drQyxlQUFaO0FBQ0wsYUFBS3dRLFdBQUw7QUFDSDtBQUpELE9BRmdCLENBQXBCO0FBUUEsVUFBTUMsVUFBVSxHQUFHLEtBQUtWLFNBQUwsRUFBbkI7QUFFQSxXQUFPLG9CQUFDLGlEQUFEO0FBQVUsbUJBQWEsRUFBRSxJQUF6QjtBQUErQixVQUFJLEVBQUUsSUFBckM7QUFBMkMsVUFBSSxFQUFFO0FBQWpELE9BQ0Msb0JBQUMsc0RBQUQ7QUFBZSxXQUFLLEVBQUcsR0FBRSxLQUFLenBDLEtBQUwsQ0FBV25OLElBQVgsQ0FBZ0J5VCxXQUFoQixFQUE4QixJQUFHNmpDLFVBQVUsQ0FBQy94QyxNQUFPO0FBQTVFLE9BQ0k7QUFBUSxTQUFHLEVBQUMsZUFBWjtBQUE0QixlQUFTLEVBQUMsb0JBQXRDO0FBQTJELGFBQU8sRUFBRSxLQUFLOHdDLFVBQUwsQ0FBZ0JseUMsSUFBaEIsQ0FBcUIsSUFBckI7QUFBcEUsZ0JBQXNHLEtBQUtneUMsU0FBTCxHQUFpQixRQUFqQixHQUE0QixPQUFsSSxZQURKLEVBRUssQ0FBQzExQyx3REFBYyxDQUFDLFdBQUQsQ0FBZixJQUFnQzIyQyxXQUZyQyxFQUdJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSSxvQkFBQywwREFBRDtBQUFRLGNBQVEsRUFBRSxLQUFLN3VDLE1BQXZCO0FBQStCLGlCQUFXLEVBQUcsVUFBUyxLQUFLNEUsS0FBTCxDQUFXbk4sSUFBSztBQUF0RSxNQURKLEVBRUk7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSTtBQUFPLGVBQVMsRUFBQztBQUFqQixrQkFESixFQUVJLG9CQUFDLDREQUFEO0FBQVUsYUFBTyxFQUFFLEtBQUt3MkMsV0FBeEI7QUFBcUMsY0FBUSxFQUFFLEtBQUtoSyxJQUFwRDtBQUEwRCxXQUFLLEVBQUM7QUFBaEUsTUFGSixDQURKLEVBS0k7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQU8sZUFBUyxFQUFDO0FBQWpCLGdCQURKLEVBRUksb0JBQUMsNERBQUQ7QUFBVSxhQUFPLEVBQUUsS0FBS2lLLFVBQXhCO0FBQW9DLGNBQVEsRUFBRSxLQUFLTCxPQUFuRDtBQUE0RCxXQUFLLEVBQUM7QUFBbEUsTUFGSixDQUxKLENBRkosQ0FISixFQWlCSTtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQTBDa0IsVUFBMUMsQ0FqQkosQ0FERCxFQW9CQyxvQkFBQyw4Q0FBRDtBQUFPLFNBQUcsRUFBQztBQUFYLE1BcEJELENBQVA7QUFzQkg7O0FBM0pxRDtBQThKMUQsTUFBTTlSLGNBQWMsR0FBR0UsUUFBUSxDQUFDamlDLFNBQVQsQ0FBbUJ5akIsTUFBMUM7QUFDQWptQixNQUFNLENBQUNZLGNBQVAsQ0FBc0I2akMsUUFBUSxDQUFDamlDLFNBQS9CLEVBQTBDLFFBQTFDLEVBQW9EO0FBQ2hEZ2lDLFlBQVUsRUFBRSxLQURvQztBQUVoRHBoQyxjQUFZLEVBQUUsS0FGa0M7QUFHaEQrRixLQUFHLEVBQUUsWUFBVztBQUFDRixXQUFPLENBQUNsSSxJQUFSLENBQWEscUdBQWI7QUFBcUgsR0FIdEY7QUFJaERGLEtBQUcsRUFBRSxNQUFNMGpDO0FBSnFDLENBQXBELEU7Ozs7Ozs7Ozs7OztBQ3BMQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU0zaUIsTUFBTixTQUFxQjNqQixtREFBSSxDQUFDeXVDLGNBQTFCLENBQXlDO0FBQ3BEem1CLFFBQU0sR0FBRztBQUNMLFdBQU9ob0IsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDeTFCLFlBQU0sRUFBRSxNQUFUO0FBQWlCbk8sV0FBSyxFQUFFLEtBQUt6WixLQUFMLENBQVcxTixJQUFYLElBQW1CLE1BQTNDO0FBQW1ERCxlQUFTLEVBQUUsYUFBYSxLQUFLMk4sS0FBTCxDQUFXM04sU0FBdEY7QUFBaUdrVyxXQUFLLEVBQUU7QUFBQzZoQyxnQkFBUSxFQUFFLFNBQVg7QUFBc0JDLGdCQUFRLEVBQUUsU0FBaEM7QUFBMkNDLHFCQUFhLEVBQUUsT0FBMUQ7QUFBbUVDLHNCQUFjLEVBQUU7QUFBbkYsT0FBeEc7QUFBcU05WixhQUFPLEVBQUU7QUFBOU0sS0FGRyxFQUdIMStCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsVUFBekIsRUFBcUMsSUFBckMsQ0FIRyxFQUlISixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDLElBQWpDLEVBQ0lKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ1ksUUFBRSxFQUFFO0FBQUwsS0FBbkMsRUFBb0RoQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLGNBQXpCLEVBQXlDO0FBQUMsWUFBTSxJQUFQO0FBQWEsWUFBTSxHQUFuQjtBQUF3QixzQkFBZ0IsSUFBeEM7QUFBOEMscUJBQWU7QUFBN0QsS0FBekMsQ0FBcEQsQ0FESixFQUVJSixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLFFBQXpCLEVBQW1DO0FBQUNZLFFBQUUsRUFBRTtBQUFMLEtBQW5DLEVBQW9EaEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixjQUF6QixFQUF5QztBQUFDLFlBQU0sSUFBUDtBQUFhLFlBQU0sR0FBbkI7QUFBd0Isc0JBQWdCLElBQXhDO0FBQThDLHFCQUFlO0FBQTdELEtBQXpDLENBQXBELENBRkosRUFHSUosbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixRQUF6QixFQUFtQztBQUFDWSxRQUFFLEVBQUU7QUFBTCxLQUFuQyxFQUFvRGhCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsY0FBekIsRUFBeUM7QUFBQyxZQUFNLElBQVA7QUFBYSxZQUFNLEdBQW5CO0FBQXdCLHNCQUFnQixJQUF4QztBQUE4QyxxQkFBZTtBQUE3RCxLQUF6QyxDQUFwRCxDQUhKLENBSkcsRUFTSEosbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixHQUF6QixFQUE4QixJQUE5QixFQUNJSixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNvVyxXQUFLLEVBQUU7QUFBQzNJLGNBQU0sRUFBRTtBQUFULE9BQVI7QUFBbUM4dEIsT0FBQyxFQUFFLDRqQkFBdEM7QUFBb21CbUQsVUFBSSxFQUFFLFNBQTFtQjtBQUFxbkIyWixhQUFPLEVBQUU7QUFBOW5CLEtBQWpDLENBREosRUFFSXo0QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNvVyxXQUFLLEVBQUU7QUFBQzNJLGNBQU0sRUFBRTtBQUFULE9BQVI7QUFBbUM4dEIsT0FBQyxFQUFFLDZiQUF0QztBQUFxZW1ELFVBQUksRUFBRSxTQUEzZTtBQUFzZjJaLGFBQU8sRUFBRTtBQUEvZixLQUFqQyxDQUZKLEVBR0l6NEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDb1csV0FBSyxFQUFFO0FBQUMzSSxjQUFNLEVBQUU7QUFBVCxPQUFSO0FBQW1DOHRCLE9BQUMsRUFBRSxza0JBQXRDO0FBQThtQm1ELFVBQUksRUFBRSxTQUFwbkI7QUFBK25CMlosYUFBTyxFQUFFO0FBQXhvQixLQUFqQyxDQUhKLENBVEcsQ0FBUDtBQWVIOztBQWpCbUQsQzs7Ozs7Ozs7Ozs7O0FDRnhEO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUMsWUFBTixTQUEyQjE0QyxtREFBSSxDQUFDeXVDLGNBQWhDLENBQStDO0FBQzFEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLNU4sT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYTRFLElBQWIsQ0FBa0IsSUFBbEIsQ0FBZjtBQUNBLFNBQUtpdkMsZUFBTDtBQUNIOztBQUVEQSxpQkFBZSxHQUFHO0FBQ2QsU0FBSzNwQyxLQUFMLEdBQWE7QUFDVDQ1QixhQUFPLEVBQUUsS0FBS2wyQixLQUFMLENBQVdrMkIsT0FBWCxJQUFzQjtBQUR0QixLQUFiO0FBR0g7O0FBRURuYyxRQUFNLEdBQUc7QUFDTCxXQUFPaG9CLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxJQURHLEVBRUgsSUFGRyxFQUdISixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNFLGVBQVMsRUFBRSxjQUFZNkcsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN1eEMsZUFBckIsRUFBc0MsQ0FBdEMsRUFBeUNDLFFBQWpFO0FBQTJFdjRDLGFBQU8sRUFBRSxLQUFLQTtBQUF6RixLQUZKLEVBR0lMLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFLG9CQUFrQjZHLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDeXhDLGFBQXJCLEVBQW9DLENBQXBDLEVBQXVDQTtBQUFyRSxLQUZKLEVBR0k3NEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixPQUF6QixFQUFrQztBQUFDRSxlQUFTLEVBQUU2RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3V4QyxlQUFyQixFQUFzQyxDQUF0QyxFQUF5Q0EsZUFBckQ7QUFBc0V4VSxhQUFPLEVBQUUsS0FBSzU1QixLQUFMLENBQVc0NUIsT0FBMUY7QUFBbUdwMEIsY0FBUSxFQUFFLE1BQU0sQ0FBRSxDQUFySDtBQUF1SGpQLFVBQUksRUFBRTtBQUE3SCxLQUFsQyxDQUhKLEVBSUlkLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUMsSUFBakMsQ0FKSixDQUhKLEVBU0lKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxNQURKLEVBRUksSUFGSixFQUdJLEtBQUs2TixLQUFMLENBQVd4RSxJQUhmLENBVEosQ0FIRyxDQUFQO0FBbUJIOztBQUVEcEosU0FBTyxHQUFHO0FBQ04sU0FBSzROLEtBQUwsQ0FBVzhCLFFBQVgsQ0FBb0IsS0FBSzlCLEtBQUwsQ0FBV2pOLEVBQS9CLEVBQW1DLENBQUMsS0FBS3VKLEtBQUwsQ0FBVzQ1QixPQUEvQztBQUNBLFNBQUtvUSxRQUFMLENBQWM7QUFDVnBRLGFBQU8sRUFBRSxDQUFDLEtBQUs1NUIsS0FBTCxDQUFXNDVCO0FBRFgsS0FBZDtBQUdIOztBQXhDeUQsQzs7Ozs7Ozs7Ozs7O0FDRjlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLE1BQU1oa0MsS0FBSyxHQUFHSCxtREFBSSxDQUFDRyxLQUFuQjtBQUdlLE1BQU0yNEMsTUFBTixTQUFxQjM0QyxLQUFLLENBQUNnbUMsU0FBM0IsQ0FBcUM7QUFDaER2aUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUsxRCxLQUFMLEdBQWE7QUFBQ2hGLFVBQUksRUFBRSxLQUFQO0FBQWM3QyxXQUFLLEVBQUUsS0FBS3VMLEtBQUwsQ0FBV3ZMLEtBQVgsSUFBb0IsS0FBS3VMLEtBQUwsQ0FBV04sT0FBWCxDQUFtQixDQUFuQixFQUFzQmpMO0FBQS9ELEtBQWI7QUFDQSxTQUFLcTJDLFFBQUwsR0FBZ0I1NEMsS0FBSyxDQUFDNjRDLFNBQU4sRUFBaEI7QUFDQSxTQUFLanBDLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjOUssSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtnMEMsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNoMEMsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtpMEMsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNqMEMsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNIOztBQUVEZzBDLFVBQVEsQ0FBQzFpQixLQUFELEVBQVE7QUFDWkEsU0FBSyxDQUFDMTJCLGNBQU47QUFDQSxTQUFLMDBDLFFBQUwsQ0FBYztBQUFDaHZDLFVBQUksRUFBRTtBQUFQLEtBQWQsRUFBNEIsTUFBTTtBQUM5QnRCLGNBQVEsQ0FBQ3NiLGdCQUFULENBQTBCLE9BQTFCLEVBQW1DLEtBQUsyNUIsUUFBeEM7QUFDSCxLQUZEO0FBR0g7O0FBRURBLFVBQVEsR0FBRztBQUNQLFNBQUszRSxRQUFMLENBQWM7QUFBQ2h2QyxVQUFJLEVBQUU7QUFBUCxLQUFkLEVBQTZCLE1BQU07QUFDL0J0QixjQUFRLENBQUN3b0IsbUJBQVQsQ0FBNkIsT0FBN0IsRUFBc0MsS0FBS3lzQixRQUEzQztBQUNILEtBRkQ7QUFHSDs7QUFFRG5wQyxVQUFRLENBQUNyTixLQUFELEVBQVE7QUFDWixTQUFLNnhDLFFBQUwsQ0FBYztBQUFDN3hDO0FBQUQsS0FBZDtBQUNBLFFBQUksS0FBS3VMLEtBQUwsQ0FBVzhCLFFBQWYsRUFBeUIsS0FBSzlCLEtBQUwsQ0FBVzhCLFFBQVgsQ0FBb0JyTixLQUFwQjtBQUM1Qjs7QUFFRCxNQUFJK2lCLFFBQUosR0FBZTtBQUFDLFdBQU8sS0FBS3hYLEtBQUwsQ0FBV04sT0FBWCxDQUFtQnRPLElBQW5CLENBQXdCbzhCLENBQUMsSUFBSUEsQ0FBQyxDQUFDLzRCLEtBQUYsSUFBVyxLQUFLNkgsS0FBTCxDQUFXN0gsS0FBbkQsQ0FBUDtBQUFrRTs7QUFFbEYsTUFBSWlMLE9BQUosR0FBYztBQUNWLFVBQU04WCxRQUFRLEdBQUcsS0FBS0EsUUFBdEI7QUFDQSxXQUFPO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDRixLQUFLeFgsS0FBTCxDQUFXTixPQUFYLENBQW1CcEUsR0FBbkIsQ0FBdUI0dkMsR0FBRyxJQUN2QjtBQUFLLGVBQVMsRUFBRyxtQkFBa0IxekIsUUFBUSxDQUFDL2lCLEtBQVQsSUFBa0J5MkMsR0FBRyxDQUFDejJDLEtBQXRCLEdBQThCLFdBQTlCLEdBQTRDLEVBQUcsRUFBbEY7QUFBcUYsYUFBTyxFQUFFLEtBQUtxTixRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLEVBQXlCazBDLEdBQUcsQ0FBQ3oyQyxLQUE3QjtBQUE5RixPQUFvSXkyQyxHQUFHLENBQUNockIsS0FBeEksQ0FESCxDQURFLENBQVA7QUFLSDs7QUFFRG5HLFFBQU0sR0FBRztBQUNMLFVBQU14UixLQUFLLEdBQUcsS0FBS3ZJLEtBQUwsQ0FBV3VJLEtBQVgsSUFBb0IsYUFBcEIsR0FBb0Msd0JBQXBDLEdBQStELEVBQTdFO0FBQ0EsVUFBTTRpQyxNQUFNLEdBQUcsS0FBSzd1QyxLQUFMLENBQVdoRixJQUFYLEdBQWtCLFlBQWxCLEdBQWlDLEVBQWhEO0FBQ0EsV0FBUTtBQUFLLGVBQVMsRUFBRyxZQUFXaVIsS0FBTSxHQUFFNGlDLE1BQU8sRUFBM0M7QUFBOEMsYUFBTyxFQUFFLEtBQUtILFFBQTVEO0FBQXNFLFNBQUcsRUFBRSxLQUFLRjtBQUFoRixPQUNJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBa0MsS0FBS3R6QixRQUFMLENBQWMwSSxLQUFoRCxDQURKLEVBRUksb0JBQUMsd0RBQUQ7QUFBTyxlQUFTLEVBQUM7QUFBakIsTUFGSixFQUdLLEtBQUs1akIsS0FBTCxDQUFXaEYsSUFBWCxJQUFtQixLQUFLb0ksT0FIN0IsQ0FBUjtBQUtIOztBQS9DK0MsQyxDQWtEcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVTs7Ozs7Ozs7Ozs7O0FDakVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLE1BQU14TixLQUFLLEdBQUdILG1EQUFJLENBQUNHLEtBQW5CO0FBRWUsTUFBTWs1QyxNQUFOLFNBQXFCbDVDLEtBQUssQ0FBQ2dtQyxTQUEzQixDQUFxQztBQUNoRG5lLFFBQU0sR0FBRztBQUNMLFdBQU87QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNLO0FBQU8sY0FBUSxFQUFFLEtBQUsvWixLQUFMLENBQVc4QixRQUE1QjtBQUFzQyxlQUFTLEVBQUUsS0FBSzlCLEtBQUwsQ0FBV3FyQyxTQUE1RDtBQUF1RSxVQUFJLEVBQUMsTUFBNUU7QUFBbUYsZUFBUyxFQUFDLFdBQTdGO0FBQXlHLGlCQUFXLEVBQUUsS0FBS3JyQyxLQUFMLENBQVdzckMsV0FBakk7QUFBOEksZUFBUyxFQUFDO0FBQXhKLE1BREwsRUFFSyxvQkFBQyxxREFBRCxPQUZMLENBQVA7QUFJSDs7QUFOK0MsQzs7Ozs7Ozs7Ozs7O0FDTHBEO0FBQUE7QUFBQTtBQUFBO0FBRUEsTUFBTXA1QyxLQUFLLEdBQUdILG1EQUFJLENBQUNHLEtBQW5CO0FBRWUsTUFBTTIyQyxNQUFOLFNBQXFCMzJDLEtBQUssQ0FBQ2dtQyxTQUEzQixDQUFxQztBQUNoRHZpQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBSzFELEtBQUwsR0FBYTtBQUFDNDVCLGFBQU8sRUFBRSxLQUFLbDJCLEtBQUwsQ0FBV2syQjtBQUFyQixLQUFiO0FBQ0EsU0FBS3AwQixRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBYzlLLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDSDs7QUFFRDhLLFVBQVEsR0FBRztBQUNQLFFBQUksS0FBSzlCLEtBQUwsQ0FBVzBvQyxRQUFmLEVBQXlCO0FBQ3pCLFNBQUsxb0MsS0FBTCxDQUFXOEIsUUFBWCxDQUFvQixDQUFDLEtBQUt4RixLQUFMLENBQVc0NUIsT0FBaEM7QUFDQSxTQUFLb1EsUUFBTCxDQUFjO0FBQUNwUSxhQUFPLEVBQUUsQ0FBQyxLQUFLNTVCLEtBQUwsQ0FBVzQ1QjtBQUF0QixLQUFkO0FBQ0g7O0FBRURuYyxRQUFNLEdBQUc7QUFDTCxVQUFNd3hCLFlBQVksR0FBRyxLQUFLdnJDLEtBQUwsQ0FBVzBvQyxRQUFYLEdBQXNCLHFCQUF0QixHQUE4QyxFQUFuRTtBQUNBLFVBQU04QyxZQUFZLEdBQUcsS0FBS2x2QyxLQUFMLENBQVc0NUIsT0FBWCxHQUFxQixvQkFBckIsR0FBNEMsRUFBakU7QUFDQSxXQUFRO0FBQUssZUFBUyxFQUFHLFdBQUQsR0FBY3FWLFlBQWQsR0FBNkJDO0FBQTdDLE9BQ0k7QUFBTyxVQUFJLEVBQUMsVUFBWjtBQUF1QixRQUFFLEVBQUUsS0FBS3hyQyxLQUFMLENBQVdqTixFQUF0QztBQUEwQyxlQUFTLEVBQUcsYUFBdEQ7QUFBb0UsY0FBUSxFQUFFLEtBQUtpTixLQUFMLENBQVcwb0MsUUFBekY7QUFBbUcsYUFBTyxFQUFFLEtBQUtwc0MsS0FBTCxDQUFXNDVCLE9BQXZIO0FBQWdJLGNBQVEsRUFBRSxLQUFLcDBCO0FBQS9JLE1BREosQ0FBUjtBQUdIOztBQW5CK0MsQzs7Ozs7Ozs7Ozs7O0FDSnBEO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTTJwQyxpQkFBTixTQUFnQzE1QyxtREFBSSxDQUFDeXVDLGNBQXJDLENBQW9EO0FBQy9EN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCxhQUFXMU8sV0FBWCxHQUF5QjtBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFFbER5b0IsUUFBTSxHQUFHO0FBQ0wsUUFBSXdvQixhQUFhLEdBQUdycEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrK0IsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBcEI7QUFDQSxXQUFPdGxDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0UsZUFBUyxFQUFFa3dDLGFBQWEsQ0FBQ2xMLGFBQWQsR0FBOEIsR0FBOUIsR0FBa0NrTCxhQUFhLENBQUNZLG9CQUFoRCxHQUFxRTtBQUFqRixLQUZHLEVBR0hweEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLElBREosRUFFSTtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksS0FBSzJOLEtBQUwsQ0FBVzFQLEtBSGYsQ0FIRyxFQVFILEtBQUswUCxLQUFMLENBQVdrSCxRQVJSLENBQVA7QUFVSDs7QUFuQjhELEM7Ozs7Ozs7Ozs7OztBQ0ZuRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFZSxNQUFNd2tDLGFBQU4sU0FBNEIzNUMsbURBQUksQ0FBQ3l1QyxjQUFqQyxDQUFnRDtBQUUzRDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsVUFBTXVOLElBQUksR0FBRyxJQUFiO0FBQ0FBLFFBQUksQ0FBQ3ZOLEtBQUwsQ0FBVzJyQyxLQUFYLEdBQW1CLENBQW5CO0FBQ0FwK0IsUUFBSSxDQUFDMDRCLGVBQUw7QUFDQTE0QixRQUFJLENBQUN5UixNQUFMLEdBQWN6UixJQUFJLENBQUN5UixNQUFMLENBQVlob0IsSUFBWixDQUFpQnVXLElBQWpCLENBQWQ7QUFDQUEsUUFBSSxDQUFDcStCLGNBQUwsR0FBc0I3NUMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QjA1QywwREFBekIsRUFBZ0Q7QUFBQzdzQixZQUFNLEVBQUV6UixJQUFJLENBQUN5UjtBQUFkLEtBQWhELENBQXRCO0FBQ0F6UixRQUFJLENBQUNuYixPQUFMLEdBQWVtYixJQUFJLENBQUNuYixPQUFMLENBQWE0RSxJQUFiLENBQWtCdVcsSUFBbEIsQ0FBZjtBQUNBQSxRQUFJLENBQUN1K0IsU0FBTCxHQUFpQnYrQixJQUFJLENBQUN1K0IsU0FBTCxDQUFlOTBDLElBQWYsQ0FBb0J1VyxJQUFwQixDQUFqQjtBQUNBQSxRQUFJLENBQUN3K0IsT0FBTCxHQUFleCtCLElBQUksQ0FBQ3crQixPQUFMLENBQWEvMEMsSUFBYixDQUFrQnVXLElBQWxCLENBQWY7QUFDQUEsUUFBSSxDQUFDeStCLE1BQUwsR0FBY3orQixJQUFJLENBQUN5K0IsTUFBTCxDQUFZaDFDLElBQVosQ0FBaUJ1VyxJQUFqQixDQUFkO0FBQ0g7O0FBRUQwNEIsaUJBQWUsR0FBRztBQUNkLFNBQUszcEMsS0FBTCxHQUFhO0FBQ1QydkMsY0FBUSxFQUFFLEtBQUtqc0MsS0FBTCxDQUFXaXNDLFFBQVgsSUFBdUJsNkMsbURBQUksQ0FBQytzQztBQUQ3QixLQUFiO0FBR0g7O0FBRUQzRyxtQkFBaUIsR0FBRztBQUNoQjtBQUNBLFNBQUsrVCxNQUFMLEdBQWNDLEdBQUcsQ0FBQ3BhLElBQUosQ0FBUyxxQkFBVCxDQUFkO0FBQ0EsU0FBS21hLE1BQUwsQ0FBWUUsUUFBWixDQUFxQixtQkFBckI7QUFDQSxTQUFLRixNQUFMLENBQVlHLE9BQVosQ0FBb0JDLE9BQXBCLENBQTRCLGNBQTVCO0FBQ0EsU0FBS0osTUFBTCxDQUFZSyxrQkFBWixDQUErQixLQUEvQjtBQUNBLFNBQUtMLE1BQUwsQ0FBWU0sV0FBWixDQUF3QixFQUF4QjtBQUNBLFNBQUtOLE1BQUwsQ0FBWXZ3QixFQUFaLENBQWUsUUFBZixFQUF5QixNQUFNO0FBQzNCLFVBQUksQ0FBQ3JvQix3REFBYyxDQUFDLFdBQUQsQ0FBbkIsRUFBa0M7QUFDbEMsV0FBS3k0QyxPQUFMO0FBQ0EsV0FBS0QsU0FBTDtBQUNILEtBSkQ7QUFLSDs7QUFFRDFULHNCQUFvQixHQUFHO0FBQ25CLFNBQUs4VCxNQUFMLENBQVlPLE9BQVo7QUFDSDs7QUFFRC9GLG9CQUFrQixDQUFDZ0csU0FBRCxFQUFZQyxTQUFaLEVBQXVCO0FBQ3JDLFVBQU1wL0IsSUFBSSxHQUFHLElBQWI7O0FBQ0EsUUFBSW8vQixTQUFTLENBQUNWLFFBQVYsSUFBc0IsQ0FBQzErQixJQUFJLENBQUNqUixLQUFMLENBQVcydkMsUUFBdEMsRUFBZ0Q7QUFDNUNsNkMseURBQUksQ0FBQytuQixRQUFMLENBQWNxYixzQkFBZCxDQUFxQzVuQixJQUFJLENBQUNxL0IsWUFBMUM7QUFDSDtBQUNKOztBQUVEQyxZQUFVLEdBQUcsQ0FDWjs7QUFFRCxNQUFJbnRDLE9BQUosR0FBYztBQUNWLFdBQU87QUFDSG90QyxpQkFBVyxFQUFFLElBRFY7QUFFSEMsVUFBSSxFQUFFLEtBRkg7QUFHSEMsZ0JBQVUsRUFBRSxDQUhUO0FBSUg3VCxXQUFLLEVBQUUsVUFKSjtBQUtIOFQsb0JBQWMsRUFBRTtBQUxiLEtBQVA7QUFPSDs7QUFFRCxNQUFJenVDLEdBQUosR0FBVTtBQUNOLFVBQU0wdUMsS0FBSyxHQUFHNzNDLDBEQUFTLENBQUM0TSxTQUFWLENBQW9CLGFBQXBCLENBQWQ7O0FBQ0EsUUFBSWtyQyxJQUFJLEdBQUcsRUFBWDs7QUFDQSxRQUFJRCxLQUFLLElBQUlBLEtBQUssS0FBSyxFQUF2QixFQUEyQjtBQUN2QkMsVUFBSSxHQUFHOTdCLElBQUksQ0FBQzY3QixLQUFELENBQVg7QUFDSDs7QUFDRCxXQUFPQyxJQUFQO0FBQ0g7O0FBRURDLGlCQUFlLEdBQUc7QUFDZCxVQUFNQyxTQUFTLEdBQUcsS0FBSzFHLElBQUwsQ0FBVXVGLE1BQVYsQ0FBaUJ6M0MsS0FBakIsQ0FBdUJxUixLQUF2QixDQUE2QixJQUE3QixFQUFtQzFOLE1BQXJEO0FBQ0EsUUFBSWkxQyxTQUFTLElBQUksS0FBS3J0QyxLQUFMLENBQVcyckMsS0FBNUIsRUFBbUM7QUFDbkMsU0FBS2hGLElBQUwsQ0FBVWdGLEtBQVYsQ0FBZ0I5akIsV0FBaEIsR0FBOEJuaUIsS0FBSyxDQUFDa2IsSUFBTixDQUFXLElBQUlsYixLQUFKLENBQVUybkMsU0FBVixDQUFYLEVBQWlDLENBQUN6cEIsQ0FBRCxFQUFJdmQsQ0FBSixLQUFVQSxDQUFDLEdBQUcsQ0FBL0MsRUFBa0RHLElBQWxELENBQXVELEtBQXZELElBQWdFLEdBQTlGO0FBQ0EsU0FBS3hHLEtBQUwsQ0FBVzJyQyxLQUFYLEdBQW1CMEIsU0FBbkI7QUFDSDs7QUFFRHR6QixRQUFNLEdBQUc7QUFDTCxVQUFNeE0sSUFBSSxHQUFHLElBQWI7QUFFQSxVQUFNO0FBQUMwK0I7QUFBRCxRQUFhMStCLElBQUksQ0FBQ2pSLEtBQXhCO0FBQ0EsUUFBSWltQyxhQUFhLEdBQUdycEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrK0IsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBcEI7QUFDQSxXQUFPdGxDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0UsZUFBUyxFQUFFa3dDLGFBQWEsQ0FBQ2xMLGFBQWQsR0FBNEIsR0FBNUIsR0FBZ0NrTCxhQUFhLENBQUNZLG9CQUE5QyxHQUFtRSx5QkFBL0U7QUFBMEc1NkIsV0FBSyxFQUFFO0FBQUM2NkIsZUFBTyxFQUFFO0FBQVY7QUFBakgsS0FGRyxFQUdINkksUUFBUSxJQUFJbDZDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDUixLQURRLEVBRVI7QUFBQ1ksUUFBRSxFQUFFO0FBQUwsS0FGUSxFQUdSaEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm03QyxzREFBekIsRUFBd0M7QUFBQzl4QyxVQUFJLEVBQUU7QUFBUCxLQUF4QyxDQUhRLEVBSVJ6SixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksSUFESixFQUVJLElBRkosRUFHSSxpQkFISixDQUpRLEVBU1JKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFLGlCQUFaO0FBQStCRCxhQUFPLEVBQUUsTUFBTTtBQUN0Q21iLFlBQUksQ0FBQ3lSLE1BQUw7QUFDSDtBQUZMLEtBRkosRUFLSSxRQUxKLENBVFEsQ0FIVCxFQW9CSCxDQUFDaXRCLFFBQUQsSUFBYWw2QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ1QsS0FEUyxFQUVULElBRlMsRUFHVEosbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm03QyxzREFBekIsRUFBd0M7QUFBQzl4QyxVQUFJLEVBQUU7QUFBUCxLQUF4QyxDQUhTLEVBSVR6SixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ0lOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ1ksUUFBRSxFQUFFLHFCQUFMO0FBQTRCVixlQUFTLEVBQUUsUUFBdkM7QUFBaURxMUMsU0FBRyxFQUFFO0FBQXRELEtBQWhDLEVBQWlHbjZCLElBQUksQ0FBQy9PLEdBQXRHLENBREosQ0FKUyxFQU9Uek0sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDWSxRQUFFLEVBQUU7QUFBTCxLQUZKLEVBR0loQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm83QyxpREFBekIsRUFBbUM7QUFBQ3g2QyxRQUFFLEVBQUUsYUFBTDtBQUFvQnlJLFVBQUksRUFBRSxhQUExQjtBQUF5Q3NHLGNBQVEsRUFBRSxLQUFLQSxRQUF4RDtBQUFrRW8wQixhQUFPLEVBQUU1aUMsd0RBQWMsQ0FBQyxXQUFEO0FBQXpGLEtBQW5DLENBSEosQ0FISixFQVFJdkIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDWSxRQUFFLEVBQUU7QUFBTCxLQUZKLEVBR0loQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQUNvVyxXQUFLLEVBQUU7QUFBQ2lsQyxvQkFBWSxFQUFFLGFBQWY7QUFBOEJDLG1CQUFXLEVBQUU7QUFBM0MsT0FBUjtBQUF5RXA3QyxlQUFTLEVBQUUsaUJBQXBGO0FBQXVHRCxhQUFPLEVBQUUsTUFBTTtBQUM5R21iLFlBQUksQ0FBQ25iLE9BQUwsQ0FBYSxRQUFiO0FBQ0g7QUFGTCxLQUZKLEVBS0ksUUFMSixDQUhKLEVBVUlMLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ29XLFdBQUssRUFBRTtBQUFDaWxDLG9CQUFZLEVBQUUsR0FBZjtBQUFvQkUsa0JBQVUsRUFBRSxtQkFBaEM7QUFBcURELG1CQUFXLEVBQUU7QUFBbEUsT0FBUjtBQUFnR3A3QyxlQUFTLEVBQUUsaUJBQTNHO0FBQThIRCxhQUFPLEVBQUUsTUFBTTtBQUNySW1iLFlBQUksQ0FBQ25iLE9BQUwsQ0FBYSxNQUFiO0FBQ0g7QUFGTCxLQUZKLEVBS0ksTUFMSixDQVZKLEVBaUJJTCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQUNvVyxXQUFLLEVBQUU7QUFBQ2lsQyxvQkFBWSxFQUFFLGFBQWY7QUFBOEJFLGtCQUFVLEVBQUU7QUFBMUMsT0FBUjtBQUF3RXI3QyxlQUFTLEVBQUUsaUJBQW5GO0FBQXNHRCxhQUFPLEVBQUUsTUFBTTtBQUM3R21iLFlBQUksQ0FBQ25iLE9BQUwsQ0FBYSxRQUFiO0FBQ0g7QUFGTCxLQUZKLEVBS0ksUUFMSixDQWpCSixFQXdCSUwsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLE1BREosRUFFSTtBQUFDb1csV0FBSyxFQUFFO0FBQUNvbEMsZ0JBQVEsRUFBRSxNQUFYO0FBQW1CQyxrQkFBVSxFQUFFO0FBQS9CO0FBQVIsS0FGSixFQUdJLG9DQUhKLENBeEJKLEVBNkJJNzdDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSSxRQURKLEVBRUlOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBakMsRUFBd0QsTUFBeEQsQ0FGSixFQUdJLEdBSEosRUFJSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFqQyxFQUF3RCxHQUF4RCxDQUpKLEVBS0ksMkRBTEosQ0E3QkosQ0FSSixDQVBTLENBcEJWLENBQVA7QUEyRUg7O0FBRURELFNBQU8sQ0FBQ3k3QyxHQUFELEVBQU07QUFDVCxVQUFNdGdDLElBQUksR0FBRyxJQUFiOztBQUNBLFlBQVFzZ0MsR0FBUjtBQUNJLFdBQUssUUFBTDtBQUNJdGdDLFlBQUksQ0FBQ3UrQixTQUFMO0FBQ0E7O0FBQ0osV0FBSyxNQUFMO0FBQ0l2K0IsWUFBSSxDQUFDdytCLE9BQUw7QUFDQTs7QUFDSixXQUFLLFFBQUw7QUFDSXgrQixZQUFJLENBQUN5K0IsTUFBTDtBQUNBO0FBVFI7QUFXSDs7QUFFRGxxQyxVQUFRLENBQUMvTyxFQUFELEVBQUttakMsT0FBTCxFQUFjO0FBQ2xCLFlBQVFuakMsRUFBUjtBQUNJLFdBQUssYUFBTDtBQUNJTyxnRUFBYyxDQUFDLFdBQUQsQ0FBZCxHQUE4QjRpQyxPQUE5QjtBQUNBTSxzRUFBUSxDQUFDaGpCLFlBQVQ7QUFDQTtBQUpSO0FBTUg7O0FBRURzNEIsV0FBUyxHQUFHO0FBQ1JydEMsNkRBQUcsQ0FBQ0ksV0FBSixDQUFnQixXQUFoQjtBQUNBSiw2REFBRyxDQUFDQyxRQUFKLENBQWEsV0FBYixFQUEwQixLQUFLd3RDLE1BQUwsQ0FBWUcsT0FBWixDQUFvQnlCLFFBQXBCLEVBQTFCO0FBQ0g7O0FBRUQvQixTQUFPLEdBQUc7QUFDTjEyQyw4REFBUyxDQUFDNk0sU0FBVixDQUFvQixhQUFwQixFQUFtQzZyQyxJQUFJLENBQUMsS0FBSzdCLE1BQUwsQ0FBWUcsT0FBWixDQUFvQnlCLFFBQXBCLEVBQUQsQ0FBdkM7QUFDSDs7QUFFRDlCLFFBQU0sR0FBRztBQUNMLFVBQU16K0IsSUFBSSxHQUFHLElBQWI7QUFDQUEsUUFBSSxDQUFDKzRCLFFBQUwsQ0FBYztBQUNWMkYsY0FBUSxFQUFFO0FBREEsS0FBZDtBQUdBLFVBQU0rQixLQUFLLEdBQUd6Z0MsSUFBSSxDQUFDcS9CLFlBQW5COztBQUNBLFFBQUksQ0FBQ29CLEtBQUwsRUFBWTtBQUNSanhDLGFBQU8sQ0FBQ0MsR0FBUixDQUFZLDZCQUFaO0FBQ0E7QUFDSDs7QUFDRGpMLHVEQUFJLENBQUMrbkIsUUFBTCxDQUFjQyxNQUFkLENBQXFCeE0sSUFBSSxDQUFDcStCLGNBQTFCLEVBQTBDb0MsS0FBMUM7QUFDSDs7QUFFRCxNQUFJcEIsWUFBSixHQUFtQjtBQUNmLFVBQU1oYSxLQUFLLEdBQUduMEIseURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsZ0NBQVYsQ0FBZDs7QUFDQSxRQUFJLENBQUMwVCxLQUFMLEVBQVk7QUFDUixVQUFJLENBQUMsS0FBS3FiLGtCQUFMLEVBQUwsRUFBZ0MsT0FBTyxJQUFQO0FBQ2hDLGFBQU8sS0FBS3JCLFlBQVo7QUFDSDs7QUFDRCxXQUFPaGEsS0FBUDtBQUNIOztBQUVEcWIsb0JBQWtCLEdBQUc7QUFDakIsVUFBTTNrQyxHQUFHLEdBQUc3Syx5REFBRyxDQUFDeWdCLEtBQUosQ0FBVSxZQUFVaG1CLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbVEsR0FBRixJQUFTblEsQ0FBQyxDQUFDNDVCLE1BQTlCLEVBQXNDLENBQXRDLEVBQXlDenBCLEdBQXpDLENBQTZDeEQsS0FBN0MsQ0FBbUQsR0FBbkQsRUFBd0QsQ0FBeEQsQ0FBcEIsQ0FBWjtBQUNBLFFBQUksQ0FBQ3dELEdBQUwsRUFBVSxPQUFPLEtBQVA7QUFDVjdLLDZEQUFHLENBQUMybkIsV0FBSixDQUFnQjNuQix5REFBRyxDQUFDdE0sYUFBSixDQUFtQiwwQ0FBbkIsQ0FBaEIsRUFBK0VtWCxHQUEvRTtBQUNBLFdBQU8sSUFBUDtBQUNIOztBQUVEMFYsUUFBTSxHQUFHO0FBQ0wsVUFBTXpSLElBQUksR0FBRyxJQUFiO0FBQ0FBLFFBQUksQ0FBQys0QixRQUFMLENBQWM7QUFDVjJGLGNBQVEsRUFBRTtBQURBLEtBQWQ7QUFHSDs7QUFoTzBELEM7Ozs7Ozs7Ozs7OztBQ1YvRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRWUsTUFBTUoscUJBQU4sU0FBb0M5NUMsbURBQUksQ0FBQ3l1QyxjQUF6QyxDQUF3RDtBQUVuRTdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsVUFBTXVOLElBQUksR0FBRyxJQUFiO0FBQ0FBLFFBQUksQ0FBQ25iLE9BQUwsR0FBZW1iLElBQUksQ0FBQ25iLE9BQUwsQ0FBYTRFLElBQWIsQ0FBa0J1VyxJQUFsQixDQUFmO0FBQ0FBLFFBQUksQ0FBQ3UrQixTQUFMLEdBQWlCditCLElBQUksQ0FBQ3UrQixTQUFMLENBQWU5MEMsSUFBZixDQUFvQnVXLElBQXBCLENBQWpCO0FBQ0FBLFFBQUksQ0FBQ3crQixPQUFMLEdBQWV4K0IsSUFBSSxDQUFDdytCLE9BQUwsQ0FBYS8wQyxJQUFiLENBQWtCdVcsSUFBbEIsQ0FBZjtBQUNBQSxRQUFJLENBQUN6TCxRQUFMLEdBQWdCeUwsSUFBSSxDQUFDekwsUUFBTCxDQUFjOUssSUFBZCxDQUFtQnVXLElBQW5CLENBQWhCO0FBQ0g7O0FBRUQ0cUIsbUJBQWlCLEdBQUc7QUFDaEIxNUIsNkRBQUcsQ0FBQzRtQixRQUFKLENBQWE1bUIseURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsWUFBVixDQUFiLEVBQXNDLG9CQUF0QztBQUNBbnRCLHVEQUFJLENBQUMrc0MsY0FBTCxHQUFzQixJQUF0QixDQUZnQixDQUdoQjs7QUFDQSxTQUFLb04sTUFBTCxHQUFjQyxHQUFHLENBQUNwYSxJQUFKLENBQVMsOEJBQVQsQ0FBZDtBQUNBLFNBQUttYSxNQUFMLENBQVlFLFFBQVosQ0FBcUIsbUJBQXJCO0FBQ0EsU0FBS0YsTUFBTCxDQUFZRyxPQUFaLENBQW9CQyxPQUFwQixDQUE0QixjQUE1QjtBQUNBLFNBQUtKLE1BQUwsQ0FBWUssa0JBQVosQ0FBK0IsS0FBL0I7QUFDQSxTQUFLTCxNQUFMLENBQVlNLFdBQVosQ0FBd0IsRUFBeEI7QUFDQSxTQUFLTixNQUFMLENBQVl2d0IsRUFBWixDQUFlLFFBQWYsRUFBeUIsTUFBTTtBQUMzQixVQUFJLENBQUNyb0Isd0RBQWMsQ0FBQyxXQUFELENBQW5CLEVBQWtDO0FBQ2xDLFdBQUt5NEMsT0FBTDtBQUNBLFdBQUtELFNBQUw7QUFDSCxLQUpEO0FBTUg7O0FBRUQxVCxzQkFBb0IsR0FBRztBQUNuQjM1Qiw2REFBRyxDQUFDNm1CLFdBQUosQ0FBZ0I3bUIseURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsWUFBVixDQUFoQixFQUF5QyxvQkFBekM7QUFDQW50Qix1REFBSSxDQUFDK3NDLGNBQUwsR0FBc0IsS0FBdEI7QUFDQSxTQUFLb04sTUFBTCxDQUFZTyxPQUFaO0FBQ0g7O0FBRURXLGlCQUFlLEdBQUc7QUFDZCxVQUFNQyxTQUFTLEdBQUcsS0FBSzFHLElBQUwsQ0FBVXVGLE1BQVYsQ0FBaUJ6M0MsS0FBakIsQ0FBdUJxUixLQUF2QixDQUE2QixJQUE3QixFQUFtQzFOLE1BQXJEO0FBQ0EsUUFBSWkxQyxTQUFTLElBQUksS0FBS3J0QyxLQUFMLENBQVcyckMsS0FBNUIsRUFBbUM7QUFDbkMsU0FBS2hGLElBQUwsQ0FBVWdGLEtBQVYsQ0FBZ0I5akIsV0FBaEIsR0FBOEJuaUIsS0FBSyxDQUFDa2IsSUFBTixDQUFXLElBQUlsYixLQUFKLENBQVUybkMsU0FBVixDQUFYLEVBQWlDLENBQUN6cEIsQ0FBRCxFQUFJdmQsQ0FBSixLQUFVQSxDQUFDLEdBQUcsQ0FBL0MsRUFBa0RHLElBQWxELENBQXVELEtBQXZELElBQWdFLEdBQTlGO0FBQ0EsU0FBS3hHLEtBQUwsQ0FBVzJyQyxLQUFYLEdBQW1CMEIsU0FBbkI7QUFDSDs7QUFFRCxNQUFJM3RDLE9BQUosR0FBYztBQUNWLFdBQU87QUFDSG90QyxpQkFBVyxFQUFFLElBRFY7QUFFSEMsVUFBSSxFQUFFLEtBRkg7QUFHSEMsZ0JBQVUsRUFBRSxDQUhUO0FBSUg3VCxXQUFLLEVBQUUsVUFKSjtBQUtIOFQsb0JBQWMsRUFBRTtBQUxiLEtBQVA7QUFPSDs7QUFFRCxNQUFJenVDLEdBQUosR0FBVTtBQUNOLFVBQU0wdUMsS0FBSyxHQUFHNzNDLDBEQUFTLENBQUM0TSxTQUFWLENBQW9CLGFBQXBCLENBQWQ7O0FBQ0EsUUFBSWtyQyxJQUFJLEdBQUcsRUFBWDs7QUFDQSxRQUFJRCxLQUFLLElBQUlBLEtBQUssS0FBSyxFQUF2QixFQUEyQjtBQUN2QkMsVUFBSSxHQUFHOTdCLElBQUksQ0FBQzY3QixLQUFELENBQVg7QUFDSDs7QUFDRCxXQUFPQyxJQUFQO0FBQ0g7O0FBRUQsTUFBSXhhLElBQUosR0FBVztBQUNQLFVBQU1DLEtBQUssR0FBR24wQix5REFBRyxDQUFDeWdCLEtBQUosQ0FBVSxnQ0FBVixDQUFkOztBQUNBLFFBQUksQ0FBQzBULEtBQUwsRUFBWTtBQUNSLFVBQUksQ0FBQyxLQUFLQyxVQUFMLEVBQUwsRUFBd0IsT0FBTyxJQUFQO0FBQ3hCLGFBQU8sS0FBSytaLFlBQVo7QUFDSDs7QUFDRCxXQUFPaGEsS0FBUDtBQUNIOztBQUVEQyxZQUFVLEdBQUc7QUFDVCxVQUFNdnBCLEdBQUcsR0FBRzdLLHlEQUFHLENBQUN5Z0IsS0FBSixDQUFVLFlBQVVobUIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNtUSxHQUFGLElBQVNuUSxDQUFDLENBQUM0NUIsTUFBOUIsRUFBc0MsQ0FBdEMsRUFBeUN6cEIsR0FBekMsQ0FBNkN4RCxLQUE3QyxDQUFtRCxHQUFuRCxFQUF3RCxDQUF4RCxDQUFwQixDQUFaO0FBQ0EsUUFBSSxDQUFDd0QsR0FBTCxFQUFVLE9BQU8sS0FBUDtBQUNWN0ssNkRBQUcsQ0FBQzJuQixXQUFKLENBQWdCM25CLHlEQUFHLENBQUN0TSxhQUFKLENBQW1CLDBDQUFuQixDQUFoQixFQUErRW1YLEdBQS9FO0FBQ0EsV0FBTyxJQUFQO0FBQ0g7O0FBRUR5USxRQUFNLEdBQUc7QUFDTCxVQUFNeE0sSUFBSSxHQUFHLElBQWI7QUFDQSxXQUFPeGIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDRSxlQUFTLEVBQUUsd0JBQVo7QUFBc0NVLFFBQUUsRUFBRTtBQUExQyxLQUZHLEVBR0hoQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNZLFFBQUUsRUFBRTtBQUFMLEtBRkosRUFHSWhCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDWSxRQUFFLEVBQUUsOEJBQUw7QUFBcUNWLGVBQVMsRUFBRSxRQUFoRDtBQUEwRHExQyxTQUFHLEVBQUU7QUFBL0QsS0FBaEMsRUFBMEduNkIsSUFBSSxDQUFDL08sR0FBL0csQ0FESixDQUhKLEVBTUl6TSxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNZLFFBQUUsRUFBRTtBQUFMLEtBRkosRUFHSWhCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxJQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJTixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCbzdDLGlEQUF6QixFQUFtQztBQUFDeDZDLFFBQUUsRUFBRSxhQUFMO0FBQW9CeUksVUFBSSxFQUFFLGFBQTFCO0FBQXlDc0csY0FBUSxFQUFFeUwsSUFBSSxDQUFDekwsUUFBeEQ7QUFBa0VvMEIsYUFBTyxFQUFFNWlDLHdEQUFjLENBQUMsV0FBRDtBQUF6RixLQUFuQyxDQUhKLENBSEosRUFRSXZCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ1ksUUFBRSxFQUFFO0FBQUwsS0FGSixFQUdJaEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLFFBREosRUFFSTtBQUFDb1csV0FBSyxFQUFFO0FBQUNpbEMsb0JBQVksRUFBRSxhQUFmO0FBQThCQyxtQkFBVyxFQUFFO0FBQTNDLE9BQVI7QUFBeUVwN0MsZUFBUyxFQUFFLGlCQUFwRjtBQUF1R0QsYUFBTyxFQUFFLE1BQU07QUFDOUdtYixZQUFJLENBQUNuYixPQUFMLENBQWEsUUFBYjtBQUNIO0FBRkwsS0FGSixFQUtJLFFBTEosQ0FISixFQVVJTCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQUNvVyxXQUFLLEVBQUU7QUFBQ2lsQyxvQkFBWSxFQUFFLEdBQWY7QUFBb0JFLGtCQUFVLEVBQUUsbUJBQWhDO0FBQXFERCxtQkFBVyxFQUFFO0FBQWxFLE9BQVI7QUFBZ0dwN0MsZUFBUyxFQUFFLGlCQUEzRztBQUE4SEQsYUFBTyxFQUFFLE1BQU07QUFDckltYixZQUFJLENBQUNuYixPQUFMLENBQWEsTUFBYjtBQUNIO0FBRkwsS0FGSixFQUtJLE1BTEosQ0FWSixFQWlCSUwsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLFFBREosRUFFSTtBQUFDb1csV0FBSyxFQUFFO0FBQUNpbEMsb0JBQVksRUFBRSxhQUFmO0FBQThCRSxrQkFBVSxFQUFFO0FBQTFDLE9BQVI7QUFBd0VyN0MsZUFBUyxFQUFFLGlCQUFuRjtBQUFzR0QsYUFBTyxFQUFFLE1BQU07QUFDN0dtYixZQUFJLENBQUNuYixPQUFMLENBQWEsUUFBYjtBQUNIO0FBRkwsS0FGSixFQUtJLFFBTEosQ0FqQkosRUF3QklMLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxNQURKLEVBRUk7QUFBQ29XLFdBQUssRUFBRTtBQUFDb2xDLGdCQUFRLEVBQUUsTUFBWDtBQUFtQkMsa0JBQVUsRUFBRTtBQUEvQjtBQUFSLEtBRkosRUFHSSxvQ0FISixDQXhCSixDQVJKLENBTkosQ0FIRyxDQUFQO0FBa0RIOztBQUVEOXJDLFVBQVEsQ0FBQy9PLEVBQUQsRUFBS21qQyxPQUFMLEVBQWM7QUFDbEIsWUFBUW5qQyxFQUFSO0FBQ0ksV0FBSyxhQUFMO0FBQ0lPLGdFQUFjLENBQUMsV0FBRCxDQUFkLEdBQThCNGlDLE9BQTlCO0FBQ0FNLHNFQUFRLENBQUNoakIsWUFBVDtBQUNBO0FBSlI7QUFNSDs7QUFFRHBoQixTQUFPLENBQUNXLEVBQUQsRUFBSztBQUNSLFVBQU13YSxJQUFJLEdBQUcsSUFBYjs7QUFDQSxZQUFReGEsRUFBUjtBQUNJLFdBQUssUUFBTDtBQUNJLFlBQUkwTCx5REFBRyxDQUFDeWdCLEtBQUosQ0FBVSxrQkFBVixDQUFKLEVBQW1DM1IsSUFBSSxDQUFDdk4sS0FBTCxDQUFXZ2YsTUFBWDtBQUNuQ2p0QiwyREFBSSxDQUFDK25CLFFBQUwsQ0FBY3FiLHNCQUFkLENBQXFDNW5CLElBQUksQ0FBQ29sQixJQUExQztBQUNBcGxCLFlBQUksQ0FBQ29sQixJQUFMLENBQVV0ckIsTUFBVjtBQUNBOztBQUNKLFdBQUssUUFBTDtBQUNJa0csWUFBSSxDQUFDdStCLFNBQUw7QUFDQTs7QUFDSixXQUFLLE1BQUw7QUFDSXYrQixZQUFJLENBQUN3K0IsT0FBTDtBQUNBO0FBWFI7QUFhSDs7QUFFREQsV0FBUyxHQUFHO0FBQ1JydEMsNkRBQUcsQ0FBQ0ksV0FBSixDQUFnQixXQUFoQjtBQUNBSiw2REFBRyxDQUFDQyxRQUFKLENBQWEsV0FBYixFQUEwQixLQUFLd3RDLE1BQUwsQ0FBWUcsT0FBWixDQUFvQnlCLFFBQXBCLEVBQTFCO0FBQ0g7O0FBRUQvQixTQUFPLEdBQUc7QUFDTjEyQyw4REFBUyxDQUFDNk0sU0FBVixDQUFvQixhQUFwQixFQUFtQzZyQyxJQUFJLENBQUMsS0FBSzdCLE1BQUwsQ0FBWUcsT0FBWixDQUFvQnlCLFFBQXBCLEVBQUQsQ0FBdkM7QUFDSDs7QUFuS2tFLEM7Ozs7Ozs7Ozs7OztBQ1J2RTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1JLGVBQU4sU0FBOEJuOEMsbURBQUksQ0FBQ3l1QyxjQUFuQyxDQUFrRDtBQUM3RDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDakIsVUFBTUEsS0FBTjtBQUNBLFNBQUsxRCxLQUFMLEdBQWE7QUFBQzZ4QyxjQUFRLEVBQUU7QUFBWCxLQUFiO0FBQ0Q7O0FBRURDLG1CQUFpQixHQUFHO0FBQ2xCLFNBQUs5SCxRQUFMLENBQWM7QUFBQzZILGNBQVEsRUFBRTtBQUFYLEtBQWQ7QUFDRDs7QUFFRHAwQixRQUFNLEdBQUc7QUFDUCxRQUFJLEtBQUt6ZCxLQUFMLENBQVc2eEMsUUFBZixFQUF5QixPQUFPcDhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFBNEQsaUJBQTVELENBQVA7QUFDekIsV0FBTyxLQUFLMk4sS0FBTCxDQUFXa0gsUUFBbEI7QUFDRDs7QUFiNEQ7QUFnQmpFLE1BQU1teEIsY0FBYyxHQUFHNlYsZUFBZSxDQUFDNTNDLFNBQWhCLENBQTBCeWpCLE1BQWpEO0FBQ0FqbUIsTUFBTSxDQUFDWSxjQUFQLENBQXNCdzVDLGVBQWUsQ0FBQzUzQyxTQUF0QyxFQUFpRCxRQUFqRCxFQUEyRDtBQUN2RGdpQyxZQUFVLEVBQUUsS0FEMkM7QUFFdkRwaEMsY0FBWSxFQUFFLEtBRnlDO0FBR3ZEK0YsS0FBRyxFQUFFLFlBQVc7QUFBQ0YsV0FBTyxDQUFDbEksSUFBUixDQUFhLHFHQUFiO0FBQXFILEdBSC9FO0FBSXZERixLQUFHLEVBQUUsTUFBTTBqQztBQUo0QyxDQUEzRCxFOzs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFFQSxNQUFNbm1DLEtBQUssR0FBR0gsbURBQUksQ0FBQ0csS0FBbkI7QUFFZSxNQUFNbThDLE1BQU4sU0FBcUJuOEMsS0FBSyxDQUFDZ21DLFNBQTNCLENBQXFDO0FBQ2hEbmUsUUFBTSxHQUFHO0FBQ0wsVUFBTXpuQixJQUFJLEdBQUcsS0FBSzBOLEtBQUwsQ0FBVzFOLElBQVgsSUFBbUIsTUFBaEM7QUFDQSxXQUFPO0FBQUssZUFBUyxFQUFFLEtBQUswTixLQUFMLENBQVczTixTQUFYLElBQXdCLEVBQXhDO0FBQTRDLFVBQUksRUFBQyxTQUFqRDtBQUEyRCxhQUFPLEVBQUMsV0FBbkU7QUFBK0UsV0FBSyxFQUFFO0FBQUNvbkIsYUFBSyxFQUFFbm5CLElBQVI7QUFBY3MxQixjQUFNLEVBQUV0MUI7QUFBdEIsT0FBdEY7QUFBbUgsYUFBTyxFQUFFLEtBQUswTixLQUFMLENBQVc1TjtBQUF2SSxPQUNLO0FBQU0sVUFBSSxFQUFDLE1BQVg7QUFBa0IsT0FBQyxFQUFDO0FBQXBCLE1BREwsRUFDNEM7QUFBTSxPQUFDLEVBQUM7QUFBUixNQUQ1QyxFQUVLO0FBQU0sVUFBSSxFQUFDLE1BQVg7QUFBa0IsT0FBQyxFQUFDO0FBQXBCLE1BRkwsQ0FBUDtBQUlIOztBQVArQyxDOzs7Ozs7Ozs7Ozs7QUNKcEQ7QUFBQTtBQUFBO0FBQUE7QUFFQSxNQUFNRixLQUFLLEdBQUdILG1EQUFJLENBQUNHLEtBQW5CO0FBRWUsTUFBTW84QyxTQUFOLFNBQXdCcDhDLEtBQUssQ0FBQ2dtQyxTQUE5QixDQUF3QztBQUNuRG5lLFFBQU0sR0FBRztBQUNMLFVBQU16bkIsSUFBSSxHQUFHLEtBQUswTixLQUFMLENBQVcxTixJQUFYLElBQW1CLE1BQWhDO0FBQ0EsV0FBTztBQUFLLGVBQVMsRUFBRSxLQUFLME4sS0FBTCxDQUFXM04sU0FBWCxJQUF3QixFQUF4QztBQUE0QyxVQUFJLEVBQUMsU0FBakQ7QUFBMkQsYUFBTyxFQUFDLFdBQW5FO0FBQStFLFdBQUssRUFBRTtBQUFDb25CLGFBQUssRUFBRW5uQixJQUFSO0FBQWNzMUIsY0FBTSxFQUFFdDFCO0FBQXRCO0FBQXRGLE9BQ0s7QUFBTSxPQUFDLEVBQUM7QUFBUixNQURMLENBQVA7QUFHSDs7QUFOa0QsQzs7Ozs7Ozs7Ozs7O0FDSnZEO0FBQUE7QUFBQTtBQUFBO0FBRUEsTUFBTUosS0FBSyxHQUFHSCxtREFBSSxDQUFDRyxLQUFuQjtBQUVlLE1BQU1xOEMsSUFBTixTQUFtQnI4QyxLQUFLLENBQUNnbUMsU0FBekIsQ0FBbUM7QUFDOUNuZSxRQUFNLEdBQUc7QUFDTCxVQUFNem5CLElBQUksR0FBRyxLQUFLME4sS0FBTCxDQUFXMU4sSUFBWCxJQUFtQixNQUFoQztBQUNBLFdBQU87QUFBSyxlQUFTLEVBQUUsS0FBSzBOLEtBQUwsQ0FBVzNOLFNBQVgsSUFBd0IsRUFBeEM7QUFBNEMsYUFBTyxFQUFDLFdBQXBEO0FBQWdFLFVBQUksRUFBQyxTQUFyRTtBQUErRSxXQUFLLEVBQUU7QUFBQ29uQixhQUFLLEVBQUVubkIsSUFBUjtBQUFjczFCLGNBQU0sRUFBRXQxQjtBQUF0QixPQUF0RjtBQUFtSCxhQUFPLEVBQUUsS0FBSzBOLEtBQUwsQ0FBVzVOO0FBQXZJLE9BQ0M7QUFBTSxPQUFDLEVBQUM7QUFBUixNQURELEVBRUM7QUFBTSxPQUFDLEVBQUMsZUFBUjtBQUF3QixVQUFJLEVBQUM7QUFBN0IsTUFGRCxDQUFQO0FBSUg7O0FBUDZDLEM7Ozs7Ozs7Ozs7OztBQ0psRDtBQUFBO0FBQUE7QUFBQTtBQUFDOzs7O0FBR1M7QUFFVjtBQUVBLE1BQU1GLEtBQUssR0FBR0gsbURBQUksQ0FBQ0csS0FBbkI7QUFFZSxNQUFNeW1DLE9BQU4sU0FBc0J6bUMsS0FBSyxDQUFDZ21DLFNBQTVCLENBQXNDO0FBQ2pEbmUsUUFBTSxHQUFHO0FBQ0wsVUFBTXpuQixJQUFJLEdBQUcsS0FBSzBOLEtBQUwsQ0FBVzFOLElBQVgsSUFBbUIsTUFBaEM7QUFDQSxXQUFPO0FBQUssYUFBTyxFQUFDLFdBQWI7QUFBeUIsVUFBSSxFQUFDLFNBQTlCO0FBQXdDLGVBQVMsRUFBRSxLQUFLME4sS0FBTCxDQUFXM04sU0FBWCxJQUF3QixFQUEzRTtBQUErRSxXQUFLLEVBQUU7QUFBQ29uQixhQUFLLEVBQUVubkIsSUFBUjtBQUFjczFCLGNBQU0sRUFBRXQxQjtBQUF0QixPQUF0RjtBQUFtSCxhQUFPLEVBQUUsS0FBSzBOLEtBQUwsQ0FBVzVOO0FBQXZJLE9BQ0M7QUFBTSxPQUFDLEVBQUMsZUFBUjtBQUF3QixVQUFJLEVBQUM7QUFBN0IsTUFERCxFQUVDO0FBQU0sT0FBQyxFQUFDO0FBQVIsTUFGRCxDQUFQO0FBSUg7O0FBUGdELEM7Ozs7Ozs7Ozs7OztBQ1RyRDtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU1GLEtBQUssR0FBR0gsbURBQUksQ0FBQ0csS0FBbkI7QUFFZSxNQUFNazVDLE1BQU4sU0FBcUJsNUMsS0FBSyxDQUFDZ21DLFNBQTNCLENBQXFDO0FBQ2hEbmUsUUFBTSxHQUFHO0FBQ0wsVUFBTXpuQixJQUFJLEdBQUcsS0FBSzBOLEtBQUwsQ0FBVzFOLElBQVgsSUFBbUIsTUFBaEM7QUFDQSxXQUFPO0FBQUssZUFBUyxFQUFFLEtBQUswTixLQUFMLENBQVczTixTQUFYLElBQXdCLEVBQXhDO0FBQTRDLFVBQUksRUFBQyxTQUFqRDtBQUEyRCxhQUFPLEVBQUMsV0FBbkU7QUFBK0UsV0FBSyxFQUFFO0FBQUNvbkIsYUFBSyxFQUFFbm5CLElBQVI7QUFBY3MxQixjQUFNLEVBQUV0MUI7QUFBdEI7QUFBdEYsT0FDSztBQUFNLFVBQUksRUFBQyxNQUFYO0FBQWtCLE9BQUMsRUFBQztBQUFwQixNQURMLEVBRUs7QUFBTSxPQUFDLEVBQUM7QUFBUixNQUZMLENBQVA7QUFJSDs7QUFQK0MsQzs7Ozs7Ozs7Ozs7O0FDSnBEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0EsTUFBTUosS0FBSyxHQUFHSCxtREFBSSxDQUFDRyxLQUFuQjtBQUVlLE1BQU0wbEMsb0JBQU4sU0FBbUMxbEMsS0FBSyxDQUFDZ21DLFNBQXpDLENBQW1EO0FBQzlEdmlDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFFQSxTQUFLMUQsS0FBTCxHQUFhO0FBQ1R0RSxVQUFJLEVBQUV3MkMsMERBQVMsQ0FBQ2o3QixlQUFWLENBQTBCLEtBQTFCLEtBQW9DL2Ysb0RBRGpDO0FBRVRpSixZQUFNLEVBQUU7QUFGQyxLQUFiO0FBS0EsU0FBS2d5QyxPQUFMLEdBQWUsSUFBZjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBbEI7O0FBQ0EsUUFBRyxLQUFLcHlDLEtBQUwsQ0FBV3RFLElBQVgsQ0FBZ0JvRSxjQUFuQixFQUFrQztBQUM5QixXQUFLYyxXQUFMO0FBQ0g7QUFDSjtBQUVEOzs7Ozs7QUFJQTRFLFVBQVEsQ0FBQzRSLE9BQUQsRUFBVWpmLEtBQVYsRUFBZ0I7QUFDcEIsUUFBSWs2QyxjQUFjLEdBQUdDLFFBQVEsQ0FBQ3g5QyxJQUFULENBQWMrSCxDQUFDLElBQUlBLENBQUMsQ0FBQ3BHLEVBQUYsS0FBUzJnQixPQUFPLENBQUMxVCxLQUFSLENBQWNqTixFQUExQyxDQUFyQjtBQUVBLFNBQUt1ekMsUUFBTCxDQUFjO0FBQ1Z0dUMsVUFBSSxFQUFFbEUsTUFBTSxDQUFDMFUsTUFBUCxDQUFjalYscURBQWQsRUFBMkIsS0FBSytJLEtBQUwsQ0FBV3RFLElBQXRDLEVBQTRDO0FBQzlDLFNBQUMyMkMsY0FBYyxDQUFDNTdDLEVBQWhCLEdBQXFCLENBQUMsQ0FBQzBCLEtBQUYsR0FBVUEsS0FBVixHQUFrQjtBQURPLE9BQTVDLENBREk7QUFJVmdJLFlBQU0sRUFBRSxLQUFLSCxLQUFMLENBQVdHO0FBSlQsS0FBZDs7QUFNQSxRQUFHaVgsT0FBTyxDQUFDMVQsS0FBUixDQUFjak4sRUFBZCxLQUFxQixnQkFBeEIsRUFBeUM7QUFDckMsV0FBS21LLFdBQUw7QUFDSDs7QUFFRHN4Qyw4REFBUyxDQUFDeHdCLGVBQVYsQ0FBMEIsS0FBMUIsRUFBaUN6cUIscURBQWpDO0FBQ0EsU0FBS2s3QyxPQUFMLENBQWF2RSxXQUFiO0FBQ0FqdUMsdUVBQWtCLENBQUNnQixHQUFuQixDQUF1QjFKLHFEQUF2QjtBQUNIOztBQUVEMkosYUFBVyxHQUFFO0FBQ1QsUUFBRyxLQUFLd3hDLFVBQUwsS0FBb0IsSUFBdkIsRUFBNEI7QUFDeEIsVUFBSXBsQyxHQUFHLEdBQUcsS0FBS2hOLEtBQUwsQ0FBV3RFLElBQVgsQ0FBZ0JvRSxjQUExQjtBQUNBOE8sZ0JBQVUsQ0FBQyxNQUFNO0FBQ2IsWUFBRyxLQUFLNU8sS0FBTCxDQUFXdEUsSUFBWCxDQUFnQm9FLGNBQWhCLEtBQW1Da04sR0FBdEMsRUFBMEM7QUFDdEM7QUFDSDs7QUFDRCxhQUFLcE0sV0FBTDtBQUNILE9BTFMsRUFLUCxJQUxPLENBQVY7QUFNSDs7QUFDRCxRQUFHLENBQUMsS0FBS1osS0FBTCxDQUFXdEUsSUFBWCxDQUFnQm9FLGNBQXBCLEVBQW1DO0FBQy9CLFdBQUtrcUMsUUFBTCxDQUFjO0FBQ1Z0dUMsWUFBSSxFQUFFLEtBQUtzRSxLQUFMLENBQVd0RSxJQURQO0FBRVZ5RSxjQUFNLEVBQUU7QUFGRSxPQUFkO0FBSUE7QUFDSDs7QUFDRCxTQUFLaXlDLFVBQUwsR0FBa0IsSUFBbEI7QUFDQXp5Qyx1RUFBa0IsQ0FBQ2lCLFdBQW5CLENBQStCLEtBQUtaLEtBQUwsQ0FBV3RFLElBQVgsQ0FBZ0JvRSxjQUEvQyxFQUNDa2QsSUFERCxDQUNNN2MsTUFBTSxJQUFJO0FBQ1osV0FBS2l5QyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsV0FBS3BJLFFBQUwsQ0FBYztBQUNWdHVDLFlBQUksRUFBRSxLQUFLc0UsS0FBTCxDQUFXdEUsSUFEUDtBQUVWeUUsY0FBTSxFQUFFM0ksTUFBTSxDQUFDaUIsSUFBUCxDQUFZMEgsTUFBWixFQUFvQm5CLEdBQXBCLENBQXdCdUgsQ0FBQyxJQUFJO0FBQ2pDLGNBQUlnc0MsS0FBSyxHQUFHcHlDLE1BQU0sQ0FBQ29HLENBQUQsQ0FBbEI7QUFDQSxpQkFBTztBQUNIOVAsY0FBRSxFQUFFODdDLEtBQUssQ0FBQzk3QyxFQURQO0FBRUgySSxnQkFBSSxFQUFFbXpDLEtBQUssQ0FBQ256QyxJQUZUO0FBR0g3SSxnQkFBSSxFQUFFZzhDLEtBQUssQ0FBQ2g4QztBQUhULFdBQVA7QUFLSCxTQVBPO0FBRkUsT0FBZDtBQVdBLFdBQUtxM0MsV0FBTDtBQUNILEtBZkQsRUFlRzduQixLQWZILENBZVMsTUFBTTtBQUNYLFdBQUtxc0IsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFdBQUtwSSxRQUFMLENBQWM7QUFDVnR1QyxZQUFJLEVBQUUsS0FBS3NFLEtBQUwsQ0FBV3RFLElBRFA7QUFFVnlFLGNBQU0sRUFBRTtBQUZFLE9BQWQ7QUFJQSxXQUFLeXRDLFdBQUw7QUFDSCxLQXRCRDtBQXVCSDs7QUFFRDRFLGVBQWEsQ0FBQzkyQyxJQUFELEVBQU07QUFDZixTQUFLc3VDLFFBQUwsQ0FBYztBQUNWdHVDO0FBRFUsS0FBZDtBQUdIOztBQUVEK2hCLFFBQU0sR0FBRztBQUNMLFFBQUl3b0IsYUFBYSxHQUFHcnBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDaytCLGFBQXJCLEVBQW9DLENBQXBDLENBQXBCO0FBQ0EsV0FBUTtBQUFLLGVBQVMsRUFBRWtMLGFBQWEsQ0FBQ2xMLGFBQWQsR0FBNEIsR0FBNUIsR0FBZ0NrTCxhQUFhLENBQUNZLG9CQUE5QyxHQUFtRSx5QkFBbkY7QUFDSixXQUFLLEVBQUU7QUFBQ0MsZUFBTyxFQUFFO0FBQVY7QUFESCxPQUVBLG9CQUFDLHNEQUFEO0FBQW1CLFdBQUssRUFBQyx1QkFBekI7QUFBaUQsY0FBUSxFQUFFLEtBQUtwakMsS0FBTCxDQUFXbE4sUUFBdEU7QUFBZ0YsY0FBUSxFQUFFLEtBQUtrTixLQUFMLENBQVc4QjtBQUFyRyxNQUZBLEVBR0Esb0JBQUMsc0RBQUQ7QUFBbUIsVUFBSSxFQUFDO0FBQXhCLE1BSEEsRUFJQSxpQ0FFSzhzQyxRQUFRLENBQUN0ekMsR0FBVCxDQUFhbkMsQ0FBQyxJQUFJO0FBQ2YsVUFBR0EsQ0FBQyxDQUFDdEcsSUFBRixLQUFXLE1BQWQsRUFBcUI7QUFDakIsZUFBTyxvQkFBQyxTQUFEO0FBQVcsaUJBQU8sRUFBRXNHLENBQXBCO0FBQXVCLGlCQUFPLEVBQUUsSUFBaEM7QUFBc0MsWUFBRSxFQUFFQSxDQUFDLENBQUNwRztBQUE1QyxVQUFQO0FBQ0gsT0FGRCxNQUVNLElBQUdvRyxDQUFDLENBQUN0RyxJQUFGLEtBQVcsUUFBZCxFQUF1QjtBQUN6QixZQUFJazhDLEtBQUssR0FBRyxDQUFDLG9CQUFDLFdBQUQ7QUFBYSxpQkFBTyxFQUFFNTFDLENBQXRCO0FBQXlCLGlCQUFPLEVBQUUsSUFBbEM7QUFBd0MsWUFBRSxFQUFFQSxDQUFDLENBQUNwRztBQUE5QyxVQUFELENBQVo7QUFBaUU7Ozs7Ozs7QUFNakUsZUFBT2c4QyxLQUFQO0FBQ0gsT0FSSyxNQVFBLElBQUc1MUMsQ0FBQyxDQUFDdEcsSUFBRixLQUFXLFFBQWQsRUFBdUI7QUFDekIsWUFBRyxDQUFDLGNBQUQsRUFBaUIsY0FBakIsRUFBaUM0RSxRQUFqQyxDQUEwQzBCLENBQUMsQ0FBQ3BHLEVBQTVDLENBQUgsRUFBbUQ7QUFDL0MsaUJBQU8sb0JBQUMsV0FBRDtBQUFhLG1CQUFPLEVBQUVvRyxDQUF0QjtBQUF5QixtQkFBTyxFQUFFLElBQWxDO0FBQXdDLGNBQUUsRUFBRUEsQ0FBQyxDQUFDcEcsRUFBOUM7QUFBa0QsbUJBQU8sRUFBRSxDQUFDO0FBQUMwQixtQkFBSyxFQUFFLE1BQVI7QUFBZ0J5ckIsbUJBQUssRUFBRTtBQUF2QixhQUFELEVBQXNDeVAsTUFBdEMsQ0FBNkMsS0FBS3J6QixLQUFMLENBQVdHLE1BQVgsQ0FBa0JuQixHQUFsQixDQUFzQm5DLENBQUMsSUFBSTtBQUN0SSxxQkFBTztBQUNIMUUscUJBQUssRUFBRSxXQUFTMEUsQ0FBQyxDQUFDcEcsRUFEZjtBQUVIbXRCLHFCQUFLLEVBQUUvbUIsQ0FBQyxDQUFDdUM7QUFGTixlQUFQO0FBSUgsYUFMOEcsQ0FBN0M7QUFBM0QsWUFBUDtBQU1ILFNBUEQsTUFPSztBQUNELGlCQUFPLGlCQUFQO0FBQ0g7QUFDSjtBQUNKLEtBdkJBLENBRkwsQ0FKQSxFQStCQSxpQ0FDSSxvQkFBQyxzREFBRDtBQUFtQixVQUFJLEVBQUM7QUFBeEIsTUFESixFQUdJLG9CQUFDLFVBQUQ7QUFBWSxjQUFRLEVBQUU7QUFBdEIsTUFISixDQS9CQSxFQW9DQTtBQUFLLGVBQVMsRUFBRXhDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDdXFDLGNBQXJCLEVBQXFDLENBQXJDLEVBQXdDQTtBQUF4RCxNQXBDQSxFQXFDQTtBQUFRLFdBQUssRUFBRTtBQUFDOEcsZUFBTyxFQUFFO0FBQVYsT0FBZjtBQUFnQyxhQUFPLEVBQUUzNkMsTUFBTSxDQUFDbS9DO0FBQWhELHdCQXJDQSxFQXdDQTtBQUFRLFdBQUssRUFBRTtBQUFDeEUsZUFBTyxFQUFFO0FBQVYsT0FBZjtBQUFnQyxhQUFPLEVBQUUsTUFBTTtBQUMzQzk1Qyx1REFBTSxDQUFDNC9CLEtBQVAsQ0FBYUMsWUFBYixDQUEwQiw2Q0FBMUIsRUFBeUU7QUFDckUwZSxrQkFBUSxFQUFFO0FBRDJELFNBQXpFO0FBR0g7QUFKRCw2Q0F4Q0EsQ0FBUjtBQWdESDs7QUF6STZEO0FBMklsRSxNQUFNTCxRQUFRLEdBQUcsQ0FDYjtBQUNJdCtDLE9BQUssRUFBRSxnQkFEWDtBQUVJeUMsSUFBRSxFQUFFLGdCQUZSO0FBR0lGLE1BQUksRUFBRTtBQUhWLENBRGEsRUFNYjtBQUNJdkMsT0FBSyxFQUFFLE1BRFg7QUFFSXlDLElBQUUsRUFBRSxNQUZSO0FBR0lGLE1BQUksRUFBRTtBQUhWLENBTmEsRUFXYjtBQUNJdkMsT0FBSyxFQUFFLFNBRFg7QUFFSXlDLElBQUUsRUFBRSxTQUZSO0FBR0lGLE1BQUksRUFBRTtBQUhWLENBWGEsRUFnQmI7QUFDSXZDLE9BQUssRUFBRSxPQURYO0FBRUl5QyxJQUFFLEVBQUUsT0FGUjtBQUdJRixNQUFJLEVBQUU7QUFIVixDQWhCYSxFQXFCYjtBQUNJdkMsT0FBSyxFQUFFLGlCQURYO0FBRUl5QyxJQUFFLEVBQUUsa0JBRlI7QUFHSUYsTUFBSSxFQUFFO0FBSFYsQ0FyQmEsRUEwQmI7QUFDSXZDLE9BQUssRUFBRSxZQURYO0FBRUl5QyxJQUFFLEVBQUUsY0FGUjtBQUdJRixNQUFJLEVBQUU7QUFIVixDQTFCYSxFQStCYjtBQUNJdkMsT0FBSyxFQUFFLFlBRFg7QUFFSXlDLElBQUUsRUFBRSxjQUZSO0FBR0lGLE1BQUksRUFBRTtBQUhWLENBL0JhLENBQWpCOztBQXNDQSxNQUFNcThDLFNBQU4sU0FBd0JoOUMsS0FBSyxDQUFDZ21DLFNBQTlCLENBQXdDO0FBQ3BDbmUsUUFBTSxHQUFFO0FBQ0osUUFBSXJHLE9BQU8sR0FBRyxLQUFLMVQsS0FBTCxDQUFXMFQsT0FBekI7QUFFQSxRQUFJeTdCLFNBQVMsR0FBR2oyQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2kyQyxhQUFyQixFQUFvQyxDQUFwQyxDQUFoQjtBQUNBLFFBQUlDLFlBQVksR0FBR24yQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3VxQyxjQUFyQixFQUFxQyxDQUFyQyxDQUFuQjtBQUNBLFFBQUlsQixhQUFhLEdBQUd0cEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNzcEMsZUFBckIsRUFBc0MsQ0FBdEMsQ0FBcEI7QUFDQSxRQUFJQyxXQUFXLEdBQUd4cEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN3cEMsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBbEI7QUFDQSxRQUFJQyxVQUFVLEdBQUcxcEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0YyxNQUFyQixFQUE2QixDQUE3QixDQUFqQjtBQUNBLFFBQUl1NUIsVUFBVSxHQUFHcDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbzJDLFdBQXJCLEVBQWtDLENBQWxDLENBQWpCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHdDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDczJDLFNBQXJCLEVBQWdDLENBQWhDLENBQWxCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHeDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDdzJDLE1BQUYsSUFBWXgyQyxDQUFDLENBQUN5MkMsTUFBakMsRUFBeUMsQ0FBekMsQ0FBbEI7QUFFQSxXQUFRO0FBQUssZUFBUyxFQUFFVCxTQUFTLENBQUNVLEdBQVYsR0FBYyxHQUFkLEdBQWtCUixZQUFZLENBQUMzTDtBQUEvQyxPQUNKO0FBQUssZUFBUyxFQUFHLEdBQUV5TCxTQUFTLENBQUNudkIsSUFBSyxJQUFHc3ZCLFVBQVUsQ0FBQ1EsU0FBVTtBQUExRCxPQUNJO0FBQUksZUFBUyxFQUFFcE4sV0FBVyxDQUFDQyxhQUFaLEdBQTBCLEdBQTFCLEdBQThCQyxVQUFVLENBQUNTLE1BQXpDLEdBQWdELEdBQWhELEdBQW9EYixhQUFhLENBQUNjLEVBQWxFLEdBQXFFLEdBQXJFLEdBQXlFZCxhQUFhLENBQUNDO0FBQXRHLE9BQ0svdUIsT0FBTyxDQUFDcGpCLEtBRGIsQ0FESixFQUlJO0FBQUssZUFBUyxFQUFFay9DLFdBQVcsQ0FBQ087QUFBNUIsT0FDSTtBQUFPLFdBQUssRUFBRyxHQUFFUCxXQUFXLENBQUNRLFlBQWEsSUFBR04sV0FBVyxDQUFDQyxNQUFPLEVBQWhFO0FBQW1FLFVBQUksRUFBQyxPQUF4RTtBQUFnRixVQUFJLEVBQUMsTUFBckY7QUFBNEYsaUJBQVcsRUFBQyxFQUF4RztBQUEyRyxlQUFTLEVBQUMsS0FBckg7QUFBMkgsV0FBSyxFQUFFLEtBQUszdkMsS0FBTCxDQUFXc0MsT0FBWCxDQUFtQmhHLEtBQW5CLENBQXlCdEUsSUFBekIsQ0FBOEIwYixPQUFPLENBQUMzZ0IsRUFBdEMsQ0FBbEk7QUFBNkssY0FBUSxFQUFHc0gsRUFBRCxJQUFRO0FBQzNMLGFBQUsyRixLQUFMLENBQVdzQyxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQ3pILEVBQUUsQ0FBQ21iLE1BQUgsQ0FBVS9nQixLQUE1QztBQUNIO0FBRkQsTUFESixDQUpKLENBREksRUFXSjtBQUFLLFdBQUssRUFBRyxHQUFFeUUsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM4MkMsT0FBRixJQUFhbjhDLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWW9FLENBQVosRUFBZWYsTUFBZixLQUEwQixDQUExRCxFQUE2RCxDQUE3RCxFQUFnRTYzQyxPQUFRLElBQUcvMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMrMkMsY0FBckIsRUFBcUMsQ0FBckMsRUFBd0NBLGNBQWU7QUFBakosTUFYSSxDQUFSO0FBYUg7O0FBMUJtQzs7QUE2QnhDLE1BQU1DLFdBQU4sU0FBMEJqK0MsS0FBSyxDQUFDZ21DLFNBQWhDLENBQTBDO0FBQ3RDbmUsUUFBTSxHQUFFO0FBQ0osUUFBSXJHLE9BQU8sR0FBRyxLQUFLMVQsS0FBTCxDQUFXMFQsT0FBekI7QUFFQSxRQUFJeTdCLFNBQVMsR0FBR2oyQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2kyQyxhQUFyQixFQUFvQyxDQUFwQyxDQUFoQjtBQUNBLFFBQUlDLFlBQVksR0FBR24yQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3VxQyxjQUFyQixFQUFxQyxDQUFyQyxDQUFuQjtBQUNBLFFBQUlsQixhQUFhLEdBQUd0cEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNzcEMsZUFBckIsRUFBc0MsQ0FBdEMsQ0FBcEI7QUFDQSxRQUFJQyxXQUFXLEdBQUd4cEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN3cEMsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBbEI7QUFDQSxRQUFJQyxVQUFVLEdBQUcxcEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0YyxNQUFyQixFQUE2QixDQUE3QixDQUFqQjtBQUNBLFFBQUl1NUIsVUFBVSxHQUFHcDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbzJDLFdBQXJCLEVBQWtDLENBQWxDLENBQWpCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHdDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDczJDLFNBQXJCLEVBQWdDLENBQWhDLENBQWxCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHeDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDdzJDLE1BQUYsSUFBWXgyQyxDQUFDLENBQUN5MkMsTUFBakMsRUFBeUMsQ0FBekMsQ0FBbEI7QUFDQSxRQUFJUSxVQUFVLEdBQUdsM0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrM0MsZ0JBQXJCLEVBQXVDLENBQXZDLENBQWpCO0FBR0EsV0FBUTtBQUFLLGVBQVMsRUFBRWxCLFNBQVMsQ0FBQ1UsR0FBVixHQUFjLEdBQWQsR0FBa0JSLFlBQVksQ0FBQzNMO0FBQS9DLE9BQ0o7QUFBSyxlQUFTLEVBQUcsR0FBRXlMLFNBQVMsQ0FBQ252QixJQUFLLElBQUdzdkIsVUFBVSxDQUFDUSxTQUFVO0FBQTFELE9BQ0k7QUFBSSxlQUFTLEVBQUVwTixXQUFXLENBQUNDLGFBQVosR0FBMEIsR0FBMUIsR0FBOEJDLFVBQVUsQ0FBQ1MsTUFBekMsR0FBZ0QsR0FBaEQsR0FBb0RiLGFBQWEsQ0FBQ2MsRUFBbEUsR0FBcUUsR0FBckUsR0FBeUVkLGFBQWEsQ0FBQ0M7QUFBdEcsT0FDSy91QixPQUFPLENBQUNwakIsS0FEYixDQURKLEVBSUk7QUFBSyxlQUFTLEVBQUVrL0MsV0FBVyxDQUFDTztBQUE1QixPQUNJO0FBQU8sV0FBSyxFQUFHLEdBQUVQLFdBQVcsQ0FBQ1EsWUFBYSxJQUFHTixXQUFXLENBQUNDLE1BQU8sRUFBaEU7QUFBbUUsVUFBSSxFQUFDLE9BQXhFO0FBQWdGLFVBQUksRUFBQyxNQUFyRjtBQUE0RixpQkFBVyxFQUFDLEVBQXhHO0FBQTJHLGVBQVMsRUFBQyxLQUFySDtBQUEySCxXQUFLLEVBQUUsS0FBSzN2QyxLQUFMLENBQVdzQyxPQUFYLENBQW1CaEcsS0FBbkIsQ0FBeUJ0RSxJQUF6QixDQUE4QjBiLE9BQU8sQ0FBQzNnQixFQUF0QyxDQUFsSTtBQUE2SyxjQUFRLEVBQUdzSCxFQUFELElBQVE7QUFDM0wsWUFBSWkyQyxRQUFRLEdBQUdqMkMsRUFBRSxDQUFDbWIsTUFBSCxDQUFVL2dCLEtBQVYsQ0FBZ0I0RCxPQUFoQixDQUF3QixTQUF4QixFQUFtQyxFQUFuQyxDQUFmOztBQUNBLFlBQUdpNEMsUUFBUSxLQUFLajJDLEVBQUUsQ0FBQ21iLE1BQUgsQ0FBVS9nQixLQUExQixFQUFnQztBQUM1QjRGLFlBQUUsQ0FBQ21iLE1BQUgsQ0FBVS9nQixLQUFWLEdBQWtCNjdDLFFBQWxCO0FBQ0g7O0FBQ0QsYUFBS3R3QyxLQUFMLENBQVdzQyxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQ3d1QyxRQUFsQztBQUNIO0FBTkQsTUFESixDQUpKLEVBYUs1OEIsT0FBTyxDQUFDM2dCLEVBQVIsS0FBZSxrQkFBZixHQUNEO0FBQUssZUFBUyxFQUFFbUcsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNvM0MsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBO0FBQXZELE9BQ0k7QUFBUSxVQUFJLEVBQUMsUUFBYjtBQUFzQixXQUFLLEVBQUcsR0FBRWpCLFVBQVUsQ0FBQ1EsU0FBVSxJQUFHTSxVQUFVLENBQUNwZCxNQUFPLElBQUdvZCxVQUFVLENBQUNJLFVBQVcsSUFBR0osVUFBVSxDQUFDSyxVQUFXLElBQUdMLFVBQVUsQ0FBQ00sU0FBVSxJQUFHTixVQUFVLENBQUN0UyxJQUFLLEVBQXZLO0FBQTBLLFdBQUssRUFBRTtBQUFDNlMsWUFBSSxFQUFFO0FBQVAsT0FBakw7QUFBcU0sYUFBTyxFQUFFLE1BQU07QUFDaE43Z0QscUJBQWEsQ0FBQzhnRCxTQUFkLENBQXdCeHdCLElBQXhCLENBQTZCM3NCLElBQUksQ0FBQ0MsR0FBTCxLQUFXLEVBQXhDO0FBQ0g7QUFGRCxPQUdDO0FBQUssV0FBSyxFQUFFMDhDLFVBQVUsQ0FBQ1M7QUFBdkIsZ0NBSEQsQ0FESixDQURDLEdBT1EsSUFwQmIsQ0FESSxFQXVCSjtBQUFLLFdBQUssRUFBRyxHQUFFMzNDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDODJDLE9BQUYsSUFBYW44QyxNQUFNLENBQUNpQixJQUFQLENBQVlvRSxDQUFaLEVBQWVmLE1BQWYsS0FBMEIsQ0FBMUQsRUFBNkQsQ0FBN0QsRUFBZ0U2M0MsT0FBUSxJQUFHLzJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDKzJDLGNBQXJCLEVBQXFDLENBQXJDLEVBQXdDQSxjQUFlO0FBQWpKLE1BdkJJLENBQVI7QUF5Qkg7O0FBeENxQzs7QUEyQzFDLE1BQU1ZLFdBQU4sU0FBMEI1K0MsS0FBSyxDQUFDZ21DLFNBQWhDLENBQTBDO0FBQ3RDcDJCLFVBQVEsQ0FBQzlKLElBQUQsRUFBTTtBQUNWLFNBQUtnSSxLQUFMLENBQVdzQyxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQzlKLElBQUksQ0FBQ3ZELEtBQUwsS0FBZSxNQUFmLEdBQXdCLElBQXhCLEdBQStCdUQsSUFBSSxDQUFDdkQsS0FBTCxDQUFXNEQsT0FBWCxDQUFtQixRQUFuQixFQUE2QixFQUE3QixDQUFqRTtBQUNIOztBQUVEMGhCLFFBQU0sR0FBRTtBQUNKLFFBQUlyRyxPQUFPLEdBQUcsS0FBSzFULEtBQUwsQ0FBVzBULE9BQXpCO0FBRUEsUUFBSXk3QixTQUFTLEdBQUdqMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNpMkMsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBaEI7QUFDQSxRQUFJQyxZQUFZLEdBQUduMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN1cUMsY0FBckIsRUFBcUMsQ0FBckMsQ0FBbkI7QUFDQSxRQUFJbEIsYUFBYSxHQUFHdHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDc3BDLGVBQXJCLEVBQXNDLENBQXRDLENBQXBCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHeHBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd3BDLGFBQXJCLEVBQW9DLENBQXBDLENBQWxCO0FBQ0EsUUFBSUMsVUFBVSxHQUFHMXBDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNGMsTUFBckIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSxRQUFJdTVCLFVBQVUsR0FBR3AyQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ28yQyxXQUFyQixFQUFrQyxDQUFsQyxDQUFqQjtBQUVBLFFBQUk3dkMsT0FBTyxHQUFHLEtBQUtNLEtBQUwsQ0FBVyt3QyxPQUF6QjtBQUVBLFdBQVE7QUFBSyxlQUFTLEVBQUU1QixTQUFTLENBQUNVLEdBQVYsR0FBYyxHQUFkLEdBQWtCUixZQUFZLENBQUMzTDtBQUEvQyxPQUNKO0FBQUssZUFBUyxFQUFHLEdBQUV5TCxTQUFTLENBQUNudkIsSUFBSyxJQUFHc3ZCLFVBQVUsQ0FBQ1EsU0FBVTtBQUExRCxPQUNJO0FBQUksZUFBUyxFQUFFcE4sV0FBVyxDQUFDQyxhQUFaLEdBQTBCLEdBQTFCLEdBQThCQyxVQUFVLENBQUNTLE1BQXpDLEdBQWdELEdBQWhELEdBQW9EYixhQUFhLENBQUNjLEVBQWxFLEdBQXFFLEdBQXJFLEdBQXlFZCxhQUFhLENBQUNDO0FBQXRHLE9BQ0svdUIsT0FBTyxDQUFDcGpCLEtBRGIsQ0FESixFQUlJLG9CQUFDLCtDQUFEO0FBQVEsV0FBSyxFQUFFLFdBQVMsS0FBSzBQLEtBQUwsQ0FBV3NDLE9BQVgsQ0FBbUJoRyxLQUFuQixDQUF5QnRFLElBQXpCLENBQThCMGIsT0FBTyxDQUFDM2dCLEVBQXRDLENBQVQsSUFBc0QsS0FBckU7QUFBNkUsY0FBUSxFQUFFLEtBQUsrTyxRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLENBQXZGO0FBQWlILGFBQU8sRUFBRTBJO0FBQTFILE1BSkosQ0FESSxFQU9KO0FBQUssV0FBSyxFQUFHLEdBQUV4RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzgyQyxPQUFGLElBQWFuOEMsTUFBTSxDQUFDaUIsSUFBUCxDQUFZb0UsQ0FBWixFQUFlZixNQUFmLEtBQTBCLENBQTFELEVBQTZELENBQTdELEVBQWdFNjNDLE9BQVEsSUFBRy8yQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQysyQyxjQUFyQixFQUFxQyxDQUFyQyxFQUF3Q0EsY0FBZTtBQUFqSixNQVBJLENBQVI7QUFTSDs7QUExQnFDOztBQTZCMUMsTUFBTWMsYUFBTixTQUE0QjkrQyxLQUFLLENBQUNnbUMsU0FBbEMsQ0FBNEM7QUFDeENuZSxRQUFNLEdBQUU7QUFDSixRQUFJbzFCLFNBQVMsR0FBR2oyQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2kyQyxhQUFyQixFQUFvQyxDQUFwQyxDQUFoQjtBQUNBLFFBQUlDLFlBQVksR0FBR24yQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3VxQyxjQUFyQixFQUFxQyxDQUFyQyxDQUFuQjtBQUNBLFFBQUk0TCxVQUFVLEdBQUdwMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNvMkMsV0FBckIsRUFBa0MsQ0FBbEMsQ0FBakI7QUFDQSxRQUFJYSxVQUFVLEdBQUdsM0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNrM0MsZ0JBQXJCLEVBQXVDLENBQXZDLENBQWpCO0FBRUEsV0FBUTtBQUFLLGVBQVMsRUFBRWxCLFNBQVMsQ0FBQ1UsR0FBVixHQUFjLEdBQWQsR0FBa0JSLFlBQVksQ0FBQzNMO0FBQS9DLE9BQ0o7QUFBSyxlQUFTLEVBQUcsR0FBRXlMLFNBQVMsQ0FBQ252QixJQUFLLElBQUdzdkIsVUFBVSxDQUFDUSxTQUFVO0FBQTFELE9BQ0k7QUFBSyxlQUFTLEVBQUU1MkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNvM0MsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBO0FBQXZELE9BQ0k7QUFBUSxVQUFJLEVBQUMsUUFBYjtBQUFzQixXQUFLLEVBQUcsR0FBRWpCLFVBQVUsQ0FBQ1EsU0FBVSxJQUFHTSxVQUFVLENBQUNwZCxNQUFPLElBQUdvZCxVQUFVLENBQUNJLFVBQVcsSUFBR0osVUFBVSxDQUFDSyxVQUFXLElBQUdMLFVBQVUsQ0FBQ00sU0FBVSxJQUFHTixVQUFVLENBQUN0UyxJQUFLLEVBQXZLO0FBQTBLLFdBQUssRUFBRTtBQUFDNlMsWUFBSSxFQUFFO0FBQVAsT0FBakw7QUFBcU0sYUFBTyxFQUFFLEtBQUt2K0M7QUFBbk4sT0FDQztBQUFLLFdBQUssRUFBRWcrQyxVQUFVLENBQUNTO0FBQXZCLE9BQWtDLEtBQUs3d0MsS0FBTCxDQUFXMVAsS0FBN0MsQ0FERCxDQURKLENBREosQ0FESSxDQUFSO0FBU0g7O0FBaEJ1Qzs7QUFtQjVDLE1BQU0yZ0QsVUFBTixTQUF5Qi8rQyxLQUFLLENBQUNnbUMsU0FBL0IsQ0FBeUM7QUFDckN2aUMsYUFBVyxDQUFDcUssS0FBSyxHQUFHLEVBQVQsRUFBWTtBQUNuQixVQUFNQSxLQUFOO0FBQ0EsU0FBSzFELEtBQUwsR0FBYTtBQUNUMm5DLFlBQU0sRUFBRTtBQURDLEtBQWI7QUFHQSxTQUFLL00sSUFBTCxHQUFZLEVBQVo7QUFFQSxTQUFLbDNCLEtBQUwsQ0FBV2xOLFFBQVgsQ0FBb0IyN0MsT0FBcEIsR0FBOEIsSUFBOUI7QUFDSDs7QUFFRHlDLFdBQVMsQ0FBQ0MsR0FBRCxFQUFLO0FBQ1YsUUFBSUMsVUFBVSxHQUFHLEtBQUs5MEMsS0FBTCxDQUFXMm5DLE1BQTVCO0FBQ0EsUUFBR21OLFVBQVUsS0FBS0QsR0FBRyxDQUFDbnhDLEtBQUosQ0FBVWpOLEVBQTVCLEVBQStCO0FBRS9CLFNBQUtta0MsSUFBTCxDQUFVcnVCLE9BQVYsQ0FBa0IxUCxDQUFDLElBQUk7QUFDbkJBLE9BQUMsQ0FBQ2s0QyxTQUFGLENBQVksS0FBWjtBQUNILEtBRkQ7QUFHQUYsT0FBRyxDQUFDRSxTQUFKLENBQWMsSUFBZDtBQUNBLFNBQUsvSyxRQUFMLENBQWM7QUFDVnJDLFlBQU0sRUFBRWtOLEdBQUcsQ0FBQ254QyxLQUFKLENBQVVqTjtBQURSLEtBQWQ7QUFHSDs7QUFFRGduQixRQUFNLEdBQUU7QUFDSixRQUFJMDBCLE9BQU8sR0FBRyxJQUFJLEtBQUtBLE9BQVQsQ0FBaUI7QUFDM0JBLGFBQU8sRUFBRTtBQURrQixLQUFqQixDQUFkO0FBR0FBLFdBQU8sQ0FBQ25JLFFBQVIsQ0FBaUIsS0FBS2hxQyxLQUFMLENBQVdnMUMsR0FBNUI7QUFDQSxXQUFRO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSjtBQUFLLGVBQVMsRUFBQyxXQUFmO0FBQTJCLFdBQUssRUFBRTtBQUFDWCxZQUFJLEVBQUU7QUFBUDtBQUFsQyxPQUNJLG9CQUFDLEdBQUQ7QUFBSyxhQUFPLEVBQUUsSUFBZDtBQUFvQixXQUFLLEVBQUMsY0FBMUI7QUFBeUMsUUFBRSxFQUFDO0FBQTVDLE1BREosRUFFSSxvQkFBQyxHQUFEO0FBQUssYUFBTyxFQUFFLElBQWQ7QUFBb0IsV0FBSyxFQUFDLGFBQTFCO0FBQXdDLFFBQUUsRUFBQztBQUEzQyxNQUZKLENBREksRUFLSGxDLE9BQU8sQ0FBQzEwQixNQUFSLEVBTEcsQ0FBUjtBQU9IOztBQUVEdzNCLFVBQVEsQ0FBQ0osR0FBRCxFQUFLO0FBQ1QsV0FBTyxLQUFLNzBDLEtBQUwsQ0FBVzJuQyxNQUFYLEtBQXNCa04sR0FBN0I7QUFDSDs7QUFFRCxNQUFJMUMsT0FBSixHQUFhO0FBQ1QsUUFBRyxLQUFLbnlDLEtBQUwsQ0FBVzJuQyxNQUFYLEtBQXNCLFNBQXpCLEVBQW1DLE9BQU91TixPQUFQO0FBQ25DLFdBQU9DLE1BQVA7QUFDSDs7QUE3Q29DOztBQWdEekMsTUFBTUMsR0FBTixTQUFrQngvQyxLQUFLLENBQUNnbUMsU0FBeEIsQ0FBa0M7QUFDOUJ2aUMsYUFBVyxDQUFDcUssS0FBRCxFQUFPO0FBQ2QsVUFBTUEsS0FBTjtBQUVBLFNBQUsxRCxLQUFMLEdBQWE7QUFDVDJuQyxZQUFNLEVBQUVqa0MsS0FBSyxDQUFDeXVDLE9BQU4sQ0FBYzhDLFFBQWQsQ0FBdUJ2eEMsS0FBSyxDQUFDak4sRUFBN0I7QUFEQyxLQUFiO0FBR0FpTixTQUFLLENBQUN5dUMsT0FBTixDQUFjdlgsSUFBZCxDQUFtQnB6QixJQUFuQixDQUF3QixJQUF4QjtBQUNIOztBQUVEdXRDLFdBQVMsQ0FBQ0UsUUFBRCxFQUFVO0FBQ2YsU0FBS2pMLFFBQUwsQ0FBYztBQUNWckMsWUFBTSxFQUFFLENBQUMsQ0FBQ3NOO0FBREEsS0FBZDtBQUdIOztBQUVEeDNCLFFBQU0sR0FBRTtBQUNKLFFBQUkxbkIsU0FBUyxHQUFJLFlBQWpCOztBQUNBLFFBQUcsS0FBS2lLLEtBQUwsQ0FBVzJuQyxNQUFkLEVBQXFCO0FBQ2pCNXhDLGVBQVMsSUFBSyxtQkFBZDtBQUNILEtBRkQsTUFFSztBQUNEQSxlQUFTLElBQUsscUJBQWQ7QUFDSDs7QUFDRCxXQUFRO0FBQUssZUFBUyxFQUFFQSxTQUFoQjtBQUEyQixhQUFPLEVBQUUsTUFBSTtBQUM1QyxhQUFLMk4sS0FBTCxDQUFXeXVDLE9BQVgsQ0FBbUJ5QyxTQUFuQixDQUE2QixJQUE3QjtBQUNIO0FBRk8sT0FHSCxLQUFLbHhDLEtBQUwsQ0FBVzFQLEtBSFIsQ0FBUjtBQUtIOztBQTVCNkI7O0FBK0JsQyxNQUFNbWhELE1BQU4sU0FBcUJ2L0MsS0FBSyxDQUFDZ21DLFNBQTNCLENBQXFDO0FBQ2pDbmUsUUFBTSxHQUFFO0FBQ0osUUFBSWhCLElBQUksR0FBRzdmLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVUyxjQUExQyxFQUEwRCxDQUExRCxFQUE2RFQsT0FBN0QsQ0FBcUVTLGNBQXJFLEVBQVg7QUFDQSxRQUFJODNDLFNBQVMsR0FBRzU0QixJQUFJLENBQUM2NEIsWUFBTCxDQUFrQjc0QixJQUFJLENBQUNzckIsTUFBTCxDQUFZNStCLFVBQVosQ0FBdUIsSUFBdkIsSUFBK0IsS0FBL0IsR0FBdUMsS0FBekQsQ0FBaEI7QUFDQSxRQUFJLENBQ0Fvc0MsV0FEQSxFQUVBQyxXQUZBLEVBR0FDLGNBSEEsRUFJQUMsY0FKQSxFQUtBQyxlQUxBLEVBTUFDLFdBTkEsRUFPQUMsV0FQQSxFQVFBQyxlQVJBLEVBU0FDLFdBVEEsRUFVQUMsYUFWQSxFQVdBQyxZQVhBLEVBWUE3bkIsUUFaQSxFQWFBOG5CLGFBYkEsSUFjQSxDQUNBdDVDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDczVDLFVBQXJCLEVBQWlDLENBQWpDLENBREEsRUFFQXY1QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ28yQyxXQUFyQixFQUFrQyxDQUFsQyxDQUZBLEVBR0FyMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN1NUMsUUFBRixJQUFjdjVDLENBQUMsQ0FBQ3c1QyxZQUFoQixJQUFnQyxDQUFDeDVDLENBQUMsQ0FBQ3k1QyxzQkFBdEQsRUFBOEUsQ0FBOUUsQ0FIQSxFQUlBMTVDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcUIsR0FBckIsRUFBMEIsQ0FBMUIsQ0FKQSxFQUtBdEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMwNUMsa0JBQXJCLEVBQXlDLENBQXpDLENBTEEsRUFNQTM1QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzI1QyxLQUFGLElBQVczNUMsQ0FBQyxDQUFDMFosT0FBYixJQUF3QjFaLENBQUMsQ0FBQ21rQixJQUE3QyxFQUFtRCxDQUFuRCxDQU5BLEVBT0Fwa0IsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0YyxNQUFyQixFQUE2QixDQUE3QixDQVBBLEVBUUE3YyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQ1QywwQkFBckIsRUFBaUQsQ0FBakQsQ0FSQSxFQVNBNzVDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNjVDLElBQUYsSUFBVWwvQyxNQUFNLENBQUNpQixJQUFQLENBQVlvRSxDQUFaLEVBQWVmLE1BQWYsS0FBMEIsQ0FBdkQsRUFBMEQsQ0FBMUQsQ0FUQSxFQVVBYyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzg1QyxHQUFGLElBQVM5NUMsQ0FBQyxDQUFDKzVDLE1BQTlCLEVBQXNDLENBQXRDLENBVkEsRUFXQWg2QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3dwQyxhQUFyQixFQUFvQyxDQUFwQyxDQVhBLEVBWUF6cEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBMUMsRUFBb0QsQ0FBcEQsRUFBdUR0eEIsT0FBdkQsQ0FBK0RzeEIsUUFaL0QsRUFhQXh4QixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzIzQixhQUFyQixFQUFvQyxDQUFwQyxDQWJBLENBZEo7QUE2QkEsUUFBSTk0QixJQUFJLEdBQUdsRSxNQUFNLENBQUMwVSxNQUFQLENBQWMsRUFBZCxFQUFrQmhWLG9EQUFsQixFQUE4QixLQUFLd00sS0FBTCxDQUFXeXVDLE9BQVgsQ0FBbUJ6dUMsS0FBbkIsQ0FBeUJsTixRQUF6QixDQUFrQ3dKLEtBQWxDLENBQXdDdEUsSUFBdEUsQ0FBWDtBQUNBbTdDLGtCQUFjLEdBQUdBLGNBQWMsSUFBSWxCLGVBQWUsQ0FBQ21CLFNBQW5EO0FBRUEsV0FBUTtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0o7QUFBSyxXQUFLLEVBQUV2QixXQUFXLENBQUNZLFVBQXhCO0FBQW9DLFVBQUksRUFBQyxRQUF6QztBQUFrRCxjQUFRLEVBQUM7QUFBM0QsT0FDSTtBQUFLLFdBQUssRUFBRVosV0FBVyxDQUFDd0I7QUFBeEIsT0FDSTtBQUFLLFdBQUssRUFBRyxHQUFFdkIsV0FBVyxDQUFDbkIsSUFBSyxJQUFHb0IsY0FBYyxDQUFDVyxRQUFTLElBQUdYLGNBQWMsQ0FBQ3VCLGFBQWMsSUFBR3ZCLGNBQWMsQ0FBQ3dCLFdBQVksSUFBR3hCLGNBQWMsQ0FBQ3lCLE1BQU8sSUFBRzNCLFdBQVcsQ0FBQzRCLFNBQVUsRUFBM0s7QUFBOEssV0FBSyxFQUFFO0FBQUM5QyxZQUFJLEVBQUU7QUFBUDtBQUFyTCxPQUNJO0FBQUssV0FBSyxFQUFFa0IsV0FBVyxDQUFDNkIsbUJBQXhCO0FBQTZDLFVBQUksRUFBQyxRQUFsRDtBQUEyRCxjQUFRLEVBQUM7QUFBcEUsT0FDSTtBQUFLLFdBQUssRUFBRWxCLGFBQVo7QUFBMkIsVUFBSSxFQUFDLEtBQWhDO0FBQXNDLFdBQUssRUFBRTtBQUFDLzRCLGFBQUssRUFBRSxNQUFSO0FBQWdCbU8sY0FBTSxFQUFFO0FBQXhCO0FBQTdDLE9BQ0k7QUFBSyxXQUFLLEVBQUMsSUFBWDtBQUFnQixZQUFNLEVBQUMsSUFBdkI7QUFBNEIsYUFBTyxFQUFDLFdBQXBDO0FBQWdELFdBQUssRUFBRyxHQUFFNHFCLGFBQWEsQ0FBQzVoQixJQUFLLElBQUc0aEIsYUFBYSxDQUFDaDVCLEdBQUk7QUFBbEcsT0FDSTtBQUFlLE9BQUMsRUFBQyxHQUFqQjtBQUFxQixPQUFDLEVBQUMsR0FBdkI7QUFBMkIsV0FBSyxFQUFDLElBQWpDO0FBQXNDLFlBQU0sRUFBQyxJQUE3QztBQUFrRCxVQUFJLEVBQUM7QUFBdkQsT0FDSTtBQUFLLFNBQUcsRUFBRW00QixTQUFWO0FBQXFCLFNBQUcsRUFBQyxHQUF6QjtBQUE2QixXQUFLLEVBQUVhLGFBQWEsQ0FBQ25PO0FBQWxELE1BREosQ0FESixFQUlJLG9CQUFDLE1BQUQsT0FKSixDQURKLENBREosRUFTSTtBQUFLLFdBQUssRUFBQyxJQUFYO0FBQWdCLFlBQU0sRUFBQyxJQUF2QjtBQUE0QixXQUFLLEVBQUV3TixXQUFXLENBQUM4QixVQUEvQztBQUEyRCxhQUFPLEVBQUM7QUFBbkUsT0FDSTtBQUFlLE9BQUMsRUFBQyxHQUFqQjtBQUFxQixPQUFDLEVBQUMsR0FBdkI7QUFBMkIsV0FBSyxFQUFDLElBQWpDO0FBQXNDLFlBQU0sRUFBQyxJQUE3QztBQUFrRCxVQUFJLEVBQUM7QUFBdkQsT0FDSTtBQUFLLFdBQUssRUFBRTlCLFdBQVcsQ0FBQytCO0FBQXhCLE9BQTBDbHBCLFFBQVEsQ0FBQ21wQixZQUFuRCxDQURKLENBREosQ0FUSixDQURKLEVBZ0JJO0FBQUssV0FBSyxFQUFFaEMsV0FBVyxDQUFDL1k7QUFBeEIsT0FDSTtBQUFLLFdBQUssRUFBRyxHQUFFZ1osV0FBVyxDQUFDbkIsSUFBSyxJQUFHb0IsY0FBYyxDQUFDK0IsVUFBVyxJQUFHL0IsY0FBYyxDQUFDZ0MsWUFBYSxJQUFHaEMsY0FBYyxDQUFDd0IsV0FBWSxJQUFHeEIsY0FBYyxDQUFDeUIsTUFBTyxFQUFuSjtBQUFzSixXQUFLLEVBQUU7QUFBQzdDLFlBQUksRUFBRTtBQUFQO0FBQTdKLE9BQ0k7QUFBSyxXQUFLLEVBQUcsR0FBRWtCLFdBQVcsQ0FBQ21DLG1CQUFvQixJQUFHaEMsY0FBYyxDQUFDaUMsT0FBUTtBQUF6RSxPQUNJO0FBQU0sV0FBSyxFQUFHLEdBQUVqQyxjQUFjLENBQUNsM0MsUUFBUyxJQUFHKzJDLFdBQVcsQ0FBQ3FDLDJCQUE0QjtBQUFuRixPQUF1Rm43QixJQUFJLENBQUNqZSxRQUE1RixDQURKLEVBRUksdUNBQVFpZSxJQUFJLENBQUNoZSxhQUFiLENBRkosQ0FESixDQURKLENBaEJKLENBREosRUEwQkk7QUFBSyxXQUFLLEVBQUcsR0FBRWszQyxlQUFlLENBQUNZLGtCQUFtQixJQUFHaEIsV0FBVyxDQUFDLzBDLFFBQVM7QUFBMUUsT0FDSTtBQUFJLFdBQUssRUFBRyxHQUFFbTFDLGVBQWUsQ0FBQ2tDLGdCQUFpQixJQUFHakMsV0FBVyxDQUFDNTBCLElBQUssSUFBRzYwQixXQUFXLENBQUM5N0IsTUFBTztBQUF6RixPQUE2RnFVLFFBQVEsQ0FBQzBwQiw0QkFBdEcsQ0FESixFQUVJO0FBQUssV0FBSyxFQUFFbkMsZUFBZSxDQUFDb0M7QUFBNUIsT0FDSyxDQUFDLE1BQU07QUFDSixVQUFHLENBQUNyOEMsSUFBSSxDQUFDLGNBQUQsQ0FBUixFQUF5QixPQUFPLElBQVA7QUFDekIsVUFBSXM4QyxNQUFNLEdBQUcsRUFBYjs7QUFDQSxVQUFHdDhDLElBQUksQ0FBQyxjQUFELENBQVAsRUFBd0I7QUFDcEJzOEMsY0FBTSxDQUFDeHdDLElBQVAsQ0FBWTtBQUFLLGFBQUcsRUFBQyxFQUFUO0FBQVksYUFBRyxFQUFHLHlDQUF3QzlMLElBQUksQ0FBQ29FLGNBQWUsSUFBR3BFLElBQUksQ0FBQyxjQUFELENBQWlCLE1BQXRHO0FBQTZHLGVBQUssRUFBRyxHQUFFaTZDLGVBQWUsQ0FBQ3NDLDBCQUEyQixJQUFHdjhDLElBQUksQ0FBQyxjQUFELENBQUosR0FBdUJpNkMsZUFBZSxDQUFDdUMseUJBQXZDLEdBQW1FLEVBQUc7QUFBM08sVUFBWjtBQUNIOztBQUNELFVBQUd4OEMsSUFBSSxDQUFDLGNBQUQsQ0FBUCxFQUF3QjtBQUNwQnM4QyxjQUFNLENBQUN4d0MsSUFBUCxDQUFZO0FBQUssYUFBRyxFQUFDLEVBQVQ7QUFBWSxhQUFHLEVBQUcseUNBQXdDOUwsSUFBSSxDQUFDb0UsY0FBZSxJQUFHcEUsSUFBSSxDQUFDLGNBQUQsQ0FBaUIsTUFBdEc7QUFBNkcsZUFBSyxFQUFFaTZDLGVBQWUsQ0FBQ3dDO0FBQXBJLFVBQVo7QUFDSDs7QUFDRCxhQUFPO0FBQUssYUFBSyxFQUFFeEMsZUFBZSxDQUFDeDFDO0FBQTVCLFNBQ0Y2M0MsTUFERSxDQUFQO0FBR0gsS0FaQSxHQURMLEVBY0k7QUFBSyxXQUFLLEVBQUVyQyxlQUFlLENBQUN5Qyx1QkFBNUI7QUFBcUQsV0FBSyxFQUFFO0FBQUMvRCxZQUFJLEVBQUU7QUFBUDtBQUE1RCxPQUNLLENBQUMsTUFBTTtBQUNKLFVBQUcsQ0FBQzM0QyxJQUFJLENBQUMwRCxJQUFULEVBQWMsT0FBTyxJQUFQO0FBQ2QsYUFBTztBQUFJLGFBQUssRUFBRyxHQUFFdTJDLGVBQWUsQ0FBQzBDLFVBQVcsSUFBR3pDLFdBQVcsQ0FBQzUwQixJQUFLLElBQUc2MEIsV0FBVyxDQUFDOU8sTUFBTyxFQUFuRjtBQUFzRixhQUFLLEVBQUVyckMsSUFBSSxDQUFDMEQ7QUFBbEcsU0FDSDtBQUFNLGFBQUssRUFBRXUyQyxlQUFlLENBQUMyQztBQUE3QixTQUE0QzU4QyxJQUFJLENBQUMwRCxJQUFqRCxDQURHLENBQVA7QUFHSCxLQUxBLEdBREwsRUFPSyxDQUFDLE1BQU07QUFDSixVQUFHLENBQUMxRCxJQUFJLENBQUNxRSxPQUFULEVBQWlCLE9BQU8sSUFBUDtBQUNqQixhQUFPO0FBQUssYUFBSyxFQUFFckUsSUFBSSxDQUFDMUgsS0FBakI7QUFBd0IsYUFBSyxFQUFFMmhELGVBQWUsQ0FBQzUxQztBQUEvQyxTQUF5RHJFLElBQUksQ0FBQ3FFLE9BQTlELENBQVA7QUFDSCxLQUhBLEdBUEwsRUFXSyxDQUFDLE1BQU07QUFDSixVQUFHLENBQUNyRSxJQUFJLENBQUNzRSxLQUFULEVBQWUsT0FBTyxJQUFQO0FBQ2YsYUFBTztBQUFLLGFBQUssRUFBRTIxQyxlQUFlLENBQUMzMUM7QUFBNUIsU0FDSDtBQUFNLGFBQUssRUFBRXRFLElBQUksQ0FBQ3NFO0FBQWxCLFNBQTBCdEUsSUFBSSxDQUFDc0UsS0FBL0IsQ0FERyxDQUFQO0FBR0gsS0FMQSxHQVhMLEVBaUJLLENBQUMsTUFBTTtBQUNKLFVBQUcsQ0FBQ3RFLElBQUksQ0FBQyxrQkFBRCxDQUFSLEVBQTZCLE9BQU8sSUFBUDtBQUM3QixVQUFJNjhDLGFBQWEsR0FBR0MsZ0VBQWUsQ0FBQ0MsU0FBRCxFQUFZcnFCLFFBQVosQ0FBbkM7QUFFQSxhQUFRO0FBQUssYUFBSyxFQUFFdW5CLGVBQWUsQ0FBQ21CO0FBQTVCLFNBQ0hsaEQsS0FBSyxDQUFDQyxhQUFOLENBQW9CMGlELGFBQXBCLEVBQW1DO0FBQ2hDdDRDLGtCQUFVLEVBQUU7QUFDUnk0QyxhQUFHLEVBQUUsSUFERztBQUVSeDRDLGVBQUssRUFBRXhFLElBQUksQ0FBQyxrQkFBRDtBQUZIO0FBRG9CLE9BQW5DLENBREcsQ0FBUjtBQVFILEtBWkEsR0FqQkwsQ0FkSixDQUZKLENBMUJKLENBREosRUE2RUk7QUFBSyxXQUFLLEVBQUcsR0FBRW82QyxlQUFlLENBQUM2QyxZQUFhLElBQUdwRCxXQUFXLENBQUM1N0MsSUFBSyxJQUFHbThDLGVBQWUsQ0FBQzhDLGNBQWUsSUFBRzlDLGVBQWUsQ0FBQytDLGtCQUFtQixJQUFHL0MsZUFBZSxDQUFDZ0QsWUFBYTtBQUF4SyxPQUNJO0FBQUssV0FBSyxFQUFHLEdBQUVoRCxlQUFlLENBQUNoZixRQUFTLElBQUd5ZSxXQUFXLENBQUN3RCxTQUFVO0FBQWpFLE9BQ0k7QUFBSyxXQUFLLEVBQUV4RCxXQUFXLENBQUN5RDtBQUF4QixPQUFvQzVxQixRQUFRLENBQUM2cUIsSUFBN0MsQ0FESixFQUVJO0FBQUssV0FBSyxFQUFHLEdBQUVsRCxXQUFXLENBQUNXLElBQUssSUFBR25CLFdBQVcsQ0FBQ21CLElBQUs7QUFBcEQsT0FDSTtBQUFVLGlCQUFXLEVBQUV0b0IsUUFBUSxDQUFDOHFCLGdCQUFoQztBQUFrRCxlQUFTLEVBQUMsS0FBNUQ7QUFBa0UsaUJBQVcsRUFBQyxLQUE5RTtBQUFvRixXQUFLLEVBQUV0OEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMycEMsc0JBQXJCLEVBQTZDLENBQTdDLEVBQWdEQSxzQkFBM0k7QUFBbUssV0FBSyxFQUFFO0FBQUNsYixjQUFNLEVBQUU7QUFBVCxPQUExSztBQUE0TCxjQUFRO0FBQXBNLE1BREosQ0FGSixDQURKLENBN0VKLEVBcUZJO0FBQUssV0FBSyxFQUFFaXFCLFdBQVcsQ0FBQ2hoRDtBQUF4QixPQUNJO0FBQUssV0FBSyxFQUFHLEdBQUVnaEQsV0FBVyxDQUFDNEQsTUFBTyxJQUFHbkQsYUFBYSxDQUFDWSxNQUFPO0FBQTFELE9BQ0k7QUFBSSxXQUFLLEVBQUcsR0FBRVosYUFBYSxDQUFDVyxHQUFJLElBQUdmLFdBQVcsQ0FBQzUwQixJQUFLLElBQUc2MEIsV0FBVyxDQUFDOTdCLE1BQU8sRUFBMUU7QUFBNkUsV0FBSyxFQUFFO0FBQUM1akIsYUFBSyxFQUFFO0FBQVI7QUFBcEYsT0FBbUhpNEIsUUFBUSxDQUFDZ3JCLHVCQUE1SCxDQURKLEVBRUk7QUFBSyxXQUFLLEVBQUcsR0FBRW5ELFlBQVksQ0FBQzVQLGFBQWMsSUFBR3dQLFdBQVcsQ0FBQzlPLE1BQU8sSUFBR2lQLGFBQWEsQ0FBQ3FELEdBQUk7QUFBckYsT0FBeUZqckIsUUFBUSxDQUFDa3JCLGlCQUFsRyxDQUZKLENBREosQ0FyRkosQ0FESSxDQUFSO0FBOEZIOztBQWxJZ0M7O0FBcUlyQyxNQUFNQyxNQUFOLFNBQXFCM2pELEtBQUssQ0FBQ2dtQyxTQUEzQixDQUFxQztBQUNqQ25lLFFBQU0sR0FBRTtBQUNKLFFBQUlpSSxNQUFNLEdBQUc5b0IsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVUwOEMsV0FBMUMsRUFBdUQsQ0FBdkQsRUFBMEQxOEMsT0FBMUQsQ0FBa0UwOEMsV0FBbEUsR0FBZ0Y5ekIsTUFBN0Y7QUFDQSxRQUFHQSxNQUFNLEtBQUssV0FBZCxFQUEwQkEsTUFBTSxHQUFHLFNBQVQ7QUFDMUIsUUFBSTN2QixTQUFTLEdBQUc2RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzIzQixhQUFyQixFQUFvQyxDQUFwQyxFQUF1Q0EsYUFBdkQ7QUFDQSxXQUFPO0FBQU0sV0FBSyxFQUFDLElBQVo7QUFBaUIsWUFBTSxFQUFDLElBQXhCO0FBQTZCLE9BQUMsRUFBQyxJQUEvQjtBQUFvQyxPQUFDLEVBQUMsSUFBdEM7QUFBMkMsVUFBSSxFQUFDLFNBQWhEO0FBQTBELFVBQUksRUFBRyx3QkFBdUI5TyxNQUFPLEdBQS9GO0FBQW1HLGVBQVMsRUFBRTN2QjtBQUE5RyxNQUFQO0FBQ0g7O0FBTmdDOztBQVNyQyxJQUFJOGdELGNBQWMsR0FBRyxFQUFyQjs7QUFFQSxNQUFNM0IsT0FBTixTQUFzQnQvQyxLQUFLLENBQUNnbUMsU0FBNUIsQ0FBc0M7QUFDbENuZSxRQUFNLEdBQUU7QUFDSixRQUFJaEIsSUFBSSxHQUFHN2YsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVTLGNBQTFDLEVBQTBELENBQTFELEVBQTZEVCxPQUE3RCxDQUFxRVMsY0FBckUsRUFBWDtBQUNBLFFBQUk4M0MsU0FBUyxHQUFHNTRCLElBQUksQ0FBQzY0QixZQUFMLENBQWtCNzRCLElBQUksQ0FBQ3NyQixNQUFMLENBQVk1K0IsVUFBWixDQUF1QixJQUF2QixJQUErQixLQUEvQixHQUF1QyxLQUF6RCxDQUFoQjtBQUNBLFFBQUksQ0FDQXFzQyxXQURBLEVBRUFDLGNBRkEsRUFHQUYsV0FIQSxFQUlBVyxhQUpBLEVBS0FSLGNBTEEsRUFNQUMsZUFOQSxFQU9BQyxXQVBBLEVBUUFDLFdBUkEsRUFTQUMsZUFUQSxFQVVBQyxXQVZBLEVBV0EzbkIsUUFYQSxJQVlBLENBQ0F4eEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN3M0MsSUFBRixJQUFVeDNDLENBQUMsQ0FBQ28yQyxXQUEvQixFQUE0QyxDQUE1QyxDQURBLEVBRUFyMkMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN1NUMsUUFBRixJQUFjdjVDLENBQUMsQ0FBQ3c1QyxZQUFoQixJQUFnQyxDQUFDeDVDLENBQUMsQ0FBQ3k1QyxzQkFBdEQsRUFBOEUsQ0FBOUUsQ0FGQSxFQUdBMTVDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNDhDLG1CQUFyQixFQUEwQyxDQUExQyxDQUhBLEVBSUE3OEMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMyM0IsYUFBckIsRUFBb0MsQ0FBcEMsQ0FKQSxFQUtBNTNCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcUIsR0FBckIsRUFBMEIsQ0FBMUIsQ0FMQSxFQU1BdEIsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM2OEMsZUFBckIsRUFBc0MsQ0FBdEMsQ0FOQSxFQU9BOThDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMjVDLEtBQUYsSUFBVzM1QyxDQUFDLENBQUMwWixPQUFiLElBQXdCMVosQ0FBQyxDQUFDbWtCLElBQTdDLEVBQW1ELENBQW5ELENBUEEsRUFRQXBrQixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzRjLE1BQXJCLEVBQTZCLENBQTdCLENBUkEsRUFTQTdjLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDaThDLFlBQXJCLEVBQW1DLENBQW5DLENBVEEsRUFVQWw4QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzY1QyxJQUFGLElBQVVsL0MsTUFBTSxDQUFDaUIsSUFBUCxDQUFZb0UsQ0FBWixFQUFlZixNQUFmLEtBQTBCLENBQXZELEVBQTBELENBQTFELENBVkEsRUFXQWMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzeEIsUUFBMUMsRUFBb0QsQ0FBcEQsRUFBdUR0eEIsT0FBdkQsQ0FBK0RzeEIsUUFYL0QsQ0FaSjtBQXlCQSxRQUFJMXlCLElBQUksR0FBR2xFLE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYyxFQUFkLEVBQWtCaFYsb0RBQWxCLEVBQThCLEtBQUt3TSxLQUFMLENBQVd5dUMsT0FBWCxDQUFtQnp1QyxLQUFuQixDQUF5QmxOLFFBQXpCLENBQWtDd0osS0FBbEMsQ0FBd0N0RSxJQUF0RSxDQUFYO0FBQ0FtN0Msa0JBQWMsR0FBR0EsY0FBYyxJQUFJbEIsZUFBZSxDQUFDbUIsU0FBbkQ7QUFFQSxXQUFPLENBQ0g7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQUssV0FBSyxFQUFHLEdBQUV0QixXQUFXLENBQUNuQixJQUFLLElBQUdvQixjQUFjLENBQUNXLFFBQVMsSUFBR1gsY0FBYyxDQUFDZ0MsWUFBYSxJQUFHaEMsY0FBYyxDQUFDWSxZQUFhLElBQUdaLGNBQWMsQ0FBQ3lCLE1BQU8sSUFBRzNCLFdBQVcsQ0FBQ2xmLElBQUssRUFBdEs7QUFBeUssV0FBSyxFQUFFO0FBQUNnZSxZQUFJLEVBQUU7QUFBUDtBQUFoTCxPQUNJO0FBQUssV0FBSyxFQUFFa0IsV0FBVyxDQUFDb0U7QUFBeEIsT0FDSTtBQUFRLFdBQUssRUFBRXBFLFdBQVcsQ0FBQ3RWO0FBQTNCLE9BQ0k7QUFBSyxXQUFLLEVBQUcsR0FBRXNWLFdBQVcsQ0FBQ3hOLE1BQU8sSUFBR21PLGFBQWEsQ0FBQzMvQixPQUFRLEVBQTNEO0FBQThELFVBQUksRUFBQyxLQUFuRTtBQUF5RSxXQUFLLEVBQUU7QUFBQzRHLGFBQUssRUFBRSxNQUFSO0FBQWdCbU8sY0FBTSxFQUFFO0FBQXhCO0FBQWhGLE9BQ0k7QUFBSyxXQUFLLEVBQUMsSUFBWDtBQUFnQixZQUFNLEVBQUMsSUFBdkI7QUFBNEIsYUFBTyxFQUFDLFdBQXBDO0FBQWdELFdBQUssRUFBRyxHQUFFNHFCLGFBQWEsQ0FBQzVoQixJQUFLLElBQUc0aEIsYUFBYSxDQUFDaDVCLEdBQUk7QUFBbEcsT0FDSTtBQUFlLE9BQUMsRUFBQyxHQUFqQjtBQUFxQixPQUFDLEVBQUMsR0FBdkI7QUFBMkIsV0FBSyxFQUFDLElBQWpDO0FBQXNDLFlBQU0sRUFBQyxJQUE3QztBQUFrRCxVQUFJLEVBQUM7QUFBdkQsT0FDSTtBQUFLLFNBQUcsRUFBRW00QixTQUFWO0FBQXFCLFNBQUcsRUFBQyxHQUF6QjtBQUE2QixXQUFLLEVBQUVhLGFBQWEsQ0FBQ25PO0FBQWxELE1BREosQ0FESixFQUlJLG9CQUFDLE1BQUQsT0FKSixDQURKLENBREosRUFTSTtBQUFLLFdBQUssRUFBRyxHQUFFd04sV0FBVyxDQUFDcUUsVUFBVztBQUF0QyxPQUNJO0FBQUssV0FBSyxFQUFHLEdBQUVyRSxXQUFXLENBQUNvQyxPQUFRLElBQUdqQyxjQUFjLENBQUNpQyxPQUFRO0FBQTdELE9BQ0k7QUFBTSxXQUFLLEVBQUcsR0FBRXBDLFdBQVcsQ0FBQy8yQyxRQUFTLElBQUcrMkMsV0FBVyxDQUFDLzJDLFFBQVM7QUFBN0QsT0FBaUVpZSxJQUFJLENBQUNqZSxRQUF0RSxDQURKLEVBRUk7QUFBTSxXQUFLLEVBQUUrMkMsV0FBVyxDQUFDOTJDO0FBQXpCLFlBQTBDZ2UsSUFBSSxDQUFDaGUsYUFBL0MsQ0FGSixDQURKLEVBS0k7QUFBSyxXQUFLLEVBQUcsR0FBRSsyQyxXQUFXLENBQUNuQixJQUFLLElBQUdtQixXQUFXLENBQUNnQyxVQUFXLElBQUcvQixjQUFjLENBQUNnQyxZQUFhLElBQUdoQyxjQUFjLENBQUNZLFlBQWEsSUFBR1osY0FBYyxDQUFDeUIsTUFBTyxJQUFHM0IsV0FBVyxDQUFDc0UsYUFBYyxFQUE5SztBQUFpTCxXQUFLLEVBQUU7QUFBQ3hGLFlBQUksRUFBRTtBQUFQO0FBQXhMLE9BQ0ksb0JBQUMsTUFBRCxPQURKLENBTEosQ0FUSixDQURKLEVBb0JJO0FBQUssV0FBSyxFQUFFa0IsV0FBVyxDQUFDdUU7QUFBeEIsT0FDSTtBQUFLLFdBQUssRUFBRyxHQUFFbkUsZUFBZSxDQUFDK0QsZUFBZ0IsSUFBR25FLFdBQVcsQ0FBQy8wQyxRQUFTO0FBQXZFLE9BQ0k7QUFBSSxXQUFLLEVBQUcsR0FBRW0xQyxlQUFlLENBQUNrQyxnQkFBaUIsSUFBR2pDLFdBQVcsQ0FBQzUwQixJQUFLLElBQUc2MEIsV0FBVyxDQUFDOTdCLE1BQU87QUFBekYsT0FDS3FVLFFBQVEsQ0FBQzBwQiw0QkFEZCxDQURKLEVBSUk7QUFBSyxXQUFLLEVBQUVuQyxlQUFlLENBQUNvQztBQUE1QixPQUNLLENBQUMsTUFBTTtBQUNKLFVBQUcsQ0FBQ3I4QyxJQUFJLENBQUMsY0FBRCxDQUFSLEVBQXlCLE9BQU8sSUFBUDtBQUN6QixVQUFJczhDLE1BQU0sR0FBRyxFQUFiOztBQUNBLFVBQUd0OEMsSUFBSSxDQUFDLGNBQUQsQ0FBUCxFQUF3QjtBQUNwQnM4QyxjQUFNLENBQUN4d0MsSUFBUCxDQUFZO0FBQUssYUFBRyxFQUFDLEVBQVQ7QUFBWSxhQUFHLEVBQUcseUNBQXdDOUwsSUFBSSxDQUFDb0UsY0FBZSxJQUFHcEUsSUFBSSxDQUFDLGNBQUQsQ0FBaUIsTUFBdEc7QUFBNkcsZUFBSyxFQUFHLEdBQUVpNkMsZUFBZSxDQUFDb0UsdUJBQXdCLElBQUdyK0MsSUFBSSxDQUFDLGNBQUQsQ0FBSixHQUF1Qmk2QyxlQUFlLENBQUNxRSxzQkFBdkMsR0FBZ0UsRUFBRztBQUFyTyxVQUFaO0FBQ0g7O0FBQ0QsVUFBR3QrQyxJQUFJLENBQUMsY0FBRCxDQUFQLEVBQXdCO0FBQ3BCczhDLGNBQU0sQ0FBQ3h3QyxJQUFQLENBQVk7QUFBSyxhQUFHLEVBQUMsRUFBVDtBQUFZLGFBQUcsRUFBRyx5Q0FBd0M5TCxJQUFJLENBQUNvRSxjQUFlLElBQUdwRSxJQUFJLENBQUMsY0FBRCxDQUFpQixNQUF0RztBQUE2RyxlQUFLLEVBQUVpNkMsZUFBZSxDQUFDc0U7QUFBcEksVUFBWjtBQUNIOztBQUNELGFBQU87QUFBSyxhQUFLLEVBQUV0RSxlQUFlLENBQUN4MUM7QUFBNUIsU0FDRjYzQyxNQURFLENBQVA7QUFHSCxLQVpBLEdBREwsRUFjSTtBQUFLLFdBQUssRUFBRXJDLGVBQWUsQ0FBQ3VFLG9CQUE1QjtBQUFrRCxXQUFLLEVBQUU7QUFBQzdGLFlBQUksRUFBRTtBQUFQO0FBQXpELE9BQ0ssQ0FBQyxNQUFNO0FBQ0osVUFBRyxDQUFDMzRDLElBQUksQ0FBQzBELElBQVQsRUFBYyxPQUFPLElBQVA7QUFDZCxhQUFPO0FBQUksYUFBSyxFQUFHLEdBQUV1MkMsZUFBZSxDQUFDMEMsVUFBVyxJQUFHekMsV0FBVyxDQUFDNTBCLElBQUssSUFBRzYwQixXQUFXLENBQUM5TyxNQUFPLEVBQW5GO0FBQXNGLGFBQUssRUFBRXJyQyxJQUFJLENBQUMwRDtBQUFsRyxTQUNIO0FBQU0sYUFBSyxFQUFFdTJDLGVBQWUsQ0FBQzJDO0FBQTdCLFNBQTRDNThDLElBQUksQ0FBQzBELElBQWpELENBREcsQ0FBUDtBQUdILEtBTEEsR0FETCxFQU9LLENBQUMsTUFBTTtBQUNKLFVBQUcsQ0FBQzFELElBQUksQ0FBQ3FFLE9BQVQsRUFBaUIsT0FBTyxJQUFQO0FBQ2pCLGFBQU87QUFBSyxhQUFLLEVBQUVyRSxJQUFJLENBQUMxSCxLQUFqQjtBQUF3QixhQUFLLEVBQUUyaEQsZUFBZSxDQUFDNTFDO0FBQS9DLFNBQXlEckUsSUFBSSxDQUFDcUUsT0FBOUQsQ0FBUDtBQUNILEtBSEEsR0FQTCxFQVdLLENBQUMsTUFBTTtBQUNKLFVBQUcsQ0FBQ3JFLElBQUksQ0FBQ3NFLEtBQVQsRUFBZSxPQUFPLElBQVA7QUFDZixhQUFPO0FBQUssYUFBSyxFQUFFMjFDLGVBQWUsQ0FBQzMxQztBQUE1QixTQUNIO0FBQU0sYUFBSyxFQUFFdEUsSUFBSSxDQUFDc0U7QUFBbEIsU0FBMEJ0RSxJQUFJLENBQUNzRSxLQUEvQixDQURHLENBQVA7QUFHSCxLQUxBLEdBWEwsRUFpQkssQ0FBQyxNQUFNO0FBQ0osVUFBRyxDQUFDdEUsSUFBSSxDQUFDLGtCQUFELENBQVIsRUFBNkIsT0FBTyxJQUFQO0FBQzdCLFVBQUk2OEMsYUFBYSxHQUFHQyxnRUFBZSxDQUFDQyxTQUFELEVBQVlycUIsUUFBWixDQUFuQztBQUVBLGFBQVE7QUFBSyxhQUFLLEVBQUV1bkIsZUFBZSxDQUFDbUI7QUFBNUIsU0FDSGxoRCxLQUFLLENBQUNDLGFBQU4sQ0FBb0IwaUQsYUFBcEIsRUFBbUM7QUFDaEN0NEMsa0JBQVUsRUFBRTtBQUNSeTRDLGFBQUcsRUFBRSxJQURHO0FBRVJ4NEMsZUFBSyxFQUFFeEUsSUFBSSxDQUFDLGtCQUFEO0FBRkg7QUFEb0IsT0FBbkMsQ0FERyxDQUFSO0FBUUgsS0FaQSxHQWpCTCxDQWRKLENBSkosQ0FESixDQXBCSixDQURKLEVBMkVSO0FBQUssV0FBSyxFQUFFNjVDLFdBQVcsQ0FBQzU3QztBQUF4QixPQUNDO0FBQUssV0FBSyxFQUFHLEdBQUVtOEMsZUFBZSxDQUFDNkMsWUFBYSxJQUFHN0MsZUFBZSxDQUFDZ0QsWUFBYTtBQUE1RSxPQUNDO0FBQUssV0FBSyxFQUFFaEQsZUFBZSxDQUFDaGY7QUFBNUIsT0FDQztBQUFLLFdBQUssRUFBRXllLFdBQVcsQ0FBQzRFO0FBQXhCLE9BQ0M7QUFBSyxXQUFLLEVBQUU1RSxXQUFXLENBQUM2RTtBQUF4QixPQUFnRGhzQixRQUFRLENBQUM2cUIsSUFBekQsQ0FERCxFQUVDO0FBQUssV0FBSyxFQUFHLEdBQUUxRCxXQUFXLENBQUNtQixJQUFLLElBQUdYLFdBQVcsQ0FBQ1csSUFBSztBQUFwRCxPQUM0QjtBQUFVLGlCQUFXLEVBQUV0b0IsUUFBUSxDQUFDOHFCLGdCQUFoQztBQUFrRCxlQUFTLEVBQUMsS0FBNUQ7QUFBa0UsaUJBQVcsRUFBQyxLQUE5RTtBQUNBLFdBQUssRUFBRXQ4QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzJwQyxzQkFBckIsRUFBNkMsQ0FBN0MsRUFBZ0RBLHNCQUR2RDtBQUMrRSxXQUFLLEVBQUU7QUFBQ2xiLGNBQU0sRUFBRTtBQUFULE9BRHRGO0FBQ3dHLGNBQVE7QUFEaEgsTUFENUIsQ0FGRCxDQURELEVBVXNCLG9CQUFDLGlCQUFELE9BVnRCLENBREQsQ0FERCxDQTNFUSxDQURKLENBREcsRUErRkg7QUFBSyxXQUFLLEVBQUM7QUFBWCxNQS9GRyxDQUFQO0FBaUdIOztBQWpJaUM7O0FBb0l0QyxNQUFNK3VCLGlCQUFOLFNBQWdDemtELEtBQUssQ0FBQ2dtQyxTQUF0QyxDQUFnRDtBQUM1Q25lLFFBQU0sR0FBRTtBQUNKLFFBQUk2OEIsUUFBUSxHQUFHLEVBQWY7QUFDQSxRQUFJL0UsV0FBVyxHQUFHMzRDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNDhDLG1CQUFyQixFQUEwQyxDQUExQyxDQUFsQjtBQUNBLFFBQUljLGNBQWMsR0FBRzM5QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTA5QyxXQUExQyxFQUF1RCxDQUF2RCxFQUEwRDE5QyxPQUEvRTtBQUVBLFFBQUkyOUMsSUFBSSxHQUFHRixjQUFjLENBQUNDLFdBQWYsR0FBNkJsM0MsTUFBN0IsQ0FBb0N6RyxDQUFDLElBQUlBLENBQUMsQ0FBQzY5QyxVQUFGLEtBQWlCLENBQTFELENBQVg7O0FBQ0EsU0FBSSxJQUFJQyxHQUFSLElBQWVGLElBQWYsRUFBb0I7QUFDaEJILGNBQVEsQ0FBQzl5QyxJQUFULENBQWMsb0JBQUMsZ0JBQUQ7QUFBa0IsV0FBRyxFQUFFbXpDO0FBQXZCLFFBQWQ7QUFDSDs7QUFFRCxRQUFHTCxRQUFRLENBQUN4K0MsTUFBVCxHQUFrQixDQUFyQixFQUF1QjtBQUNuQixhQUFRO0FBQUssYUFBSyxFQUFFeTVDLFdBQVcsQ0FBQzRFO0FBQXhCLFNBQ0o7QUFBSyxhQUFLLEVBQUU1RSxXQUFXLENBQUNxRjtBQUF4QixTQUNLTixRQURMLENBREksQ0FBUjtBQUtIOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQW5CMkM7O0FBc0JoRCxNQUFNTyxnQkFBTixTQUErQmpsRCxLQUFLLENBQUNnbUMsU0FBckMsQ0FBK0M7QUFDM0NuZSxRQUFNLEdBQUU7QUFDSixRQUFJLENBQ0ErM0IsV0FEQSxFQUVBQyxjQUZBLEVBR0FGLFdBSEEsRUFJQXVGLGFBSkEsRUFLQUMsYUFMQSxFQU1BQyxlQU5BLElBT0EsQ0FDQXArQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3czQyxJQUFGLElBQVV4M0MsQ0FBQyxDQUFDbzJDLFdBQS9CLEVBQTRDLENBQTVDLENBREEsRUFFQXIyQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3U1QyxRQUFGLElBQWN2NUMsQ0FBQyxDQUFDdzVDLFlBQWhCLElBQWdDLENBQUN4NUMsQ0FBQyxDQUFDeTVDLHNCQUF0RCxFQUE4RSxDQUE5RSxDQUZBLEVBR0ExNUMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0OEMsbUJBQXJCLEVBQTBDLENBQTFDLENBSEEsRUFJQTc4QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQyQixtQkFBckIsRUFBMEMsQ0FBMUMsQ0FKQSxFQUtBNzJCLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDM0gsTUFBckIsRUFBNkIsQ0FBN0IsQ0FMQSxFQU1BMEgsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVV6RSxHQUF2QixJQUE4QndFLENBQUMsQ0FBQ0MsT0FBRixDQUFVa0MsR0FBM0QsRUFBZ0UsQ0FBaEUsRUFBbUVsQyxPQU5uRSxDQVBKO0FBZUEsUUFBSTY5QyxHQUFHLEdBQUcsS0FBS2ozQyxLQUFMLENBQVdpM0MsR0FBckI7QUFDQSxRQUFJTSxlQUFlLEdBQUdELGVBQWUsQ0FBQzNpRCxHQUFoQixDQUFvQnNpRCxHQUFHLENBQUNwa0QsSUFBeEIsQ0FBdEI7QUFDQSxXQUFRO0FBQUssV0FBSyxFQUFHLEdBQUVpL0MsV0FBVyxDQUFDbkIsSUFBSyxJQUFHbUIsV0FBVyxDQUFDZ0MsVUFBVyxJQUFHL0IsY0FBYyxDQUFDZ0MsWUFBYSxJQUFHaEMsY0FBYyxDQUFDd0IsV0FBWSxJQUFHeEIsY0FBYyxDQUFDeUIsTUFBTyxJQUFHM0IsV0FBVyxDQUFDMkYsZ0JBQWlCLEVBQWhMO0FBQW1MLFdBQUssRUFBRTtBQUFDN0csWUFBSSxFQUFFO0FBQVA7QUFBMUwsT0FDSjtBQUFLLFNBQUcsRUFBRyxRQUFPNEcsZUFBZSxDQUFDNzdDLElBQUssRUFBdkM7QUFBMEMsV0FBSyxFQUFFbTJDLFdBQVcsQ0FBQzRGLG9CQUE3RDtBQUFtRixTQUFHLEVBQUVGLGVBQWUsQ0FBQ3piLElBQWhCLENBQXFCcnBDLEtBQXJCLElBQThCOGtELGVBQWUsQ0FBQ3piLElBQWhCLENBQXFCNGIsS0FBbkQsSUFBNERILGVBQWUsQ0FBQ3piLElBQWhCLENBQXFCNmI7QUFBekssTUFESSxFQUVKO0FBQUssV0FBSyxFQUFFOUYsV0FBVyxDQUFDK0Y7QUFBeEIsT0FDSTtBQUFLLFdBQUssRUFBRS9GLFdBQVcsQ0FBQ2dHO0FBQXhCLE9BQStDWixHQUFHLENBQUN2N0MsSUFBbkQsQ0FESixFQUVLdTdDLEdBQUcsQ0FBQy9SLFFBQUosR0FBZ0Isa0NBQ2I7QUFBSyxXQUFLLEVBQUcsR0FBRWtTLGFBQWEsQ0FBQ3JuQixtQkFBb0IsSUFBRzhoQixXQUFXLENBQUNpRyw0QkFBNkIsRUFBN0Y7QUFBZ0csV0FBSyxFQUFFO0FBQUNyK0IsYUFBSyxFQUFFLE1BQVI7QUFBZ0JtTyxjQUFNLEVBQUU7QUFBeEI7QUFBdkcsT0FDSTtBQUFLLFdBQUssRUFBRXd2QixhQUFhLENBQUNwbUIsVUFBMUI7QUFBc0MsV0FBSyxFQUFDLElBQTVDO0FBQWlELFlBQU0sRUFBQyxJQUF4RDtBQUE2RCxhQUFPLEVBQUM7QUFBckUsT0FDSTtBQUFNLFVBQUksRUFBQyxTQUFYO0FBQXFCLG1CQUFVLFNBQS9CO0FBQXlDLE9BQUMsRUFBQztBQUEzQyxNQURKLENBREosRUFJSTtBQUFLLFdBQUssRUFBRW9tQixhQUFhLENBQUNubkI7QUFBMUIsT0FDSTtBQUFLLFdBQUssRUFBQyxJQUFYO0FBQWdCLFlBQU0sRUFBQyxJQUF2QjtBQUE0QixhQUFPLEVBQUM7QUFBcEMsT0FDSTtBQUFNLE9BQUMsRUFBQyxpREFBUjtBQUEwRCxVQUFJLEVBQUM7QUFBL0QsTUFESixDQURKLENBSkosQ0FEYSxDQUFoQixHQVdVLElBYmYsQ0FGSSxFQWlCSjtBQUFHLFdBQUssRUFBRyxHQUFFb25CLGFBQWEsQ0FBQzdsRCxNQUFPLElBQUc2bEQsYUFBYSxDQUFDNWxELHNCQUF1QixFQUExRTtBQUE2RSxTQUFHLEVBQUMscUJBQWpGO0FBQXVHLFlBQU0sRUFBQyxRQUE5RztBQUF1SCxVQUFJLEVBQUMsUUFBNUg7QUFBcUksY0FBUSxFQUFDO0FBQTlJLE9BQ0k7QUFBSyxXQUFLLEVBQUVvZ0QsV0FBVyxDQUFDa0csd0JBQXhCO0FBQWtELFdBQUssRUFBQyxJQUF4RDtBQUE2RCxZQUFNLEVBQUMsSUFBcEU7QUFBeUUsYUFBTyxFQUFDO0FBQWpGLE9BQ0k7QUFBTSxVQUFJLEVBQUMsY0FBWDtBQUEwQixPQUFDLEVBQUM7QUFBNUIsTUFESixFQUVJO0FBQU0sVUFBSSxFQUFDLGNBQVg7QUFBMEIsT0FBQyxFQUFDO0FBQTVCLE1BRkosQ0FESixDQWpCSSxDQUFSO0FBd0JIOztBQTNDMEM7O0FBOEMvQyxNQUFNQyxNQUFOLFNBQXFCOWxELEtBQUssQ0FBQ2dtQyxTQUEzQixDQUFxQztBQUNqQ25lLFFBQU0sR0FBRTtBQUNKLFFBQUloQixJQUFJLEdBQUc3ZixTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVVMsY0FBMUMsRUFBMEQsQ0FBMUQsRUFBNkRULE9BQTdELENBQXFFUyxjQUFyRSxFQUFYO0FBQ0EsUUFBSW8rQyxVQUFVLEdBQUcvK0MsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUM0OEMsbUJBQXJCLEVBQTBDLENBQTFDLENBQWpCO0FBQ0EsUUFBSW1DLFNBQVMsR0FBR2gvQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQysrQyxTQUFyQixFQUFnQyxDQUFoQyxFQUFtQ0EsU0FBbkQ7QUFDQSxRQUFJMytCLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSTQrQixVQUFVLEdBQUcsRUFBakI7O0FBRUEsU0FBSSxJQUFJQyxRQUFSLElBQW9CRixTQUFwQixFQUE4QjtBQUMxQixVQUFHbi9CLElBQUksQ0FBQ3MvQixPQUFMLENBQWFILFNBQVMsQ0FBQ0UsUUFBRCxDQUF0QixDQUFILEVBQXFDRCxVQUFVLENBQUNyMEMsSUFBWCxDQUFnQnMwQyxRQUFoQjtBQUN4Qzs7QUFFRCxTQUFJLElBQUlBLFFBQVIsSUFBb0JELFVBQXBCLEVBQStCO0FBQzNCLFVBQUlHLFVBQVUsR0FBSSxlQUFjRixRQUFRLENBQUM1Z0QsV0FBVCxHQUF1QmEsT0FBdkIsQ0FBK0IsSUFBL0IsRUFBcUMsR0FBckMsRUFBMEN5TixLQUExQyxDQUFnRCxHQUFoRCxFQUFxRHhLLEdBQXJELENBQXlEbkMsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUttTixXQUFMLEtBQW1Cbk4sQ0FBQyxDQUFDb04sS0FBRixDQUFRLENBQVIsQ0FBakYsRUFBNkZDLElBQTdGLENBQWtHLEVBQWxHLENBQXNHLEVBQXRJO0FBQ0E4eEMsZ0JBQVUsR0FBR0EsVUFBVSxDQUFDamdELE9BQVgsQ0FBbUIsaUJBQW5CLEVBQXNDLGlCQUF0QyxDQUFiO0FBQ0EsVUFBRyxDQUFDNC9DLFVBQVUsQ0FBQ0ssVUFBRCxDQUFkLEVBQTJCO0FBQzNCLytCLFlBQU0sQ0FBQ3pWLElBQVAsQ0FBWSxvQkFBQyxLQUFEO0FBQU8sWUFBSSxFQUFFdzBDO0FBQWIsUUFBWjtBQUNIOztBQUVELFFBQUd2L0IsSUFBSSxDQUFDOHJCLHNCQUFSLEVBQStCO0FBQzNCdHJCLFlBQU0sQ0FBQ3pWLElBQVAsQ0FBWSxvQkFBQyxLQUFEO0FBQU8sWUFBSSxFQUFDO0FBQVosUUFBWjtBQUNIOztBQUVELFdBQU95VixNQUFQO0FBQ0g7O0FBeEJnQzs7QUEyQnJDLE1BQU1nL0IsS0FBTixTQUFvQnJtRCxLQUFLLENBQUNnbUMsU0FBMUIsQ0FBb0M7QUFDaENuZSxRQUFNLEdBQUU7QUFDSixRQUFJODNCLFdBQVcsR0FBRzM0QyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQ4QyxtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBbEI7QUFFQSxXQUFRO0FBQUssV0FBSyxFQUFFbEUsV0FBVyxDQUFDMkc7QUFBeEIsT0FDSixpQ0FDSTtBQUFLLFdBQUssRUFBQyxFQUFYO0FBQWMsVUFBSSxFQUFDLFFBQW5CO0FBQTRCLGNBQVEsRUFBQztBQUFyQyxPQUNJO0FBQUssV0FBSyxFQUFHLEdBQUUzRyxXQUFXLENBQUM0RyxZQUFhLElBQUc1RyxXQUFXLENBQUMsS0FBSzd4QyxLQUFMLENBQVd0RSxJQUFaLENBQWtCO0FBQXhFLE1BREosQ0FESixDQURJLENBQVI7QUFTSDs7QUFiK0I7O0FBZ0JwQyxNQUFNcTVDLFNBQU4sU0FBd0I3aUQsS0FBSyxDQUFDZ21DLFNBQTlCLENBQXdDO0FBQ3BDbmUsUUFBTSxHQUFFO0FBQ0osV0FBTztBQUFLLGVBQVMsRUFBRW81QjtBQUFoQixPQUNGLEtBQUtuekMsS0FBTCxDQUFXMUYsT0FEVCxDQUFQO0FBR0g7O0FBTG1DLEM7Ozs7Ozs7Ozs7OztBQzF3QnhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLE1BQU1vK0MsU0FBTixTQUF3QjNtRCxtREFBSSxDQUFDeXVDLGNBQTdCLENBQTRDO0FBRXZEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLMjRDLGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQjNoRCxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNIOztBQUVEMmhELGVBQWEsQ0FBQ3gvQyxDQUFELEVBQUk7QUFDYixRQUFJQSxDQUFDLENBQUNzbEIsS0FBRixLQUFZLEVBQWhCLEVBQW9CO0FBQ2hCMXNCLHlEQUFJLENBQUMrbkIsUUFBTCxDQUFjcWIsc0JBQWQsQ0FBcUMsS0FBS3dSLElBQUwsQ0FBVWhVLElBQVYsQ0FBZW5TLFVBQXBEO0FBQ0g7QUFDSjs7QUFFRDJYLG1CQUFpQixHQUFHO0FBQ2hCdG9DLFVBQU0sQ0FBQ3loQixnQkFBUCxDQUF3QixPQUF4QixFQUFpQyxLQUFLcW5DLGFBQXRDO0FBRUEsVUFBTTN5QixRQUFRLEdBQUd2bkIseURBQUcsQ0FBQ3lnQixLQUFKLENBQVcsSUFBRyxLQUFLbGYsS0FBTCxDQUFXak4sRUFBRyxFQUE1QixDQUFqQjtBQUNBMEwsNkRBQUcsQ0FBQ2lsQixPQUFKLENBQVk7QUFDUkksY0FBUSxFQUFFLEdBREY7QUFFUkQsWUFBTSxFQUFFLFVBQVNLLFFBQVQsRUFBbUI7QUFDdkI4QixnQkFBUSxDQUFDemQsS0FBVCxDQUFlcXdDLFNBQWYsR0FBNEIsU0FBUSxNQUFNLE1BQU0xMEIsUUFBUyxtQkFBekQ7QUFDQThCLGdCQUFRLENBQUN6ZCxLQUFULENBQWVpaUMsT0FBZixHQUF5QnRtQixRQUF6Qjs7QUFDQSxZQUFJQSxRQUFRLElBQUksQ0FBaEIsRUFBbUI7QUFDZnVRLHNCQUFZLENBQUMsTUFBTTtBQUNmek8sb0JBQVEsQ0FBQ3pkLEtBQVQsQ0FBZXF3QyxTQUFmLEdBQTJCLEVBQTNCO0FBQ0E1eUIsb0JBQVEsQ0FBQ3pkLEtBQVQsQ0FBZWlpQyxPQUFmLEdBQXlCLEVBQXpCO0FBQ0gsV0FIVyxDQUFaO0FBSUg7QUFDSjtBQVhPLEtBQVo7QUFhSDs7QUFFRHBTLHNCQUFvQixHQUFHO0FBQ25Cdm9DLFVBQU0sQ0FBQzJ1QixtQkFBUCxDQUEyQixPQUEzQixFQUFvQyxLQUFLbTZCLGFBQXpDO0FBRUEsVUFBTTN5QixRQUFRLEdBQUd2bkIseURBQUcsQ0FBQ3lnQixLQUFKLENBQVcsSUFBRyxLQUFLbGYsS0FBTCxDQUFXak4sRUFBRyxFQUE1QixDQUFqQjtBQUNBMEwsNkRBQUcsQ0FBQ2lsQixPQUFKLENBQVk7QUFDUkksY0FBUSxFQUFFLEdBREY7QUFFUkQsWUFBTSxFQUFFLFVBQVNLLFFBQVQsRUFBbUI7QUFDdkI4QixnQkFBUSxDQUFDemQsS0FBVCxDQUFlcXdDLFNBQWYsR0FBNEIsU0FBUSxNQUFNLE9BQU8sSUFBSTEwQixRQUFYLENBQXFCLG1CQUEvRDtBQUNBOEIsZ0JBQVEsQ0FBQ3pkLEtBQVQsQ0FBZWlpQyxPQUFmLEdBQXlCLElBQUl0bUIsUUFBN0I7O0FBQ0EsWUFBSUEsUUFBUSxJQUFJLENBQWhCLEVBQW1CO0FBQ2Z1USxzQkFBWSxDQUFDLE1BQU07QUFDZnpPLG9CQUFRLENBQUMzZSxNQUFUO0FBQ0gsV0FGVyxDQUFaO0FBR0g7QUFDSjtBQVZPLEtBQVo7QUFhQSxVQUFNK00sS0FBSyxHQUFHM1YseURBQUcsQ0FBQ3lnQixLQUFKLENBQVUsb0JBQVYsQ0FBZDtBQUNBOUssU0FBSyxDQUFDbk8sU0FBTixDQUFnQm9CLE1BQWhCLENBQXVCLG1CQUF2QjtBQUNBNUksNkRBQUcsQ0FBQ2lsQixPQUFKLENBQVk7QUFDUkksY0FBUSxFQUFFLEdBREY7QUFFUkQsWUFBTSxFQUFFLFVBQVNLLFFBQVQsRUFBbUI7QUFDdkI5UCxhQUFLLENBQUM3TCxLQUFOLENBQVlxd0MsU0FBWixHQUF5QixTQUFRLE9BQU8xMEIsUUFBUCxHQUFrQixJQUFLLG1CQUF4RDtBQUNBOVAsYUFBSyxDQUFDN0wsS0FBTixDQUFZaWlDLE9BQVosR0FBc0J0bUIsUUFBdEI7O0FBQ0EsWUFBSUEsUUFBUSxJQUFJLENBQWhCLEVBQW1CO0FBQ2Z1USxzQkFBWSxDQUFDLE1BQU07QUFDZnJnQixpQkFBSyxDQUFDN0wsS0FBTixDQUFZcXdDLFNBQVosR0FBd0IsRUFBeEI7QUFDQXhrQyxpQkFBSyxDQUFDN0wsS0FBTixDQUFZaWlDLE9BQVosR0FBc0IsRUFBdEI7QUFDSCxXQUhXLENBQVo7QUFJSDtBQUNKO0FBWE8sS0FBWjtBQWFIOztBQUVEcU8sb0JBQWtCLEdBQUc7QUFDakIsVUFBTXprQyxLQUFLLEdBQUczVix5REFBRyxDQUFDeWdCLEtBQUosQ0FBVSxxQkFBVixDQUFkO0FBQ0E5SyxTQUFLLENBQUNuTyxTQUFOLENBQWdCZSxHQUFoQixDQUFvQixtQkFBcEI7QUFDQXZJLDZEQUFHLENBQUNpbEIsT0FBSixDQUFZO0FBQ1JJLGNBQVEsRUFBRSxHQURGO0FBRVJELFlBQU0sRUFBRSxVQUFTSyxRQUFULEVBQW1CO0FBQ3ZCOVAsYUFBSyxDQUFDN0wsS0FBTixDQUFZcXdDLFNBQVosR0FBeUIsU0FBUSxRQUFRLElBQUkxMEIsUUFBWixJQUF3QixJQUFLLG1CQUE5RDtBQUNBOVAsYUFBSyxDQUFDN0wsS0FBTixDQUFZaWlDLE9BQVosR0FBc0IsSUFBSXRtQixRQUExQjtBQUNIO0FBTE8sS0FBWjtBQU9IOztBQUVEbkssUUFBTSxHQUFHO0FBQ0wsV0FBT2hvQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsS0FERyxFQUVIO0FBQUNFLGVBQVMsRUFBRSxvQkFBa0I2RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2liLEtBQUYsSUFBV2piLENBQUMsQ0FBQ2tiLFNBQWhDLEVBQTJDLENBQTNDLEVBQThDRCxLQUE1RTtBQUFtRnJoQixRQUFFLEVBQUUsS0FBS2lOLEtBQUwsQ0FBV2pOLEVBQWxHO0FBQXNHMjBDLFNBQUcsRUFBRSxNQUEzRztBQUFtSG4vQixXQUFLLEVBQUU7QUFBQ2lpQyxlQUFPLEVBQUUsQ0FBVjtBQUFhb08saUJBQVMsRUFBRTtBQUF4QjtBQUExSCxLQUZHLEVBR0gsS0FBSzU0QyxLQUFMLENBQVdrSCxRQUhSLENBQVA7QUFLSDs7QUFwRnNELEM7Ozs7Ozs7Ozs7OztBQ0gzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFZSxNQUFNd3JCLGlCQUFOLFNBQWdDM2dDLG1EQUFJLENBQUN5dUMsY0FBckMsQ0FBb0Q7QUFFL0Q3cUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtpbUMsZUFBTDtBQUNBLFNBQUtoNkIsS0FBTCxHQUFhLEtBQUtBLEtBQUwsQ0FBV2pWLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBYjtBQUNBLFNBQUs4aEQsY0FBTCxHQUFzQixLQUFLQSxjQUFMLENBQW9COWhELElBQXBCLENBQXlCLElBQXpCLENBQXRCO0FBQ0EsU0FBS29FLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlwRSxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLK2hELGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQi9oRCxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNBLFNBQUtnaUQsZUFBTCxHQUF1QixLQUFLQSxlQUFMLENBQXFCaGlELElBQXJCLENBQTBCLElBQTFCLENBQXZCO0FBQ0EsU0FBS3dQLElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVV4UCxJQUFWLENBQWUsSUFBZixDQUFaO0FBQ0EsU0FBS2lpRCxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhamlELElBQWIsQ0FBa0IsSUFBbEIsQ0FBZjtBQUVBLFNBQUtraUQsVUFBTCxHQUFrQm5uRCxtREFBSSxDQUFDaEIsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLFdBQUQsQ0FBM0MsQ0FBbEI7QUFDQSxTQUFLazVDLGNBQUwsR0FBc0JwbkQsbURBQUksQ0FBQ2hCLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxrQkFBRCxFQUFxQixpQkFBckIsQ0FBM0MsQ0FBdEI7QUFDQSxTQUFLZ2dDLGFBQUwsR0FBcUJsdUMsbURBQUksQ0FBQ2hCLGNBQUwsQ0FBb0JrUCxzQkFBcEIsQ0FBMkMsQ0FBQyxjQUFELENBQTNDLENBQXJCO0FBQ0EsU0FBS201QyxnQkFBTCxHQUF3QnJuRCxtREFBSSxDQUFDaEIsY0FBTCxDQUFvQmtQLHNCQUFwQixDQUEyQyxDQUFDLGlCQUFELENBQTNDLENBQXhCO0FBQ0g7O0FBRURrNEIsbUJBQWlCLEdBQUc7QUFDaEIsU0FBSzZnQixlQUFMO0FBQ0Y7O0FBRUYvUyxpQkFBZSxHQUFHO0FBQ2QsU0FBSzNwQyxLQUFMLEdBQWE7QUFDVCs4QyxzQkFBZ0IsRUFBRSxDQUFDLENBRFY7QUFFVC9vRCxXQUFLLEVBQUUsWUFGRTtBQUdUZ3BELGFBQU8sRUFBRSxJQUhBO0FBSVRDLGFBQU8sRUFBRSxFQUpBO0FBS1Q5eUIsVUFBSSxFQUFFLElBTEc7QUFNVCt5QixnQkFBVSxFQUFFO0FBQ1JsOUMsYUFBSyxFQUFFLENBREM7QUFFUnljLFlBQUksRUFBRTtBQUZFO0FBTkgsS0FBYjtBQVdIOztBQUVEOU0sT0FBSyxHQUFHO0FBQ0psYSx1REFBSSxDQUFDK25CLFFBQUwsQ0FBY3FiLHNCQUFkLENBQXFDbi9CLFFBQVEsQ0FBQ3dlLGNBQVQsQ0FBd0IsS0FBS3hVLEtBQUwsQ0FBV3l5QixNQUFuQyxDQUFyQztBQUNIOztBQUVEcjNCLFFBQU0sQ0FBQzhqQixLQUFELEVBQVFrZ0IsS0FBUixFQUFlO0FBQ2pCLFVBQU03eEIsSUFBSSxHQUFHLElBQWI7QUFDQWtzQyxTQUFLLENBQUUsR0FBRWxzQyxJQUFJLENBQUNnNkIsUUFBUyxHQUFFcm9CLEtBQU0sR0FBRUEsS0FBSyxHQUFHLGFBQUgsR0FBbUIsYUFBYyxFQUFsRSxFQUFxRTtBQUN0RTFkLFlBQU0sRUFBRTtBQUQ4RCxLQUFyRSxDQUFMLENBRUc4WCxJQUZILENBRVEsTUFBTTRCLEdBQU4sSUFBYTtBQUNqQixVQUFHQSxHQUFHLENBQUM4RyxNQUFKLEtBQWUsR0FBbEIsRUFBc0IsTUFBTSxNQUFNOUcsR0FBRyxDQUFDMWYsSUFBSixFQUFaO0FBQ3RCLFVBQUl4RCxJQUFJLEdBQUcsTUFBTWtqQixHQUFHLENBQUNrSCxJQUFKLEVBQWpCO0FBRUEsVUFBSW0zQixPQUFPLEdBQUd2aEQsSUFBSSxDQUFDMHpCLE9BQUwsQ0FBYTJCLE1BQWIsQ0FBb0IsQ0FBQ0gsR0FBRCxFQUFNd3NCLE1BQU4sS0FBaUI7QUFDL0NBLGNBQU0sQ0FBQ0MsTUFBUCxHQUFnQixLQUFoQjtBQUNBenNCLFdBQUcsQ0FBQ3BwQixJQUFKLENBQVM0MUMsTUFBVCxFQUYrQyxDQUcvQzs7QUFDQSxlQUFPeHNCLEdBQVA7QUFDSCxPQUxhLEVBS1gsRUFMVyxDQUFkOztBQU9BLFVBQUksQ0FBQ2tTLEtBQUwsRUFBWTtBQUNSbWEsZUFBTyxHQUFHaHNDLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV2k5QyxPQUFYLENBQW1CNXBCLE1BQW5CLENBQTBCNHBCLE9BQTFCLENBQVY7QUFDSCxPQUZELE1BR0ssQ0FDRDtBQUNIOztBQUVELFVBQUl2RSxHQUFHLEdBQUdoOUMsSUFBSSxDQUFDMUYsSUFBTCxHQUFZMEYsSUFBSSxDQUFDNG9CLElBQTNCO0FBQ0E1b0IsVUFBSSxDQUFDeXVCLElBQUwsR0FBYSxTQUFRdXVCLEdBQUksRUFBekI7QUFDQSxVQUFJem5DLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV3M5QyxJQUFmLEVBQXFCNWhELElBQUksQ0FBQ3l1QixJQUFMLElBQWMsU0FBUWxaLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV3M5QyxJQUFLLEVBQXRDO0FBQ3JCLFVBQUlyc0MsSUFBSSxDQUFDalIsS0FBTCxDQUFXKzhDLGdCQUFmLEVBQWlDcmhELElBQUksQ0FBQ3l1QixJQUFMLElBQWMsYUFBWWxaLElBQUksQ0FBQ3NzQyxlQUFMLENBQXFCdHNDLElBQUksQ0FBQ2pSLEtBQUwsQ0FBVys4QyxnQkFBaEMsQ0FBa0QsRUFBNUU7O0FBQ2pDLFVBQUlyRSxHQUFHLElBQUloOUMsSUFBSSxDQUFDOGhELEtBQWhCLEVBQXVCO0FBQ25COUUsV0FBRyxHQUFHaDlDLElBQUksQ0FBQzhoRCxLQUFYO0FBQ0E5aEQsWUFBSSxDQUFDeXVCLElBQUwsR0FBWSxJQUFaO0FBQ0g7O0FBRUQsVUFBSW4yQixLQUFLLEdBQUksYUFBWTBrRCxHQUFJLE9BQU1oOUMsSUFBSSxDQUFDOGhELEtBQU0sZUFBY3ZzQyxJQUFJLENBQUNzc0MsZUFBTCxDQUFxQnRzQyxJQUFJLENBQUNqUixLQUFMLENBQVcrOEMsZ0JBQWhDLENBQWtELEVBQTlHO0FBQ0EsVUFBSTlyQyxJQUFJLENBQUNqUixLQUFMLENBQVdzOUMsSUFBZixFQUFxQnRwRCxLQUFLLElBQUssUUFBT2lkLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV3M5QyxJQUFLLEVBQWpDO0FBRXJCcnNDLFVBQUksQ0FBQys0QixRQUFMLENBQWM7QUFDVmdULGVBQU8sRUFBRSxLQURDO0FBRVZocEQsYUFBSyxFQUFFQSxLQUZHO0FBR1ZpcEQsZUFBTyxFQUFFQSxPQUhDO0FBSVY5eUIsWUFBSSxFQUFFenVCLElBQUksQ0FBQ3l1QjtBQUpELE9BQWQ7O0FBT0EsVUFBSTJZLEtBQUosRUFBVztBQUNQO0FBQ0E3eEIsWUFBSSxDQUFDbzVCLElBQUwsQ0FBVW9ULEdBQVYsQ0FBY3BULElBQWQsQ0FBbUJxVCxlQUFuQixDQUFtQ2pULFNBQW5DLEdBQStDLENBQS9DO0FBQ0g7QUFDSixLQTNDRCxFQTJDRzFrQixLQTNDSCxDQTJDVWpYLEdBQUQsSUFBUztBQUNkck8sYUFBTyxDQUFDc0gsS0FBUixDQUFjK0csR0FBZDtBQUNBLGFBQU9tQyxJQUFJLENBQUMrNEIsUUFBTCxDQUFjO0FBQ2pCZ1QsZUFBTyxFQUFFLEtBRFE7QUFFakJocEQsYUFBSyxFQUFFO0FBRlUsT0FBZCxDQUFQO0FBSUgsS0FqREQ7QUFrREg7O0FBRUQsUUFBTWtXLElBQU4sQ0FBV3l6QyxVQUFYLEVBQXVCO0FBQ25CLFFBQUlBLFVBQVUsQ0FBQ2o2QyxLQUFYLENBQWlCazZDLE1BQXJCLEVBQTZCLE9BQU8sS0FBS2phLGFBQUwsQ0FBbUJrYSxZQUFuQixDQUFnQ0YsVUFBVSxDQUFDajZDLEtBQVgsQ0FBaUJvNkMsV0FBakQsQ0FBUDtBQUU3QixVQUFNWCxLQUFLLENBQUUsR0FBRSxLQUFLWSxZQUFhLElBQUdKLFVBQVUsQ0FBQ2o2QyxLQUFYLENBQWlCMDVDLE1BQWpCLENBQXdCWSxVQUFXLEVBQTVELEVBQThEO0FBQ3JFOTRDLFlBQU0sRUFBRSxLQUQ2RDtBQUVyRSs0QyxpQkFBVyxFQUFFLFNBRndEO0FBR3JFeE4sVUFBSSxFQUFFLE1BSCtEO0FBSXJFNXBCLGFBQU8sRUFBRTtBQUNMLGtCQUFVLGtCQURMO0FBRUwsd0JBQWdCO0FBRlg7QUFKNEQsS0FBOUQsQ0FBWDtBQVVBODJCLGNBQVUsQ0FBQzNULFFBQVgsQ0FBb0I7QUFBQ3FULFlBQU0sRUFBRTtBQUFULEtBQXBCO0FBQ0g7O0FBRURWLFNBQU8sR0FBRztBQUNOLFVBQU0xckMsSUFBSSxHQUFHLElBQWI7QUFDQSxVQUFNN04sT0FBTyxHQUFHNk4sSUFBSSxDQUFDaXRDLGFBQXJCO0FBQ0E5NkMsV0FBTyxDQUFDZ3hCLENBQVIsR0FBWTl5QixJQUFJLENBQUN5ZCxLQUFMLENBQVd4ckIsTUFBTSxDQUFDNHFELE9BQVAsR0FBaUI1cUQsTUFBTSxDQUFDbU8sVUFBUCxHQUFvQixDQUFyQyxHQUF5QzBCLE9BQU8sQ0FBQytaLEtBQVIsR0FBZ0IsQ0FBcEUsQ0FBWjtBQUNBL1osV0FBTyxDQUFDaXhCLENBQVIsR0FBWS95QixJQUFJLENBQUN5ZCxLQUFMLENBQVd4ckIsTUFBTSxDQUFDNnFELE9BQVAsR0FBaUI3cUQsTUFBTSxDQUFDc08sV0FBUCxHQUFxQixDQUF0QyxHQUEwQ3VCLE9BQU8sQ0FBQ2tvQixNQUFSLEdBQWlCLENBQXRFLENBQVo7QUFFQXJhLFFBQUksQ0FBQ290QyxVQUFMLEdBQWtCLEtBQUs5cUQsTUFBTSxDQUFDaUcsT0FBUCxDQUFlLFVBQWYsRUFBMkJwRixNQUEzQixDQUFrQ2tqQyxhQUF2QyxFQUFzRGwwQixPQUF0RCxDQUFsQjtBQUNBLFVBQU1uSSxHQUFHLEdBQUcsNkdBQVo7QUFDQWdXLFFBQUksQ0FBQ290QyxVQUFMLENBQWdCOW1CLFdBQWhCLENBQTRCbFksRUFBNUIsQ0FBK0IsY0FBL0IsRUFBK0MsQ0FBQzJNLEtBQUQsRUFBUS93QixHQUFSLEtBQWdCO0FBQzNELFVBQUlBLEdBQUcsSUFBSSxzQ0FBWCxFQUFtRDtBQUNuRGdXLFVBQUksQ0FBQ290QyxVQUFMLENBQWdCMXVDLEtBQWhCO0FBQ0FzQixVQUFJLENBQUN5ckMsZUFBTDtBQUNILEtBSkQ7QUFLQXpyQyxRQUFJLENBQUNvdEMsVUFBTCxDQUFnQkMsT0FBaEIsQ0FBd0JyakQsR0FBeEI7QUFDSDs7QUFFRCxNQUFJaWpELGFBQUosR0FBb0I7QUFDaEIsV0FBTztBQUNIL2dDLFdBQUssRUFBRSxHQURKO0FBRUhtTyxZQUFNLEVBQUUsR0FGTDtBQUdIaXpCLHFCQUFlLEVBQUUsU0FIZDtBQUlIM1osVUFBSSxFQUFFLElBSkg7QUFLSDRaLGVBQVMsRUFBRSxLQUxSO0FBTUhDLGlCQUFXLEVBQUUsS0FOVjtBQU9IQyxpQkFBVyxFQUFFLEtBUFY7QUFRSEMsaUJBQVcsRUFBRSxJQVJWO0FBU0hwaEIsV0FBSyxFQUFFLEtBVEo7QUFVSHFoQixZQUFNLEVBQUUsS0FWTDtBQVdIQyxvQkFBYyxFQUFFO0FBQ1pDLHVCQUFlLEVBQUU7QUFETDtBQVhiLEtBQVA7QUFlSDs7QUFFRCxNQUFJQyxRQUFKLEdBQWU7QUFDWCxVQUFNM0IsTUFBTSxHQUFHO0FBQ1hoK0MsVUFBSSxFQUFFLGVBREs7QUFFWDQvQyxZQUFNLEVBQUUsT0FGRztBQUdYQyxhQUFPLEVBQUUsUUFIRTtBQUlYam1CLGdCQUFVLEVBQUUsQ0FBQyxXQUFELEVBQWMsYUFBZCxFQUE2QixTQUE3QixDQUpEO0FBS1hsbEMsaUJBQVcsRUFBRSwrQ0FMRjtBQU1Ya3FELGdCQUFVLEVBQUUsbUJBTkQ7QUFPWGtCLGFBQU8sRUFBRSwwRkFQRTtBQVFYQyxnQkFBVSxFQUFFLElBUkQ7QUFTWHJCLGlCQUFXLEVBQUUsa0JBVEY7QUFVWEYsWUFBTSxFQUFFO0FBVkcsS0FBZjtBQVlBLFVBQU13QixPQUFPLEdBQUc7QUFDWmhnRCxVQUFJLEVBQUUsV0FETTtBQUVaNC9DLFlBQU0sRUFBRSxLQUZJO0FBR1pDLGFBQU8sRUFBRSxLQUhHO0FBSVpqbUIsZ0JBQVUsRUFBRSxDQUFDLFdBQUQsRUFBYyxhQUFkLEVBQTZCLFNBQTdCLENBSkE7QUFLWmxsQyxpQkFBVyxFQUFFLDJDQUxEO0FBTVprcUQsZ0JBQVUsRUFBRSxtQkFOQTtBQU9aa0IsYUFBTyxFQUFFLDJGQVBHO0FBUVpDLGdCQUFVLEVBQUUsSUFSQTtBQVNackIsaUJBQVcsRUFBRSxTQVREO0FBVVpGLFlBQU0sRUFBRTtBQVZJLEtBQWhCO0FBWUEsVUFBTXlCLFNBQVMsR0FBRyxLQUFLdkMsZ0JBQUwsQ0FBc0J3QyxvQkFBdEIsRUFBbEI7QUFDQSxVQUFNQyxXQUFXLEdBQUcsS0FBSzFDLGNBQUwsQ0FBb0IyQyxlQUF4QztBQUNBLFdBQU8sQ0FDSC9wRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCNHBELG1EQUF6QixFQUFxQztBQUFDckMsWUFBTSxFQUFFZ0MsT0FBVDtBQUFrQnhCLFlBQU0sRUFBRSxJQUExQjtBQUFnQzF6QyxVQUFJLEVBQUUsS0FBS0EsSUFBM0M7QUFBaURtMUMsZUFBUyxFQUFFQSxTQUE1RDtBQUF1RUssY0FBUSxFQUFFSCxXQUFXLENBQUNqK0MsSUFBSSxDQUFDcStDLEtBQUwsQ0FBV3IrQyxJQUFJLENBQUMyakIsTUFBTCxLQUFnQixDQUEzQixDQUFEO0FBQTVGLEtBQXJDLENBREcsRUFFSHh2QixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCNHBELG1EQUF6QixFQUFxQztBQUFDckMsWUFBTSxFQUFFQSxNQUFUO0FBQWlCUSxZQUFNLEVBQUUsSUFBekI7QUFBK0IxekMsVUFBSSxFQUFFLEtBQUtBLElBQTFDO0FBQWdEbTFDLGVBQVMsRUFBRUEsU0FBM0Q7QUFBc0VLLGNBQVEsRUFBRUgsV0FBVyxDQUFDaitDLElBQUksQ0FBQ3ErQyxLQUFMLENBQVdyK0MsSUFBSSxDQUFDMmpCLE1BQUwsS0FBZ0IsQ0FBM0IsQ0FBRDtBQUEzRixLQUFyQyxDQUZHLENBQVA7QUFJSDs7QUFFRCxNQUFJZ21CLFFBQUosR0FBZTtBQUNYLFdBQU8sbUNBQVA7QUFDSDs7QUFFRCxNQUFJOFMsWUFBSixHQUFtQjtBQUNmLFdBQU8sOEJBQVA7QUFDSDs7QUFFRCxNQUFJNkIsZUFBSixHQUFzQjtBQUNsQixXQUFPLHlDQUFQO0FBQ0g7O0FBRUQsUUFBTWxELGVBQU4sR0FBd0I7QUFDcEIsVUFBTXpyQyxJQUFJLEdBQUcsSUFBYjs7QUFDQSxRQUFJO0FBQ0EsWUFBTXdOLFFBQVEsR0FBRyxNQUFNMCtCLEtBQUssQ0FBRSxzQ0FBRixFQUF3QztBQUNoRWo0QyxjQUFNLEVBQUUsS0FEd0Q7QUFFaEUrNEMsbUJBQVcsRUFBRSxTQUZtRDtBQUdoRXhOLFlBQUksRUFBRSxNQUgwRDtBQUloRTVwQixlQUFPLEVBQUU7QUFDTCxvQkFBVSxrQkFETDtBQUVMLDBCQUFnQjtBQUZYO0FBSnVELE9BQXhDLENBQTVCO0FBU0EsWUFBTW5yQixJQUFJLEdBQUcsTUFBTStpQixRQUFRLENBQUNxSCxJQUFULEVBQW5CO0FBQ0E3VSxVQUFJLENBQUMrNEIsUUFBTCxDQUFjO0FBQ1YrUyx3QkFBZ0IsRUFBRSxDQURSO0FBRVZHLGtCQUFVLEVBQUU7QUFDUmw5QyxlQUFLLEVBQUUsQ0FEQztBQUVSeWMsY0FBSSxFQUFFL2dCO0FBRkU7QUFGRixPQUFkO0FBT0F1VixVQUFJLENBQUNuUyxNQUFMLENBQVksRUFBWixFQUFnQixJQUFoQjtBQUNILEtBbkJELENBb0JBLE9BQU9pSixLQUFQLEVBQWM7QUFDVnRILGFBQU8sQ0FBQ3NILEtBQVIsQ0FBY0EsS0FBZDtBQUNBa0osVUFBSSxDQUFDKzRCLFFBQUwsQ0FBYztBQUNWaDJDLGFBQUssRUFBRSxzQ0FERztBQUVWZ3BELGVBQU8sRUFBRSxJQUZDO0FBR1ZELHdCQUFnQixFQUFFLENBQUMsQ0FIVDtBQUlWRyxrQkFBVSxFQUFFO0FBQ1JsOUMsZUFBSyxFQUFFLENBREM7QUFFUnljLGNBQUksRUFBRTtBQUZFO0FBSkYsT0FBZDtBQVNIO0FBQ0o7O0FBRURnQixRQUFNLEdBQUc7QUFDTCxXQUFPaG9CLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJncUQsb0RBQXpCLEVBQXNDO0FBQUN6VSxTQUFHLEVBQUU7QUFBTixLQUF0QyxFQUFvRCxLQUFLOXRCLFNBQXpELENBQVA7QUFDSDs7QUFFRCxNQUFJQSxTQUFKLEdBQWdCO0FBQ1osV0FBTztBQUNIa2IsYUFBTyxFQUFFO0FBQ0xsYixpQkFBUyxFQUFFLEtBQUtrYjtBQURYLE9BRE47QUFJSDU1QixhQUFPLEVBQUU7QUFDTDBlLGlCQUFTLEVBQUUsS0FBSzFlO0FBRFgsT0FKTjtBQU9Ia2hELFdBQUssRUFBRTtBQUNIeGlDLGlCQUFTLEVBQUU3bkIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNsQyw4Q0FBekIsRUFBZ0M7QUFBQ2pqQyxhQUFHLEVBQUUsSUFBTjtBQUFZa3pDLGFBQUcsRUFBRSxPQUFqQjtBQUEwQnQxQyxpQkFBTyxFQUFFLEtBQUs2WjtBQUF4QyxTQUFoQztBQURSO0FBUEosS0FBUDtBQVdIOztBQUVELE1BQUk2b0IsT0FBSixHQUFjO0FBQ1YsV0FBTy9pQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsS0FERyxFQUVIO0FBQUNFLGVBQVMsRUFBRSxTQUFaO0FBQXVCbUMsU0FBRyxFQUFFO0FBQTVCLEtBRkcsRUFHSHpDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJTixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNFLGVBQVMsRUFBRSxtQkFBWjtBQUFpQ2tXLFdBQUssRUFBRTtBQUFDb2xDLGdCQUFRLEVBQUU7QUFBWDtBQUF4QyxLQUZKLEVBR0ksZ0JBSEosQ0FISixFQVFJNTdDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJrcUQsd0RBQXpCLEVBQTBDLElBQTFDLENBUkosRUFTSSxLQUFLQyxXQVRULEVBVUl2cUQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmtxRCx3REFBekIsRUFBMEMsSUFBMUMsQ0FWSixFQVdJdHFELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJvcUQscURBQXpCLEVBQXVDO0FBQUMvZ0QsVUFBSSxFQUFFO0FBQVAsS0FBdkMsQ0FYSixFQVlJLEtBQUtxK0MsZUFBTCxDQUFxQnYrQyxHQUFyQixDQUF5QixDQUFDN0csS0FBRCxFQUFRd3lCLEtBQVIsS0FBa0I7QUFDdkMsYUFBT2wxQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCcXFELG1EQUF6QixFQUFxQztBQUFDenBELFVBQUUsRUFBRWswQixLQUFMO0FBQVk3MEIsZUFBTyxFQUFFLEtBQUswbUQsY0FBMUI7QUFBMEN0a0QsV0FBRyxFQUFFeXlCLEtBQS9DO0FBQXNEenJCLFlBQUksRUFBRS9HLEtBQTVEO0FBQW1FK2lCLGdCQUFRLEVBQUUsS0FBS2xiLEtBQUwsQ0FBVys4QyxnQkFBWCxLQUFnQ3B5QjtBQUE3RyxPQUFyQyxDQUFQO0FBQ0gsS0FGRCxDQVpKLEVBZUlsMUIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QmtxRCx3REFBekIsRUFBMEMsSUFBMUMsQ0FmSixFQWdCSSxLQUFLeHJELE1BaEJULEVBaUJJLEtBQUsyb0QsVUFqQlQsQ0FIRyxDQUFQO0FBdUJIOztBQUVELE1BQUk4QyxXQUFKLEdBQWtCO0FBQ2QsV0FBT3ZxRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsS0FERyxFQUVIO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkcsRUFHSE4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUUsNkJBQVo7QUFBMkNrVyxXQUFLLEVBQUU7QUFBQ2tSLGFBQUssRUFBRSxPQUFSO0FBQWlCbTBCLGtCQUFVLEVBQUU7QUFBN0I7QUFBbEQsS0FGSixFQUdJNzdDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsT0FBekIsRUFBa0M7QUFBQ3UxQyxTQUFHLEVBQUUsYUFBTjtBQUFxQjJELGVBQVMsRUFBRSxLQUFLME4sYUFBckM7QUFBb0RqM0MsY0FBUSxFQUFFLE1BQU0sQ0FBRSxDQUF0RTtBQUF3RWpQLFVBQUksRUFBRSxNQUE5RTtBQUFzRlIsZUFBUyxFQUFFLGVBQWpHO0FBQWtIaTVDLGlCQUFXLEVBQUUsV0FBL0g7QUFBNEltUixlQUFTLEVBQUU7QUFBdkosS0FBbEMsQ0FISixDQUhHLENBQVA7QUFTSDs7QUFFRDFELGVBQWEsQ0FBQzUvQyxDQUFELEVBQUk7QUFDYixVQUFNb1UsSUFBSSxHQUFHLElBQWI7QUFDQSxRQUFJQSxJQUFJLENBQUNqUixLQUFMLENBQVdnOUMsT0FBWCxJQUFzQm5nRCxDQUFDLENBQUNzbEIsS0FBRixLQUFZLEVBQXRDLEVBQTBDO0FBQzFDbFIsUUFBSSxDQUFDKzRCLFFBQUwsQ0FBYztBQUNWZ1QsYUFBTyxFQUFFLElBREM7QUFFVmhwRCxXQUFLLEVBQUUsWUFGRztBQUdWc3BELFVBQUksRUFBRXpnRCxDQUFDLENBQUNxYyxNQUFGLENBQVMvZ0I7QUFITCxLQUFkO0FBS0EsUUFBSXlxQixLQUFLLEdBQUksU0FBUS9sQixDQUFDLENBQUNxYyxNQUFGLENBQVMvZ0IsS0FBTSxFQUFwQzs7QUFDQSxRQUFJOFksSUFBSSxDQUFDalIsS0FBTCxDQUFXKzhDLGdCQUFYLEtBQWdDLENBQXBDLEVBQXVDO0FBQ25DbjZCLFdBQUssSUFBSyxhQUFZM1IsSUFBSSxDQUFDc3NDLGVBQUwsQ0FBcUJ0c0MsSUFBSSxDQUFDalIsS0FBTCxDQUFXKzhDLGdCQUFoQyxDQUFrRCxFQUF4RTtBQUNIOztBQUNEOXJDLFFBQUksQ0FBQ25TLE1BQUwsQ0FBWThqQixLQUFaLEVBQW1CLElBQW5CO0FBQ0g7O0FBRUQsTUFBSTI2QixlQUFKLEdBQXNCO0FBQ2xCLFdBQU8sQ0FBQyxLQUFELEVBQVEsV0FBUixFQUFxQixXQUFyQixFQUFrQyxnQkFBbEMsRUFBb0QsWUFBcEQsRUFBa0UsV0FBbEUsRUFBK0UsZ0JBQS9FLEVBQWlHLGVBQWpHLEVBQWtILGtCQUFsSCxFQUFzSSxPQUF0SSxFQUErSSxXQUEvSSxFQUE0SixVQUE1SixFQUF3SyxhQUF4SyxFQUF1TCxPQUF2TCxDQUFQO0FBQ0g7O0FBRURmLGdCQUFjLENBQUMvbEQsRUFBRCxFQUFLO0FBQ2YsVUFBTXdhLElBQUksR0FBRyxJQUFiO0FBQ0EsUUFBSUEsSUFBSSxDQUFDalIsS0FBTCxDQUFXZzlDLE9BQWYsRUFBd0I7QUFDeEIvckMsUUFBSSxDQUFDbzVCLElBQUwsQ0FBVStWLFdBQVYsQ0FBc0Jqb0QsS0FBdEIsR0FBOEIsRUFBOUI7QUFDQThZLFFBQUksQ0FBQys0QixRQUFMLENBQWM7QUFDVmdULGFBQU8sRUFBRSxJQURDO0FBRVZELHNCQUFnQixFQUFFdG1ELEVBRlI7QUFHVnpDLFdBQUssRUFBRSxZQUhHO0FBSVZzcEQsVUFBSSxFQUFFO0FBSkksS0FBZDs7QUFNQSxRQUFJN21ELEVBQUUsS0FBSyxDQUFYLEVBQWM7QUFDVndhLFVBQUksQ0FBQ25TLE1BQUwsQ0FBWSxFQUFaLEVBQWdCLElBQWhCO0FBQ0E7QUFDSDs7QUFDRG1TLFFBQUksQ0FBQ25TLE1BQUwsQ0FBYSxhQUFZbVMsSUFBSSxDQUFDc3NDLGVBQUwsQ0FBcUI5bUQsRUFBckIsQ0FBeUIsRUFBbEQsRUFBcUQsSUFBckQ7QUFDSDs7QUFFRCxNQUFJbUksT0FBSixHQUFjO0FBQ1YsVUFBTXFTLElBQUksR0FBRyxJQUFiO0FBQ0EsVUFBTW91QyxTQUFTLEdBQUcsS0FBS3ZDLGdCQUFMLENBQXNCd0Msb0JBQXRCLEVBQWxCO0FBQ0EsVUFBTUMsV0FBVyxHQUFHLEtBQUsxQyxjQUFMLENBQW9CMkMsZUFBeEM7QUFDQSxRQUFJdnVDLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV2s5QyxVQUFYLENBQXNCbDlDLEtBQXRCLEtBQWdDLENBQXBDLEVBQXVDLE9BQU9pUixJQUFJLENBQUNvdkMsWUFBWjtBQUN2QyxRQUFJQyxZQUFZLEdBQUcxakQsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNncUMsb0JBQXJCLEVBQTJDLENBQTNDLENBQW5CO0FBQ0EsV0FBTyxDQUFDcHhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSixLQURJLEVBRUo7QUFBQ3UxQyxTQUFHLEVBQUUsU0FBTjtBQUFpQmx6QyxTQUFHLEVBQUUsSUFBdEI7QUFBNEJuQyxlQUFTLEVBQUV1cUQsWUFBWSxDQUFDdmxCLGFBQWIsR0FBMkIsR0FBM0IsR0FBK0J1bEIsWUFBWSxDQUFDdmxCLGFBQTVDLEdBQTBEO0FBQWpHLEtBRkksRUFHSnRsQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCbTdDLHNEQUF6QixFQUF3QztBQUFDOXhDLFVBQUksRUFBRStSLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV2hNO0FBQWxCLEtBQXhDLENBSEksRUFJSmlkLElBQUksQ0FBQzh0QyxRQUpELEVBS0o5dEMsSUFBSSxDQUFDalIsS0FBTCxDQUFXaTlDLE9BQVgsQ0FBbUJqK0MsR0FBbkIsQ0FBd0JvK0MsTUFBRCxJQUFZO0FBQy9CLGFBQU8zbkQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QjRwRCxtREFBekIsRUFBcUM7QUFBQ3ZuRCxXQUFHLEVBQUVrbEQsTUFBTSxDQUFDWSxVQUFiO0FBQXlCWixjQUFNLEVBQUVBLE1BQWpDO0FBQXlDbHpDLFlBQUksRUFBRStHLElBQUksQ0FBQy9HLElBQXBEO0FBQTBEbTFDLGlCQUFTLEVBQUVBLFNBQXJFO0FBQWdGSyxnQkFBUSxFQUFFSCxXQUFXLENBQUNqK0MsSUFBSSxDQUFDcStDLEtBQUwsQ0FBV3IrQyxJQUFJLENBQUMyakIsTUFBTCxLQUFnQixDQUEzQixDQUFEO0FBQXJHLE9BQXJDLENBQVA7QUFDSCxLQUZELENBTEksRUFRSmhVLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV21xQixJQUFYLElBQW1CMTBCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDZixRQURlLEVBRWY7QUFBQ1UsVUFBSSxFQUFFLFFBQVA7QUFBaUJULGFBQU8sRUFBRSxNQUFNO0FBQ3hCLFlBQUltYixJQUFJLENBQUNqUixLQUFMLENBQVdnOUMsT0FBZixFQUF3QjtBQUFPL3JDLFlBQUksQ0FBQys0QixRQUFMLENBQWM7QUFBQ2dULGlCQUFPLEVBQUU7QUFBVixTQUFkO0FBQWdDL3JDLFlBQUksQ0FBQ25TLE1BQUwsQ0FBWW1TLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV21xQixJQUF2QixFQUE2QixLQUE3QjtBQUNsRSxPQUZMO0FBRU9wMEIsZUFBUyxFQUFFLG1DQUZsQjtBQUV1RGtXLFdBQUssRUFBRTtBQUFDa1IsYUFBSyxFQUFFLE1BQVI7QUFBZ0Jra0IsaUJBQVMsRUFBRSxNQUEzQjtBQUFtQ2tmLG9CQUFZLEVBQUU7QUFBakQ7QUFGOUQsS0FGZSxFQUtmOXFELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJa2IsSUFBSSxDQUFDalIsS0FBTCxDQUFXZzlDLE9BQVgsR0FBcUIsU0FBckIsR0FBaUMsV0FIckMsQ0FMZSxDQVJmLEVBbUJKL3JDLElBQUksQ0FBQ2pSLEtBQUwsQ0FBV2k5QyxPQUFYLENBQW1CbmhELE1BQW5CLEdBQTRCLENBQTVCLElBQWlDckcsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm03QyxzREFBekIsRUFBd0M7QUFBQzl4QyxVQUFJLEVBQUUrUixJQUFJLENBQUNqUixLQUFMLENBQVdoTTtBQUFsQixLQUF4QyxDQW5CN0IsQ0FBRCxDQUFQO0FBcUJIOztBQUVELE1BQUlxc0QsWUFBSixHQUFtQjtBQUNmLFVBQU1wdkMsSUFBSSxHQUFHLElBQWIsQ0FEZSxDQUVmOztBQUNBLFFBQUlxdkMsWUFBWSxHQUFHMWpELFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ3FDLG9CQUFyQixFQUEyQyxDQUEzQyxDQUFuQjtBQUNBLFdBQU8sQ0FBQ3B4QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0osS0FESSxFQUVKO0FBQUNxQyxTQUFHLEVBQUUsS0FBTjtBQUFha3pDLFNBQUcsRUFBRSxTQUFsQjtBQUE2QnIxQyxlQUFTLEVBQUV1cUQsWUFBWSxDQUFDdmxCLGFBQWIsR0FBMkIsR0FBM0IsR0FBK0J1bEIsWUFBWSxDQUFDdmxCLGFBQTVDLEdBQTBEO0FBQWxHLEtBRkksRUFHSnRsQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxzQ0FISixFQUlJTixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQ0lDLGFBQU8sRUFBRW1iLElBQUksQ0FBQzByQyxPQURsQjtBQUVJcG1ELFVBQUksRUFBRSxRQUZWO0FBR0lSLGVBQVMsRUFBRSxtQ0FIZjtBQUlJa1csV0FBSyxFQUFFO0FBQ0hzUSxlQUFPLEVBQUUsY0FETjtBQUVIaWtDLGlCQUFTLEVBQUUsTUFGUjtBQUdIbFAsa0JBQVUsRUFBRSxNQUhUO0FBSUhtUCxrQkFBVSxFQUFFO0FBSlQ7QUFKWCxLQUZKLEVBYUlockQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksU0FISixDQWJKLENBSkosQ0FISSxFQTBCRGtiLElBQUksQ0FBQzh0QyxRQTFCSixDQUFELENBQVA7QUE0Qkg7O0FBRUQsTUFBSXhxRCxNQUFKLEdBQWE7QUFDVCxXQUFPa0IsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZHLEVBR0hOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ29qQixVQUFJLEVBQUUsNEJBQVA7QUFBcUNDLFlBQU0sRUFBRTtBQUE3QyxLQUZKLEVBR0ksb0JBSEosQ0FIRyxDQUFQO0FBU0g7O0FBRUQsTUFBSWdrQyxVQUFKLEdBQWlCO0FBQ2IsVUFBTWpzQyxJQUFJLEdBQUcsSUFBYjtBQUNBLFVBQU07QUFBQ2lzQztBQUFELFFBQWVqc0MsSUFBSSxDQUFDalIsS0FBMUI7QUFDQSxRQUFJazlDLFVBQVUsQ0FBQ2w5QyxLQUFYLEtBQXFCLENBQXpCLEVBQTRCLE9BQU92SyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDLElBQWpDLENBQVA7QUFFNUIsV0FBT0osbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILE1BREcsRUFFSCxJQUZHLEVBR0hKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJrcUQsd0RBQXpCLEVBQTBDLElBQTFDLENBSEcsRUFJSHRxRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksTUFESixFQUVJO0FBQUNvVyxXQUFLLEVBQUU7QUFBQzlWLGFBQUssRUFBRSxTQUFSO0FBQW1CazdDLGdCQUFRLEVBQUUsTUFBN0I7QUFBcUNDLGtCQUFVLEVBQUU7QUFBakQ7QUFBUixLQUZKLEVBR0ksZ0JBSEosRUFJSyxHQUFFNEwsVUFBVSxDQUFDemdDLElBQVgsQ0FBZ0JqZSxRQUFTLElBQUcwK0MsVUFBVSxDQUFDemdDLElBQVgsQ0FBZ0JoZSxhQUFjLEVBSmpFLENBSkcsRUFVSGhKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ29XLFdBQUssRUFBRTtBQUFDNjZCLGVBQU8sRUFBRTtBQUFWO0FBQVIsS0FGSixFQUdJcnhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ29XLFdBQUssRUFBRTtBQUFDa1IsYUFBSyxFQUFFLE1BQVI7QUFBZ0JxakMsaUJBQVMsRUFBRTtBQUEzQixPQUFSO0FBQTRDanFELFVBQUksRUFBRSxRQUFsRDtBQUE0RFIsZUFBUyxFQUFFO0FBQXZFLEtBRkosRUFHSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUUsb0JBQVo7QUFBa0NELGFBQU8sRUFBRW1iLElBQUksQ0FBQzByQztBQUFoRCxLQUZKLEVBR0ksV0FISixDQUhKLENBSEosQ0FWRyxDQUFQO0FBd0JQOztBQXRha0UsQzs7Ozs7Ozs7Ozs7O0FDWG5FO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTStELGNBQU4sU0FBNkJqckQsbURBQUksQ0FBQ3l1QyxjQUFsQyxDQUFpRDtBQUM1RDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsUUFBSSxDQUFDLEtBQUtBLEtBQUwsQ0FBVzA1QyxNQUFYLENBQWtCOEIsT0FBdkIsRUFBZ0MsS0FBS3g3QyxLQUFMLENBQVcwNUMsTUFBWCxDQUFrQjhCLE9BQWxCLEdBQTRCLEtBQUt4N0MsS0FBTCxDQUFXZzhDLFFBQXZDO0FBQ2hDLFNBQUsxL0MsS0FBTCxHQUFhO0FBQ1QyZ0QsZ0JBQVUsRUFBRSxLQURIO0FBRVR0RCxZQUFNLEVBQUUsS0FBSzM1QyxLQUFMLENBQVcyN0MsU0FBWCxDQUFxQmxrRCxRQUFyQixDQUE4QixLQUFLdUksS0FBTCxDQUFXMDVDLE1BQVgsQ0FBa0JZLFVBQWhEO0FBRkMsS0FBYjtBQUlIOztBQUVEdmdDLFFBQU0sR0FBRztBQUNMLFVBQU07QUFBQzIvQjtBQUFELFFBQVcsS0FBSzE1QyxLQUF0QjtBQUNBLFFBQUlrOUMsVUFBVSxHQUFHaGtELFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ2tELElBQUYsSUFBVWhrRCxDQUFDLENBQUNpa0QsV0FBL0IsRUFBNEMsQ0FBNUMsQ0FBakI7QUFDQSxRQUFJOU4sVUFBVSxHQUFHcDJDLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMjJDLFNBQUYsSUFBZTMyQyxDQUFDLENBQUNra0Qsa0JBQXBDLEVBQXdELENBQXhELENBQWpCO0FBQ0EsUUFBSUMsVUFBVSxHQUFHcGtELFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcTZDLE1BQUYsSUFBWSxDQUFDcjZDLENBQUMsQ0FBQ29rRCxtQkFBbEMsRUFBdUQsQ0FBdkQsQ0FBakI7QUFDQSxXQUFPeHJELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBQ0k7QUFDUDtBQUFDRSxlQUFTLEVBQUcsR0FBRTZxRCxVQUFVLENBQUNDLElBQUssSUFBR0QsVUFBVSxDQUFDRSxXQUFZLElBQUdsa0QsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMyc0MsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBLGFBQWMsa0JBQWlCNFQsTUFBTSxDQUFDUSxNQUFQLEdBQWdCLHdCQUFoQixHQUEyQyxFQUFHO0FBQWhMLEtBRkcsRUFHSDtBQUNJO0FBQ0E7QUFDQW5vRCx1REFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUN1MUMsU0FBRyxFQUFFLEtBQU47QUFBYXIxQyxlQUFTLEVBQUUsaUJBQXhCO0FBQTJDbXhCLFNBQUcsRUFBRWsyQixNQUFNLENBQUM4QixPQUF2RDtBQUFnRWdDLGFBQU8sRUFBRSxLQUFLQyxXQUFMLENBQWlCem1ELElBQWpCLENBQXNCLElBQXRCO0FBQXpFLEtBQWhDLENBTkQsRUFPQ2pGLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFaTlDLFVBQVUsQ0FBQ1EsU0FBWCxHQUFxQjtBQUFqQyxLQUZKLEVBR0kvOUMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUVpOUMsVUFBVSxDQUFDd0UsVUFBWCxHQUFzQixHQUF0QixHQUEwQndKLFVBQVUsQ0FBQzlKLE1BQXJDLEdBQTRDO0FBQXhELEtBRkosRUFHSXpoRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSXFuRCxNQUFNLENBQUNoK0MsSUFIWCxDQUhKLEVBUUkzSixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSXFuRCxNQUFNLENBQUM2QixPQUhYLEVBSUksVUFKSixDQVJKLENBSEosRUFrQkl4cEQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUVpOUMsVUFBVSxDQUFDd0UsVUFBWCxHQUFzQixHQUF0QixHQUEwQndKLFVBQVUsQ0FBQzlKO0FBQWpELEtBRkosRUFHSXpoRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR1FxbkQsTUFBTSxDQUFDdHBELFdBSGYsQ0FISixDQUhKLENBbEJKLEVBK0JJMkIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0lOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFLGlDQUFaO0FBQStDa1csV0FBSyxFQUFFO0FBQUNvb0MsWUFBSSxFQUFFO0FBQVA7QUFBdEQsS0FGSixFQUdJK0ksTUFBTSxDQUFDcGtCLFVBQVAsQ0FBa0I5dUIsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FISixDQUhKLEVBUUksS0FBS2xLLEtBQUwsQ0FBV3E5QyxNQUFYLElBQXFCNW5ELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDakIsUUFEaUIsRUFFakI7QUFBQ1UsVUFBSSxFQUFFLFFBQVA7QUFBaUJSLGVBQVMsRUFBRSxnR0FBNUI7QUFBOEhrVyxXQUFLLEVBQUU7QUFBQ3UwQyxpQkFBUyxFQUFFLE1BQVo7QUFBb0JuZixpQkFBUyxFQUFFLEtBQS9CO0FBQXNDa2QsdUJBQWUsRUFBRTtBQUF2RDtBQUFySSxLQUZpQixFQUdqQjlvRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxRQUhKLENBSGlCLENBUnpCLEVBaUJJcW5ELE1BQU0sQ0FBQ3IxQyxLQUFQLElBQWdCdFMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNaLFFBRFksRUFFWjtBQUFDVSxVQUFJLEVBQUUsUUFBUDtBQUFpQlIsZUFBUyxFQUFFLDhGQUE1QjtBQUE0SGtXLFdBQUssRUFBRTtBQUFDdTBDLGlCQUFTLEVBQUUsTUFBWjtBQUFvQm5mLGlCQUFTLEVBQUUsS0FBL0I7QUFBc0NrZCx1QkFBZSxFQUFFO0FBQXZEO0FBQW5JLEtBRlksRUFHWjlvRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxPQUhKLENBSFksQ0FqQnBCLEVBMEJJLENBQUNxbkQsTUFBTSxDQUFDcjFDLEtBQVIsSUFBaUIsQ0FBQyxLQUFLL0gsS0FBTCxDQUFXcTlDLE1BQTdCLElBQXVDNW5ELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDbkMsUUFEbUMsRUFFbkM7QUFBQ1UsVUFBSSxFQUFFLFFBQVA7QUFBaUJSLGVBQVMsRUFBRSw4RUFBNUI7QUFBNEdrVyxXQUFLLEVBQUU7QUFBQ3UwQyxpQkFBUyxFQUFFLE1BQVo7QUFBb0JuZixpQkFBUyxFQUFFO0FBQS9CLE9BQW5IO0FBQTBKdnJDLGFBQU8sRUFBRSxNQUFNO0FBQUMsYUFBS29VLElBQUw7QUFBYTtBQUF2TCxLQUZtQyxFQUduQ3pVLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJLE1BSEosQ0FIbUMsQ0ExQjNDLENBL0JKLENBUEQsQ0EyRUg7QUEzRUcsS0FBUDtBQTZFSDs7QUFFRG9yRCxhQUFXLEdBQUc7QUFDVixTQUFLejlDLEtBQUwsQ0FBVzA1QyxNQUFYLENBQWtCOEIsT0FBbEIsR0FBNEIsS0FBS3g3QyxLQUFMLENBQVdnOEMsUUFBdkM7QUFDQSxTQUFLMVYsUUFBTCxDQUFjO0FBQUMyVyxnQkFBVSxFQUFFO0FBQWIsS0FBZDtBQUNIOztBQUVEejJDLE1BQUksR0FBRztBQUNILFNBQUt4RyxLQUFMLENBQVd3RyxJQUFYLENBQWdCLElBQWhCLEVBREcsQ0FFSDtBQUNIOztBQXRHMkQsQzs7Ozs7Ozs7Ozs7O0FDRmhFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVlLE1BQU1rM0MsZUFBTixTQUE4QjNyRCxtREFBSSxDQUFDeXVDLGNBQW5DLENBQWtEO0FBRTdEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCtaLFFBQU0sR0FBRztBQUNMLFVBQU07QUFBQythLGFBQUQ7QUFBVTU1QixhQUFWO0FBQW1Ca2hEO0FBQW5CLFFBQTRCLEtBQUtwOEMsS0FBTCxDQUFXa0gsUUFBN0M7QUFDQSxXQUFPblYsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUZHLEVBR0hOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJTixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCaWxDLGlEQUF6QixFQUFtQztBQUFDNWlDLFNBQUcsRUFBRSxpQkFBTjtBQUF5Qmt6QyxTQUFHLEVBQUUsaUJBQTlCO0FBQWlENVMsYUFBTyxFQUFFLElBQTFEO0FBQWdFd0MsVUFBSSxFQUFFeEMsT0FBTyxDQUFDd0MsSUFBUixJQUFnQixJQUF0RjtBQUE0RkMsVUFBSSxFQUFFekMsT0FBTyxDQUFDeUMsSUFBUixJQUFnQjtBQUFsSCxLQUFuQyxFQUE0SnpDLE9BQU8sQ0FBQ2xiLFNBQXBLLENBSEosQ0FIRyxFQVFIN25CLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUNJTixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ0lOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFLDJHQUFaO0FBQXlIcTFDLFNBQUcsRUFBRTtBQUE5SCxLQUFoQyxFQUNJMzFDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFBd0g2SSxPQUFPLENBQUMwZSxTQUFoSSxDQURKLEVBRUl3aUMsS0FBSyxDQUFDeGlDLFNBRlYsQ0FESixDQURKLENBREosQ0FSRyxDQUFQO0FBbUJIOztBQTNCNEQsQzs7Ozs7Ozs7Ozs7O0FDSmpFO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTStqQyxjQUFOLFNBQTZCNXJELG1EQUFJLENBQUN5dUMsY0FBbEMsQ0FBaUQ7QUFDNUQ3cUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVEK1osUUFBTSxHQUFHO0FBQ0wsV0FBT2hvQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQy9CeXJELFdBQUssRUFBRSw0QkFEd0I7QUFFL0JudEIsYUFBTyxFQUFFLFdBRnNCO0FBRy9CSSxVQUFJLEVBQUUsU0FIeUI7QUFJL0J4K0IsZUFBUyxFQUFFLGVBQWUsS0FBSzJOLEtBQUwsQ0FBVzNOLFNBSk47QUFLL0JELGFBQU8sRUFBRSxLQUFLNE4sS0FBTCxDQUFXNU4sT0FMVztBQU0vQm1XLFdBQUssRUFBRTtBQUFDa1IsYUFBSyxFQUFFLEtBQUt6WixLQUFMLENBQVcxTixJQUFYLElBQW1CLE1BQTNCO0FBQW1DczFCLGNBQU0sRUFBRSxLQUFLNW5CLEtBQUwsQ0FBVzFOLElBQVgsSUFBbUI7QUFBOUQ7QUFOd0IsS0FBaEMsRUFRSFAsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDdTdCLE9BQUMsRUFBRTtBQUFKLEtBQWpDLENBUkcsRUFTSDM3QixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUMwK0IsVUFBSSxFQUFFLE1BQVA7QUFBZW5ELE9BQUMsRUFBRTtBQUFsQixLQUFqQyxDQVRHLENBQVA7QUFXSDs7QUFqQjJELEM7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1td0IsWUFBTixTQUEyQjlyRCxtREFBSSxDQUFDeXVDLGNBQWhDLENBQStDO0FBRTFEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCtaLFFBQU0sR0FBRztBQUNMO0FBQ0EsUUFBSXE0QixlQUFlLEdBQUdsNUMsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMya0Qsa0JBQXJCLEVBQXlDLENBQXpDLENBQXRCO0FBQ0EsUUFBSUMsZUFBZSxHQUFHN2tELFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNmtELHFCQUFyQixFQUE0QyxDQUE1QyxDQUF0QjtBQUNBLFFBQUlDLFlBQVksR0FBSSxHQUFFN0wsZUFBZSxDQUFDNkMsWUFBYSxJQUFHN0MsZUFBZSxDQUFDOEMsY0FBZSxJQUFHOUMsZUFBZSxDQUFDK0Msa0JBQW1CLEdBQUUsS0FBS24xQyxLQUFMLENBQVdzM0IsSUFBWCxHQUFrQixNQUFJOGEsZUFBZSxDQUFDZ0QsWUFBdEMsR0FBcUQsRUFBRyxFQUFyTDtBQUNBLFFBQUk4SSxhQUFhLEdBQUc5TCxlQUFlLENBQUNoZixRQUFoQixHQUF5QixXQUE3QztBQUFtRzs7QUFDbkcsUUFBSSxLQUFLcHpCLEtBQUwsQ0FBVzgwQixPQUFmLEVBQXdCb3BCLGFBQWEsSUFBSyxJQUFHSCxlQUFlLENBQUNDLHFCQUFzQiwwQkFBM0Q7O0FBQ3hCLFFBQUksS0FBS2grQyxLQUFMLENBQVdxM0IsYUFBZixFQUE4QjtBQUMxQjZtQixtQkFBYSxJQUFJLE1BQUlILGVBQWUsQ0FBQ0kscUJBQXBCLEdBQTBDLDBCQUEzRDtBQUErSDs7QUFDL0hGLGtCQUFZLEdBQUksR0FBRTdMLGVBQWUsQ0FBQzZDLFlBQWEsSUFBRzhJLGVBQWUsQ0FBQ0sseUJBQTBCLGtDQUFpQ2hNLGVBQWUsQ0FBQzhDLGNBQWUsSUFBRzlDLGVBQWUsQ0FBQ2lNLFVBQVcsSUFBR2pNLGVBQWUsQ0FBQ2tNLGFBQWMsRUFBM047QUFDSDs7QUFDRCxVQUFNO0FBQUNwM0M7QUFBRCxRQUFhLEtBQUtsSCxLQUF4QjtBQUNBLFdBQU9qTyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsS0FERyxFQUVIO0FBQUNxQyxTQUFHLEVBQUUsY0FBTjtBQUFzQm5DLGVBQVMsRUFBRTRyRDtBQUFqQyxLQUZHLEVBR0hsc0QsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDcUMsU0FBRyxFQUFFLFVBQU47QUFBa0JrekMsU0FBRyxFQUFFLFVBQXZCO0FBQW1DcjFDLGVBQVMsRUFBRTZyRDtBQUE5QyxLQUZKLEVBR0loM0MsUUFISixDQUhHLENBQVA7QUFTSDs7QUEzQnlELEM7Ozs7Ozs7Ozs7OztBQ0Y5RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFZSxNQUFNcTNDLDBCQUFOLFNBQXlDeHNELG1EQUFJLENBQUN5dUMsY0FBOUMsQ0FBNkQ7QUFFeEU3cUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVEK1osUUFBTSxHQUFHO0FBQ0wsUUFBSTZpQyxZQUFZLEdBQUcxakQsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNncUMsb0JBQXJCLEVBQTJDLENBQTNDLENBQW5CO0FBQ0EsV0FBT3B4QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsS0FERyxFQUNJO0FBQUNFLGVBQVMsRUFBRXVxRCxZQUFZLENBQUN2bEIsYUFBYixHQUEyQixHQUEzQixHQUErQnVsQixZQUFZLENBQUN6WixvQkFBNUMsR0FBaUU7QUFBN0UsS0FESixFQUVILEtBQUtuakMsS0FBTCxDQUFXdzFCLFFBQVgsQ0FBb0JsNkIsR0FBcEIsQ0FBd0JrakQsT0FBTyxJQUFJO0FBQy9CLGFBQU96c0QsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnNzRCxzREFBekIsRUFBd0MzcUQsTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEVBQWQsRUFBa0JnMkMsT0FBbEIsRUFBMkI7QUFBQzE4QyxnQkFBUSxFQUFFLEtBQUs5QixLQUFMLENBQVc4QjtBQUF0QixPQUEzQixDQUF4QyxDQUFQO0FBQ0gsS0FGRCxDQUZHLENBQVA7QUFNSDs7QUFkdUUsQzs7Ozs7Ozs7Ozs7O0FDSjVFO0FBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7QUFHQSxNQUFNNVAsS0FBSyxHQUFHSCxtREFBSSxDQUFDcWtCLEtBQW5CO0FBRWUsTUFBTXkwQixNQUFOLFNBQXFCMzRDLEtBQUssQ0FBQ2dtQyxTQUEzQixDQUFxQztBQUNoRHdtQixjQUFZLENBQUNqcUQsS0FBRCxFQUFRO0FBQ2hCLFNBQUt1TCxLQUFMLENBQVd2TCxLQUFYLEdBQW1CQSxLQUFuQjtBQUNBLFFBQUksT0FBTyxLQUFLdUwsS0FBTCxDQUFXOEIsUUFBbEIsSUFBOEIsVUFBbEMsRUFBOEMsS0FBSzlCLEtBQUwsQ0FBVzhCLFFBQVgsQ0FBb0JyTixLQUFwQixFQUEyQixJQUEzQjtBQUM5QyxTQUFLeTFDLFdBQUw7QUFDSDs7QUFDRG53QixRQUFNLEdBQUc7QUFDTCxRQUFJNDJCLElBQUksR0FBR3ozQyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXVsRCxJQUF2QixJQUErQnhsRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXdsRCxTQUF6QyxJQUFzRHpsRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXlrQyxLQUFuRixFQUEwRixDQUExRixFQUE2RnprQyxPQUF4RztBQUNBLFFBQUl5bEQsWUFBWSxHQUFHM2xELFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVOUgsV0FBVixLQUEwQixtQkFBMUQsRUFBK0UsQ0FBL0UsRUFBa0Y4SCxPQUFyRztBQUNBLFdBQVE7QUFBTSxlQUFTLEVBQUV1M0MsSUFBSSxDQUFDaU8sU0FBTCxDQUFlRSxVQUFoQztBQUE0QyxXQUFLLEVBQUVuTyxJQUFJLENBQUNvTyxLQUFMLENBQVdDO0FBQTlELE9BQ0M5c0QsS0FBSyxDQUFDQyxhQUFOLENBQW9CMHNELFlBQXBCLEVBQWtDL3FELE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLEtBQUt4SSxLQUF2QixFQUE4QjtBQUM3RDhCLGNBQVEsRUFBRSxLQUFLNDhDLFlBQUwsQ0FBa0IxbkQsSUFBbEIsQ0FBdUIsSUFBdkI7QUFEbUQsS0FBOUIsQ0FBbEMsQ0FERCxDQUFSO0FBSVk7Ozs7Ozs7OztBQVNmOztBQXRCK0M7QUF1Qm5ELEM7Ozs7Ozs7Ozs7OztBQzlCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVlLE1BQU1pb0QsaUJBQU4sU0FBZ0NsdEQsbURBQUksQ0FBQ3l1QyxjQUFyQyxDQUFvRDtBQUUvRDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRUQrWixRQUFNLEdBQUc7QUFDTCxVQUFNO0FBQUN6cEIsV0FBRDtBQUFRd0MsY0FBUjtBQUFrQmtnQztBQUFsQixRQUE0QixLQUFLaHpCLEtBQXZDO0FBQ0EsVUFBTWsvQyxlQUFlLEdBQUdsc0IsTUFBTSxHQUFHamhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ3FDLFNBQUcsRUFBRSxjQUFOO0FBQXNCbkMsZUFBUyxFQUFFLFVBQWpDO0FBQTZDRCxhQUFPLEVBQUU0Z0MsTUFBTSxDQUFDNWdDO0FBQTdELEtBQW5DLEVBQTBHNGdDLE1BQU0sQ0FBQzFpQyxLQUFqSCxDQUFILEdBQTZILElBQTNKO0FBQ0EsV0FBTyxDQUFDeUIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm03QyxzREFBekIsRUFBd0M7QUFBQzl4QyxVQUFJLEVBQUVsTDtBQUFQLEtBQXhDLENBQUQsRUFDQzR1RCxlQURELEVBRUNwc0QsUUFBUSxDQUFDd0ksR0FBVCxDQUFhb1ksT0FBTyxJQUFJO0FBQ3BCLGFBQU8zaEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QjAyQywrQ0FBekIsRUFBaUM7QUFBQzkxQyxVQUFFLEVBQUUyZ0IsT0FBTyxDQUFDM2dCLEVBQWI7QUFBaUJ5QixXQUFHLEVBQUVrZixPQUFPLENBQUMzZ0IsRUFBOUI7QUFBa0NpRixZQUFJLEVBQUUwYixPQUF4QztBQUFpRHdpQixlQUFPLEVBQUU1aUMsd0RBQWMsQ0FBQ29nQixPQUFPLENBQUMzZ0IsRUFBVCxDQUF4RTtBQUFzRitPLGdCQUFRLEVBQUUsQ0FBQy9PLEVBQUQsRUFBS21qQyxPQUFMLEtBQWlCO0FBQ3JKLGVBQUtsMkIsS0FBTCxDQUFXOEIsUUFBWCxDQUFvQi9PLEVBQXBCLEVBQXdCbWpDLE9BQXhCO0FBQ0g7QUFGdUMsT0FBakMsQ0FBUDtBQUdILEtBSkQsQ0FGRCxDQUFQO0FBT0g7O0FBaEI4RCxDOzs7Ozs7Ozs7Ozs7QUNObkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFZSxNQUFNaXBCLGlCQUFOLFNBQWdDcHRELG1EQUFJLENBQUN5dUMsY0FBckMsQ0FBb0Q7QUFFL0Q3cUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVEK1osUUFBTSxHQUFHO0FBQ0wsVUFBTTtBQUFDam5CO0FBQUQsUUFBYSxLQUFLa04sS0FBeEI7QUFDQSxRQUFJNDhDLFlBQVksR0FBRzFqRCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dxQyxvQkFBckIsRUFBMkMsQ0FBM0MsQ0FBbkI7QUFDQSxXQUFPcHhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0UsZUFBUyxFQUFFdXFELFlBQVksQ0FBQ3ZsQixhQUFiLEdBQTJCLEdBQTNCLEdBQStCdWxCLFlBQVksQ0FBQ3paLG9CQUE1QyxHQUFpRTtBQUE3RSxLQUZHLEVBR0hweEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5Qm03QyxzREFBekIsRUFBd0M7QUFBQzl4QyxVQUFJLEVBQUUsS0FBS3dFLEtBQUwsQ0FBVzFQO0FBQWxCLEtBQXhDLENBSEcsRUFJSCxLQUFLMFAsS0FBTCxDQUFXZ3pCLE1BQVgsSUFBcUJqaEMsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixRQUF6QixFQUFtQztBQUFDcUMsU0FBRyxFQUFFLGNBQU47QUFBc0JuQyxlQUFTLEVBQUUsVUFBakM7QUFBNkNELGFBQU8sRUFBRSxLQUFLNE4sS0FBTCxDQUFXZ3pCLE1BQVgsQ0FBa0I1Z0M7QUFBeEUsS0FBbkMsRUFBcUgsS0FBSzROLEtBQUwsQ0FBV2d6QixNQUFYLENBQWtCMWlDLEtBQXZJLENBSmxCLEVBS0h3QyxRQUFRLENBQUN3SSxHQUFULENBQWFvWSxPQUFPLElBQUk7QUFDcEIsYUFBTzNoQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCMDJDLCtDQUF6QixFQUFpQztBQUFDOTFDLFVBQUUsRUFBRTJnQixPQUFPLENBQUMzZ0IsRUFBYjtBQUFpQnlCLFdBQUcsRUFBRWtmLE9BQU8sQ0FBQzNnQixFQUE5QjtBQUFrQ2lGLFlBQUksRUFBRTBiLE9BQXhDO0FBQWlEd2lCLGVBQU8sRUFBRTVpQyx3REFBYyxDQUFDb2dCLE9BQU8sQ0FBQzNnQixFQUFULENBQXhFO0FBQXNGK08sZ0JBQVEsRUFBRSxDQUFDL08sRUFBRCxFQUFLbWpDLE9BQUwsS0FBaUI7QUFDakosZUFBS2wyQixLQUFMLENBQVc4QixRQUFYLENBQW9CL08sRUFBcEIsRUFBd0JtakMsT0FBeEI7QUFDSDtBQUZtQyxPQUFqQyxDQUFQO0FBR0gsS0FKRCxDQUxHLENBQVA7QUFXSDs7QUFwQjhELEM7Ozs7Ozs7Ozs7OztBQ05uRTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1rcEIsaUJBQU4sU0FBZ0NydEQsbURBQUksQ0FBQ3l1QyxjQUFyQyxDQUFvRDtBQUMvRDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0gsR0FIOEQsQ0FJbkU7OztBQUNJK1osUUFBTSxHQUFHO0FBQ0wsV0FBT2hvQixtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQ0gsSUFERyxFQUVIO0FBQUNFLGVBQVMsRUFBRSxvREFBa0Q2RyxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2ttRCxXQUFyQixFQUFrQyxDQUFsQyxFQUFxQ0E7QUFBbkcsS0FGRyxFQUdILEtBQUtyL0MsS0FBTCxDQUFXeEUsSUFIUixDQUFQO0FBS0g7O0FBWDhELEM7Ozs7Ozs7Ozs7OztBQ0ZuRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVlLE1BQU04akQsV0FBTixTQUEwQnZ0RCxtREFBSSxDQUFDeXVDLGNBQS9CLENBQThDO0FBRXpEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxVQUFNdS9DLEVBQUUsR0FBR3ZwRCxRQUFRLENBQUM4TyxhQUFULENBQXVCLG9DQUF2QixDQUFYO0FBQ0EsUUFBSXk2QyxFQUFKLEVBQVEsS0FBS0MsR0FBTCxHQUFXRCxFQUFFLENBQUNsdEQsU0FBZDtBQUNSLFVBQU1vdEQsRUFBRSxHQUFHenBELFFBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsMERBQXZCLENBQVg7QUFDQSxRQUFJMjZDLEVBQUosRUFBUSxLQUFLQyxJQUFMLEdBQVlELEVBQUUsQ0FBQ3B0RCxTQUFmO0FBQ1IsVUFBTTZrQyxJQUFJLEdBQUdsaEMsUUFBUSxDQUFDNFMsZ0JBQVQsQ0FBMEIscUNBQTFCLENBQWI7O0FBQ0EsU0FBSyxNQUFNakMsT0FBWCxJQUFzQnV3QixJQUF0QixFQUE0QjtBQUN4QnZ3QixhQUFPLENBQUMySyxnQkFBUixDQUF5QixPQUF6QixFQUFrQyxNQUFNO0FBQ3BDLGFBQUtnMUIsUUFBTCxDQUFjO0FBQ1Y5dUIsa0JBQVEsRUFBRTtBQURBLFNBQWQ7QUFHSCxPQUpEO0FBS0g7O0FBRUQsU0FBS3l1QixlQUFMO0FBQ0EsU0FBSzd6QyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhNEUsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBSzJvRCxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUIzb0QsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBbkI7QUFDSDs7QUFFRGl2QyxpQkFBZSxHQUFHO0FBQ2QsVUFBTTE0QixJQUFJLEdBQUcsSUFBYjtBQUNBQSxRQUFJLENBQUNqUixLQUFMLEdBQWE7QUFDVGtiLGNBQVEsRUFBRSxJQUREO0FBRVRqbkIsV0FBSyxFQUFFZ2QsSUFBSSxDQUFDdk4sS0FBTCxDQUFXelA7QUFGVCxLQUFiO0FBS0EsVUFBTXF2RCxnQkFBZ0IsR0FBR3J5QyxJQUFJLENBQUN2TixLQUFMLENBQVd6UCxLQUFYLENBQWlCYSxJQUFqQixDQUFzQjR1QixJQUFJLElBQUk7QUFDbkQsYUFBT0EsSUFBSSxDQUFDeEksUUFBWjtBQUNILEtBRndCLENBQXpCOztBQUdBLFFBQUlvb0MsZ0JBQUosRUFBc0I7QUFDbEJyeUMsVUFBSSxDQUFDalIsS0FBTCxDQUFXa2IsUUFBWCxHQUFzQm9vQyxnQkFBZ0IsQ0FBQzdzRCxFQUF2QztBQUNIO0FBQ0o7O0FBRURnbkIsUUFBTSxHQUFHO0FBQ0wsVUFBTXhNLElBQUksR0FBRyxJQUFiO0FBQ0EsVUFBTTtBQUFDdXJCO0FBQUQsUUFBZXZyQixJQUFJLENBQUN2TixLQUExQjtBQUNBLFVBQU07QUFBQ3pQLFdBQUQ7QUFBUWluQjtBQUFSLFFBQW9CakssSUFBSSxDQUFDalIsS0FBL0I7QUFDQSxXQUFPdkssbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUNILEtBREcsRUFFSCxJQUZHLEVBR0hKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJrcUQsd0RBQXpCLEVBQTBDLElBQTFDLENBSEcsRUFJSHRxRCxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCb3FELHFEQUF6QixFQUF1QztBQUFDL2dELFVBQUksRUFBRXM5QixVQUFQO0FBQW1COUYsWUFBTSxFQUFFLEtBQUtoekIsS0FBTCxDQUFXKzRCO0FBQXRDLEtBQXZDLENBSkcsRUFLSHhvQyxLQUFLLENBQUMrSyxHQUFOLENBQVUwa0IsSUFBSSxJQUFJO0FBQ2QsWUFBTTtBQUFDanRCLFVBQUQ7QUFBS3lJO0FBQUwsVUFBYXdrQixJQUFuQjtBQUNBLGFBQU9qdUIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QnFxRCxtREFBekIsRUFBcUM7QUFBQ2hvRCxXQUFHLEVBQUV6QixFQUFOO0FBQVV5a0IsZ0JBQVEsRUFBRUEsUUFBUSxLQUFLemtCLEVBQWpDO0FBQXFDeUksWUFBSSxFQUFFQSxJQUEzQztBQUFpRHpJLFVBQUUsRUFBRUEsRUFBckQ7QUFBeURYLGVBQU8sRUFBRW1iLElBQUksQ0FBQ25iO0FBQXZFLE9BQXJDLENBQVA7QUFDSCxLQUhELENBTEcsQ0FBUDtBQVVIOztBQUVEdXRELGFBQVcsQ0FBQ3htRCxDQUFELEVBQUk7QUFDWEEsS0FBQyxDQUFDcWMsTUFBRixDQUFTbmpCLFNBQVQsR0FBcUIsS0FBS210RCxHQUExQjtBQUNIOztBQUVEcHRELFNBQU8sQ0FBQ1csRUFBRCxFQUFLO0FBQ1IsVUFBTXdzRCxFQUFFLEdBQUd2cEQsUUFBUSxDQUFDOE8sYUFBVCxDQUF1QixtQ0FBdkIsQ0FBWDs7QUFDQSxRQUFJeTZDLEVBQUosRUFBUTtBQUNKQSxRQUFFLENBQUMvZ0MsbUJBQUgsQ0FBdUIsT0FBdkIsRUFBZ0MsS0FBS21oQyxXQUFyQztBQUNBSixRQUFFLENBQUNqdUMsZ0JBQUgsQ0FBb0IsT0FBcEIsRUFBNkIsS0FBS3F1QyxXQUFsQztBQUNBSixRQUFFLENBQUNsdEQsU0FBSCxHQUFlLEtBQUtxdEQsSUFBcEI7QUFDSDs7QUFFRCxTQUFLcFosUUFBTCxDQUFjO0FBQUM5dUIsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNBLFNBQUs4dUIsUUFBTCxDQUFjO0FBQUM5dUIsY0FBUSxFQUFFemtCO0FBQVgsS0FBZDtBQUVBLFFBQUksS0FBS2lOLEtBQUwsQ0FBVzVOLE9BQWYsRUFBd0IsS0FBSzROLEtBQUwsQ0FBVzVOLE9BQVgsQ0FBbUJXLEVBQW5CO0FBQzNCOztBQXJFd0QsQzs7Ozs7Ozs7Ozs7O0FDTjdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLE1BQU04c0QsVUFBTixTQUF5Qjl0RCxtREFBSSxDQUFDeXVDLGNBQTlCLENBQTZDO0FBRXhEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLOEIsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWM5SyxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0g7O0FBRUQ4SyxVQUFRLEdBQUc7QUFDUCxTQUFLOUIsS0FBTCxDQUFXazJCLE9BQVgsR0FBcUIsQ0FBQyxLQUFLbDJCLEtBQUwsQ0FBV2syQixPQUFqQztBQUNBLFNBQUtsMkIsS0FBTCxDQUFXOEIsUUFBWCxDQUFvQixLQUFLOUIsS0FBTCxDQUFXak4sRUFBL0IsRUFBbUMsS0FBS2lOLEtBQUwsQ0FBV2syQixPQUE5QztBQUNIOztBQUVEbmMsUUFBTSxHQUFHO0FBQ0wsVUFBTTtBQUFDdmUsVUFBRDtBQUFPeEk7QUFBUCxRQUFlLEtBQUtnTixLQUFMLENBQVdoSSxJQUFoQztBQUNBLFdBQU9qRyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ0hOLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSU4sbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixJQUF6QixFQUErQjtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUEvQixFQUF3R21KLElBQXhHLENBREosRUFFSXpKLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIwMkMsMERBQXpCLEVBQWlDO0FBQUMvbUMsY0FBUSxFQUFFLEtBQUtBLFFBQWhCO0FBQTBCbzBCLGFBQU8sRUFBRSxLQUFLbDJCLEtBQUwsQ0FBV2syQjtBQUE5QyxLQUFqQyxDQUZKLENBREcsRUFLSG5rQyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNFLGVBQVMsRUFBRSw2Q0FBWjtBQUEyRGtXLFdBQUssRUFBRTtBQUFDb29DLFlBQUksRUFBRTtBQUFQO0FBQWxFLEtBQWhDLEVBQXVIMzlDLElBQXZILENBTEcsQ0FBUDtBQU9IOztBQXJCdUQsQzs7Ozs7Ozs7Ozs7O0FDSDVEO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTThzRCxnQkFBTixTQUErQi90RCxtREFBSSxDQUFDeXVDLGNBQXBDLENBQW1EO0FBQzlEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCtaLFFBQU0sR0FBRztBQUNMLFdBQU9ob0IsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUErQjtBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUEvQixFQUFpRSxLQUFLMk4sS0FBTCxDQUFXeEUsSUFBNUUsRUFBa0YsS0FBS3dFLEtBQUwsQ0FBV2d6QixNQUE3RixDQUFQO0FBQ0g7O0FBUDZELEM7Ozs7Ozs7Ozs7OztBQ0ZsRTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU0rc0IsY0FBTixTQUE2Qmh1RCxtREFBSSxDQUFDeXVDLGNBQWxDLENBQWlEO0FBRTVEN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLaW1DLGVBQUw7QUFDQSxTQUFLN3pDLE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWE0RSxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDSDs7QUFFRGl2QyxpQkFBZSxHQUFHO0FBQ2QsU0FBSzNwQyxLQUFMLEdBQWE7QUFDVGtiLGNBQVEsRUFBRSxLQUFLeFgsS0FBTCxDQUFXd1gsUUFBWCxJQUF1QjtBQUR4QixLQUFiO0FBR0g7O0FBRUR1QyxRQUFNLEdBQUc7QUFDTCxXQUFPaG9CLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0UsZUFBUyxFQUFHLGtCQUFpQixLQUFLMk4sS0FBTCxDQUFXd1gsUUFBWCxHQUFzQixXQUF0QixHQUFvQyxFQUFHLEVBQXJFO0FBQXdFcGxCLGFBQU8sRUFBRSxLQUFLQTtBQUF0RixLQUZHLEVBR0gsS0FBSzROLEtBQUwsQ0FBV3hFLElBSFIsQ0FBUDtBQUtIOztBQUVEcEosU0FBTyxHQUFHO0FBQ04sUUFBSSxLQUFLNE4sS0FBTCxDQUFXNU4sT0FBZixFQUF3QjtBQUNwQixXQUFLNE4sS0FBTCxDQUFXNU4sT0FBWCxDQUFtQixLQUFLNE4sS0FBTCxDQUFXak4sRUFBOUI7QUFDSDtBQUNKOztBQTFCMkQsQzs7Ozs7Ozs7Ozs7O0FDRmhFO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTWl0RCxtQkFBTixTQUFrQ2p1RCxtREFBSSxDQUFDeXVDLGNBQXZDLENBQXNEO0FBQ2pFN3FDLGFBQVcsQ0FBQ3FLLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFRCtaLFFBQU0sR0FBRztBQUNMLFdBQU9ob0IsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUU7QUFBWixLQUFoQyxDQUFQO0FBQ0g7O0FBUGdFLEM7Ozs7Ozs7Ozs7OztBQ0ZyRTtBQUFBO0FBQWE7O0FBQ2I7QUFDQSxNQUFNSCxLQUFLLEdBQUdILG1EQUFJLENBQUNxa0IsS0FBbkI7QUFFQSxNQUFNNnBDLGVBQWUsR0FBRy9tRCxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQyttRCxRQUFyQixFQUErQixDQUEvQixDQUF4QjtBQUdlLHlFQUFTdG1DLFNBQVQsRUFBb0I4USxRQUFwQixFQUE4QjtBQUN6QyxRQUFNeTFCLFVBQU4sU0FBeUJqdUQsS0FBSyxDQUFDa3VELGFBQS9CLENBQTZDO0FBQ3pDenFELGVBQVcsQ0FBQ3FLLEtBQUQsRUFBTztBQUNkLFlBQU1BLEtBQU47QUFDQSxXQUFLcWdELFNBQUwsR0FBaUIsSUFBSUosZUFBZSxDQUFDQyxRQUFwQixFQUFqQjtBQUVBLFdBQUs1akQsS0FBTCxHQUFheEksTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEVBQWQsRUFBa0IsS0FBSzgzQyxjQUFMLEVBQWxCLENBQWI7QUFDSDs7QUFFRG5vQixxQkFBaUIsR0FBRTtBQUNmLFVBQUk1cUIsSUFBSSxHQUFHLElBQVg7O0FBQ0EsV0FBSzh5QyxTQUFMLENBQWU3akQsS0FBZixDQUFxQixHQUFyQixFQUEyQixZQUFXO0FBQ2xDLGVBQU8rUSxJQUFJLENBQUMrNEIsUUFBTCxDQUFjLzRCLElBQUksQ0FBQyt5QyxjQUFMLEVBQWQsQ0FBUDtBQUNILE9BRkQ7QUFHSDs7QUFFRGxvQix3QkFBb0IsR0FBRTtBQUNsQixXQUFLaW9CLFNBQUwsQ0FBZTU3QyxJQUFmO0FBQ0g7O0FBRURpaUMsc0JBQWtCLENBQUM1cEMsUUFBRCxFQUFVO0FBQ3hCLFVBQUdBLFFBQVEsQ0FBQ1AsVUFBVCxDQUFvQnk0QyxHQUFwQixLQUE0QixLQUFLaDFDLEtBQUwsQ0FBV3pELFVBQVgsQ0FBc0J5NEMsR0FBbEQsSUFBeURsNEMsUUFBUSxDQUFDUCxVQUFULENBQW9CQyxLQUFwQixLQUE4QixLQUFLd0QsS0FBTCxDQUFXekQsVUFBWCxDQUFzQkMsS0FBaEgsRUFBc0g7QUFDdEgsV0FBSzhwQyxRQUFMLENBQWMsS0FBS2dhLGNBQUwsRUFBZDtBQUNIOztBQUVEQSxrQkFBYyxHQUFFO0FBQ1osVUFBSS9qRCxVQUFVLEdBQUcsS0FBS3lELEtBQUwsQ0FBV3pELFVBQTVCO0FBQ0EsVUFBSTdJLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFMLEtBQWEsR0FBdkI7O0FBQ0EsVUFBRyxRQUFRNkksVUFBVSxDQUFDeTRDLEdBQXRCLEVBQTBCO0FBQ3RCLGVBQU8sS0FBS3VMLE9BQUwsQ0FBYTdzRCxHQUFiLEVBQWtCOHNELFNBQVMsQ0FBQ2prRCxVQUFVLENBQUN5NEMsR0FBWixDQUFULEdBQTRCLEdBQTlDLENBQVA7QUFDSDs7QUFDRCxVQUFHLFFBQVF6NEMsVUFBVSxDQUFDQyxLQUF0QixFQUE0QjtBQUN4QixlQUFPLEtBQUsrakQsT0FBTCxDQUFhQyxTQUFTLENBQUNqa0QsVUFBVSxDQUFDQyxLQUFaLENBQVQsR0FBOEIsR0FBM0MsRUFBZ0Q5SSxHQUFoRCxDQUFQO0FBQ0g7O0FBQ0QsYUFBTztBQUNIK3NELGFBQUssRUFBRSxDQURKO0FBRUhDLGVBQU8sRUFBRSxDQUZOO0FBR0hDLGVBQU8sRUFBRTtBQUhOLE9BQVA7QUFLSDs7QUFFREMsY0FBVSxDQUFDQyxNQUFELEVBQVNDLFVBQVQsRUFBb0I7QUFDMUIsVUFBR0EsVUFBVSxLQUFLaHFELFNBQWxCLEVBQTRCZ3FELFVBQVUsR0FBRyxLQUFiO0FBQzVCLFVBQUdBLFVBQVUsSUFBSUQsTUFBTSxJQUFJLENBQTNCLEVBQTZCLE9BQU8sQ0FBQyxDQUFSO0FBQzdCLFVBQUdBLE1BQU0sR0FBRyxFQUFaLEVBQWUsT0FBTyxNQUFJQSxNQUFYO0FBQ2YsYUFBT0EsTUFBUDtBQUNIOztBQUVETixXQUFPLENBQUNuTixTQUFELEVBQVkxL0MsR0FBWixFQUFnQjtBQUNuQixVQUFJK3NELEtBQUssR0FBRzdpRCxJQUFJLENBQUNDLEdBQUwsQ0FBU25LLEdBQUcsR0FBRzAvQyxTQUFmLEVBQTBCLENBQTFCLENBQVo7QUFDQSxVQUFJdU4sT0FBTyxHQUFHL2lELElBQUksQ0FBQ3ErQyxLQUFMLENBQVd3RSxLQUFYLElBQW9CLEVBQWxDO0FBQ0EsVUFBSUMsT0FBTyxHQUFHOWlELElBQUksQ0FBQ3ErQyxLQUFMLENBQVd3RSxLQUFLLEdBQUcsRUFBbkIsSUFBeUIsRUFBdkM7QUFDQSxhQUFPO0FBQ0hBLGFBQUssRUFBRTdpRCxJQUFJLENBQUNxK0MsS0FBTCxDQUFXd0UsS0FBSyxHQUFHLElBQW5CLElBQTJCLEVBRC9CO0FBRUhDLGVBRkc7QUFHSEM7QUFIRyxPQUFQO0FBS0g7O0FBRUQ1bUMsVUFBTSxHQUFFO0FBQ0osVUFBSS9aLEtBQUssR0FBRyxLQUFLQSxLQUFqQjtBQUNBLFVBQUl6RCxVQUFVLEdBQUd5RCxLQUFLLENBQUN6RCxVQUF2Qjs7QUFFQSxVQUFJd2tELFNBQVMsR0FBRyxVQUFTL2dELEtBQVQsRUFBZ0J6UCxLQUFoQixFQUF1QjtBQUNuQyxZQUFJLFFBQVF5UCxLQUFaLEVBQW1CLE9BQU8sRUFBUDtBQUVuQixZQUFJekQsVUFBVSxHQUFHLEVBQWpCO0FBQ0EsWUFBSXhILElBQUksR0FBR2pCLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWlMLEtBQVosQ0FBWDs7QUFFQSxhQUFLLElBQUlxRyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHdFIsSUFBSSxDQUFDcUQsTUFBekIsRUFBaUNpTyxDQUFDLEVBQWxDLEVBQXFDO0FBQ2pDLGNBQUk3UixHQUFHLEdBQUdPLElBQUksQ0FBQ3NSLENBQUQsQ0FBZDs7QUFDQSxjQUFHLENBQUM5VixLQUFLLENBQUNxYyxPQUFOLENBQWNwWSxHQUFkLENBQUQsSUFBdUIsQ0FBMUIsRUFBNEI7QUFDeEIrSCxzQkFBVSxDQUFDL0gsR0FBRCxDQUFWLEdBQWtCd0wsS0FBSyxDQUFDeEwsR0FBRCxDQUF2QjtBQUNIO0FBQ0o7O0FBRUQsZUFBTytILFVBQVA7QUFDSCxPQWRlLENBY2R5RCxLQWRjLEVBY1AsQ0FBQyxZQUFELENBZE8sQ0FBaEI7O0FBZ0JBLFVBQUkxRCxLQUFLLEdBQUcsS0FBS0EsS0FBakI7QUFDQSxVQUFJbWtELEtBQUssR0FBR25rRCxLQUFLLENBQUNta0QsS0FBbEI7QUFDQSxVQUFJQyxPQUFPLEdBQUdwa0QsS0FBSyxDQUFDb2tELE9BQXBCO0FBQ0EsVUFBSUMsT0FBTyxHQUFHcmtELEtBQUssQ0FBQ3FrRCxPQUFwQjtBQUNBLFVBQUkzb0QsSUFBSSxHQUFHO0FBQ1B5b0QsYUFBSyxFQUFFLEtBQUtHLFVBQUwsQ0FBZ0JILEtBQWhCLEVBQXVCLENBQUMsQ0FBeEIsQ0FEQTtBQUVQQyxlQUFPLEVBQUUsS0FBS0UsVUFBTCxDQUFnQkYsT0FBaEIsQ0FGRjtBQUdQQyxlQUFPLEVBQUUsS0FBS0MsVUFBTCxDQUFnQkQsT0FBaEI7QUFIRixPQUFYOztBQUtBLFVBQUdwa0QsVUFBVSxDQUFDeTRDLEdBQVgsS0FBbUIsSUFBdEIsRUFBMkI7QUFDdkIsZUFBTzlpRCxLQUFLLENBQUNDLGFBQU4sQ0FBb0J5bkIsU0FBcEIsRUFBK0I5bEIsTUFBTSxDQUFDMFUsTUFBUCxDQUFjLEVBQWQsRUFBa0J1NEMsU0FBbEIsRUFBNkI7QUFDL0R6bUQsaUJBQU8sRUFBRW93QixRQUFRLENBQUNzMkIsMkJBQVQsQ0FBcUNsMEMsTUFBckMsQ0FBNEM5VSxJQUE1QztBQURzRCxTQUE3QixDQUEvQixDQUFQO0FBR0g7O0FBQ0QsVUFBR3VFLFVBQVUsQ0FBQ0MsS0FBWCxLQUFxQixJQUF4QixFQUE2QjtBQUN6QixlQUFPdEssS0FBSyxDQUFDQyxhQUFOLENBQW9CeW5CLFNBQXBCLEVBQStCOWxCLE1BQU0sQ0FBQzBVLE1BQVAsQ0FBYyxFQUFkLEVBQWtCdTRDLFNBQWxCLEVBQTZCO0FBQy9Eem1ELGlCQUFPLEVBQUVvd0IsUUFBUSxDQUFDdTJCLDZCQUFULENBQXVDbjBDLE1BQXZDLENBQThDOVUsSUFBOUM7QUFEc0QsU0FBN0IsQ0FBL0IsQ0FBUDtBQUdIOztBQUNELGFBQU8sSUFBUDtBQUNIOztBQWxHd0M7O0FBb0c3QyxTQUFPbW9ELFVBQVA7QUFDSDtBQUFBOztBQUVELFNBQVNLLFNBQVQsQ0FBbUJybkQsQ0FBbkIsRUFBc0I7QUFDbEIsU0FBTyxDQUFDLEtBQUtBLENBQU4sRUFBU2YsTUFBVCxHQUFrQixFQUFsQixHQUF1QixNQUFNZSxDQUE3QixHQUFpQ0EsQ0FBeEM7QUFDSCxDOzs7Ozs7Ozs7Ozs7QUNqSEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRWUsTUFBTStuRCxTQUFOLFNBQXdCbnZELG1EQUFJLENBQUN5dUMsY0FBN0IsQ0FBNEM7QUFFdkQ3cUMsYUFBVyxDQUFDcUssS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUs1TixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhNEUsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0g7O0FBRUQraUIsUUFBTSxHQUFHO0FBQ0wsUUFBSW9uQyxXQUFXLEdBQUdqb0QsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNpb0QsY0FBckIsRUFBcUMsQ0FBckMsQ0FBbEI7QUFDQSxRQUFJQyxlQUFlLEdBQUdub0QsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUNnbUIsU0FBRixJQUFlaG1CLENBQUMsQ0FBQ21vRCxXQUFqQixJQUFnQ25vRCxDQUFDLENBQUNvb0QsZUFBckQsRUFBc0UsQ0FBdEUsQ0FBdEI7QUFDQSxXQUFPeHZELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFLHFCQUFtQjh1RCxXQUFXLENBQUNDO0FBQTNDLEtBQWhDLEVBQ0hydkQsbURBQUksQ0FBQ3FrQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDRSxlQUFTLEVBQUUsV0FBUzh1RCxXQUFXLENBQUMvRTtBQUFqQyxLQUFoQyxFQUNJcnFELG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0UsZUFBUyxFQUFFZ3ZELGVBQWUsQ0FBQ2xpQztBQUE1QixLQUFoQyxFQUNJcHRCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsS0FBekIsRUFDSTtBQUFDRSxlQUFTLEVBQUUsZUFBYWd2RCxlQUFlLENBQUNDLFdBQXpDO0FBQXNEbHZELGFBQU8sRUFBRSxLQUFLQTtBQUFwRSxLQURKLEVBRUlMLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUJ3MUMsNkNBQXpCLEVBQStCLElBQS9CLENBRkosQ0FESixFQUtJNTFDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFLGNBQVlndkQsZUFBZSxDQUFDRztBQUF4QyxLQUZKLEVBR0ksS0FISixDQUxKLENBREosQ0FERyxDQUFQO0FBZUg7O0FBRURwdkQsU0FBTyxHQUFHO0FBQ04sUUFBSSxLQUFLNE4sS0FBTCxDQUFXNU4sT0FBZixFQUF3QjtBQUNwQixXQUFLNE4sS0FBTCxDQUFXNU4sT0FBWDtBQUNIOztBQUNELFVBQU1rdkQsV0FBVyxHQUFHdHJELFFBQVEsQ0FBQzhPLGFBQVQsQ0FBdUIsTUFBSTVMLFNBQVMsQ0FBQ3ZFLEdBQVYsQ0FBY3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbW9ELFdBQUYsSUFBaUJub0QsQ0FBQyxDQUFDc29ELFdBQXRDLEVBQW1ELENBQW5ELEVBQXNESCxXQUF0RCxDQUFrRXg3QyxLQUFsRSxDQUF3RSxHQUF4RSxFQUE2RSxDQUE3RSxDQUEzQixDQUFwQjtBQUNBLFFBQUl3N0MsV0FBSixFQUFpQkEsV0FBVyxDQUFDM3ZELEtBQVo7QUFDcEI7O0FBakNzRCxDOzs7Ozs7Ozs7Ozs7QUNKM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUFZQTtDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxJQUFJK3ZELGNBQUo7O0FBQ0EsU0FBU0MsaUJBQVQsR0FBNEI7QUFDM0IsTUFBR0QsY0FBSCxFQUFrQixPQUFPQSxjQUFQO0FBQ2xCLFNBQU9BLGNBQWMsR0FBRzN3RCwrREFBYyxDQUFDRyxXQUFmLENBQTJCLFNBQTNCLEVBQXNDLGNBQXRDLENBQXhCO0FBQ0E7O0FBQ0QsSUFBSTB3RCxhQUFKOztBQUNBLFNBQVNDLGdCQUFULEdBQTJCO0FBQzFCLE1BQUdELGFBQUgsRUFBaUIsT0FBT0EsYUFBUDtBQUNqQixTQUFPQSxhQUFhLEdBQUc3d0QsK0RBQWMsQ0FBQ0csV0FBZixDQUEyQixPQUEzQixFQUFvQyxnQkFBcEMsQ0FBdkI7QUFDQTs7QUFFRCxNQUFNNHdELFFBQVEsR0FBRyxVQUFTQyxXQUFULEVBQXNCO0FBQ25DLFFBQU1DLFNBQVMsR0FBR0QsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlejdDLFdBQWYsS0FBK0J5N0MsV0FBVyxDQUFDeDdDLEtBQVosQ0FBa0IsQ0FBbEIsQ0FBakQ7QUFDQSxRQUFNMDdDLFlBQVksR0FBR04saUJBQWlCLEdBQUksVUFBU0ssU0FBVSxFQUF2QixDQUF0QztBQUNBLE1BQUlDLFlBQUosRUFBa0IsT0FBT0EsWUFBUDtBQUNsQixTQUFPLElBQVA7QUFDSCxDQUxEOztBQU9BLE1BQU1DLFdBQVcsR0FBRyxVQUFTSCxXQUFULEVBQXNCO0FBQ3RDLFNBQU9ELFFBQVEsQ0FBQ0MsV0FBRCxDQUFSLEdBQXdCLElBQXhCLEdBQStCLEtBQXRDO0FBQ0gsQ0FGRDs7QUFJQSxNQUFNSSxJQUFJLEdBQUcsVUFBUzF0RCxLQUFULEVBQWdCO0FBQ3pCLFNBQVEsR0FBRUEsS0FBTSxJQUFoQjtBQUNILENBRkQ7QUFJQTs7Ozs7Ozs7QUFPZSxNQUFNMnRELGVBQU4sQ0FBc0I7QUFDcEM7Ozs7Ozs7Ozs7O0FBV0F6c0QsYUFBVyxDQUFDNEssSUFBRCxFQUFPL0UsSUFBUCxFQUFha0UsT0FBTyxHQUFHLEVBQXZCLEVBQTJCO0FBQ3JDLFVBQU07QUFBQzZJLFdBQUssR0FBRyxPQUFUO0FBQWtCOE0sVUFBSSxHQUFHLEtBQXpCO0FBQWdDZ3RDLGlCQUFXLEdBQUcsS0FBOUM7QUFBcUQzWixjQUFRLEdBQUc7QUFBaEUsUUFBeUVocEMsT0FBL0U7QUFDQSxTQUFLYSxJQUFMLEdBQVlBLElBQUksWUFBWUMsTUFBaEIsR0FBeUJELElBQUksQ0FBQyxDQUFELENBQTdCLEdBQW1DQSxJQUEvQztBQUNNLFNBQUsyZixLQUFMLEdBQWExa0IsSUFBYjtBQUNBLFNBQUsrTSxLQUFMLEdBQWFBLEtBQUssQ0FBQy9RLFdBQU4sRUFBYjtBQUNOLFNBQUs2ZCxJQUFMLEdBQVlBLElBQUksQ0FBQzdkLFdBQUwsRUFBWjtBQUNNLFNBQUs2cUQsV0FBTCxHQUFtQkEsV0FBbkI7QUFDQSxTQUFLM1osUUFBTCxHQUFnQkEsUUFBaEI7QUFFQSxRQUFJLENBQUN3WixXQUFXLENBQUMsS0FBSzdzQyxJQUFOLENBQWhCLEVBQTZCLE9BQU96Z0Isc0RBQUssQ0FBQ3dXLEdBQU4sQ0FBVSxpQkFBVixFQUE4QixRQUFPLEtBQUtpSyxJQUFLLGtCQUEvQyxDQUFQO0FBQ25DLFFBQUksQ0FBQzZzQyxXQUFXLENBQUMsS0FBSzM1QyxLQUFOLENBQWhCLEVBQThCLE9BQU8zVCxzREFBSyxDQUFDd1csR0FBTixDQUFVLGlCQUFWLEVBQThCLFNBQVEsS0FBSzdDLEtBQU0sa0JBQWpELENBQVA7QUFFOUIsU0FBSzVCLE9BQUwsR0FBZTNRLFFBQVEsQ0FBQzdELGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZjtBQUNBLFNBQUt3VSxPQUFMLENBQWF0VSxTQUFiLEdBQXlCd3ZELGdCQUFnQixHQUFHenRDLEtBQW5CLEdBQTJCLEdBQTNCLEdBQWlDeXRDLGdCQUFnQixHQUFHL2lDLHFCQUE3RTtBQUVBLFNBQUt3akMsY0FBTCxHQUFzQnRzRCxRQUFRLENBQUM3RCxhQUFULENBQXVCLEtBQXZCLENBQXRCO0FBQ0EsU0FBS213RCxjQUFMLENBQW9CandELFNBQXBCLEdBQWlDLEdBQUVzdkQsaUJBQWlCLEdBQUdZLE9BQVEsSUFBR1QsUUFBUSxDQUFDLEtBQUt2NUMsS0FBTixDQUFhLEVBQXZGO0FBRUEsU0FBS2k2QyxZQUFMLEdBQW9CeHNELFFBQVEsQ0FBQzdELGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQSxTQUFLcXdELFlBQUwsQ0FBa0Jud0QsU0FBbEIsR0FBOEJzdkQsaUJBQWlCLEdBQUdjLGNBQWxEO0FBRUEsVUFBTUMsY0FBYyxHQUFHMXNELFFBQVEsQ0FBQzdELGFBQVQsQ0FBdUIsS0FBdkIsQ0FBdkI7QUFDQXV3RCxrQkFBYyxDQUFDcndELFNBQWYsR0FBMkJzdkQsaUJBQWlCLEdBQUdnQixjQUEvQztBQUVBLFNBQUtMLGNBQUwsQ0FBb0JqakMsTUFBcEIsQ0FBMkJxakMsY0FBM0I7QUFDQSxTQUFLSixjQUFMLENBQW9CampDLE1BQXBCLENBQTJCLEtBQUttakMsWUFBaEM7QUFDQSxTQUFLNzdDLE9BQUwsQ0FBYTBZLE1BQWIsQ0FBb0IsS0FBS2lqQyxjQUF6QjtBQUVBLFNBQUsvaEQsSUFBTCxDQUFVK1EsZ0JBQVYsQ0FBMkIsWUFBM0IsRUFBeUMsTUFBTTtBQUNyQyxVQUFJLEtBQUtvM0IsUUFBVCxFQUFtQjtBQUNuQixXQUFLeEgsSUFBTDtBQUVULFlBQU03WCxRQUFRLEdBQUcsSUFBSXpWLGdCQUFKLENBQXNCQyxTQUFELElBQWU7QUFDcERBLGlCQUFTLENBQUNoTCxPQUFWLENBQW1Ca0wsUUFBRCxJQUFjO0FBQy9CLGdCQUFNdVYsS0FBSyxHQUFHNWpCLEtBQUssQ0FBQ2tiLElBQU4sQ0FBVzdNLFFBQVEsQ0FBQ3dWLFlBQXBCLENBQWQ7QUFDQSxnQkFBTUMsV0FBVyxHQUFHRixLQUFLLENBQUMxYyxPQUFOLENBQWMsS0FBS3JNLElBQW5CLElBQTJCLENBQUMsQ0FBaEQ7QUFDQSxnQkFBTWtwQixXQUFXLEdBQUdILEtBQUssQ0FBQy9FLElBQU4sQ0FBVzJDLE1BQU0sSUFBSUEsTUFBTSxDQUFDNWYsUUFBUCxDQUFnQixLQUFLL0csSUFBckIsQ0FBckIsQ0FBcEI7O0FBQ0EsY0FBSWlwQixXQUFXLElBQUlDLFdBQW5CLEVBQWdDO0FBQy9CLGlCQUFLd1gsSUFBTDtBQUNBNVgsb0JBQVEsQ0FBQ2lTLFVBQVQ7QUFDQTtBQUNELFNBUkQ7QUFTQSxPQVZnQixDQUFqQjtBQVlBalMsY0FBUSxDQUFDMVUsT0FBVCxDQUFpQjNlLFFBQVEsQ0FBQ0MsSUFBMUIsRUFBZ0M7QUFBQzRlLGVBQU8sRUFBRSxJQUFWO0FBQWdCRCxpQkFBUyxFQUFFO0FBQTNCLE9BQWhDO0FBQ0EsS0FqQkQ7QUFtQkEsU0FBS3JVLElBQUwsQ0FBVStRLGdCQUFWLENBQTJCLFlBQTNCLEVBQXlDLE1BQU07QUFDOUMsV0FBSzJ2QixJQUFMO0FBQ0EsS0FGRDtBQUdHO0FBRUQ7OztBQUNBLE1BQUk5aEIsU0FBSixHQUFnQjtBQUFFLFdBQU9ucEIsUUFBUSxDQUFDOE8sYUFBVCxDQUF1QixNQUFJNUwsU0FBUyxDQUFDdkUsR0FBVixDQUFjd0UsQ0FBQyxJQUFJQSxDQUFDLENBQUN5cEQsT0FBckIsRUFBOEIsQ0FBOUIsRUFBaUNBLE9BQWpDLENBQXlDOThDLEtBQXpDLENBQStDLEdBQS9DLEVBQW9ELENBQXBELENBQUosR0FBMkQsTUFBM0QsR0FBa0U1TSxTQUFTLENBQUN2RSxHQUFWLENBQWN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzBwRCxjQUFyQixFQUFxQyxDQUFyQyxFQUF3Q0EsY0FBeEMsQ0FBdUQvOEMsS0FBdkQsQ0FBNkQsR0FBN0QsRUFBa0UsQ0FBbEUsQ0FBekYsQ0FBUDtBQUF3SztBQUMxTDs7O0FBQ0EsTUFBSWc5QyxZQUFKLEdBQW1CO0FBQUUsV0FBTyxLQUFLdmlELElBQUwsQ0FBVTRuQixxQkFBVixHQUFrQzdJLEdBQWxDLEdBQXdDLEtBQUszWSxPQUFMLENBQWFzaEIsWUFBckQsSUFBcUUsQ0FBNUU7QUFBZ0Y7QUFDckc7OztBQUNBLE1BQUk4NkIsWUFBSixHQUFtQjtBQUFFLFdBQU8sS0FBS3hpRCxJQUFMLENBQVU0bkIscUJBQVYsR0FBa0M3SSxHQUFsQyxHQUF3QyxLQUFLL2UsSUFBTCxDQUFVMG5CLFlBQWxELEdBQWlFLEtBQUt0aEIsT0FBTCxDQUFhc2hCLFlBQTlFLElBQThGcnpCLHNEQUFLLENBQUNxSixZQUEzRztBQUEwSDtBQUMvSTs7O0FBQ0EsTUFBSStrRCxXQUFKLEdBQWtCO0FBQUUsV0FBTyxLQUFLemlELElBQUwsQ0FBVTRuQixxQkFBVixHQUFrQzNJLElBQWxDLEdBQXlDLEtBQUs3WSxPQUFMLENBQWFvaEIsV0FBdEQsSUFBcUUsQ0FBNUU7QUFBZ0Y7QUFDcEc7OztBQUNILE1BQUlrN0IsWUFBSixHQUFtQjtBQUFFLFdBQU8sS0FBSzFpRCxJQUFMLENBQVU0bkIscUJBQVYsR0FBa0MzSSxJQUFsQyxHQUF5QyxLQUFLamYsSUFBTCxDQUFVd25CLFdBQW5ELEdBQWlFLEtBQUtwaEIsT0FBTCxDQUFhb2hCLFdBQTlFLElBQTZGbnpCLHNEQUFLLENBQUMrSSxXQUExRztBQUF3SDtBQUUxSTs7O0FBQ0hzakMsTUFBSSxHQUFHO0FBQ0EsU0FBS3Q2QixPQUFMLENBQWFVLE1BQWI7QUFDQSxTQUFLaTdDLGNBQUwsQ0FBb0Jqd0QsU0FBcEIsR0FBZ0MsS0FBSzZ3RCxVQUFyQztBQUNOO0FBRUU7OztBQUNIaGlCLE1BQUksR0FBRztBQUNBLFNBQUtvaEIsY0FBTCxDQUFvQmp3RCxTQUFwQixHQUFpQyxHQUFFc3ZELGlCQUFpQixHQUFHWSxPQUFRLElBQUdULFFBQVEsQ0FBQyxLQUFLdjVDLEtBQU4sQ0FBYSxFQUF2RjtBQUNOLFNBQUtpNkMsWUFBTCxDQUFrQjM2QixXQUFsQixHQUFnQyxLQUFLM0gsS0FBckM7QUFDQSxTQUFLZixTQUFMLENBQWVFLE1BQWYsQ0FBc0IsS0FBSzFZLE9BQTNCOztBQUVBLFFBQUksS0FBSzBPLElBQUwsSUFBYSxLQUFqQixFQUF3QjtBQUN2QixVQUFJLEtBQUt5dEMsWUFBTCxJQUFzQixDQUFDLEtBQUtBLFlBQU4sSUFBc0IsS0FBS1QsV0FBckQsRUFBbUUsS0FBS2MsU0FBTCxHQUFuRSxLQUNLLEtBQUtDLFNBQUw7QUFDTDs7QUFFRCxRQUFJLEtBQUsvdEMsSUFBTCxJQUFhLFFBQWpCLEVBQTJCO0FBQzFCLFVBQUksS0FBSzB0QyxZQUFMLElBQXNCLENBQUMsS0FBS0EsWUFBTixJQUFzQixLQUFLVixXQUFyRCxFQUFtRSxLQUFLZSxTQUFMLEdBQW5FLEtBQ0ssS0FBS0QsU0FBTDtBQUNMOztBQUVELFFBQUksS0FBSzl0QyxJQUFMLElBQWEsTUFBakIsRUFBeUI7QUFDeEIsVUFBSSxLQUFLMnRDLFdBQUwsSUFBcUIsQ0FBQyxLQUFLQSxXQUFOLElBQXFCLEtBQUtYLFdBQW5ELEVBQWlFLEtBQUtnQixRQUFMLEdBQWpFLEtBQ0ssS0FBS0MsU0FBTDtBQUNMOztBQUVELFFBQUksS0FBS2p1QyxJQUFMLElBQWEsT0FBakIsRUFBMEI7QUFDekIsVUFBSSxLQUFLNHRDLFlBQUwsSUFBc0IsQ0FBQyxLQUFLQSxZQUFOLElBQXNCLEtBQUtaLFdBQXJELEVBQW1FLEtBQUtpQixTQUFMLEdBQW5FLEtBQ0ssS0FBS0QsUUFBTDtBQUNMO0FBQ0Q7QUFFRTs7O0FBQ0hGLFdBQVMsR0FBRztBQUNYLFNBQUtiLGNBQUwsQ0FBb0JyOEMsU0FBcEIsQ0FBOEJlLEdBQTlCLENBQWtDODZDLFFBQVEsQ0FBQyxLQUFELENBQTFDO0FBQ0EsU0FBS243QyxPQUFMLENBQWE0QixLQUFiLENBQW1CUSxXQUFuQixDQUErQixLQUEvQixFQUFzQ281QyxJQUFJLENBQUMsS0FBSzVoRCxJQUFMLENBQVU0bkIscUJBQVYsR0FBa0M3SSxHQUFsQyxHQUF3QyxLQUFLM1ksT0FBTCxDQUFhc2hCLFlBQXJELEdBQW9FLEVBQXJFLENBQTFDO0FBQ0EsU0FBS3M3QixrQkFBTDtBQUNBO0FBRUU7OztBQUNISCxXQUFTLEdBQUc7QUFDWCxTQUFLZCxjQUFMLENBQW9CcjhDLFNBQXBCLENBQThCZSxHQUE5QixDQUFrQzg2QyxRQUFRLENBQUMsUUFBRCxDQUExQztBQUNBLFNBQUtuN0MsT0FBTCxDQUFhNEIsS0FBYixDQUFtQlEsV0FBbkIsQ0FBK0IsS0FBL0IsRUFBc0NvNUMsSUFBSSxDQUFDLEtBQUs1aEQsSUFBTCxDQUFVNG5CLHFCQUFWLEdBQWtDN0ksR0FBbEMsR0FBd0MsS0FBSy9lLElBQUwsQ0FBVTBuQixZQUFsRCxHQUFpRSxFQUFsRSxDQUExQztBQUNBLFNBQUtzN0Isa0JBQUw7QUFDQTtBQUVFOzs7QUFDSEYsVUFBUSxHQUFHO0FBQ1YsU0FBS2YsY0FBTCxDQUFvQnI4QyxTQUFwQixDQUE4QmUsR0FBOUIsQ0FBa0M4NkMsUUFBUSxDQUFDLE1BQUQsQ0FBMUM7QUFDQSxTQUFLbjdDLE9BQUwsQ0FBYTRCLEtBQWIsQ0FBbUJRLFdBQW5CLENBQStCLE1BQS9CLEVBQXVDbzVDLElBQUksQ0FBQyxLQUFLNWhELElBQUwsQ0FBVTRuQixxQkFBVixHQUFrQzNJLElBQWxDLEdBQXlDLEtBQUs3WSxPQUFMLENBQWFvaEIsV0FBdEQsR0FBb0UsRUFBckUsQ0FBM0M7QUFDQSxTQUFLeTdCLGdCQUFMO0FBQ0E7QUFFRTs7O0FBQ0hGLFdBQVMsR0FBRztBQUNYLFNBQUtoQixjQUFMLENBQW9CcjhDLFNBQXBCLENBQThCZSxHQUE5QixDQUFrQzg2QyxRQUFRLENBQUMsT0FBRCxDQUExQztBQUNBLFNBQUtuN0MsT0FBTCxDQUFhNEIsS0FBYixDQUFtQlEsV0FBbkIsQ0FBK0IsTUFBL0IsRUFBdUNvNUMsSUFBSSxDQUFDLEtBQUs1aEQsSUFBTCxDQUFVNG5CLHFCQUFWLEdBQWtDM0ksSUFBbEMsR0FBeUMsS0FBS2pmLElBQUwsQ0FBVXduQixXQUFuRCxHQUFpRSxFQUFsRSxDQUEzQztBQUNBLFNBQUt5N0IsZ0JBQUw7QUFDQTs7QUFFREQsb0JBQWtCLEdBQUc7QUFDZCxVQUFNRSxVQUFVLEdBQUcsS0FBS2xqRCxJQUFMLENBQVU0bkIscUJBQVYsR0FBa0MzSSxJQUFsQyxHQUEwQyxLQUFLamYsSUFBTCxDQUFVd25CLFdBQVYsR0FBd0IsQ0FBckY7QUFDQSxTQUFLcGhCLE9BQUwsQ0FBYTRCLEtBQWIsQ0FBbUJRLFdBQW5CLENBQStCLE1BQS9CLEVBQXVDbzVDLElBQUksQ0FBQ3NCLFVBQVUsR0FBSSxLQUFLOThDLE9BQUwsQ0FBYW9oQixXQUFiLEdBQTJCLENBQTFDLENBQTNDO0FBQ047O0FBRUR5N0Isa0JBQWdCLEdBQUc7QUFDbEIsVUFBTUMsVUFBVSxHQUFHLEtBQUtsakQsSUFBTCxDQUFVNG5CLHFCQUFWLEdBQWtDN0ksR0FBbEMsR0FBeUMsS0FBSy9lLElBQUwsQ0FBVTBuQixZQUFWLEdBQXlCLENBQXJGO0FBQ0EsU0FBS3RoQixPQUFMLENBQWE0QixLQUFiLENBQW1CUSxXQUFuQixDQUErQixLQUEvQixFQUFzQ281QyxJQUFJLENBQUNzQixVQUFVLEdBQUksS0FBSzk4QyxPQUFMLENBQWFzaEIsWUFBYixHQUE0QixDQUEzQyxDQUExQztBQUNBOztBQWhKbUMsQzs7Ozs7Ozs7Ozs7O0FDN0RyQztBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsNkVBQWNsMkIsbURBQUksQ0FBQ3l1QyxjQUFuQixDQUFrQztBQUM3QzdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRUQsUUFBTW00QixpQkFBTixHQUEwQjtBQUN0QixVQUFNO0FBQUM1dkIsV0FBSyxHQUFHLE9BQVQ7QUFBa0I4TSxVQUFJLEdBQUcsS0FBekI7QUFBZ0M3WixVQUFJLEdBQUc7QUFBdkMsUUFBNkMsS0FBS3dFLEtBQXhEO0FBQ0EsU0FBS08sSUFBTCxHQUFZeE8sbURBQUksQ0FBQytuQixRQUFMLENBQWM0cEMsV0FBZCxDQUEwQixJQUExQixDQUFaO0FBQ0EsU0FBS25CLE9BQUwsR0FBZSxJQUFJelosZ0RBQUosQ0FBWSxLQUFLdm9DLElBQWpCLEVBQXVCL0UsSUFBdkIsRUFBNkI7QUFBQytNLFdBQUQ7QUFBUThNO0FBQVIsS0FBN0IsQ0FBZjtBQUNIOztBQUVEK2lCLHNCQUFvQixHQUFHO0FBQ25CLFNBQUttcUIsT0FBTCxDQUFhdGhCLElBQWI7QUFDQSxXQUFPLEtBQUtzaEIsT0FBWjtBQUNIOztBQUVEeG9DLFFBQU0sR0FBRztBQUNMLFdBQU8sS0FBSy9aLEtBQUwsQ0FBV2tILFFBQWxCO0FBQ0g7O0FBbEI0QyxDOzs7Ozs7Ozs7Ozs7QUNIakQ7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNeThDLFFBQU4sU0FBdUI1eEQsbURBQUksQ0FBQ3l1QyxjQUE1QixDQUEyQztBQUN0RDdxQyxhQUFXLENBQUNxSyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRUQrWixRQUFNLEdBQUc7QUFDTCxXQUFPaG9CLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ3lyRCxXQUFLLEVBQUUsNEJBQVI7QUFBc0NudEIsYUFBTyxFQUFFLFdBQS9DO0FBQTREbG9CLFdBQUssRUFBRTtBQUFDa1IsYUFBSyxFQUFFLE1BQVI7QUFBZ0JtTyxjQUFNLEVBQUU7QUFBeEI7QUFBbkUsS0FGRyxFQUdINzFCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ0UsZUFBUyxFQUFFLFlBQVo7QUFBMEJ3K0IsVUFBSSxFQUFFLE1BQWhDO0FBQXdDdVosY0FBUSxFQUFFO0FBQWxELEtBRkosRUFHSXI0QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV2prQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUN1N0IsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJMzdCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0UsZUFBUyxFQUFFLE1BQVo7QUFBb0J3K0IsVUFBSSxFQUFFLFNBQTFCO0FBQXFDbkQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxvQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxrQyIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJpbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwgcGx1Z2luTW9kdWxlLCB0aGVtZU1vZHVsZSwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGUsIG1haW5Db3JlLCBCRFYyO1xyXG5leHBvcnQgY29uc3QgbWluaW11bURpc2NvcmRWZXJzaW9uID0gXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBjdXJyZW50RGlzY29yZFZlcnNpb24gPSAod2luZG93LkRpc2NvcmROYXRpdmUgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uKCkpIHx8IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcclxuZXhwb3J0IGNvbnN0IGJiZFZlcnNpb24gPSBcIjAuMy40XCI7XHJcbmV4cG9ydCBjb25zdCBMQ0NoYW5lbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiTGlnaHRjb3JkJ3MgY2hhbmdlbG9nXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgaXMgbm93IGF2YWlsYWJsZSAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIldlIHJlbW92ZWQgZW1vdGVzLiBUaGF0J3Mgc2FkIGZvciBwZW9wbGUgd2hvIHdlcmUgYWN0dWFsbHkgdXNpbmcgaXQsIGJ1dCBpdCB3YXMgbGVhZGluZyB0byBtb3JlIGxvYWRpbmcgdGltZSBhbmQgc29tZSBiYXNpYyB3b3JkcyB3ZXJlIGVtb3RlLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgaW1hZ2U6IFwiaHR0cHM6Ly9pLmltZ3VyLmNvbS9zZk5ocXdQLnBuZ1wiLFxyXG4gICAgdGl0bGU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICBzdWJ0aXRsZTogXCJ2XCIrcmVtb3RlLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS52ZXJzaW9uLFxyXG4gICAgZm9vdGVyOiAoZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBpZighVGV4dEVsZW1lbnQgfHwgIU1vZGFsU3RhY2spcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcclxuICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgQkRWMi5qb2luTEMoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgIHJldHVybiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEVsZW1lbnQsIHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgfSkoKVxyXG59XHJcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJCQkQncyBjaGFuZ2Vsb2cuXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCIqKkxpZ2h0Y29yZCoqIGlzIG5vdyB1c2luZyBCYW5kYWdlZEJELiBUaGF0IG1lYW5zIGFsbCBwbHVnaW5zIHlvdSB3ZXJlIHVzaW5nIGNhbiBiZSB1c2VkIHRvbyAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIioqV2luZG93IFRyYW5zcGFyZW5jeSoqIGNoYW5nZXMgd2VyZSBtYWRlIHRvIG1vcmUgY29tcGF0aWJsZSB3aXRoIGV4dGVybmFsIHdpbmRvdyBtYW5hZ2VycyBhbmQgYWRkb25zIGxpa2UgR2xhc3Njb3JkLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoYXMgb25jZSBhZ2FpbiBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gaG9wZWZ1bGx5IGltcHJvdmUgbG9hZGluZyB0aW1lcy5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkJ1ZyBGaXhlc1wiLFxyXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIlNvbWUgZml4ZXMgcmVsYXRlZCB0byBzaG93aW5nIG1vZGFscyBpbiB0aGUgYEJkQXBpYC5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xyXG4gICAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0wXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJCZXR0ZXJEaXNjb3JkIEJsdWVcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLWJcIiwgIGluZm86IFwiUmVwbGFjZSBEaXNjb3JkIGJsdWUgd2l0aCBCRCBCbHVlXCIsICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogZmFsc2UsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwifSxcclxuXHJcbiAgICAvKiBDb3JlICovXHJcbiAgICAvKiA9PT09PT0gKi9cclxuICAgIFwiUHVibGljIFNlcnZlcnNcIjogICAgICAgICAgICAge2lkOiBcImJkYS1ncy0xXCIsICBpbmZvOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIE1vZGVcIjogICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNFwiLCAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiSGlkZSBDaGFubmVsc1wiOiAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0zXCIsICBpbmZvOiBcIkhpZGUgY2hhbm5lbHMgaW4gbWluaW1hbCBtb2RlXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIERpc2Nvbm5lY3RcIjogICAgICAgICAgIHtpZDogXCJiZGEtZGMtMFwiLCAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiMjQgSG91ciBUaW1lc3RhbXBzXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy02XCIsICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIiwgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk5vcm1hbGl6ZSBDbGFzc2VzXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTRcIiwgaW5mbzogXCJBZGRzIHN0YWJsZSBjbGFzc2VzIHRvIGVsZW1lbnRzIHRvIGhlbHAgdGhlbWVzLiAoZS5nLiBhZGRzIC5kYS1jaGFubmVscyB0byAuY2hhbm5lbHMtSWUybDZBKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcblxyXG4gICAgLyogQ29udGVudCAqL1xyXG4gICAgXCJDb250ZW50IEVycm9yIE1vZGFsXCI6ICAgICAgICB7aWQ6IFwiZm9yay1wcy0xXCIsIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNob3cgVG9hc3RzXCI6ICAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTJcIiwgaW5mbzogXCJTaG93cyBhIHNtYWxsIG5vdGlmaWNhdGlvbiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTY3JvbGwgVG8gU2V0dGluZ3NcIjogICAgICAgICB7aWQ6IFwiZm9yay1wcy0zXCIsIGluZm86IFwiQXV0by1zY3JvbGxzIHRvIGEgcGx1Z2luJ3Mgc2V0dGluZ3Mgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgKG9ubHkgaWYgb3V0IG9mIHZpZXcpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG5cclxuICAgIC8qIERldmVsb3BlciAqL1xyXG4gICAgXCJEZXZlbG9wZXIgTW9kZVwiOiAgICAgICAgIFx0ICB7aWQ6IFwiYmRhLWdzLThcIiwgaW5mbzogXCJEZXZlbG9wZXIgTW9kZSBUb2dnbGVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiQ29weSBTZWxlY3RvclwiOlx0XHRcdCAge2lkOiBcImZvcmstZG0tMVwiLCBpbmZvOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiUmVhY3QgRGV2VG9vbHNcIjpcdFx0XHQgIHtpZDogXCJyZWFjdERldlRvb2xzXCIsIGluZm86IFwiQWRkcyByZWFjdCBkZXZlbG9wZXIgdG9vbHMgdG8gdGhlIGRldnRvb2xzLiBNdXN0IGJlIGluc3RhbGxlZCBpbiBHb29nbGUgQ2hyb21lIG9uIHlvdXIgcGMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgXCJEaXNhYmxlIEJldHRlckRpc2NvcmRcIjogICAgICB7aWQ6IFwiYmQtZGlzYWJsZVwiLCAgaW5mbzogXCJEaXNhYmxlIEJldHRlcmRpc2NvcmQgKHBsdWdpbnMsIHRoZW1lcywgZXRjKS5cIiwgaW1wbGVtZW50ZWQ6IGZhbHNlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQmx1ciBQZXJzb25uYWwgSW5mb3JtYXRpb25zXCI6e2lkOiBcImxpZ2h0Y29yZC02XCIsIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTFcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiBhbmQgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiLiAobXVzdCBjbG9zZSBhbmQgcmVvcGVuIHNldHRpbmdzKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbSB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJFbmFibGUgTGlnaHRjb3JkIFNlcnZlcnNcIjogICB7aWQ6IFwibGlnaHRjb3JkLTVcIiwgaW5mbzogXCJFbmFibGUgTGlnaHRjb3JkJ3Mgc2VydmVycy4gRGlzYWJsaW5nIHRoaXMgd2lsbCBkaXNhYmxlIGN1c3RvbSBiYWRnZXMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkIFdpbmRvdyAqL1xyXG4gICAgXCJBbHdheXMtb24tVG9wXCI6ICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTNcIiwgaW5mbzogXCJFbmFibGUgd2luZG93J3MgQWx3YXlzLW9uLVRvcCBtb2RlLCB3aGVyZSBMaWdodGNvcmQgc3RheXMgb24gdG9wIG9mIG90aGVyIGFwcGxpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXHJcbiAgICAvKiogUmljaFByZXNlbmNlICovXHJcbiAgICBcIkVuYWJsZVwiOiAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLCBpbmZvOiBcIkVuYWJsZSBSaWNoUHJlc2VuY2UgYmVsb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwic3RhdHVzXCJ9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdENvb2tpZSA9IHtcclxuICAgIFwiYmRhLWdzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTJcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy0zXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTVcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTZcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy03XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtNFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLTZcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTdcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLWJcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1kYy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMVwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLTlcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1kbS0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXBzLTFcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0yXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtM1wiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTRcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy01XCI6IHRydWUsXHJcbiAgICBcImZvcmstZXMtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstd3AtMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay13cC0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcclxuICAgIFwicmVhY3REZXZUb29sc1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtM1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC01XCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC02XCI6IHRydWVcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NDb29raWUgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JQQyA9IHt9O1xyXG5leHBvcnQgY29uc3QgZGVmYXVsdFJQQyA9IHtcclxuICAgIFwibmFtZVwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxyXG4gICAgXCJzdGF0ZVwiOiBcIkxpZ2h0Y29yZCBDbGllbnRcIixcclxuICAgIFwiZGV0YWlsc1wiOiBcIkJyb3dzaW5nIERpc2NvcmRcIixcclxuICAgIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxyXG4gICAgXCJhc3NldHMuc21hbGxcIjogbnVsbCxcclxuICAgIFwiYXNzZXRzLmxhcmdlXCI6IFwiNzEyMzIzODIxMDM3NjgyNzkxXCJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XHJcbmV4cG9ydCBjb25zdCBiZHRoZW1lRXJyb3JzID0gW107IC8vIGRlZmluZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuXHJcbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XHJcblxyXG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2lucyA9IHt9O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdWdpbkNvb2tpZSA9IHt9O1xyXG5leHBvcnQgY29uc3QgdGhlbWVDb29raWUgPSB7fTsiLCJpbXBvcnQgbG9jYWxTdG9yYWdlRml4IGZyb20gXCIuL2xvY2FsU3RvcmFnZUZpeFwiO1xyXG5pbXBvcnQgbG9hZGluZ0ljb24gZnJvbSBcIi4vbG9hZGluZ0ljb25cIjtcclxubG9jYWxTdG9yYWdlRml4KCk7XHJcbmxvYWRpbmdJY29uKCk7XHJcblxyXG5jb25zdCBkZXByZWNhdGVHbG9iYWwgPSAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgLy8gdmFsdWUgPSB0eXBlb2YodmFsdWUpICE9PSBcIm9iamVjdFwiID8gdmFsdWUgOiBuZXcgUHJveHkodmFsdWUsIHtcclxuICAgIC8vICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIHNldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgIC8vICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gVXRpbHMuZXJyKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgXCJUcnlpbmcgdG8gb3ZlcndyaXRlIGRlcHJlY2F0ZWQgQkQgZ2xvYmFsc1wiKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIGtleSwge1xyXG4gICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgVXRpbHMud2FybihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIGBcIiR7a2V5fVwiIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFBsZWFzZSBvbmx5IHVzZSBCZEFwaS5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pOyAgXHJcbn07XHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2xvYmFscyBmcm9tIFwiLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZ2xvYmFsS2V5cyA9IE9iamVjdC5rZXlzKEdsb2JhbHMpO1xyXG5mb3IgKGNvbnN0IGtleSBvZiBnbG9iYWxLZXlzKSBkZXByZWNhdGVHbG9iYWwoa2V5LCBHbG9iYWxzW2tleV0pO1xyXG5cclxuXHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL2JkQXBpXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL21vZHVsZXMvY2xhc3NOb3JtYWxpemVyXCI7XHJcblxyXG5kZXByZWNhdGVHbG9iYWwoXCJCRFYyXCIsIEJEVjIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJwbHVnaW5Nb2R1bGVcIiwgcGx1Z2luTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwidGhlbWVNb2R1bGVcIiwgdGhlbWVNb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJVdGlsc1wiLCBVdGlscyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJERXZlbnRzXCIsIEJERXZlbnRzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwic2V0dGluZ3NQYW5lbFwiLCBzZXR0aW5nc1BhbmVsKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiRGF0YVN0b3JlXCIsIERhdGFTdG9yZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNvbnRlbnRNYW5hZ2VyXCIsIENvbnRlbnRNYW5hZ2VyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ2xhc3NOb3JtYWxpemVyXCIsIENsYXNzTm9ybWFsaXplcik7XHJcblxyXG53aW5kb3cuQmRBcGkgPSBCZEFwaTtcclxuXHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCBDb3JlKTtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IoYmRDb25maWcpIHtcclxuICAgICAgICBDb3JlLnNldENvbmZpZyhiZENvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICAvLyBkZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCB0aGlzLm1haW5Db3JlKTtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4vLyAgICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbi8vICAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbi8vICAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4vLyAgICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuLy8gICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuLy8gICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcclxuLy8gICAgICAgICBpZiAocmVxdWVzdCA9PT0gbmFtZXNwYWNlIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbi8vICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RlZCA9IHJlcXVlc3Quc3Vic3RyKHByZWZpeC5sZW5ndGgpO1xyXG4vLyAgICAgICAgICAgICBpZiAocmVxdWVzdGVkID09IFwiYXBpXCIpIHJldHVybiBCZEFwaTtcclxuLy8gICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgIHJldHVybiBsb2FkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbi8vICAgICB9O1xyXG5cclxuLy8gICAgIC8vIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lID0gZnVuY3Rpb24gKHJlcXVlc3QsIHBhcmVudCwgaXNNYWluKSB7XHJcbi8vICAgICAvLyAgICAgaWYgKHJlcXVlc3QgPT09IFwiYmV0dGVyZGlzY29yZFwiIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChcImJldHRlcmRpc2NvcmQvXCIpKSB7XHJcbi8vICAgICAvLyAgICAgICAgIGNvbnN0IGNvbnRlbnRQYXRoID0gUGx1Z2luTWFuYWdlci5nZXRQbHVnaW5QYXRoQnlNb2R1bGUocGFyZW50KTtcclxuLy8gICAgIC8vICAgICAgICAgaWYgKGNvbnRlbnRQYXRoKSByZXR1cm4gcmVxdWVzdDtcclxuLy8gICAgIC8vICAgICB9XHJcblxyXG4vLyAgICAgLy8gICAgIHJldHVybiByZXNvbHZlRmlsZW5hbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIC8vIH07XHJcblxyXG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4vLyAgICAgICAgIE1vZHVsZS5fbG9hZCA9IGxvYWQ7XHJcbi8vICAgICB9O1xyXG4vLyB9XHJcblxyXG4vLyBwYXRjaE1vZHVsZUxvYWQoKTtcclxuXHJcbi8vIHZhciBzZXR0aW5nc1BhbmVsLCB2b2ljZU1vZGUsLCBkTW9kZSwgcHVibGljU2VydmVyc01vZHVsZTtcclxuLy8gdmFyIGJkQ29uZmlnID0gbnVsbDtcclxuXHJcbnJlcXVpcmUoXCJyZXF1ZXN0XCIpLy8ganVzdCBpbiBjYWNoZSBzbyBwbHVnaW4gY2FuIHJlcXVpcmUgaXQgdG9vIiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gICAgY29uc3QgdjJMb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgdjJMb2FkZXIuY2xhc3NOYW1lID0gXCJiZC1sb2FkZXJ2MlwiO1xyXG4gICAgdjJMb2FkZXIudGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2MkxvYWRlcik7XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KGNvbnRlbnRXaW5kb3csIHtcclxuICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBpbnRlcmNlcHRpb24gYnkgcGF0Y2hpbmcgUmVmbGVjdC5hcHBseSBhbmQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0LCBcImFwcGx5XCIsIHt2YWx1ZTogUmVmbGVjdC5hcHBseSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcblxyXG4gICAgY29uc3Qgb09wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgIGlmICh1cmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFwaS93ZWJob29rc1wiKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRGSG91ciB7XHJcbiAgICBpbmplY3QyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gZGF0YS5yZXR1cm5WYWx1ZS5tYXRjaCh0d2VsdmVIb3VyKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVkIHx8IG1hdGNoZWQubGVuZ3RoICE9PSA0KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkWzNdID09PSBcIkFNXCIpIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMTJcIiA6IHBhcnNlSW50KG1hdGNoZWRbMV0pICsgMTJ9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjYW5jZWxDb3p5ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImNhbGVuZGFyRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ296eSBtb2RlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ29tcGFjdCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICAgICAgdGhpcy5jYW5jZWwyNEhvdXIgPSAoKSA9PiB7Y2FuY2VsQ296eSgpOyBjYW5jZWxDb21wYWN0KCk7fTsgLy8gQ2FuY2VsIGJvdGhcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSB0aGlzLmNhbmNlbDI0SG91cigpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyXHJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsICYmIGUuZGVmYXVsdC5oYXNDaGFubmVsKVswXS5kZWZhdWx0XHJcbmxldCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbmxldCBETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcblxyXG5jb25zdCBibG9ja2VkID0ge31cclxuXHJcbmxldCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyKCl7XHJcbiAgICBpZih1c2VyTW9kdWxlKXJldHVybiB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgcmV0dXJuIG51bGxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEFudGlCb3RETSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuYW50aURNID0gdGhpcy5hbnRpRE0uYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnVuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgYW50aURNKGV2KXtcclxuICAgICAgICBpZighZXYubWVzc2FnZS5hdXRob3IuYm90KXJldHVyblxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkID09PSBnZXRDdXJyZW50VXNlcigpLmlkKVxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuZ3VpbGRfaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBDaGFubmVsTW9kdWxlLmdldENoYW5uZWwoZXYubWVzc2FnZS5jaGFubmVsX2lkKVxyXG4gICAgICAgIGlmKCFjaGFubmVsKXJldHVybiAvLyBtaWdodCBiZSBicm9rZW5cclxuXHJcbiAgICAgICAgaWYoY2hhbm5lbC50eXBlICE9PSAxKXJldHVyblxyXG5cclxuICAgICAgICBpZihibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSlyZXR1cm4gLy8gSWYgdGhlIHVzZXIgdW5ibG9jayB0aGUgYm90LCBEb24ndCBibG9jayBpdCBhZ2Fpbi5cclxuXHJcbiAgICAgICAgaWYoc2Nhbk1lc3NhZ2UoZXYubWVzc2FnZSkpe1xyXG4gICAgICAgICAgICBibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSA9IHRydWVcclxuICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGBbQWRCbG9ja106IEJsb2NrZWQgJHtldi5tZXNzYWdlLmF1dGhvci51c2VybmFtZX0jJHtldi5tZXNzYWdlLmF1dGhvci5kaXNjcmltaW5hdG9yfWAsIHtcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIndhcm5pbmdcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZighcmVsYXRpb25TaGlwTW9kdWxlKXJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxuICAgICAgICAgICAgcmVsYXRpb25TaGlwTW9kdWxlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkLCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJDb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgIH0sIDIpXHJcbiAgICAgICAgICAgIGlmKCFETU1vZHVsZSlETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcbiAgICAgICAgICAgIERNTW9kdWxlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbChjaGFubmVsLmlkLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNjYW5NZXNzYWdlKG1lc3NhZ2Upe1xyXG4gICAgaWYoLyhkaXNjb3JkXFwuZ2d8ZGlzY29yZFxcLmNvbVxcL2ludml0ZVxcL3xkaXNjb3JkYXBwXFwuY29tXFwvaW52aXRlXFwvKS9nLnRlc3QobWVzc2FnZS5jb250ZW50KSlyZXR1cm4gdHJ1ZVxyXG4gICAgaWYoRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmdnL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuY29tL2ludml0ZS9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkYXBwLmNvbS9pbnZpdGUvXCIpKXJldHVybiB0cnVlXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbn1cclxuZnVuY3Rpb24gRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgc2VhcmNoKXtcclxuICAgIGxldCBlbWJlZHMgPSBtZXNzYWdlLmVtYmVkc1xyXG4gICAgaWYoZW1iZWRzLmxlbmd0aCA9PT0gMClyZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiBlbWJlZHMubWFwKGVtYmVkID0+IHtcclxuICAgICAgICBpZihlbWJlZC50eXBlICE9PSBcInJpY2hcIilyZXR1cm4gZmFsc2VcclxuICAgICAgICBpZigoZW1iZWQudGl0bGUgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKChlbWJlZC5kZXNjcmlwdGlvbiB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKChlbWJlZC5mb290ZXIgfHwgXCJcIikgJiYgZW1iZWQuZm9vdGVyLnRleHQgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKGVtYmVkLmZpZWxkcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlLmluY2x1ZGVzKHNlYXJjaCkgfHwgZS5uYW1lLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICAgICB9KS5pbmNsdWRlcyh0cnVlKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH0pLmluY2x1ZGVzKHRydWUpXHJcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fX0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTsiLCIvKiBCREV2ZW50cyAqL1xyXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxyXG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cclxufTsiLCIvKipcclxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcclxuICovXHJcblxyXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxubGV0IHNlbGVjdG9yc1xyXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXHJcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xyXG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcclxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxyXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC5wYXltZW50LWluZm8gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZGVzY3JpcHRpb24gJiYgdHlwZW9mIGUuZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgJiYgZS5kZXNjcmlwdGlvbi5pbmNsdWRlcyhcImZvcm1UZXh0XCIpKVswXS5kZXNjcmlwdGlvbil9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wYXltZW50U291cmNlUm93KVswXS5wYXltZW50U291cmNlUm93KX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc3ViVGV4dCAmJiBlLmRlc2NyaXB0aW9uV3JhcHBlcilbMF0uc3ViVGV4dCl9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXS51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgIHJldHVybiBzZWxlY3RzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcclxuXHJcbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXHJcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXHJcbiR7c2VsZWN0b3JzWzBdfSwgJHtzZWxlY3RvcnNbMV19LCAke3NlbGVjdG9yc1syXX0ge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogYmx1cig0cHgpO1xyXG4gICAgb3BhY2l0eTogLjg7XHJcbn1cclxuXHJcbiR7c2VsZWN0b3JzWzBdfTpob3ZlciwgJHtzZWxlY3RvcnNbMV19OmhvdmVyLCAke3NlbGVjdG9yc1syXX06aG92ZXIge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBub25lO1xyXG4gICAgb3BhY2l0eTogMTtcclxufWApXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fID0gd2luZG93LnJlcXVpcmVcclxuaW1wb3J0IHtiZENvbmZpZywgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXHJcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcclxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcclxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IHttZXNzYWdlOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIiwgc3RhY2s6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwifX1cclxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcclxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZW50LnR5cGUpIHJldHVybjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldO1xyXG4gICAgICAgICAgICAgICAgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV0gPSBjb250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYmR0aGVtZXNbY29udGVudC5uYW1lXTtcclxuICAgICAgICAgICAgYmR0aGVtZXNbY29udGVudC5uYW1lXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVsZXRlIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIHVubG9hZGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX07fVxyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07fVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4gZmFsc2U7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBjYW50VW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICBpZiAoY2FudFVubG9hZCkgcmV0dXJuIGNhbnRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMaXN0ID0gT2JqZWN0LnZhbHVlcyhpc1BsdWdpbiA/IGJkcGx1Z2lucyA6IGJkdGhlbWVzKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aChmaWxlRW5kaW5nKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQWxsQ29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xyXG4gICAgLy8gdGhpcy5pbml0KCk7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBiZENvbmZpZy51cGRhdGVyID8gYmRDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogYmRDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBiZENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBbYFRoZXJlIGlzIGFuIHVwZGF0ZSBhdmFpbGFibGUgZm9yIEJhbmRhZ2VkQkQncyBJbmplY3RvciAoJHtsYXRlc3RMb2NhbFZlcnNpb259KS5gLCBcIllvdSBjYW4gZWl0aGVyIHVwZGF0ZSBhbmQgcmVzdGFydCBub3csIG9yIGxhdGVyLlwiXSwge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiTWF5YmUgTGF0ZXJcIixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtVdGlscy5hbGVydChcIkNvdWxkIE5vdCBVcGRhdGVcIiwgYFVuYWJsZSB0byB1cGRhdGUgYXV0b21hdGljYWxseSwgcGxlYXNlIGRvd25sb2FkIHRoZSBpbnN0YWxsZXIgYW5kIHJlaW5zdGFsbCBub3JtYWxseS48YnIgLz48YnIgLz48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5gKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgc2V0dGluZ3NQYW5lbC5pbml0aWFsaXplU2V0dGluZ3MoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW5zKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lcygpO1xyXG5cclxuICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCBhdG9iKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XHJcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XHJcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbW9qaU1vZHVsZSA9IEVtb2ppTW9kdWxlXHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGF3YWl0IERPTS5hZGRTY3JpcHQoXCJhY2Utc2NyaXB0XCIsIFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKTtcclxuICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpICYmICFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLCBcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllcixcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIF1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJndWlsZC1zZXR0aW5ncy1iYXNlLXNlY3Rpb25cIikubGVuZ3RoKSBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZC1zZXR0aW5ncy1zaWRlYmFyXCIpKSBzZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcclxuICAgICAgICB9KSlcclxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXHJcbiAgICB9fSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcclxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG5cclxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxyXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XHJcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkgXHJcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcclxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XHJcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjMycHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xyXG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcclxuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xyXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSAvKnJlcXVpcmUoXCJyZXF1ZXN0XCIpOyovIG51bGxcclxuXHJcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XHJcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcclxuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcclxuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcclxuXHJcbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcclxuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XHJcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG5cclxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcclxuXHJcbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcclxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcclxuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXHJcbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTsiLCJjb25zdCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyA9IHdpbmRvdy5yZXF1aXJlXHJcblxyXG5pbXBvcnQge2JkQ29uZmlnfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgcmVsZWFzZUNoYW5uZWwgPSBEaXNjb3JkTmF0aXZlLmdsb2JhbHMgPyBEaXNjb3JkTmF0aXZlLmdsb2JhbHMucmVsZWFzZUNoYW5uZWwgOiBEaXNjb3JkTmF0aXZlLmFwcCA/IERpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCkgOiBcInN0YWJsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7c2V0dGluZ3M6IHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fX07XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldk1vZGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xpc3RlbmVyID0gdGhpcy5kZWJ1Z0xpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgdGhpcy5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDExOSB8fCBlLndoaWNoID09IDExOCkgey8vRjhcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1slY0Rldk1vZGUlY10gJWNCcmVhay9SZXN1bWVcIiwgXCJjb2xvcjogcmVkO1wiLCBcImNvbG9yOiAjMzAzMDMwOyBmb250LXdlaWdodDo3MDA7XCIsIFwiY29sb3I6cmVkO1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29weVNlbGVjdG9yTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudGFyZ2V0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0ubGF5ZXIsXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmNvbnRleHRNZW51KVswXSxcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNtID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzSXRlbXMuY29udGV4dE1lbnUuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc05hbWVMYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmNvbnRleHRNZW51fSBiZC1jb250ZXh0LW1lbnVcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuYXBwZW5kKGNtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGNtV3JhcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUubGVmdCA9IGUuY2xpZW50WCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUuekluZGV4ID0gXCIxMDAyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllci5zcGxpdChcIiBcIilbMF0pXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW1Hcm91cH1cIj5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5jbGlja2FibGV9XCI+YCk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmxhYmVsfVwiPkNvcHkgU2VsZWN0b3I8L2Rpdj5gKSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLk5hdGl2ZU1vZHVsZS5jb3B5KHNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjbS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNtZy5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgIGNtLmFwcGVuZChjbWcpO1xyXG4gICAgICAgICAgICAgICAgaWYoY21XcmFwLmNsaWVudEhlaWdodCA8IGNtV3JhcC5zY3JvbGxIZWlnaHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmcgXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gKGNtV3JhcC5zdHlsZS50b3AgLSBjbWcuY2xpZW50SGVpZ2h0KSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXR0YWNoLCAxKTtcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0b3IoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VsZW1lbnQuaWR9YDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbiBmdWxsUGF0aChlbCl7XHJcbiAgICAgICAgICAgIHZhciBuYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICB3aGlsZSAoZWwucGFyZW50Tm9kZSl7XHJcbiAgICAgICAgICAgICAgaWYgKGVsLmlkKXtcclxuICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoJyMnK2VsLmlkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsPT1lbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QuZW50cmllcygpKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpKTtcclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MSxlPWVsO2UucHJldmlvdXNFbGVtZW50U2libGluZztlPWUucHJldmlvdXNFbGVtZW50U2libGluZyxjKyspO1xyXG4gICAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsoZWwuY2xhc3NOYW1lIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpK1wiOm50aC1jaGlsZChcIitjK1wiKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsPWVsLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lcy5qb2luKFwiID4gXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVsbFBhdGgoZWxlbWVudClcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RSdWxlID0gcnVsZXNbcnVsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKGxhdGVzdFJ1bGUpIHJldHVybiBsYXRlc3RSdWxlLnNlbGVjdG9yVGV4dDtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5sZW5ndGgpIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDtcclxuICAgICAgICByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDsqL1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJ1bGVzKGVsZW1lbnQsIGNzcyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cykge1xyXG4gICAgICAgIC8vaWYgKHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMpIHJldHVybiB3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IFsuLi5jc3NdLmZpbHRlcihzID0+ICFzLmhyZWYgfHwgIXMuaHJlZi5pbmNsdWRlcyhcIkJldHRlckRpc2NvcmRBcHBcIikpO1xyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gc2hlZXRzLm1hcChzID0+IFsuLi4ocy5jc3NSdWxlcyB8fCBbXSldKS5mbGF0KCk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJ1bGVzID0gcnVsZXMuZmlsdGVyKHIgPT4gciAmJiByLnNlbGVjdG9yVGV4dCAmJiBlbGVtZW50Lm1hdGNoZXMoci5zZWxlY3RvclRleHQpICYmIHIuc3R5bGUubGVuZ3RoICYmIHIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikubGVuZ3RoIDwgOCAmJiAhci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5pbmNsdWRlcyhcIipcIikpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50UnVsZXM7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXHJcbmltcG9ydCBMaWdodGNvcmRVc2VyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9MaWdodGNvcmRVc2VyXCI7XHJcbmltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgeyBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHsgLy8gR2VuZXJhdGUgVVVJRCAoTm8gY3J5cHRvIHJuZylcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcclxuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn0gIFxyXG5cclxuY29uc3QgYXdhaXRpbmdCYWRnZXNQcm9taXNlcyA9IHt9XHJcbmxldCBiYWRnZXNUb0ZldGNoID0gW11cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXN0YW50U2VydmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczoge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FjaGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2FjaGUoZGF0YSl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHRoaXMuX2NhY2hlICE9PSBcIm9iamVjdFwiKXJldHVybiB0aGlzLl9jYWNoZSA9IGRhdGFcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuXHJcbiAgICAgICAgbGV0IHJlc29sdmVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXHJcblxyXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXHJcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlQm9keSlcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cclxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICB9LCA2MDAwMDApO1xyXG5cclxuICAgICAgICByZXNvbHZlKGJhZGdlcylcclxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG4gICAgICAgIHJldHVybiBiYWRnZXNcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xyXG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgQ2FuY2VsaW5nIHJlcXVlc3Qgb24gJHtyb3V0ZX0gd2l0aCBtZXRob2QgJHttZXRob2R9IGFuZCBib2R5YCwgZGF0YSwgXCJiZWNhdXNlIG9mIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKGBTZW5kaW5nIHJlcXVlc3Qgb24gJHtyb3V0ZX0gd2l0aCBtZXRob2QgJHttZXRob2R9IGFuZCBib2R5YCwgZGF0YSlcclxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihkYXRhID8ge1xyXG4gICAgICAgICAgICBib2R5OiBkYXRhXHJcbiAgICAgICAgfSA6IHt9KVxyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIFNFUlZFUl9VUkw6IFwiaHR0cDovLzEyNy4wLjAuMVwiLFxyXG4gICAgYmFkZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBVc2VyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcIjAxY2ZhN2IwLTdjZGItNGIwZS04MjU4LTljNmE3ODIzNWM5M1wiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtcclxuICAgICAgICAgICAgICAgIFwidXNlclwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogTGlnaHRjb3JkVXNlckJhZGdlXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzL2J1Z19odW50ZXJcIlxyXG4gICAgICAgIH1cclxuICAgIF1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcclxuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgLFxyXG4gICAgZGVsZXRlOiBgL2RlbGV0ZWBcclxufSIsIi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxOCBaYWNoYXJ5IFJhdWVuXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xyXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcclxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcclxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZFxyXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsXHJcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXHJcbiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcclxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GXHJcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxyXG4gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cclxuICogXHJcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBuYW1lIE9mZnNldFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCAtIFJpZ2h0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBPdXRlciBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBPdXRlciB3aWR0aCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqL1xyXG5cclxuIC8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cclxuICogQGNhbGxiYWNrIG1vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lclxyXG4gKi9cclxuIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Ub29scyB7XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogQWRkcyBhIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgLSBjc3MgdG8gYWRkIHRvIHRoZSBkb2N1bWVudFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XHJcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChET01Ub29scy5jcmVhdGVFbGVtZW50KGA8c3R5bGUgaWQ9XCIke2lkfVwiPiR7Y3NzfTwvc3R5bGU+YCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkcy9yZXF1aXJlcyBhIHJlbW90ZSBzY3JpcHQgdG8gYmUgbG9hZGVkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBmcm9tIHdoaWNoIHRvIGxvYWQgdGhlIHNjcmlwdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTY3JpcHQoaWQsIHVybCkge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG5cdFx0XHRzY3JpcHQuaWQgPSBpZDtcclxuXHRcdFx0c2NyaXB0LnNyYyA9IHVybDtcclxuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG5cdFx0XHRzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcclxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc2NyaXB0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHJlbW90ZSBzY3JpcHQgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIGh0dHBzOi8vamF2YXNjcmlwdC5pbmZvL2pzLWFuaW1hdGlvblxyXG4gICAgc3RhdGljIGFuaW1hdGUoe3RpbWluZyA9IF8gPT4gXywgdXBkYXRlLCBkdXJhdGlvbn0pIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgICBcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XHJcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxyXG4gICAgICAgICAgbGV0IHRpbWVGcmFjdGlvbiA9ICh0aW1lIC0gc3RhcnQpIC8gZHVyYXRpb247XHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uID4gMSkgdGltZUZyYWN0aW9uID0gMTtcclxuICAgICAgXHJcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXHJcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWluZyh0aW1lRnJhY3Rpb24pO1xyXG4gICAgICBcclxuICAgICAgICAgIHVwZGF0ZShwcm9ncmVzcyk7IC8vIGRyYXcgaXRcclxuICAgICAgXHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIG15IHNoaXQgdmVyc2lvbiBvZiBub3QgaGF2aW5nIHRvIHVzZSBgJGAgZnJvbSBqUXVlcnkuIE1lYW5pbmdcclxuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXHJcbiAgICAgKiBJdCBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBwYXNzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGl0IHdpbGwgcGVyZm9ybSBhbmQgcmV0dXJuIGBwYXJzZUhUTUxgLlxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnkgb3IgSFRNTCB0byBwYXJzZVxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBFaXRoZXIgdGhlIHJlc3VsdCBvZiBgcGFyc2VIVE1MYCBvciBgcXVlcnlgXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBRKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VIVE1MKHNlbGVjdG9yKTtcclxuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XHJcbiAgICAgICAgaWYgKGlzSFRNTCkgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgZm91bmQgZWxlbWVudCBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGxgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnlBbGwoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcclxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxyXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBsaXN0IG9mIHBhcnNlZFxyXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBIVE1MIHRvIGJlIHBhcnNlZFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJhZ21lbnQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdGhlIHJldHVybiBzaG91bGQgYmUgdGhlIHJhdyBgRG9jdW1lbnRGcmFnbWVudGBcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcnNlSFRNTChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XHJcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICBjb25zdCBub2RlID0gdGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcclxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyBub2RlLmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsdGVybmF0ZSBuYW1lIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTH0gKi9cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtyZXR1cm4gdGhpcy5wYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQpO31cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCBlc2NhcGVzIGl0IHVzaW5nIHRoZSBicm93ZXIncyBvd24gZXNjYXBpbmcgbWVjaGFuaXNtLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVzY2FwZUhUTUwoaHRtbCkge1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XHJcbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgICAgICBzcGFuRWxlbWVudC5hcHBlbmQodGV4dE5vZGUpO1xyXG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XHJcbiAgICAgICAgcmV0dXJuIHNwYW5FbGVtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIGFkZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByZXNlbnQ6IFRvZ2dsZSBjbGFzcyB2YWx1ZTtcclxuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cclxuICAgICAqIFdoZW4gYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudDpcclxuICAgICAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgZXZhbHVhdGVzIHRvIHRydWUsIGFkZCBzcGVjaWZpZWQgY2xhc3MgdmFsdWUsIGFuZCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHJlbW92ZSBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byB0b2dnbGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luZGljYXRvcl0gLSBPcHRpb25hbCBpbmRpY2F0b3IgZm9yIGlmIHRoZSBjbGFzcyBzaG91bGQgYmUgdG9nZ2xlZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lLCBpbmRpY2F0b3IpIHtcclxuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRpY2F0b3IpICE9PSBcInVuZGVmaW5lZFwiKSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjLCBpbmRpY2F0b3IpKTtcclxuICAgICAgICBlbHNlIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhIHNwZWNpZmljIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYykuZXZlcnkoYyA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyBvbmUgY2xhc3Mgd2l0aCBhbm90aGVyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHJlcGxhY2VcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgZm9yIHRoZSBjbGFzc1xyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVwbGFjZUNsYXNzKGVsZW1lbnQsIG9sZE5hbWUsIG5ld05hbWUpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgYXBwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLmFwcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBwcmVwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBwcmVwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmVwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5wcmVwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5pbnNlcnRBZnRlcihvdGhlckVsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcclxuICAgICAgICB0YXJnZXROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNOb2RlLCB0YXJnZXROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFmdGVyKHRoaXNOb2RlLCBuZXdOb2RlKSB7XHJcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG5leHQgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiKyBcIiArIHNlbGVjdG9yKSA6IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG5leHQgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dEFsbChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIn4gKlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dFVudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0LnB1c2goZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSByZXR1cm4gcHJldmlvdXMgJiYgcHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikgPyBwcmV2aW91cyA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgd2hpY2ggaW5kZXggaW4gY2hpbGRyZW4gYSBjZXJ0YWluIG5vZGUgaXMuIFNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuaW5kZXgoKWBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IEluZGV4IG9mIHRoZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGxldCBudW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMuaW5kZXhJblBhcmVudH0gKi9cclxuICAgIHN0YXRpYyBpbmRleChub2RlKSB7cmV0dXJuIHRoaXMuaW5kZXhJblBhcmVudChub2RlKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgaWYgaXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcGFyZW50IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBwYXJlbnRzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBhcmVudHMgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSk7XHJcbiAgICAgICAgZWxzZSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhbmNlc3RvcnMgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhbmNlc3RvcnMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzaWJsaW5ncyBvZiB0aGUgZWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGUgPT4gZSAhPSBlbGVtZW50ICYmIGUubWF0Y2hlcyhzZWxlY3RvcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIGNzcyBzdHlsZXMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgc3R5bGUuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBWYWx1ZSB0byBzZXQgZm9yIGF0dHJpYnV0ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNzcyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIHdpZHRoIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHdpZHRoLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkud2lkdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgaGVpZ2h0IGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgaGVpZ2h0IGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gSGVpZ2h0IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhlaWdodChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSB0ZXh0IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gQ29udGVudCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0ZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IGluIHRoZSBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtPZmZzZXR9IC0gVGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxpc3RlbmVycygpIHsgcmV0dXJuIHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlzdGVuZXJzID0ge30pOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9uYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgb25jZS5cclxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxyXG4gICAgICogYW5kIHJlbW92ZXMgdGhlIGxpc3RlbmVyIHVwb24gdGhlIGZpcnN0IGZpcmluZyBvZiB0aGUgZGVzaXJlZCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBtYXRjaEZpbHRlciA9IGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09IHR5cGUsIGRlZmF1bHRGaWx0ZXIgPSBfID0+IF87XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gfHwgW107XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPyBsaXN0ZW5lcnMuZmlsdGVyKG1hdGNoRmlsdGVyKSA6IGxpc3RlbmVycy5maWx0ZXIoZGVmYXVsdEZpbHRlcik7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb2ZmYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlZCB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgY2xpY2sgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhFbGVtZW50fHN0cmluZyl9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJlbW92ZSBsaXN0ZW5lciBmcm9tXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IFtkZWxlZ2F0ZV0gLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSByZXR1cm4gdGhpcy5fX29mZkFsbChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciB3aGVuIHRoZSBub2RlIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keS5cclxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byB3YWl0IGZvclxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZXZlbnRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgb25Nb3VudCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudW5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjaywgbXV0YXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ob25Nb3VudCA/IG11dGF0aW9uLmFkZGVkTm9kZXMgOiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgdHJ1ZWAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgZmFsc2VgICovXHJcbiAgICBzdGF0aWMgb25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uQWRkZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudChub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Vbm1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vblVubW91bnQobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbWJpbmVzIG11bHRpcGxlIGVsZW1lbnRzIGludG8gb25lIHBhcmVudCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdyYXAoZWxlbWVudHMpIHtcclxuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xyXG4gICAgICAgIGZvciAobGV0IGUgPSAwOyBlIDwgZWxlbWVudHMubGVuZ3RoOyBlKyspIGRvbVdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudHNbZV0pO1xyXG4gICAgICAgIHJldHVybiBkb21XcmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxyXG4gICAgICogQHBhcmFtIHsoalF1ZXJ5fEVsZW1lbnQpfSBub2RlIC0gbm9kZSB0byByZXNvbHZlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XHJcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7YmRDb25maWcsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbi8vaW1wb3J0IERpc2NvcmRDcnlwdCBmcm9tIFwiLi9EaXNjb3JkQ3J5cHRcIjtcclxuXHJcbmNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcclxufVxyXG5cclxubGV0IEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXVxyXG5sZXQgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVswXVxyXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxyXG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdXHJcbmxldCBndWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVswXVxyXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb2ppTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCl7XHJcbiAgICAgICAgLyoqIEVtb2ppIEF1dG9Db21wbGV0ZSAqL1xyXG4gICAgICAgIGlmKCFBdXRvY29tcGxldGVNb2R1bGUpQXV0b2NvbXBsZXRlTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVxyXG4gICAgICAgIGlmKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcylBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVxyXG4gICAgICAgIGlmKCFFbW9qaU1vZHVsZVF1ZXJ5KUVtb2ppTW9kdWxlUXVlcnkgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpXHJcbiAgICAgICAgaWYoIU1lc3NhZ2VzKU1lc3NhZ2VzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylcclxuICAgICAgICBpZighZ3VpbGRNb2R1bGUpZ3VpbGRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpXHJcbiAgICAgICAgaWYoIWVtb2ppU2VhcmNoKWVtb2ppU2VhcmNoID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcbiAgICAgICAgaWYoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgICBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zID0gZnVuY3Rpb24oZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW1vamlVc2FibGUoY29uZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHModCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gRW1vamlNb2R1bGVRdWVyeS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKHQsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRChlLCB0LCBhLmVtb2ppcywgbiwgciwgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORywgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSSwgQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuRW1vamksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRpbmVsOiBcIi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsZDogbnVsbCAhPSBlLmd1aWxkSWQgPyBndWlsZE1vZHVsZS5kZWZhdWx0LmdldEd1aWxkKGUuZ3VpbGRJZCkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5UZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFJhd1RleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3Qgc3RhcnQgYXV0b2NvbXBsZXRpb24gb2YgTGlnaHRjb3JkJ3MgZW1vamlzLlwiKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBFbW9qaSBkaXNwbGF5ICovXHJcbiAgICAgICAgd2hpbGUgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpe1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gY29udGVudCA9IERpc2NvcmRDcnlwdC5kZWNyeXB0Q29udGVudChjb250ZW50KVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtb2ppcyA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBub2RlIG9mIGNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUVtb2ppTW9kdWxlQXBpKUVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlbW9qaSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVtb2ppLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogcGFyc2VkWzBdLnN0YXJ0c1dpdGgoXCI8YVwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyc2VkWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFyc2VkWzJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJzZWQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzUGFyc2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KFwiIFwiKS5tYXAoKHdvcmQsIGluZGV4LCBhcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF3b3JkKXJldHVybiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcy5maW5kKGUgPT4gZS5yYXcgPT0gd29yZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlbW9qaSlyZXR1cm4gd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUN1c3RvbUVtb2ppTW9kdWxlKUN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21FbW9qaU1vZHVsZS5DdXN0b21FbW9qaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAuJHtlbW9qaS5uYW1lfS5gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaUlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1ib2FibGU6IGFyci5sZW5ndGggPT09IDEgJiYgY29udGVudC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcmV2aW91cy5sZW5ndGggPT09IDApcmV0dXJuIFtjdXJyZW50XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIrY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaCguLi53b3JkcylcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQuc2hpZnQoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUobmV3Q29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnB1c2gobmV3Q29udGVudC5zaGlmdCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcclxuICAgIGlmIChudWxsID09IG4gfHwgMCA9PT0gbi5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgdmFyIGQgPSBuLm1hcCgoZnVuY3Rpb24oZSwgbikge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHUsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBvbkNsaWNrOiBvLFxyXG4gICAgICAgICAgICBvbkhvdmVyOiByLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogdCA9PT0gbixcclxuICAgICAgICAgICAgaW5kZXg6IG5cclxuICAgICAgICB9LCBsKGUsIG4pKSlcclxuICAgIH0pKTtcclxuICAgIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF1cclxufVxyXG5cclxuZnVuY3Rpb24gUihlLCB0LCBuLCByKSB7XHJcbiAgICB2YXIgYSA9IChuLmxlbmd0aCA+IDAgPyBlLmZvcm1hdCh7XHJcbiAgICAgICAgcHJlZml4OiByKG4pXHJcbiAgICB9KSA6IHQpXHJcbiAgICBpZihBcnJheS5pc0FycmF5KGEpKXtcclxuICAgICAgICBhLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCB7fSwgXCJbTGlnaHRjb3JkXSBcIikpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBhID0gXCJbTElHSFRDT1JEXSBcIithXHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xyXG4gICAgICAgIHRpdGxlOiBhXHJcbiAgICB9LCBhKVxyXG59XHJcblIuZGlzcGxheU5hbWUgPSBcInJlbmRlckhlYWRlclwiO1xyXG5cclxubGV0IEVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxubGV0IGlzVXNhYmxlID0gZmFsc2VcclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5cclxuZnVuY3Rpb24gc2V0RW1vamlVc2FibGUodXNhYmxlKXtcclxuICAgIGlzVXNhYmxlID0gdXNhYmxlXHJcbiAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKUVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxyXG4gICAgaWYoIWlzRW1vamlEaXNhYmxlZClpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5cclxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZCA9IGZ1bmN0aW9uKGVtb2ppKXtcclxuICAgICAgICBpZihpc1VzYWJsZSl7XHJcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmNvbnN0IGRlYnVnID0gdHJ1ZVxyXG5jb25zdCBjYWNoZSA9IHt9XHJcbmNvbnN0IGNhY2hlMiA9IHt9XHJcbi8qXHJcbmNvbnN0IFBpbm5lZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFBpbm5lZE1lc3NhZ2VzKVswXS5kZWZhdWx0XHJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsSWQpWzBdLmRlZmF1bHRcclxuY29uc3QgZmV0Y2hNZXNzYWdlc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmZldGNoTWVzc2FnZXMpWzBdLmRlZmF1bHRcclxuY29uc3QgZmV0Y2hNZXNzYWdlc01vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5mZXRjaE1lc3NhZ2VzKVsxXS5kZWZhdWx0XHJcbmNvbnN0IGdldE1lc3NhZ2VzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0TWVzc2FnZXMpWzBdLmRlZmF1bHQqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuXHJcbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuICAgICAgICAvKmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcclxuICAgICAgICBjb25zdCBjb25zdGFudHMgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmNvbnN0YW50c1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbEZldGNoTWVzc2FnZXMgPSBmZXRjaE1lc3NhZ2VzTW9kdWxlLmZldGNoTWVzc2FnZXNcclxuICAgICAgICBmZXRjaE1lc3NhZ2VzTW9kdWxlLmZldGNoTWVzc2FnZXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsRmV0Y2hNZXNzYWdlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgICAgIGlmKHJldHVyblZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ID0gZ2V0TWVzc2FnZXNNb2R1bGUuZ2V0TWVzc2FnZXMoQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IG1lc3NhZ2Ugb2YgZXYuX2FycmF5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGZXRjaE1lc3NhZ2VzMiA9IGZldGNoTWVzc2FnZXNNb2R1bGUyLmZldGNoTWVzc2FnZXNcclxuICAgICAgICBmZXRjaE1lc3NhZ2VzTW9kdWxlMi5mZXRjaE1lc3NhZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbEZldGNoTWVzc2FnZXMyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICAgICAgaWYocmV0dXJuVmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKXtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXYgPSBnZXRNZXNzYWdlc01vZHVsZS5nZXRNZXNzYWdlcyhDaGFubmVsTW9kdWxlLmdldENoYW5uZWxJZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBldi5fYXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhdHRhY2htZW50cy5sZW5ndGggPT09IDApY29udGludWUgLy8gbm8gYXR0YWNobWVudHNcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhbHJlYWR5VXNlZCA9IHt9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxHZXRQaW5uZWRNZXNzYWdlcyA9IFBpbm5lZE1vZHVsZS5nZXRQaW5uZWRNZXNzYWdlcy5iaW5kKFBpbm5lZE1vZHVsZSlcclxuICAgICAgICBQaW5uZWRNb2R1bGUuZ2V0UGlubmVkTWVzc2FnZXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBjb25zdCBwaW5uZWQgPSBvcmlnaW5hbEdldFBpbm5lZE1lc3NhZ2VzKC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgaWYoIXBpbm5lZCB8fCBhbHJlYWR5VXNlZFtwaW5uZWQuaWRdKXJldHVybiBwaW5uZWRcclxuICAgICAgICAgICAgYWxyZWFkeVVzZWRbcGlubmVkLmlkXSA9IHRydWVcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFscmVhZHlVc2VkW3Bpbm5lZC5pZF1cclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBtZXNzYWdlIG9mIHBpbm5lZC5tZXNzYWdlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwaW5uZWRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKGNvbnN0YW50cy5BY3Rpb25UeXBlcy5NRVNTQUdFX0NSRUFURSwgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldi5tZXNzYWdlXHJcbiAgICAgICAgICAgIGlmKG1lc3NhZ2UuY2hhbm5lbF9pZCAhPT0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlyZXR1cm5cclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClyZXR1cm4gLy8gbm8gYXR0YWNobWVudHNcclxuXHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNNb2R1bGUuZ2V0TWVzc2FnZXMoQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlcclxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMuX2FycmF5KXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcblxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIGlkKXtcclxuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKS5zcGxpdCgvW15cXHdcXGRdKy9nKVxyXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXHJcbiAgICBmb3IobGV0IGtleXdvcmQgb2YgZGF0YSl7XHJcbiAgICAgICAgZm9yKGxldCBvb2Ygb2YgW1xyXG4gICAgICAgICAgICBcInRva2VuXCIsXHJcbiAgICAgICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICAgICAgXCJwaG9uZVwiLFxyXG4gICAgICAgICAgICBcIk1GQVwiLFxyXG4gICAgICAgICAgICBcIjJmYVwiLFxyXG4gICAgICAgICAgICBcInByb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXHJcbiAgICAgICAgICAgIFwibG9jYWxTdG9yYWdlXCIsXHJcbiAgICAgICAgICAgIFwiZXZhbFwiLFxyXG4gICAgICAgICAgICBcImdldEdsb2JhbFwiLFxyXG4gICAgICAgICAgICBcIkJyb3dzZXJXaW5kb3dcIlxyXG4gICAgICAgIF0pe1xyXG4gICAgICAgICAgICBpZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMob29mLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwidG9rZW4gc3RlYWxlci92aXJ1c1wiXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG5vX2NvbW1lbnRzID0gZGF0YS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfChbXlxcXFw6XXxeKVxcL1xcLy4qJC9nbSwgXCJcIikudHJpbSgpLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcclxuICAgICAgICBpZigoL3ZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSkudGVzdChub19jb21tZW50cykpe1xyXG4gICAgICAgICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgICAgICBjb25zdCByZWdleHBzID0gW1xyXG4gICAgICAgICAgICAgICAgLyoqIGhleGFkZWNpbWFsICovXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgICAgICAvKiogbWFuZ2xlZCAqL1xyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgZm9yKGxldCByZWdleCBvZiByZWdleHBzKXtcclxuICAgICAgICAgICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgICAgICAgICAgICAgaXNIYXJtZnVsID0gcmVnZXgudGVzdChub19jb21tZW50cykgPyBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCIgOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuXHJcbiAgICBjYWNoZVtoYXNoXSA9IHtcclxuICAgICAgICBzdXNwZWN0OiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXHJcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcclxuICAgICAgICBoYXJtOiBpc0hhcm1mdWxcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxyXG5cclxuICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIGNhY2hlW2hhc2hdLCBjYWNoZVtoYXNoXS5uYW1lKVxyXG59XHJcblxyXG5jb25zdCBoYXNoVG9VcmwgPSB7fVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIGxldCBuZXh0SGFzaCA9IChoYXNoLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoIWNhY2hlW2hhc2hdKXtcclxuICAgICAgICAgICAgbm9kZUZldGNoKFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xpZ2h0Y29yZC9maWxlaGFzaGVzQG1hc3Rlci9oYXNoZXMvXCIraGFzaCwgeyAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnQgLy8gaGF2ZSB0byBzZXQgdXNlci1hZ2VudFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApcmV0dXJuIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCBpZClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcclxuXHJcbiAgICAgICAgICAgICAgICBjYWNoZVtoYXNoXSA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCk9Pnt9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZihjYWNoZTJbYXR0YWNobWVudC51cmxdKXJldHVybiBuZXh0SGFzaChjYWNoZTJbYXR0YWNobWVudC51cmxdKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBuZXh0SGFzaChoYXNoUmVzdWx0LCBkYXRhKVxyXG4gICAgICAgIH0pXHJcbiAgICB9KS5jYXRjaCgoKT0+e30pXHJcbn1cclxuXHJcbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxubGV0IGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVybiAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cclxuXHJcbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxuICAgIGlmKCFjaGlsZE1vZHVsZSljaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG4gICAgXHJcblxyXG4gICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcInJnYigyNDAsIDcxLCA3MSlcIlxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogXHJcbiAgICAgICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSAobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSBcIkFcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgP1wiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiICoqXCIrZmlsZW5hbWUrXCIqKiBtaWdodCBiZSBkYW5nZXJvdXMgKiooXCIrcmVzdWx0Lmhhcm0rXCIpKiouIFxcblxcbioqV2UgZG9uJ3QgcmVjb21tYW5kIHRvIGRvd25sb2FkIGl0KiouIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgZG8gaXQgYmVsb3cuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiRG9uJ3QgIVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5yZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKGNoaWxkLmhyZWYpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoW1wiZGl2XCJdLmluY2x1ZGVzKGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZShjaGlsZClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dE5vZGUoZGl2LnBhcmVudE5vZGUpXHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cy5cIn0sIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjE2cHhcIiwgaGVpZ2h0OiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMTZweFwiLGhlaWdodDpcIjE2cHhcIix2aWV3Qm94OlwiMCAwIDQwIDMyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OlwiMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5OlwiMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDpcIjMyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpcIjMyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6XCIjZjA0NzQ3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLXN0YXR1cy1kbmQpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICksIGRpdilcclxuICAgIH1lbHNlIGlmKCFyZXN1bHQub2ZmaWNpYWwpe1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBjZXJ0aWZpZWQgYnkgTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMTZweFwiLCBoZWlnaHQ6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMTZweFwiLGhlaWdodDpcIjE2cHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIxNnB4XCIsaGVpZ2h0OlwiMTZweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICksIGRpdilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMTZweFwiLCBoZWlnaHQ6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMTZweFwiLGhlaWdodDpcIjE2cHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIixzdHJva2U6XCIjMzYzOTNmXCIsc3R5bGU6e2NvbG9yOlwiIzQwODdlZFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcImN1cnJlbnRDb2xvclwiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjE2cHhcIixoZWlnaHQ6XCIxNnB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge2JkcGx1Z2luRXJyb3JzLCBwbHVnaW5Db29raWUsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY2xhc3MgUGx1Z2luTW9kdWxlIHtcclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXI7fVxyXG59XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkUGx1Z2luRGF0YSgpO1xyXG4gICAgYmRwbHVnaW5FcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkUGx1Z2lucygpKSk7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwbHVnaW4sIG5hbWU7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4uZ2V0TmFtZSgpO1xyXG4gICAgICAgICAgICBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgbG9hZGVkLlwiLCBlcnIpO1xyXG4gICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtuYW1lXSkgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwbHVnaW5Db29raWVbbmFtZV0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuXHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xyXG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xyXG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcclxuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XHJcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XHJcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XHJcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xyXG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cclxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xyXG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xyXG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xyXG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcclxuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZ1bGxQYXRoKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInBsdWdpbnNcIiwgcGx1Z2luQ29va2llKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubmV3TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcclxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uTWVzc2FnZSgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmNoYW5uZWxTd2l0Y2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yYXdPYnNlcnZlciA9IGZ1bmN0aW9uKGUpIHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcclxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIoZSk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbk1vZHVsZSgpOyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBWMkNfUHVibGljU2VydmVycyBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCBMYXllciBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9sYXllclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCIsIGlkOiBcInB1YnNsYXllclwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVic2xheWVycm9vdFwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcnNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllcnMgJiYgZS5sYXllcilbMF0ubGF5ZXJzLnNwbGl0KFwiIFwiKVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBsYXllcnMgPSBET00ucXVlcnkoXCIubGF5ZXJzLCAuXCIrY2xhc3NOYW1lTGF5ZXJzKTtcclxuICAgICAgICBpZiAoIWxheWVycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxheWVycy5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGlkPSdwdWJzbGF5ZXJyb290Jz5cIikpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBidG4gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1saVwiIGNsYXNzPVwiJHtCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XHJcbiAgICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHt0aGlzLnJlbmRlcigpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVTY3JvbGxlclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyICYmIGUuc2Nyb2xsYmFyV2lkdGgpWzBdLnNjcm9sbGVyXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgLiR7d3JhcHBlcn0gLiR7Y2xhc3NOYW1lU2Nyb2xsZXJ9ID46Zmlyc3QtY2hpbGRgKTtcclxuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3QgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk5hdmlnYWJsZUd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkTGlzdCA/IEd1aWxkTGlzdCA6IEd1aWxkTGlzdE9sZC5wcm90b3R5cGUsIEd1aWxkTGlzdCA/IFwiZGVmYXVsdFwiIDogXCJyZW5kZXJcIiwge2FmdGVyOiB0aGlzLl9hcHBlbmRCdXR0b259KTtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVCdXR0b24oKSB7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZ3VpbGRQYXRjaDtcclxuICAgICAgICBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5cclxuY29uc3QgQnJvd3NlcldpbmRvdyA9IGVsZWN0cm9uLnJlbW90ZS5Ccm93c2VyV2luZG93O1xyXG5jb25zdCB3ZWJDb250ZW50cyA9IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgcmVhY3REZXZUb29scyB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBsZXQgZXh0ZW5zaW9uUGF0aCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikgZXh0ZW5zaW9uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5MT0NBTEFQUERBVEEsIFwiR29vZ2xlL0Nocm9tZS9Vc2VyIERhdGFcIik7XHJcbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSBleHRlbnNpb25QYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsIFwiLmNvbmZpZy9nb29nbGUtY2hyb21lXCIpO1xyXG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIGV4dGVuc2lvblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSwgXCJMaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvR29vZ2xlL0Nocm9tZVwiKTtcclxuICAgICAgICBlbHNlIGV4dGVuc2lvblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSwgXCIuY29uZmlnL2Nocm9taXVtXCIpO1xyXG4gICAgICAgIGV4dGVuc2lvblBhdGggKz0gXCIvRGVmYXVsdC9FeHRlbnNpb25zL2Zta2FkbWFwZ29mYWRvcGxqYmpma2FwZGtvaWVuaWhpL1wiO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGV4dGVuc2lvblBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25zID0gZnMucmVhZGRpclN5bmMoZXh0ZW5zaW9uUGF0aCk7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvblBhdGggPSBwYXRoLnJlc29sdmUoZXh0ZW5zaW9uUGF0aCwgdmVyc2lvbnNbdmVyc2lvbnMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4dGVuc2lvblBhdGggPSBleHRlbnNpb25QYXRoO1xyXG4gICAgICAgIHRoaXMuaXNFeHRlbnNpb25JbnN0YWxsZWQgPSBmcy5leGlzdHNTeW5jKGV4dGVuc2lvblBhdGgpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSB0aGlzLmxpc3RlbmVyLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHNldHRpbmdzW1wiUmVhY3QgRGV2VG9vbHNcIl0uaGlkZGVuID0gIXRoaXMuaXNFeHRlbnNpb25JbnN0YWxsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRXh0ZW5zaW9uSW5zdGFsbGVkKSByZXR1cm47XHJcbiAgICAgICAgQnJvd3NlcldpbmRvdy5yZW1vdmVEZXZUb29sc0V4dGVuc2lvbihcIlJlYWN0IERldmVsb3BlciBUb29sc1wiKTtcclxuICAgICAgICBjb25zdCBkaWRJbnN0YWxsID0gQnJvd3NlcldpbmRvdy5hZGREZXZUb29sc0V4dGVuc2lvbih0aGlzLmV4dGVuc2lvblBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZGlkSW5zdGFsbCkgVXRpbHMubG9nKFwiUmVhY3QgRGV2VG9vbHNcIiwgXCJTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHJlYWN0IGRldnRvb2xzLlwiKTtcclxuICAgICAgICBlbHNlIFV0aWxzLmVycihcIlJlYWN0IERldlRvb2xzXCIsIFwiQ291bGRuJ3QgZmluZCByZWFjdCBkZXZ0b29scyBpbiBjaHJvbWUgZXh0ZW5zaW9ucyFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHdlYkNvbnRlbnRzLm9uKFwiZGV2dG9vbHMtb3BlbmVkXCIsIHRoaXMubGlzdGVuZXIpKTtcclxuICAgICAgICBpZiAod2ViQ29udGVudHMuaXNEZXZUb29sc09wZW5lZCgpKSB0aGlzLmxpc3RlbmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB3ZWJDb250ZW50cy5yZW1vdmVMaXN0ZW5lcihcImRldnRvb2xzLW9wZW5lZFwiLCB0aGlzLmxpc3RlbmVyKTtcclxuICAgIH1cclxufTsgICIsImltcG9ydCB7c2V0dGluZ3MsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc1JQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFNpZGViYXJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCByZWFjdERldlRvb2xzIGZyb20gXCIuL3JlYWN0RGV2VG9vbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IHB1YmxpY1NlcnZlcnNNb2R1bGUgZnJvbSBcIi4vcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgdm9pY2VNb2RlIGZyb20gXCIuL3ZvaWNlTW9kZVwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xyXG5pbXBvcnQgZE1vZGUgZnJvbSBcIi4vZGV2TW9kZVwiO1xyXG5cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi91aS90b29sc1wiO1xyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3VpL3Njcm9sbGVyXCI7XHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc2lkZUJhck9uQ2xpY2sgPSB0aGlzLnNpZGVCYXJPbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gdGhpcy51cGRhdGVTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhciA9IG5ldyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIodGhpcy5zaWRlQmFyT25DbGljayk7XHJcbiAgICAgICAgLy8gdGhpcy5idWlsZFBsdWdpblByb3BzID0gdGhpcy5idWlsZFBsdWdpblByb3BzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5idWlsZFRoZW1lUHJvcHMgPSB0aGlzLmJ1aWxkVGhlbWVQcm9wcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd09yaWdpbmFsID0gdGhpcy5zaG93T3JpZ2luYWwuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLFxyXG4gICAgICAgICAgICBjbGFzc1NpZGViYXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBzaWRlYmFyID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzTmFtZUxheWVyK1wiIC5cIitjbGFzc1NpZGViYXIuc3RhbmRhcmRTaWRlYmFyVmlldy5zcGxpdChcIiBcIilbMF0rXCIsIC5cIitjbGFzc05hbWVMYXllcitcIiAudWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCIpO1xyXG4gICAgICAgIGlmICghc2lkZWJhcikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIiBjbGFzcz1cIiR7Y2xhc3NTaWRlYmFyLmNvbnRlbnRSZWdpb259IGNvbnRlbnQtcmVnaW9uXCI+YCk7XHJcbiAgICAgICAgc2lkZWJhci5hcHBlbmQocm9vdCk7XHJcblxyXG4gICAgICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29yZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwic3RhdHVzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1zZ0xvZ1NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwibXNnbG9nXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3MoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZGVCYXJPbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudFJlZ2lvbiA9IERPTS5xdWVyeShcIi5jb250ZW50UmVnaW9uLTNuRHVZeSwgLmNvbnRlbnQtcmVnaW9uXCIpO1xyXG4gICAgICAgIGNvbnRlbnRSZWdpb24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjb3JlXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvcmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjdXN0b21jc3NcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3VzdG9tQ3NzRWRpdG9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInBsdWdpbnNcIjpcclxuICAgICAgICAgICAgY2FzZSBcInRoZW1lc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJBZGRvblBhbmUoaWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaWdodGNvcmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTGlnaHRjb3JkU2V0dGluZ3MoKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSBcInN0YXR1c1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQcmVzZW5jZVNldHRpbmdzKClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgXCJhY2NvdW50aW5mb1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJBY2NvdW50SW5mb3MoKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHt9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKGlkLCBjaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCkge1xyXG4gICAgICAgIHNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgICAgICBlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTdcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIENsYXNzTm9ybWFsaXplci5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCBlbmFibGVkKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMyZjMxMzZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLThcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstZG0tMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0b3JlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiB0eXBlb2YgZS5kZWZhdWx0ID09PSBcIm9iamVjdFwiICYmIFwic2hvd0N1cnJlbnRHYW1lXCIgaW4gZS5kZWZhdWx0KVswXVxyXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3MpWzBdLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgICAgICBlbHNlIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTZcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtOFwiXSkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTZXR0aW5ncygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dPcmlnaW5hbCgpIHtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yb290KTtcclxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIERPTS5xdWVyeShcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50UmVnaW9uKVswXS5jb250ZW50UmVnaW9uLnNwbGl0KFwiIFwiKVswXStcIiwgLmNvbnRlbnQtcmVnaW9uXCIpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNpZGViYXIoKSB7XHJcbiAgICAgICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGFicykge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc2hvd09yaWdpbmFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb3JlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2NvbnRlbnRDb2x1bW46IHRydWUsIGZhZGU6IHRydWUsIGRhcms6IHRydWV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge2tleTogXCJsc3Bhbm5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMubGlnaHRjb3JkU2V0dGluZ3N9KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInRvb2xzXCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IFByZXNlbmNlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwibHBwYW5uZWxcIixcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBBY2NvdW50SW5mb3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2NvbnRlbnRDb2x1bW46IHRydWUsIGZhZGU6IHRydWUsIGRhcms6IHRydWV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjdXN0b21Dc3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2NvbnRlbnRDb2x1bW46IHRydWUsIGZhZGU6IHRydWUsIGRhcms6IHRydWV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29yZUNvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyTGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmxpZ2h0Y29yZENvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuUHJlc2VuY2VDb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckFjY291bnRJbmZvcygpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuQWNjb3VudEluZm9zQ29tcG9uZW50LCByb290KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJDdXN0b21Dc3NFZGl0b3IoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmN1c3RvbUNzc0NvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgIC8vICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgLy8gICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xyXG4gICAgLy8gICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29udGVudENvbXBvbmVudCh0eXBlKSwgcm9vdCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMucm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xyXG4gICAgICAgIC8vIEkga25vdyB0aGlzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgd2hlbiBpdCBpc24ndCxcclxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcclxuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xyXG4gICAgICAgIC8vIHRvIGRlYnVnIGxhdGVyLlxyXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgICAgICAgICAgQkRFdmVudHMub24oYCR7dGhpcy5wcmVmaXh9LXJlbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICAgICAgICAgIEJERXZlbnRzLm9mZihgJHt0aGlzLnByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgICAgICAgICAgICAgIEJERXZlbnRzLm9mZihgJHt0aGlzLnByZWZpeH0tbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7dHlwZSwgb25DaGFuZ2U6IHRoaXMuc2lkZUJhck9uQ2xpY2t9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHt0eXBlLCBsaXN0fSkpLCB0aGlzLnJvb3QpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge2JiZENoYW5nZWxvZywgTENDaGFuZWxvZ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgU2lkZUJhciBmcm9tIFwiLi4vdWkvc2lkZWJhclwiO1xyXG5pbXBvcnQgSGlzdG9yeSBmcm9tIFwiLi4vdWkvaWNvbnMvaGlzdG9yeVwiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9uQ2xpY2ssIG9uQ2xpY2tMaWdodGNvcmQpIHtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSBvbkNsaWNrO1xyXG4gICAgICAgIHRoaXMub25DbGlja0xpZ2h0Y29yZCA9IG9uQ2xpY2tMaWdodGNvcmRcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY29yZVwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlBsdWdpbnNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInBsdWdpbnNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJUaGVtZXNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInRoZW1lc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImN1c3RvbWNzc1wiXHJcbiAgICAgICAgfV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IExDaXRlbXMoKXtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzdGF0dXNcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgLy88VG9vbHRpcFdyYXAgY29sb3I9XCJibGFja1wiIHNpZGU9XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCQkQncyBDaGFuZ2Vsb2dcIn0sIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b25MQyA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkJ3MgQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKExDQ2hhbmVsb2cpO319LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEhpc3RvcnksIHtjbGFzc05hbWU6IFwiYmQtaWNvblwiLCBzaXplOiBcIjE2cHhcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVCYXIsIHtvbkNsaWNrOiB0aGlzLm9uQ2xpY2ssIGhlYWRlclRleHQ6IFwiTGlnaHRjb3JkXCIsIGhlYWRlckJ1dHRvbjogY2hhbmdlbG9nQnV0dG9uTEMsIGl0ZW1zOiB0aGlzLkxDaXRlbXN9KSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVCYXIsIHtvbkNsaWNrOiB0aGlzLm9uQ2xpY2ssIGhlYWRlclRleHQ6IFwiQmFuZGFnZWQgQkRcIiwgaGVhZGVyQnV0dG9uOiBjaGFuZ2Vsb2dCdXR0b24sIGl0ZW1zOiB0aGlzLml0ZW1zfSkpXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLXNldHRpbmdzLXNpZGViYXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgdGFicyA9IERPTS5xdWVyeUFsbChcIltjbGFzcyo9J3NpZGUtJ10gPiBbY2xhc3MqPSdpdGVtLSddOm5vdChbY2xhc3MqPURhbmdlcl0pXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZUxvZyA9IHRhYnNbdGFicy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAoIWNoYW5nZUxvZykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNoYW5nZUxvZy5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzLXNpZGViYXJcIj5gKSwgY2hhbmdlTG9nLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogW2NsYXNzKj0nc2lkZS0nXSA+IFtjbGFzcyo9J2l0ZW0tJ106bm90KFtjbGFzcyo9RGFuZ2VyXSlcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNsYXNzIFRoZW1lTW9kdWxlIHtcclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XHJcbn1cclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkVGhlbWVEYXRhKCk7XHJcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XHJcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XHJcbiAgICAgICAgaWYgKCF0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgdGhlbWVDb29raWVbdGhlbWUubmFtZV0gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgdGhlbWUgaW4gdGhlbWVDb29raWUpIHtcclxuICAgICAgICBpZiAoIWJkdGhlbWVzW3RoZW1lXSkgZGVsZXRlIHRoZW1lQ29va2llW3RoZW1lXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IHRydWU7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCkpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGVUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XHJcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtdW5sb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICB0aGlzLnVubG9hZFRoZW1lKGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybiB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSksIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtcmVsb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVwZGF0ZVRoZW1lTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGVtZUNvb2tpZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIsIHRoZW1lQ29va2llKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZU1vZHVsZSgpOyIsImltcG9ydCB7YmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xyXG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyB3aWR0aCAqL1xyXG4gICAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH1cclxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXHJcbiAgICBzdGF0aWMgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3RyaXBCT00oY29udGVudCkge1xyXG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xyXG4gICAgICAgIHJldHVybiBET00ucXVlcnkoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEuc3BsaXQoXCIgXCIpWzBdK1wiIHRleHRhcmVhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XHJcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XHJcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICMzYTcxYzE7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICMzYTcxYzE7XCIsIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB3YXJuKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICNFOEE0MDA7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICNFOEE0MDA7XCIsIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcclxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5wYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7IH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgd2hhdC5kaXNwbGF5TmFtZSB8fCB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lIHx8IHdoYXQubmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IHdoYXQuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJwYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge307XHJcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IobWV0aG9kTmFtZSwgXCJkb2VzIG5vdCBleGlzdCBmb3JcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXHJcbiAgICAgICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnN0ZWFkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkge1xyXG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xyXG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XHJcbiAgICAgICAgfSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGhlIHN0cmluZyB0byBzaG93IGluIHRoZSB0b2FzdC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pY29uIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbWVvdXQgQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyLnNwbGl0KFwiIFwiKVs5XStcIiArIGRpdlwiKSB8fCBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBtZW1iZXJsaXN0ID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUubWVtYmVyc1dyYXApWzBdLm1lbWJlcnNXcmFwKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gY29udGFpbmVyID8gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAzMTA7XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWVtYmVybGlzdCA/IG1lbWJlcmxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgPyByaWdodCAtIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogVXRpbHMuc2NyZWVuV2lkdGggLSBsZWZ0IC0gMjQwO1xyXG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcclxuICAgICAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgbGVmdCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcIndpZHRoXCIsIHdpZHRoICsgXCJweFwiKTtcclxuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbSArIFwicHhcIik7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHt0eXBlID0gXCJcIiwgaWNvbiA9IHRydWUsIHRpbWVvdXQgPSAzMDAwfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0XCIpO1xyXG4gICAgICAgIGlmICh0eXBlKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcInRvYXN0LVwiICsgdHlwZSk7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xyXG4gICAgICAgIHRvYXN0RWxlbS5pbm5lclRleHQgPSBjb250ZW50O1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0b2FzdEVsZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xyXG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cclxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cclxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cclxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGVudH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxyXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxyXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xyXG4gICAgICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkNsb3NlOiAobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMubGVuZ3RoICYmICF0aGVtZUVycm9ycy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5UaGVtZXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPkVycm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XHJcbiAgICBcclxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhYihlcnJvcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xyXG4gICAgXHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtLnNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIERPTS5yZW1vdmVDbGFzcyhzZWxlY3RlZCwgXCJzZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuc2Nyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcclxuICAgICAgICB9KSk7XHJcbiAgICBcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xyXG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xyXG4gICAgICAgIGVsc2UgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIilbMV0uY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XHJcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XHJcbiAgICAgICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcclxuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcclxuICAgICAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XHJcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIiwgXHJcbiAgICAgICAgICAgIGNoYW5nZXMgPSBbXSwgXHJcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxyXG4gICAgICAgICAgICBzdWJ0aXRsZSA9IGB2JHtiYmRWZXJzaW9ufWAsIFxyXG4gICAgICAgICAgICBmb290ZXJcclxuICAgICAgICB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBjZSA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcclxuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxyXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuam9pbkJEMigpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNlKENoYW5nZWxvZywgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG9uU2Nyb2xsOiBfID0+IF8sXHJcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXHJcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcclxuICAgICAgICAgICAgICAgIHJlbmRlckZvb3RlcjogcmVuZGVyRm9vdGVyLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXHJcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xyXG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0ua2V5ICYmIG0ua2V5KCkgPT0gXCJjb25maXJtLW1vZGFsXCIpO1xyXG4gICAgICAgIGlmICghTW9kYWxTdGFjayB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XHJcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENvbmZpcm1hdGlvbk1vZGFsLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogdGl0bGUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50LFxyXG4gICAgICAgICAgICByZWQ6IGRhbmdlcixcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcclxuICAgICAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsXHJcbiAgICAgICAgfSwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVtb3ZlRGEoY2xhc3NOYW1lKXtcclxuICAgICAgICBpZighY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5VdGlscy5zaG93VG9hc3QgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhVdGlscy5zaG93VG9hc3QsIFwiQ291bGQgbm90IHNob3cgdG9hc3QuXCIpO1xyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuV2VicGFja01vZHVsZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLnJlbW92ZSAmJiB0aGVNb2R1bGUuc2V0ICYmIHRoZU1vZHVsZS5jbGVhciAmJiB0aGVNb2R1bGUuZ2V0ICYmICF0aGVNb2R1bGUuc29ydCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGVNb2R1bGUuZ2V0VG9rZW4gJiYgIXRoZU1vZHVsZS5nZXRFbWFpbCAmJiAhdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRoZU1vZHVsZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRoZU1vZHVsZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImdldFRva2VuXCIgfHwgcHJvcCA9PT0gXCJnZXRFbWFpbFwiIHx8IHByb3AgPT09IFwic2hvd1Rva2VuXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgZnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIpIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRFbWFpbFwiKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJzaG93VG9rZW5cIikgcmV0dXJuICgpID0+IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChmdW5jID09IFwiX19wcm90b19fXCIpIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBwcm90ZWN0KG0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0uZGVmYXVsdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5VW5pcXVlUHJvcGVydGllcyA9IChwcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAocHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsID0ge1xyXG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxyXG4gICAgICAgICAgICByZWFjdERvbTogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImZpbmRET01Ob2RlXCJdKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cclxuICAgIGxlYXZlQkQxKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI4NjAwNDc0NDk2NjkxNDA0OFwiKTt9XHJcblxyXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxyXG4gICAgbGVhdmVCRDIoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjI4MDgwNjQ3MjkyODE5ODY1NlwiKTt9XHJcblxyXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiY3hmQTJkVFwiKTt9XHJcbiAgICBsZWF2ZUxDKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI3MDU5MDgzNTAyMTg2NjYxMTdcIik7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuXHJcbiAgICBnZXQgYW5jaG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIl0pIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O31cclxuICAgIGdldCBzbGF0ZUVkaXRvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzbGF0ZVRleHRBcmVhXCJdKTt9XHJcbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxyXG4gICAgZ2V0IGd1aWxkQ2xhc3NlcygpIHtcclxuXHRcdGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS53cmFwcGVyICYmIGUudW5yZWFkTWVudGlvbnNCYXIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXHJcbiAgICAgICAgY29uc3QgcGlsbCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJsb2JDb250YWluZXIpWzBdXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcblx0fVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImRhdGVGb3JtYXRcIl0pO31cclxuICAgIGdldCBUb29sdGlwV3JhcHBlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7fVxyXG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7fVxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImxlYXZlR3VpbGRcIl0pO31cclxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0udG9TdHJpbmcgJiYgL1wiYmluYXJ5XCIvLnRlc3QobS50b1N0cmluZygpKSk7fVxyXG4gICAgZ2V0IExheWVyU3RhY2soKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJwb3BMYXllclwiXSk7fVxyXG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbFN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wib3BlblByaXZhdGVDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuXHJcbiAgICBvcGVuRE0odXNlcklkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcclxuICAgICAgICBpZiAoc2VsZklkID09IHVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHByaXZhdGVDaGFubmVsSWQgPSB0aGlzLkNoYW5uZWxTdG9yZS5nZXRETUZyb21Vc2VySWQodXNlcklkKTtcclxuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xyXG4gICAgICAgIHRoaXMuQ2hhbm5lbEFjdGlvbnMub3BlblByaXZhdGVDaGFubmVsKHNlbGZJZCwgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVNldHRpbmdzKGNhdCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXQgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBzdHlsZSA9IGBcclxuICAgIC5jb250YWluZXItMlJsMDF1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuY2hhdC0zYlJ4eHUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLTJLOHBGaCB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxIWltcG9ydGFudDtcclxuICAgIH1cclxuYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUge1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiVm9pY2VNb2RlXCIsIHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcIlZvaWNlTW9kZVwiKTtcclxuICAgIH1cclxufTsiLCJjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG5kZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG5kZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5jb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gbS5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gobS5kZWZhdWx0KTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kdWxlcztcclxufTtcclxuXHJcbmNvbnN0IGZpbmRCeVByb3BzID0gKC4uLnByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9ICguLi5wcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlQcm9wcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCJcclxuXHJcbmxldCBwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRVc2VyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGRlbGV0ZSBwcm9wcy5ocmVmLnRhcmdldFxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhwcm9wcylcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHByb3BzLkFuY2hvciBocmVmPXtcIi91c2Vycy9cIitwcm9wcy51c2VyLmlkfSB7Li4ucHJvcHMuaHJlZn0gb25DbGljaz17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICBpZighcHJvZmlsTW9kdWxlKXByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuICAgICAgICAgICAgICAgIHByb2ZpbE1vZHVsZS5kZWZhdWx0Lm9wZW4ocHJvcHMudXNlci5pZClcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3Byb3BzLkFuY2hvcj5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZExvZ28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2FcIiB4MT17NjYuN30geTE9ey00ODcuN30geDI9ezY2Ljd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTIwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fY1wiIHgxPXs4NH0geTE9ey00MDh9IHgyPXs4NH0geTI9ey01NzYuNjl9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ni43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2EpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAxLjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IERPTVRvb2xzIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmxldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF1cclxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcclxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XHJcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYoIWNvbnRlbnRNb2R1bGUpY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifVxyXG4gICAgICAgICAgICBzdHlsZT17e3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIkFjY291bnQgSW5mb3NcIi8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVcclxuICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpc3RpY3NcclxuICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFN0YXRpc3RpY3MoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcclxuICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFNlc3Npb25WYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBhY3RpdmU6ICR7ZS5hY3RpdmUgPyBcIlllc1wiIDogXCJOb1wifVxyXG4rIEFjdGl2aXRpZXM6ICR7ZS5hY3Rpdml0aWVzLmxlbmd0aH1gXHJcbiAgICAgICAgfSkuam9pbihcIlxcblwiK1wiLVwiLnJlcGVhdCgzOCkrXCJcXG5cIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlVmFsdWUoKXtcclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0RhdGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gdXNlci5jcmVhdGVkQXRcclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XHJcbisgRGlzY3JpbWluYXRvcjogJHt1c2VyLmRpc2NyaW1pbmF0b3J9XHJcbisgVGFnOiAke3VzZXIudGFnfVxyXG4rIElEOiAke3VzZXIuaWR9XHJcbisgQXZhdGFyOiAke3VzZXIuYXZhdGFyfVxyXG4rIEF2YXRhciBVUkw6IGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2F2YXRhcnMvJHt1c2VyLmlkfS8ke3VzZXIuYXZhdGFyfS4ke3VzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSA/IFwiZ2lmXCIgOiBcInBuZ1wifT9zaXplPTQwOTZcclxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcclxuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxyXG4rIEhhcyBOaXRybzogJHt1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24gPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XHJcbi0gMkZBOiAke3VzZXIubWZhRW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxyXG4tIFZlcmlmaWVkOiAke3VzZXIudmVyaWZpZWR9YFxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRpc3RpY3MoKXtcclxuXHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gT2JqZWN0LnZhbHVlcyhHdWlsZE1vZHVsZS5nZXRHdWlsZHMoKSlcclxuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3Qua2V5cyhyZWxhdGlvblNoaXBNb2R1bGUuZ2V0UmVsYXRpb25zaGlwcygpKVxyXG4gICAgICAgIGNvbnN0IGZyaWVuZHMgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzRnJpZW5kKGUpKVxyXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzQmxvY2tlZChlKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFNlcnZlciBDb3VudDogJHtndWlsZHMubGVuZ3RofSBzZXJ2ZXJzXHJcbisgUmVsYXRpb25zOiAke3JlbGF0aW9ucy5sZW5ndGh9IHJlbGF0aW9uc1xyXG4rIEZyaWVuZHMgQ291bnQ6ICR7ZnJpZW5kcy5sZW5ndGh9IGZyaWVuZHNcclxuLSBCbG9ja2VkIFVzZXJzIENvdW50OiAke2Jsb2NrZWQubGVuZ3RofSBibG9ja2VkIHVzZXJzYFxyXG4gICAgfVxyXG59XHJcblxyXG5cclxubGV0IGhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxyXG5sZXQgbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuXHJcbmNsYXNzIENvZGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMSltZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTIpbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuICAgICAgICBpZighc2Nyb2xsYmFyTW9kdWxlMSlzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuICAgICAgICBpZighaGlnaHRsaWdodEpTKWhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake21lc3NhZ2VNb2R1bGUxLm1hcmt1cH0gJHttZXNzYWdlTW9kdWxlMi5tZXNzYWdlQ29udGVudH1gfT5cclxuICAgICAgICAgICAgPHByZT5cclxuICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogaGlnaHRsaWdodEpTLmhpZ2hsaWdodCh0aGlzLnByb3BzLmxhbmd1YWdlLCB0aGlzLnByb3BzLmNvbnRlbnQpLnZhbHVlfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9jb2RlPlxyXG4gICAgICAgICAgICA8L3ByZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi9pY29ucy9lZGl0XCI7XHJcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCIuL2ljb25zL2RlbGV0ZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5jb25zdCBhbmNob3JDbGFzc2VzID0gQkRWMi5hbmNob3JDbGFzc2VzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1BsdWdpbkNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiAmJiB0eXBlb2YodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLmVkaXQgPSB0aGlzLmVkaXQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVsb2FkczogMFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy0zXCJdKSByZXR1cm47XHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNIaWRkZW4gPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZSA9IHRoaXMucmVmcy5jYXJkTm9kZTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpc05vZGUuY2xvc2VzdChcIi5zY3JvbGxlclwiKTtcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlua3MoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXTtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XHJcbiAgICAgICAgaWYgKGFkZG9uLndlYnNpdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIldlYnNpdGVcIiwgYWRkb24ud2Vic2l0ZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5zb3VyY2UpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlNvdXJjZVwiLCBhZGRvbi5zb3VyY2UpKTtcclxuICAgICAgICBpZiAoYWRkb24uaW52aXRlKSB7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlN1cHBvcnQgU2VydmVyXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RlciA9IC9cXC5nZ1xcLyguKikkLztcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gYWRkb24uaW52aXRlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3Rlci50ZXN0KGNvZGUpKSBjb2RlID0gY29kZS5tYXRjaCh0ZXN0ZXIpWzFdO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChjb2RlKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkb24uZG9uYXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJEb25hdGVcIiwgYWRkb24uZG9uYXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnBhdHJlb24pIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlBhdHJlb25cIiwgYWRkb24ucGF0cmVvbikpO1xyXG4gICAgICAgIHJldHVybiBsaW5rcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5saW5rcztcclxuICAgICAgICByZXR1cm4gKGxpbmtzLmxlbmd0aCB8fCB0aGlzLmhhc1NldHRpbmdzKSAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLWZvb3RlciBiZGEtZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tbGlua3MgYmRhLWxpbmtzXCJ9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGxpbmtzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IGluZGV4IDwgbGlua3MubGVuZ3RoIC0gMSA/IFtlbGVtZW50LCBcIiB8IFwiXSA6IGVsZW1lbnQpLmZsYXQoKSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge29uQ2xpY2s6IHRoaXMuc2hvd1NldHRpbmdzLCBjbGFzc05hbWU6IFwiYmQtYnV0dG9uIGJkYS1zZXR0aW5ncy1idXR0b25cIiwgZGlzYWJsZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9LCBcIlNldHRpbmdzXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnRvZ2dsZSAmJiB0aGlzLnByb3BzLnRvZ2dsZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9KTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KCkge3RoaXMucHJvcHMuZWRpdCh0aGlzLm5hbWUpO31cclxuICAgIGRlbGV0ZSgpIHt0aGlzLnByb3BzLnJlbW92ZSh0aGlzLm5hbWUpO31cclxuICAgIHJlbG9hZCgpIHt0aGlzLnByb3BzLnJlbG9hZCh0aGlzLm5hbWUpO31cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiB0aGlzLnByb3BzLmFkZG9uLm5hbWUpO31cclxuICAgIGdldCBhdXRob3IoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiB0aGlzLnByb3BzLmFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLmRlc2NyaXB0aW9uKTt9XHJcbiAgICBnZXQgdmVyc2lvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xyXG4gICAgICAgIGNvbnN0IHthdXRob3JJZCwgYXV0aG9yTGlua30gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24taGVhZGVyIGJkYS1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC10aXRsZSBiZGEtaGVhZGVyLXRpdGxlXCJ9LCB0aGlzLmJ1aWxkVGl0bGUodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHtuYW1lOiB0aGlzLmF1dGhvciwgaWQ6IGF1dGhvcklkLCBsaW5rOiBhdXRob3JMaW5rfSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWNvbnRyb2xzIGJkYS1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5lZGl0ICYmIHRoaXMubWFrZUJ1dHRvbihcIkVkaXRcIiwgPEVkaXRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5lZGl0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZW1vdmUgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRGVsZXRlXCIsIDxEZWxldGVJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5kZWxldGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbG9hZCAmJiB0aGlzLm1ha2VCdXR0b24oXCJSZWxvYWRcIiwgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLnJlbG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlci13cmFwIGJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyIGJkLWFkZG9uLWRlc2NyaXB0aW9uIGJkYS1kZXNjcmlwdGlvbiBzY3JvbGxlclwifSwgdGhpcy5kZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdGhpcy5mb290ZXJcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyIsImltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gXCIuL2Vycm9yQm91bmRhcnlcIjtcclxuaW1wb3J0IENvbnRlbnRDb2x1bW4gZnJvbSBcIi4vY29udGVudENvbHVtblwiO1xyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4vdG9vbHNcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xyXG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4vc2Nyb2xsZXJcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcclxuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Gb2xkZXIoKSB7XHJcbiAgICAgICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKHRoaXMuaXNQbHVnaW5zID8gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdChuYW1lKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobmFtZSk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVkaXQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlKG5hbWUpIHtcclxuICAgICAgICBjb25zdCBzaG91bGREZWxldGUgPSBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUobmFtZSk7XHJcbiAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZGVsZXRlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiQXJlIFlvdSBTdXJlP1wiLCBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSAke25hbWV9P2AsIHtcclxuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRlbGV0ZVwiLFxyXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7cmVzb2x2ZSh0cnVlKTt9LFxyXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtyZXNvbHZlKGZhbHNlKTt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiTmFtZVwiLCB2YWx1ZTogXCJuYW1lXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXV0aG9yXCIsIHZhbHVlOiBcImF1dGhvclwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIlZlcnNpb25cIiwgdmFsdWU6IFwidmVyc2lvblwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIlJlY2VudGx5IEFkZGVkXCIsIHZhbHVlOiBcImFkZGVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiTGFzdCBNb2RpZmllZFwiLCB2YWx1ZTogXCJtb2RpZmllZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkZpbGUgU2l6ZVwiLCB2YWx1ZTogXCJzaXplXCJ9LFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpcmVjdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIkFzY2VuZGluZ1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJEZXNjZW5kaW5nXCIsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldmVyc2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHthc2NlbmRpbmc6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NvcnQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cXVlcnk6IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvcHMoYWRkb24pIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBrZXk6IHRoaXMuZ2V0TmFtZShhZGRvbiksXHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY29va2llW3RoaXMuZ2V0TmFtZShhZGRvbildLFxyXG4gICAgICAgICAgICB0b2dnbGU6IHRoaXMubWFuYWdlci50b2dnbGUuYmluZCh0aGlzLm1hbmFnZXIpLFxyXG4gICAgICAgICAgICAvL2VkaXQ6IHRoaXMuZWRpdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvblxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9ucygpIHtcclxuICAgICAgICBjb25zdCBzb3J0ZWRBZGRvbnMgPSB0aGlzLnByb3BzLmxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnN0YXRlLnNvcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN0YXRlLnNvcnQuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYS5wbHVnaW4gJiYgYS5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYS5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpIDogYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiLnBsdWdpbiAmJiBiLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhiLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgIDogYlt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxyXG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcclxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcclxuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxTY3JvbGxlciBjb250ZW50Q29sdW1uPXt0cnVlfSBmYWRlPXt0cnVlfSBkYXJrPXt0cnVlfT5cclxuICAgICAgICAgICAgICAgIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24ga2V5PVwiZm9sZGVyLWJ1dHRvblwiIGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1wZmJ0blwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfT5PcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHt0aGlzLnByb3BzLnR5cGV9Li4uYH0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5Tb3J0IGJ5OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvQ29udGVudENvbHVtbj5cclxuICAgICAgICAgICAgICAgIDxUb29scyBrZXk9XCJ0b29sc1wiIC8+XHJcbiAgICAgICAgICAgIDwvU2Nyb2xsZXI+O1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IENhcmRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYXJkTGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRMb2dvIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YWRhdGFcIiwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxNVwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzNcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjEwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzMpXCJ9LCBkOiBcIk0xMTk1LjQ0KzEzNS40NDJMMTE5NS40NCsxMzUuNDQyTDk5Ny42KzEzNi40NDJDMTAyNC4yKzE0OS43NDIrMTE3MC4zNCsxNjMuNTQyKzExOTMuNjQrMTc5Ljc0MkMxMjY0LjM0KzIyOC44NDIrMTMxOS43NCsyOTEuMjQyKzEzNTguMjQrMzY1LjA0MkMxMzk4LjE0KzQ0MS42NDIrMTQxOS43NCs1MzAuNjQyKzE0MjIuNTQrNjI5LjY0MkwxNDIyLjU0KzYzMC44NDJMMTQyMi41NCs2MzIuMDQyQzE0MjIuNTQrNzczLjE0MisxNDIyLjU0KzEyMjguMTQrMTQyMi41NCsxMzY5LjE0TDE0MjIuNTQrMTM3MC4zNEwxNDIyLjU0KzEzNzEuNTRDMTQxOS44NCsxNDcwLjU0KzEzOTguMjQrMTU1OS41NCsxMzU4LjI0KzE2MzYuMTRDMTMxOS43NCsxNzA5Ljk0KzEyNjQuNDQrMTc3Mi4zNCsxMTkzLjY0KzE4MjEuNDRDMTE3MS4wNCsxODM3LjE0KzEwMjUuNysxODUwLjU0KzEwMDArMTg2My41NEwxMTkzLjU0KzE4NjQuNTRDMTUzOS43NCsxODY2LjQ0KzE4NjQuNTQrMTY5My4zNCsxODY0LjU0KzEyOTYuNjRMMTg2NC41NCs3MTYuOTQyQzE4NjYuNDQrMzEyLjQ0MisxNTQxLjY0KzEzNS40NDIrMTE5NS40NCsxMzUuNDQyWlwiLCBmaWxsOiBcIiMxNzE3MTdcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzEpXCJ9LCBkOiBcIk0xNDY5LjI1KzYzMS40NDJDMTQ1OS41NSsyNzguMDQyKzExODMuMDUrMTM1LjQ0Mis4MjYuNjUrMTM1LjQ0MkwxMzUuNDUrMTM1LjQ0MkwxMzUuNDUrMTAwNEMxMzUuNDUrMTAwNCsxMzUuNDI3KzEyNTUuMjErMzU1LjYyNisxMjU1LjIxQzU3NS44MjUrMTI1NS4yMSs1NzUuODQ4KzEwMDQrNTc1Ljg0OCsxMDA0TDU3Ny40NSs0OTAuNDQyTDgzNC40NSs0OTAuNDQyQzExMDguOTUrNDkwLjQ0MisxMTA4Ljk1KzgzNS4zNDIrODM0LjQ1KzgzNS4zNDJMNjY0LjY1KzgzNS4zNDJMNjY0LjY1KzExNjQuODRMODM0LjQ1KzExNjQuODRDOTIzLjkzMisxMTY0Ljg0Kzk4NC4yNDQrMTIwMS40OCsxMDE1LjM5KzEyNTAuODdDMTA3OS43OCsxMzUzKzEwMTkuNDcrMTUwOS42NCs4MzQuNDUrMTUwOS42NEwxMzUuNDUrMTUwOS42NEwxMzUuNDUrMTg2NC41NEw4MjYuNjUrMTg2NC41NEMxMTgyLjk1KzE4NjQuNTQrMTQ1OS40NSsxNzIxLjk0KzE0NjkuMjUrMTM2OC41NEMxNDY5LjI1KzEyMDUuOTQrMTQyNC43NSsxMDg0LjQ0KzEzNDYuMzUrOTk5Ljk0MkMxNDI0Ljc1KzkxNS41NDIrMTQ2OS4yNSs3OTQuMDQyKzE0NjkuMjUrNjMxLjQ0MlpcIiwgZmlsbDogXCIjRkZGRkZGXCIsIG9wYWNpdHk6IFwiMVwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NoZWNrYm94IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImxpXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94IFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3gsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWlubmVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94SW5uZXIpWzBdLmNoZWNrYm94SW5uZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi4vaWNvbnMvZG93bmFycm93XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XHJcbiAgICAgICAgdGhpcy5kcm9wZG93biA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZGVNZW51ID0gdGhpcy5oaWRlTWVudS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RlZCgpIHtyZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09IHRoaXMuc3RhdGUudmFsdWUpO31cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qtb3B0aW9uJHtzZWxlY3RlZC52YWx1ZSA9PSBvcHQudmFsdWUgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gfSBvbkNsaWNrPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgb3B0LnZhbHVlKX0+e29wdC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5wcm9wcy5zdHlsZSA9PSBcInRyYW5zcGFyZW50XCIgPyBcIiBiZC1zZWxlY3QtdHJhbnNwYXJlbnRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5zdGF0ZS5vcGVuID8gXCIgbWVudS1vcGVuXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuLy8gcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBcIj5cclxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cclxuLy8gPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbi8vICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbi8vICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbi8vICAgICA8L2Rpdj5cclxuLy8gPC9kaXY+XHJcbi8vIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4vLyA8L2Rpdj47IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWFyY2gtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0gb25LZXlEb3duPXt0aGlzLnByb3BzLm9uS2V5RG93bn0gdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJiZC1zZWFyY2hcIiBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gbWF4TGVuZ3RoPVwiNTBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7Y2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSghdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGVuYWJsZWRDbGFzcyA9IHRoaXMucHJvcHMuZGlzYWJsZWQgPyBcIiBiZC1zd2l0Y2gtZGlzYWJsZWRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgY2hlY2tlZENsYXNzID0gdGhpcy5zdGF0ZS5jaGVja2VkID8gXCIgYmQtc3dpdGNoLWNoZWNrZWRcIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXN3aXRjaGAgKyBlbmFibGVkQ2xhc3MgKyBjaGVja2VkQ2xhc3N9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17dGhpcy5wcm9wcy5pZH0gY2xhc3NOYW1lPXtgYmQtY2hlY2tib3hgfSBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH0gY2hlY2tlZD17dGhpcy5zdGF0ZS5jaGVja2VkfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ29udGVudENvbHVtbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBkaXNwbGF5TmFtZSgpIHtyZXR1cm4gXCJDb250ZW50Q29sdW1uXCI7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRpdGxlXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcclxuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlTWlycm9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIiwgc3R5bGU6IHtwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19LFxyXG4gICAgICAgICAgICBkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImVkaXRvci1kZXRhY2hlZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJoM1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJFZGl0b3IgRGV0YWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgIWRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiZGV0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiaGVscC10ZXh0XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVzcyBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiY3RybFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCIsXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgd2l0aCB0aGUgZWRpdG9yIGZvY3VzZWQgdG8gYWNjZXNzIHRoZSBlZGl0b3IncyBzZXR0aW5ncy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcclxuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSB7aGFzRXJyb3I6IGZhbHNlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaCgpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwicmVhY3QtZXJyb3JcIn0sIFwiQ29tcG9uZW50IEVycm9yXCIpOyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+PHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG93bkFycm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiNGRkZGRkZcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbjwvc3ZnPiAqL31cclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwiI0ZGRkZGRlwiIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwiI0ZGRkZGRlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcclxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcclxuaW1wb3J0IHRpbWVzdGFtcFJlbmRlciBmcm9tIFwiLi90aW1lc3RhbXBSZW5kZXJcIlxyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikgfHwgZGVmYXVsdFJQQyxcclxuICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0lucHV0VGV4dH0gc2V0dGluZyBcclxuICAgICAqL1xyXG4gICAgb25DaGFuZ2Uoc2V0dGluZywgdmFsdWUpe1xyXG4gICAgICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgdGhpcy5zdGF0ZS5kYXRhLCB7XHJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFNldHRpbmcuaWRdOiAhIXZhbHVlID8gdmFsdWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuc3RhdGUuYXNzZXRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZihzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgICAgIHRoaXMucHJldmlldy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLnNldChzZXR0aW5nc1JQQylcclxuICAgIH1cclxuXHJcbiAgICBmZXRjaEFzc2V0cygpe1xyXG4gICAgICAgIGlmKHRoaXMuaXNmZXRjaGluZyA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGxldCBhcHAgPSB0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWRcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQgIT09IGFwcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWVcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxyXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBPYmplY3Qua2V5cyhhc3NldHMpLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYXNzZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifVxyXG4gICAgICAgICAgICBzdHlsZT17e3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz5cclxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUmljaFByZXNlbmNlXCIvPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICB7LyoqIG9wdGlvbnMgKi99XHJcbiAgICAgICAgICAgICAgICAgICAge1JQQ1Byb3BzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0VGV4dCBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZS5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSAvPilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJjaG9pY2VcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJQcmV2aWV3XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIHsvKiogcHJldmlldyAqL31cclxuICAgICAgICAgICAgICAgICAgICA8UnBjUHJldmlldyBzZXR0aW5ncz17dGhpc30vPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17d2luZG93Lm9oZ29kb2hmdWNrfT5cclxuICAgICAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uY2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1Ma1lhN3Jwc19nNFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIFNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuY29uc3QgUlBDUHJvcHMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcclxuICAgICAgICBpZDogXCJhcHBsaWNhdGlvbl9pZFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGlkOiBcIm5hbWVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXHJcbiAgICAgICAgaWQ6IFwiZGV0YWlsc1wiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlN0YXRlXCIsXHJcbiAgICAgICAgaWQ6IFwic3RhdGVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcclxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJMYXJnZUFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLmxhcmdlXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLnNtYWxsXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuXVxyXG5cclxuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBsZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgbGV0IGlucHV0TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXVxyXG4gICAgICAgIGxldCBzaXplTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF1cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtpbnB1dE1vZHVsZS5pbnB1dFdyYXBwZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz17YCR7aW5wdXRNb2R1bGUuaW5wdXREZWZhdWx0fSAke3NpemVNb2R1bGUyLnNpemUxNn1gfSBuYW1lPVwic3RhdGVcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiXCIgbWF4bGVuZ3RoPVwiOTk5XCIgdmFsdWU9e3RoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdfSBvbkNoYW5nZT17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBldi50YXJnZXQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLmRpdmlkZXJ9ICR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlckRlZmF1bHQpWzBdLmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG4gICAgICAgIGxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbiAgICAgICAgbGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgaW5wdXRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdXHJcbiAgICAgICAgbGV0IHNpemVNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXVxyXG4gICAgICAgIGxldCBldWhNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF1cclxuXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17aW5wdXRNb2R1bGUuaW5wdXRXcmFwcGVyfT5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9e2Ake2lucHV0TW9kdWxlLmlucHV0RGVmYXVsdH0gJHtzaXplTW9kdWxlMi5zaXplMTZ9YH0gbmFtZT1cInN0YXRlXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlwiIG1heGxlbmd0aD1cIjk5OVwiIHZhbHVlPXt0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXX0gb25DaGFuZ2U9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBldi50YXJnZXQudmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdWYWx1ZSAhPT0gZXYudGFyZ2V0LnZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2LnRhcmdldC52YWx1ZSA9IG5ld1ZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIG5ld1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLmJ1dHRvbldyYXBwZXIpWzBdLmJ1dHRvbldyYXBwZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPXtgJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH0gJHtldWhNb2R1bGUxLmJ1dHRvbn0gJHtldWhNb2R1bGUxLmxvb2tGaWxsZWR9ICR7ZXVoTW9kdWxlMS5jb2xvckJyYW5kfSAke2V1aE1vZHVsZTEuc2l6ZVNtYWxsfSAke2V1aE1vZHVsZTEuZ3Jvd31gfSBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblx0ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtldWhNb2R1bGUxLmNvbnRlbnRzfT5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLmRpdmlkZXJ9ICR7QkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlckRlZmF1bHQpWzBdLmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgb25DaGFuZ2UoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIGRhdGEudmFsdWUgPT09IFwibm9uZVwiID8gbnVsbCA6IGRhdGEudmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbiAgICAgICAgbGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxuICAgICAgICBsZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5wcm9wcy5jaG9pY2VzXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8U2VsZWN0IHZhbHVlPXtcImFzc2V0LVwiK3RoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdIHx8IFwibm9uZVwifSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0uZGl2aWRlcn0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF0uZGl2aWRlckRlZmF1bHR9YH0+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBldWhNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF1cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUuYnV0dG9uV3JhcHBlcilbMF0uYnV0dG9uV3JhcHBlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2Ake2ZsZXhNb2R1bGUuZmxleENoaWxkfSAke2V1aE1vZHVsZTEuYnV0dG9ufSAke2V1aE1vZHVsZTEubG9va0ZpbGxlZH0gJHtldWhNb2R1bGUxLmNvbG9yQnJhbmR9ICR7ZXVoTW9kdWxlMS5zaXplU21hbGx9ICR7ZXVoTW9kdWxlMS5ncm93fWB9IHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0gb25DbGljaz17dGhpcy5vbkNsaWNrfT5cclxuXHQgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2V1aE1vZHVsZTEuY29udGVudHN9Pnt0aGlzLnByb3BzLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFicyA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuc2V0dGluZ3MucHJldmlldyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiKXtcclxuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXHJcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiLnByb3BzLmlkXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcHJldmlldyA9IG5ldyB0aGlzLnByZXZpZXcoe1xyXG4gICAgICAgICAgICBwcmV2aWV3OiB0aGlzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBwcmV2aWV3LnNldFN0YXRlKHRoaXMuc3RhdGUucnBjKVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy10YWJXcmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJGdWxsIFByb2ZpbGVcIiBpZD1cInByb2ZpbGVcIi8+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiVXNlciBQb3BvdXRcIiBpZD1cInBvcG91dFwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtwcmV2aWV3LnJlbmRlcigpfVxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH0gICBcclxuXHJcbiAgICBpc0FjdGl2ZSh0YWIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByZXZpZXcoKXtcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gXCJwcm9maWxlXCIpcmV0dXJuIFByb2ZpbGVcclxuICAgICAgICByZXR1cm4gUG9wb3V0XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogcHJvcHMucHJldmlldy5pc0FjdGl2ZShwcm9wcy5pZClcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvcHMucHJldmlldy50YWJzLnB1c2godGhpcylcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmUoaXNBY3RpdmUpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpXHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTCh1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikgPyBcImdpZlwiIDogXCJwbmdcIilcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTFcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgdGltZXN0YW1wQ2xhc3MgPSB0aW1lc3RhbXBDbGFzcyB8fCBhY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEudXNlclBvcG91dH0gcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlclBsYXlpbmd9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeUNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVG9wfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhcldyYXBwZXJOb3JtYWx9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2F2YXRhck1vZHVsZTF9IHJvbGU9XCJpbWdcIiBzdHlsZT17e3dpZHRoOiBcIjgwcHhcIiwgaGVpZ2h0OiBcIjgwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI5MlwiIGhlaWdodD1cIjgwXCIgdmlld0JveD1cIjAgMCA5MiA4MFwiIGNsYXNzPXtgJHthdmF0YXJNb2R1bGUxLm1hc2t9ICR7YXZhdGFyTW9kdWxlMS5zdmd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2F2YXRhclVSTH0gYWx0PVwiIFwiIGNsYXNzPXthdmF0YXJNb2R1bGUxLmF2YXRhcn0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhckhpbnR9IHZpZXdCb3g9XCIwIDAgODAgODBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludElubmVyfT57TWVzc2FnZXMuVklFV19QUk9GSUxFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyVGV4dH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLmhvcml6b250YWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmhlYWRlclRhZ05vTmlja25hbWV9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2Ake25hbWVUYWdNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ1VzZXJuYW1lTm9OaWNrbmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiN7dXNlci5kaXNjcmltaW5hdG9yfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlVc2VyUG9wb3V0fSAke3Jvb3RNb2R1bGUxLmFjdGl2aXR5fWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5oZWFkZXJUZXh0Tm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9PntNZXNzYWdlcy5VU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HfTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5ib2R5Tm9ybWFsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5sYXJnZVwiXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5sYXJnZVwiXX0ucG5nYH0gY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZUltYWdlVXNlclBvcG91dH0gJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdID8gYWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlTWFza1VzZXJQb3BvdXQgOiBcIlwifWB9IC8+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLnNtYWxsXCJdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdfS5wbmdgfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c1NtYWxsSW1hZ2VVc2VyUG9wb3V0fSAvPilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEubmFtZU5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxNH1gfSB0aXRsZT17ZGF0YS5uYW1lfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlOYW1lfT57ZGF0YS5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHRpdGxlPXtkYXRhLnRpdGxlfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmRldGFpbHN9PntkYXRhLmRldGFpbHN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuc3RhdGUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5zdGF0ZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVDb21wb25lbnQgPSB0aW1lc3RhbXBSZW5kZXIoVGltZXN0YW1wLCBNZXNzYWdlcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCh0aW1lQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtyb290TW9kdWxlMS5ib2R5fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyfSAke3Jvb3RNb2R1bGUxLmJvZHlJbm5lcn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYm9keVRpdGxlfT57TWVzc2FnZXMuTk9URX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7bm90ZU1vZHVsZTEubm90ZX0gJHtyb290TW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGNsYXNzPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBzdHlsZT17e2hlaWdodDogXCIzNnB4XCJ9fSBkaXNhYmxlZD48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuZm9vdGVyfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5wcm90aXB9ICR7cHJvdGlwTW9kdWxlMS5pbmxpbmV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7cHJvdGlwTW9kdWxlMS5wcm99ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0gc3R5bGU9e3tjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwifX0+e01lc3NhZ2VzLlBJTk5FRF9NRVNTQUdFU19QUk9fVElQfTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2NvbG9yTW9kdWxlMS5jb2xvclN0YW5kYXJkfSAke3NpemVNb2R1bGUxLnNpemUxNH0gJHtwcm90aXBNb2R1bGUxLnRpcH1gfT57TWVzc2FnZXMuQ09OVEVYVF9NRU5VX0hJTlR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBTdGF0dXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHN0YXR1cyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFByZXNlbmNlKVswXS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICByZXR1cm4gPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgeD1cIjYwXCIgeT1cIjYwXCIgZmlsbD1cIiNmZmZmZmZcIiBtYXNrPXtgdXJsKCNzdmctbWFzay1zdGF0dXMtJHtzdGF0dXN9KWB9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L3JlY3Q+XHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCB0aW1lc3RhbXBDbGFzcyA9IFwiXCJcclxuXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHVzZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSA/IFwiZ2lmXCIgOiBcInBuZ1wiKVxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUxLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kdWxlMSxcclxuICAgICAgICAgICAgcm9vdE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5hbWVUYWdNb2R1bGUxLFxyXG4gICAgICAgICAgICBhY3Rpdml0eU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHRleHRNb2R1bGUxLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlMSxcclxuICAgICAgICAgICAgc2Nyb2xsZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBub3RlTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVByb2ZpbGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJGYWRlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlc1xyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5yb290fWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEudG9wU2VjdGlvblBsYXlpbmd9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuYXZhdGFyfSAke2F2YXRhck1vZHVsZTEud3JhcHBlcn1gfSByb2xlPVwiaW1nXCIgc3R5bGU9e3t3aWR0aDogXCI4MHB4XCIsIGhlaWdodDogXCI4MHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOTJcIiBoZWlnaHQ9XCI4MFwiIHZpZXdCb3g9XCIwIDAgOTIgODBcIiBjbGFzcz17YCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXthdmF0YXJVUkx9IGFsdD1cIiBcIiBjbGFzcz17YXZhdGFyTW9kdWxlMS5hdmF0YXJ9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1cyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5oZWFkZXJJbmZvfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLm5hbWVUYWd9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLnVzZXJuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e3Jvb3RNb2R1bGUxLmRpc2NyaW1pbmF0b3J9PiN7dXNlci5kaXNjcmltaW5hdG9yfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke2ZsZXhNb2R1bGUxLmhvcml6b250YWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlc31gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFkZ2VzIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlckZpbGx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5UHJvZmlsZX0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5oZWFkZXJUZXh0Tm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7TWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlOR31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5ib2R5Tm9ybWFsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YVtcImFzc2V0cy5sYXJnZVwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2B9IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVByb2ZpbGV9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tQcm9maWxlIDogXCJcIn1gfSAvPilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMuc21hbGxcIl0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYH0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlUHJvZmlsZX0gLz4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1Byb2ZpbGV9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YH0gdGl0bGU9e2RhdGEubmFtZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlOYW1lfT57ZGF0YS5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB0aXRsZT17ZGF0YS50aXRsZX0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5kZXRhaWxzfT57ZGF0YS5kZXRhaWxzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLnN0YXRlKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5zdGF0ZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVDb21wb25lbnQgPSB0aW1lc3RhbXBSZW5kZXIoVGltZXN0YW1wLCBNZXNzYWdlcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQodGltZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmJvZHl9PlxyXG5cdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuXHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uSGVhZGVyfT57TWVzc2FnZXMuTk9URX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5ub3RlfSAke25vdGVNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gc3R5bGU9e3toZWlnaHQ6IFwiNDBweFwifX0gZGlzYWJsZWQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdCAgICA8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbm5lY3RlZEFjY291bnRzIC8+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxjLSBcIj48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uLy4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19MYXllciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMua2V5dXBMaXN0ZW5lciA9IHRoaXMua2V5dXBMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGtleXVwTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAyNykge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yZWZzLnJvb3QucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiBwcm9ncmVzc30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqICgxIC0gcHJvZ3Jlc3MpfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiLnB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5yZW1vdmUoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiBwcm9ncmVzcyArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIltjbGFzcyo9XFxcImxheWVyLVxcXCJdXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5hZGQoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiAoMSAtIHByb2dyZXNzKSArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImxheWVyIGJkLWxheWVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllciwgaWQ6IHRoaXMucHJvcHMuaWQsIHJlZjogXCJyb290XCIsIHN0eWxlOiB7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInNjYWxlKDEuMSkgdHJhbnNsYXRlWigwcHgpXCJ9fSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi90b29sc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcclxuaW1wb3J0IFRhYkJhckhlYWRlciBmcm9tIFwiLi4vdGFiQmFySGVhZGVyXCI7XHJcbmltcG9ydCBUYWJCYXJJdGVtIGZyb20gXCIuLi90YWJCYXJJdGVtXCI7XHJcblxyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XHJcbmltcG9ydCBTaWRlYmFyVmlldyBmcm9tIFwiLi9zaWRlYmFyVmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1B1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDYXRlZ29yeSA9IHRoaXMuY2hhbmdlQ2F0ZWdvcnkuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24gPSB0aGlzLmNoZWNrQ29ubmVjdGlvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcclxuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xyXG4gICAgICAgIHRoaXMuSW52aXRlQWN0aW9ucyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO1xyXG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzOiBbXSxcclxuICAgICAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IDAsXHJcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByb3BzLnJvb3RJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBmZXRjaChgJHtzZWxmLmVuZFBvaW50fSR7cXVlcnl9JHtxdWVyeSA/IFwiJnNjaGVtYT1uZXdcIiA6IFwiP3NjaGVtYT1uZXdcIn1gLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IGF3YWl0IHJlcy50ZXh0KClcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgc2VydmVycyA9IGRhdGEucmVzdWx0cy5yZWR1Y2UoKGFyciwgc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gYXJyLnB1c2goPFNlcnZlckNhcmQgc2VydmVyPXtzZXJ2ZXJ9IGpvaW49e3NlbGYuam9pbn0vPik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICBkYXRhLm5leHQgPSBgP2Zyb209JHtlbmR9YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKGVuZCA+PSBkYXRhLnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSB0aXRsZSArPSBgIGZvciAke3NlbGYuc3RhdGUudGVybX1gO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXHJcbiAgICAgICAgICAgICAgICBuZXh0OiBkYXRhLm5leHRcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coc2VsZik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlZnMuc2J2LnJlZnMuY29udGVudFNjcm9sbGVyLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGpvaW4oc2VydmVyQ2FyZCkge1xyXG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMuam9pbkVuZFBvaW50fS8ke3NlcnZlckNhcmQucHJvcHMuc2VydmVyLmlkZW50aWZpZXJ9YCx7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGYud2luZG93T3B0aW9ucztcclxuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xyXG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93ID0gbmV3ICh3aW5kb3cucmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5Ccm93c2VyV2luZG93KShvcHRpb25zKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1cmwgIT0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBzZWxmLmpvaW5XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cubG9hZFVSTCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB3aW5kb3dPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGhlaWdodDogNTUwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgYWx3YXlzT25Ub3A6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjMwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjUwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy83MDU5MDgzNTAyMTg2NjYxMTcvMDVhNTY1MmY3ZDFkMGFlMzI4Y2E3ZDZlMjM1NGE4MmEud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9gLHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJWaWV3LCB7cmVmOiBcInNidlwifSwgdGhpcy5jb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lkZWJhcjoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLnNpZGViYXJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9vbHM6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInB0XCIsIHJlZjogXCJ0b29sc1wiLCBvbkNsaWNrOiB0aGlzLmNsb3NlfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZGViYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyXCIsIGtleTogXCJwc1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhciBTSURFXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiLCBzdHlsZToge2ZvbnRTaXplOiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiUHVibGljIFNlcnZlcnNcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckhlYWRlciwge3RleHQ6IFwiQ2F0ZWdvcmllc1wifSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySXRlbSwge2lkOiBpbmRleCwgb25DbGljazogdGhpcy5jaGFuZ2VDYXRlZ29yeSwga2V5OiBpbmRleCwgdGV4dDogdmFsdWUsIHNlbGVjdGVkOiB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgPT09IGluZGV4fSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge3JlZjogXCJzZWFyY2hpbnB1dFwiLCBvbktleURvd246IHRoaXMuc2VhcmNoS2V5RG93biwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcInRleHRcIiwgY2xhc3NOYW1lOiBcImlucHV0IGRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIG1heExlbmd0aDogXCI1MFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKHF1ZXJ5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBbGxcIiwgXCJGUFMgR2FtZXNcIiwgXCJNTU8gR2FtZXNcIiwgXCJTdHJhdGVneSBHYW1lc1wiLCBcIk1PQkEgR2FtZXNcIiwgXCJSUEcgR2FtZXNcIiwgXCJUYWJsZXRvcCBHYW1lc1wiLCBcIlNhbmRib3ggR2FtZXNcIiwgXCJTaW11bGF0aW9uIEdhbWVzXCIsIFwiTXVzaWNcIiwgXCJDb21tdW5pdHlcIiwgXCJMYW5ndWFnZVwiLCBcIlByb2dyYW1taW5nXCIsIFwiT3RoZXJcIl07XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5yZWZzLnNlYXJjaGlucHV0LnZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogaWQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChgP2NhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbaWRdfWAsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIHNlbGYubm90Q29ubmVjdGVkO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge3JlZjogXCJjb250ZW50XCIsIGtleTogXCJwY1wiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxyXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLm5leHQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtzZWxmLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlfSk7IHNlbGYuc2VhcmNoKHNlbGYuc3RhdGUubmV4dCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RDb25uZWN0ZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogXCJjb250ZW50XCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogc2VsZi5jb25uZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcclxuICAgICAgICAgICAgICAgIGAke2Nvbm5lY3Rpb24udXNlci51c2VybmFtZX0jJHtjb25uZWN0aW9uLnVzZXIuZGlzY3JpbWluYXRvcn1gXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbn1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VydmVyQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpbWFnZUVycm9yOiBmYWxzZSxcclxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXJ2ZXJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBsZXQgY2FyZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNhcmQgJiYgZS5jYXJkUHJpbWFyeSlbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXhDaGlsZCAmJiBlLl9ob3Jpem9udGFsUmV2ZXJzZSlbMF1cclxuICAgICAgICBsZXQgd3JhcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vV3JhcCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIC8vIGNhcmRQcmltYXJ5LTFIdi10b1xyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgJHtjYXJkTW9kdWxlLmNhcmR9ICR7Y2FyZE1vZHVsZS5jYXJkUHJpbWFyeX0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fSBiZC1zZXJ2ZXItY2FyZCR7c2VydmVyLnBpbm5lZCA/IFwiIGJkLXNlcnZlci1jYXJkLXBpbm5lZFwiIDogXCJcIn1gfSxcclxuICAgICAgICAgICAgLy8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgLy8gXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIC8vIHsgY2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGZsZXgtMU8xR0tZIGRpcmVjdGlvblJvdy0zdjN0ZkcganVzdGlmeVN0YXJ0LTJ5SVpvMCBhbGlnblN0cmV0Y2gtMWh3eE1hIG5vV3JhcC0zanludjZcIiB9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmZsZXhDaGlsZCtcIiBiZC1zZXJ2ZXItY29udGVudFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcCtcIiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1tZW1iZXItY291bnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubWVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIE1lbWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eSBiZC1zZXJ2ZXItZGVzY3JpcHRpb24tY29udGFpbmVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4Q2hpbGQtZmFvVlczIGJkLXNlcnZlci10YWdzXCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuY2F0ZWdvcmllcy5qb2luKFwiLCBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBkaXNhYmxlZC05YUYydWdcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjYzEzYTNhXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VydmVyLmVycm9yICYmICF0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW4oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5qb2luKHRoaXMpO1xyXG4gICAgICAgIC8vdGhpcy5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuLi9zY3JvbGxlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NpZGViYXJWaWV3IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzaWRlYmFyLCBjb250ZW50LCB0b29sc30gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2kgdWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyUmVnaW9uLVZGVFVrTiBzaWRlYmFyLXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2tleTogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgcmVmOiBcInNpZGViYXJTY3JvbGxlclwiLCBzaWRlYmFyOiB0cnVlLCBmYWRlOiBzaWRlYmFyLmZhZGUgfHwgdHJ1ZSwgZGFyazogc2lkZWJhci5kYXJrIHx8IHRydWV9LCBzaWRlYmFyLmNvbXBvbmVudClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFJlZ2lvbi0zbkR1WXkgY29udGVudC1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50VHJhbnNpdGlvbldyYXAtM2hxT0VXIGNvbnRlbnQtdHJhbnNpdGlvbi13cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2QgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAtM1laWGRtIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3QtMjhNU24wIHNjcm9sbGVyVHJhY2stMVpJcHN2XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlci0yNm5jMWUgY29udGVudC1yZWdpb24tc2Nyb2xsZXIgc2Nyb2xsZXJcIiwgcmVmOiBcImNvbnRlbnRTY3JvbGxlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRDb2x1bW4tMmhySVlIIGNvbnRlbnRDb2x1bW5EZWZhdWx0LTFWUWtHTSBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LCBjb250ZW50LmNvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29scy5jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1JlbG9hZEljb24gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcclxuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjZGNkZGRlXCIsXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtcmVsb2FkIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLm9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCIsIGhlaWdodDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwifVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXpcIn0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Njcm9sbGVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vc2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVySG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhclJlZ2lvblNjcm9sbGVyKVswXVxyXG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSR7dGhpcy5wcm9wcy5mYWRlID8gXCIgXCIrc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZSA6IFwiXCJ9YDtcclxuICAgICAgICBsZXQgc2Nyb2xsZXJDbGFzcyA9IHNjcm9sbGVyTW9kdWxlMS5zY3JvbGxlcitcIiBzY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zaWRlYmFyKSBzY3JvbGxlckNsYXNzICs9IGAgJHtzY3JvbGxlck1vZHVsZTIuc2lkZWJhclJlZ2lvblNjcm9sbGVyfSBzaWRlYmFyLXJlZ2lvbi1zY3JvbGxlcmBcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50Q29sdW1uKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyQ2xhc3MgKz0gXCIgXCIrc2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcitcIiBjb250ZW50LXJlZ2lvbi1zY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwfSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwICAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUcmFja31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyd3JhcFwiLCBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyXCIsIHJlZjogXCJzY3JvbGxlclwiLCBjbGFzc05hbWU6IHNjcm9sbGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnNlY3Rpb25zLm1hcChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NHcm91cCwgT2JqZWN0LmFzc2lnbih7fSwgc2VjdGlvbiwge29uQ2hhbmdlOiB0aGlzLnByb3BzLm9uQ2hhbmdlfSkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcblxyXG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25DaGFuZ2UgPT0gXCJmdW5jdGlvblwiKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgZmxleCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LldyYXAgJiYgZS5kZWZhdWx0LkRpcmVjdGlvbiAmJiBlLmRlZmF1bHQuQ2hpbGQpWzBdLmRlZmF1bHRcclxuICAgICAgICBsZXQgbmF0aXZlU2VsZWN0ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiU2VsZWN0VGVtcFdyYXBwZXJcIilbMF0uZGVmYXVsdFxyXG4gICAgICAgIHJldHVybiAoPGZsZXggZGlyZWN0aW9uPXtmbGV4LkRpcmVjdGlvbi5IT1JJWk9OVEFMfSBhbGlnbj17ZmxleC5BbGlnbi5DRU5URVJ9PlxyXG4gICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQobmF0aXZlU2VsZWN0LCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgIH0pKX1cclxuICAgICAgICAgICAgPC9mbGV4PikvKlxyXG4gICAgICAgIHJldHVybiBCREZEQi5SZWFjdFV0aWxzLmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxDb21wb25lbnRzLkxpYnJhcnlDb21wb25lbnRzLkZsZXgsIHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBCREZEQi5kaXNDTi5zZWxlY3R3cmFwcGVyLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IEludGVybmFsQ29tcG9uZW50cy5MaWJyYXJ5Q29tcG9uZW50cy5GbGV4LkRpcmVjdGlvbi5IT1JJWk9OVEFMLFxyXG4gICAgICAgICAgICBhbGlnbjogSW50ZXJuYWxDb21wb25lbnRzLkxpYnJhcnlDb21wb25lbnRzLkZsZXguQWxpZ24uQ0VOVEVSLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogQkRGREIuUmVhY3RVdGlscy5jcmVhdGVFbGVtZW50KEludGVybmFsQ29tcG9uZW50cy5OYXRpdmVTdWJDb21wb25lbnRzLlNlbGVjdCwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfSk7Ki9cclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NldHRpbmdzfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRoaXMucHJvcHMudGl0bGV9KSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5idXR0b24gJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiB0aGlzLnByb3BzLmJ1dHRvbi5vbkNsaWNrfSwgdGhpcy5wcm9wcy5idXR0b24udGl0bGUpLFxyXG4gICAgICAgICAgICBzZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXS5tYXJnaW5Ub3A2MH0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFRhYkJhclNlcGFyYXRvciBmcm9tIFwiLi90YWJCYXJTZXBhcmF0b3JcIjtcclxuaW1wb3J0IFRhYkJhckhlYWRlciBmcm9tIFwiLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4vdGFiQmFySXRlbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NpZGVCYXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzaSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbY2xhc3MqPXNpZGUtXSA+IFtjbGFzcyo9c2VsZWN0ZWRdXCIpO1xyXG4gICAgICAgIGlmIChzaSkgdGhpcy5zY24gPSBzaS5jbGFzc05hbWU7XHJcbiAgICAgICAgY29uc3QgbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2NsYXNzKj1zaWRlLV0gPiBbY2xhc3MqPSdpdGVtLSddOm5vdChbY2xhc3MqPXNlbGVjdGVkXSlcIik7XHJcbiAgICAgICAgaWYgKG5zKSB0aGlzLm5zY24gPSBucy5jbGFzc05hbWU7XHJcbiAgICAgICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGFicykge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQgPSB0aGlzLnNldFNlbGVjdGVkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBudWxsLFxyXG4gICAgICAgICAgICBpdGVtczogc2VsZi5wcm9wcy5pdGVtc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGluaXRpYWxTZWxlY3Rpb24gPSBzZWxmLnByb3BzLml0ZW1zLmZpbmQoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnNlbGVjdGVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpbml0aWFsU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VsZWN0ZWQgPSBpbml0aWFsU2VsZWN0aW9uLmlkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2hlYWRlclRleHR9ID0gc2VsZi5wcm9wcztcclxuICAgICAgICBjb25zdCB7aXRlbXMsIHNlbGVjdGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJIZWFkZXIsIHt0ZXh0OiBoZWFkZXJUZXh0LCBidXR0b246IHRoaXMucHJvcHMuaGVhZGVyQnV0dG9ufSksXHJcbiAgICAgICAgICAgIGl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHtpZCwgdGV4dH0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7a2V5OiBpZCwgc2VsZWN0ZWQ6IHNlbGVjdGVkID09PSBpZCwgdGV4dDogdGV4dCwgaWQ6IGlkLCBvbkNsaWNrOiBzZWxmLm9uQ2xpY2t9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkKGUpIHtcclxuICAgICAgICBlLnRhcmdldC5jbGFzc05hbWUgPSB0aGlzLnNjbjtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2kgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2NsYXNzKj1zaWRlXSA+IFtjbGFzcyo9c2VsZWN0ZWRdXCIpO1xyXG4gICAgICAgIGlmIChzaSkge1xyXG4gICAgICAgICAgICBzaS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zZXRTZWxlY3RlZCk7XHJcbiAgICAgICAgICAgIHNpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgc2kuY2xhc3NOYW1lID0gdGhpcy5uc2NuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWQ6IG51bGx9KTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZWxlY3RlZDogaWR9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykgdGhpcy5wcm9wcy5vbkNsaWNrKGlkKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaEl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHRleHQgPSBcIlwifSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gQkRWMi5yZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0aGlzLm5vZGUsIHRleHQsIHtzdHlsZSwgc2lkZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMudG9vbHRpcDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1hTdmcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7eG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMTIgMTJcIiwgc3R5bGU6IHt3aWR0aDogXCIxOHB4XCIsIGhlaWdodDogXCIxOHB4XCJ9fSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJnXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJhY2tncm91bmRcIiwgZmlsbDogXCJub25lXCIsIGZpbGxSdWxlOiBcImV2ZW5vZGRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0wIDBoMTJ2MTJIMFwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtjbGFzc05hbWU6IFwiZmlsbFwiLCBmaWxsOiBcIiNkY2RkZGVcIiwgZDogXCJNOS41IDMuMjA1TDguNzk1IDIuNSA2IDUuMjk1IDMuMjA1IDIuNWwtLjcwNS43MDVMNS4yOTUgNiAyLjUgOC43OTVsLjcwNS43MDVMNiA2LjcwNSA4Ljc5NSA5LjVsLjcwNS0uNzA1TDYuNzA1IDZcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJta2RpcnBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/BetterDiscordApp/js/main.min.js b/BetterDiscordApp/js/main.min.js index bf35b4d..2fe91e6 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=11)}([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("node-fetch")},function(e,t){e.exports=require("crypto")},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){e.exports=require("request")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return r})),n.d(s,"currentDiscordVersion",(function(){return o})),n.d(s,"minSupportedVersion",(function(){return a})),n.d(s,"bbdVersion",(function(){return i})),n.d(s,"bbdChangelog",(function(){return l})),n.d(s,"settings",(function(){return c})),n.d(s,"defaultCookie",(function(){return d})),n.d(s,"settingsCookie",(function(){return u})),n.d(s,"settingsRPC",(function(){return h})),n.d(s,"defaultRPC",(function(){return p})),n.d(s,"bdpluginErrors",(function(){return m})),n.d(s,"bdthemeErrors",(function(){return g})),n.d(s,"bdConfig",(function(){return f})),n.d(s,"bdthemes",(function(){return b})),n.d(s,"bdplugins",(function(){return v})),n.d(s,"pluginCookie",(function(){return y})),n.d(s,"themeCookie",(function(){return E}));const r="0.0.306",o=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",a="0.3.0",i="0.3.4",l={description:"Lightcord Edition.",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 Glasscord.","Initialization sequence has once again been changed slightly to hopefully improve loading times.","We removed emotes. That's sad for people who were actually using it, but it was leading to more loading time and some basic words were emote."]},{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`."]}]},c={"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"},"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"},"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).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personnal Informations":{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 Internal Developer Options. This allow the "Experiments" tab and the "Developer Options" tab. (must close and reopen settings)',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dm you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Disabling it erase any informations about you in our servers. But you won't see anything like custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Always-on-Top":{id:"lightcord-3",info:"Enable window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},d={"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-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},u={},h={},p={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},m=[],g=[],f=Object.create(BetterDiscordConfig),b={},v={},y={},E={},C=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete C.m.__extra_id__,delete C.c.__extra_id__;const w=e=>{for(const t in C.c)if(C.c.hasOwnProperty(t)){const n=C.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};var S=w,x=e=>{const t=[];for(const n in C.c)if(C.c.hasOwnProperty(n)){const s=C.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},D=(...e)=>w(t=>e.every(e=>void 0!==t[e])),k=e=>w(t=>t.displayName===e),M=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=>{if(e.remove&&e.set&&e.clear&&e.get&&!e.sort)return null;if(!e.getToken&&!e.getEmail&&!e.showToken)return e;return new Proxy(e,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t?()=>"puppet11112@gmail.com":"showToken"==t?()=>!0:e[t]}})},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);if(r&&n(r))return t(r)}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)):o&&n(o)&&s.push(t(o))}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"))]}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}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(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};class B{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(B.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 a=(o-s)/n;a>1&&(a=1);const i=e(a);t(i),a<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("."),a=n&&s;s||(s=n);const i=a?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,i);const l=()=>{e.removeEventListener(r,i)};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("."),a=n&&s;s||(s=n);const i=a?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,i))}:function(t){s(t),e.removeEventListener(r,i)};e.addEventListener(r,i);const l=()=>{e.removeEventListener(r,i)};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 a=this.listeners[s]||[],i=n?a.filter(r):a.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:a=!1,silent:i=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(i||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const d=e[t],u=()=>{i||console.log("unpatch",t,"of",c),e[t]=d};return e[t]=function(){const n={thisObject:this,methodArguments:arguments,cancelPatch:u,originalMethod:d,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=N.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&N.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&N.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return a&&u(),n.returnValue},Object.assign(e[t],d),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=d,e[t].toString=function(){return d.toString()}),u}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=a.some(t=>t.contains(e));(i||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:N.screenWidth-s-240,a=n?n.offsetHeight:80,i=document.createElement("div");i.classList.add("bd-toasts"),i.style.setProperty("left",s+"px"),i.style.setProperty("width",o+"px"),i.style.setProperty("bottom",a+"px"),document.querySelector("#app-mount").appendChild(i)}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=B.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",()=>{B.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{B.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),B.query("#app-mount").append(o);const a=[];return{close:()=>{B.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{a.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=B.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 a(e){const t=B.createElement('
');for(const n of e){const e=B.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(),N.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const i=[a(e),a(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&B.removeClass(t,"selected"),B.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(i[B.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{B.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{B.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),B.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=D("push","update","pop","popWithKey"),n=D("fixed","improved"),s=k("Text"),r=D("Child"),o=D("Tags","default"),a=S(e=>e.defaultProps&&0==e.defaultProps.selectable),l=D("defaultRules","parse");if(!(a&&t&&n&&s&&r&&o&&l))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${i}`,footer:m}=e,g=M.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,l.parse(d)));for(let e=0;eg("li",null,l.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))},v=()=>{const e=S(e=>"Anchor"==e.displayName),n=D("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),M.joinBD2()},a=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),i=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",a);return g(r.Child,{grow:1,shrink:1},m||i)};return t.push((function(e){return g(a,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:v,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=D("push","update","pop","popWithKey"),r=k("Markdown"),o=S(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key());if(!s||!o||!r)return N.alert(e,t);const a=()=>{},{onConfirm:i=a,onCancel:l=a,confirmText:c="Okay",cancelText:d="Cancel",danger:u=!1,key:h}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?M.React.createElement(r,null,e):e),s.push(o,{header:e,children:t,red:u,confirmText:c,cancelText:d,onConfirm:i,onCancel:l},h)}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}N.showToast=N.suppressErrors(N.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=N;const P=n(5);var L=new class extends P{dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class ${get folder(){return q.pluginsFolder}}$.prototype.loadPlugins=async function(){this.loadPluginData(),m.splice(0,0,...await q.loadPlugins());const e=Object.keys(v);for(let t=0;tt.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){u["fork-ps-1"]&&N.showContentErrors({plugins:[e]})}N.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),u["fork-ps-2"]&&N.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),L.dispatch("plugin-loaded",n.getName())},$.prototype.unloadPlugin=function(e){const t=Object.values(v).find(t=>t.filename==e)||v[e];if(!t)return;const n=t.plugin.getName();y[n]&&this.disablePlugin(n,!0);const s=q.unloadContent(v[n].filename,"plugin");if(delete v[n],s)return u["fork-ps-1"]&&N.showContentErrors({plugins:[s]}),u["fork-ps-2"]&&N.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),N.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);N.log("ContentManager",`${n} was unloaded.`),u["fork-ps-2"]&&N.showToast(`${n} was unloaded.`,{type:"success"}),L.dispatch("plugin-unloaded",n)},$.prototype.delete=function(e){const t=Object.values(v).find(t=>t.filename==e)||v[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(q.pluginsFolder,t.filename);n(2).unlinkSync(s)},$.prototype.reloadPlugin=async function(e){const t=Object.values(v).find(t=>t.filename==e)||v[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=y[n];s&&this.stopPlugin(n,!0);const r=await q.reloadContent(v[n].filename,"plugin");if(r)return u["fork-ps-1"]&&N.showContentErrors({plugins:[r]}),u["fork-ps-2"]&&N.showToast(`${n} could not be reloaded.`,{type:"error"}),N.err("ContentManager",`${n} could not be reloaded.`,r);v[n].plugin.load&&"function"==typeof v[n].plugin.load&&v[n].plugin.load(),s&&this.startPlugin(n,!0),N.log("ContentManager",`${n} v${v[n].plugin.getVersion()} was reloaded.`),u["fork-ps-2"]&&N.showToast(`${n} v${v[n].plugin.getVersion()} was reloaded.`,{type:"success"}),L.dispatch("plugin-reloaded",n)},$.prototype.reload=function(e){return this.reloadPlugin(e)},$.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(v).find(t=>t.filename==e)||v[e];if(!t)return;const s=n(1).resolve(q.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},$.prototype.updatePluginList=function(){const e=q.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},$.prototype.loadPluginData=function(){const e=Y.getSettingGroup("plugins");e&&Object.assign(y,e)},$.prototype.savePluginData=function(){Y.setSettingGroup("plugins",y)},$.prototype.newMessage=function(){const e=Object.keys(v);for(let t=0;tt.filename==e);N.log("ContentManager",`${n.name} v${n.version} was loaded.`),u["fork-ps-2"]&&N.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),L.dispatch("theme-loaded",n.name)},T.prototype.unloadTheme=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const n=t.name;E[n]&&this.disableTheme(n,!0);const s=q.unloadContent(b[n].filename,"theme");if(delete b[n],s)return u["fork-ps-1"]&&N.showContentErrors({themes:[s]}),u["fork-ps-2"]&&N.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),N.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);N.log("ContentManager",`${n} was unloaded.`),u["fork-ps-2"]&&N.showToast(`${n} was unloaded.`,{type:"success"}),L.dispatch("theme-unloaded",n)},T.prototype.delete=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(q.pluginsFolder,t.filename);n(2).unlinkSync(s)},T.prototype.reloadTheme=async function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return this.loadTheme(e);const n=t.name,s=await q.reloadContent(b[n].filename,"theme");if(E[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return u["fork-ps-1"]&&N.showContentErrors({themes:[s]}),u["fork-ps-2"]&&N.showToast(`${n} could not be reloaded.`,{type:"error"}),N.err("ContentManager",`${n} could not be reloaded.`,s);N.log("ContentManager",`${n} v${b[n].version} was reloaded.`),u["fork-ps-2"]&&N.showToast(`${n} v${b[n].version} was reloaded.`,{type:"success"}),L.dispatch("theme-reloaded",n)},T.prototype.reload=function(e){return this.reloadTheme(e)},T.prototype.edit=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const s=n(1).resolve(q.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},T.prototype.updateThemeList=function(){const e=q.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},T.prototype.loadThemeData=function(){const e=Y.getSettingGroup("themes");e&&Object.assign(E,e)},T.prototype.saveThemeData=function(){Y.setSettingGroup("themes",E)};var O=new T;const j=window.require,R=n(1),I=n(2),_=n(6).Module;_.globalPaths.push(R.resolve(n(0).remote.app.getAppPath(),"node_modules"));class F extends Error{constructor(e){super(e),this.name="MetaError"}}const W=_._extensions[".js"],z=_._extensions[".css"]?_._extensions[".css"]:()=>null,U=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,H=/^\\@/;var q=new class{constructor(){this.timeCache={},this.watchers={},_._extensions[".js"]=this.getContentRequire("plugin"),_._extensions[".css"]=this.getContentRequire("theme")}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=I.realpathSync(R.resolve(f.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=I.realpathSync(R.resolve(f.dataPath+"themes/")))}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]=I.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{I.statSync(R.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?A.unloadPlugin(r):O.unloadTheme(r)}if(!I.statSync(R.resolve(n,r)).isFile())return;const o=I.statSync(R.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 A.loadPlugin(r):await O.loadTheme(r)),"change"==e&&(t?await A.reloadPlugin(r):await O.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 F("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 F("META was not found.");const s=N.testJSON(n);if(!s)throw new F("META could not be parsed.");if(!s.name)throw new F("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(U))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(H,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?W:z;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,a=R.resolve(o,R.basename(r));if(!I.existsSync(a)||r!==I.realpathSync(a))return Reflect.apply(s,this,arguments);let i=I.readFileSync(r,"utf8");i=N.stripBOM(i);const l=I.statSync(r),c=n.extractMeta(i);if(c.filename=R.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=i,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),i=`module.exports = ${JSON.stringify(c)};`),t){e._compile(i,e.filename),!N.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,i=""):i+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(i,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;try{j(R.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=j(R.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=N.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete v[r.plugin.getName()],v[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 b[r.name],b[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete j.cache[j.resolve(R.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{j.cache[j.resolve(R.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=I.readdirSync(s),o=Object.values(t?v:b),a=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)&&I.statSync(R.resolve(s,e)).isFile()),removed:a}}async loadAllContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=I.readdirSync(s);for(const t of o){if(!I.statSync(R.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")}};const G=window.require,V=n(2),J=n(1),Z=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var Y=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={}}initialize(){try{V.existsSync(this.BDFile)||V.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(V.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!V.existsSync(this.settingsFile))return;let t=G(this.settingsFile);V.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[Z]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),N.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=J.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=J.resolve(f.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=J.resolve(f.dataPath,"bdsettings.json"))}getPluginFile(e){return J.resolve(q.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[Z][e]||null}setSettingGroup(e,t){this.data.settings[Z][e]=t,V.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,V.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:V.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(V.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,V.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],V.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};class K extends M.reactComponent{constructor(e){super(e)}render(){return M.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Q extends M.reactComponent{constructor(e){super(e)}render(){return M.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class X extends M.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return M.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 ee extends M.reactComponent{constructor(e){super(e);const t=document.querySelector("[class*=side-] > [class*=selected]");t&&(this.scn=t.className);const n=document.querySelector("[class*=side-] > [class*='item-']:not([class*=selected])");n&&(this.nscn=n.className);const s=document.querySelectorAll("[class*='side-'] > [class*='item-']");for(const e of s)e.addEventListener("click",()=>{this.setState({selected:null})});this.setInitialState(),this.onClick=this.onClick.bind(this),this.setSelected=this.setSelected.bind(this)}setInitialState(){const e=this;e.state={selected:null,items:e.props.items};const t=e.props.items.find(e=>e.selected);t&&(e.state.selected=t.id)}render(){const e=this,{headerText:t}=e.props,{items:n,selected:s}=e.state;return M.react.createElement("div",null,M.react.createElement(K,null),M.react.createElement(Q,{text:t,button:this.props.headerButton}),n.map(t=>{const{id:n,text:r}=t;return M.react.createElement(X,{key:n,selected:s===n,text:r,id:n,onClick:e.onClick})}))}setSelected(e){e.target.className=this.scn}onClick(e){const t=document.querySelector("[class*=side] > [class*=selected]");t&&(t.removeEventListener("click",this.setSelected),t.addEventListener("click",this.setSelected),t.className=this.nscn),this.setState({selected:null}),this.setState({selected:e}),this.props.onClick&&this.props.onClick(e)}}const te=M.React;class ne extends te.Component{render(){const e=this.props.size||"18px";return te.createElement("svg",{viewBox:"0 0 24 24",fill:"#FFFFFF",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},te.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),te.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"}))}}let se,re;function oe(){return se||(se=D("tooltip","tooltipBlack"))}function ae(){return re||(re=D("layer","layerContainer"))}const ie=function(e){const t=e[0].toUpperCase()+e.slice(1),n=oe()[`tooltip${t}`];return n||null},le=function(e){return!!ie(e)},ce=function(e){return`${e}px`};class de{constructor(e,t,n={}){const{style:s="black",side:r="top",preventFlip:o=!1,disabled:a=!1}=n;if(this.node=e instanceof jQuery?e[0]:e,this.label=t,this.style=s.toLowerCase(),this.side=r.toLowerCase(),this.preventFlip=o,this.disabled=a,!le(this.side))return N.err("EmulatedTooltip",`Side ${this.side} does not exist.`);if(!le(this.style))return N.err("EmulatedTooltip",`Style ${this.style} does not exist.`);this.element=document.createElement("div"),this.element.className=ae().layer+" "+ae().disabledPointerEvents,this.tooltipElement=document.createElement("div"),this.tooltipElement.className=`${oe().tooltip} ${ie(this.style)}`,this.labelElement=document.createElement("div"),this.labelElement.className=oe().tooltipContent;const i=document.createElement("div");i.className=oe().tooltipPointer,this.tooltipElement.append(i),this.tooltipElement.append(this.labelElement),this.element.append(this.tooltipElement),this.node.addEventListener("mouseenter",()=>{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<=N.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<=N.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${oe().tooltip} ${ie(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(ie("top")),this.element.style.setProperty("top",ce(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(ie("bottom")),this.element.style.setProperty("top",ce(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(ie("left")),this.element.style.setProperty("left",ce(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(ie("right")),this.element.style.setProperty("left",ce(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",ce(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",ce(e-this.element.offsetHeight/2))}}var ue=class extends M.reactComponent{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=M.reactDom.findDOMNode(this),this.tooltip=new de(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}};class he{constructor(e){this.onClick=e}get items(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get component(){const e=M.react.createElement(ue,{color:"black",side:"top",text:"Changelog"},M.react.createElement("div",{className:"bd-changelog-button",onClick:()=>{N.showChangelogModal(l)}},M.react.createElement(ne,{className:"bd-icon",size:"16px"})));return M.react.createElement("span",null,M.react.createElement(ee,{onClick:this.onClick,headerText:"Bandaged BD",headerButton:e,items:this.items}))}get root(){const e=B.query("#bd-settings-sidebar");return e||(this.injectRoot()?this.root:null)}injectRoot(){const e=B.queryAll("[class*='side-'] > [class*='item-']:not([class*=Danger])"),t=e[e.length-1];return!!t&&(t.parentElement.insertBefore(B.createElement('
'),t.previousElementSibling),!0)}render(){const e=this.root;e?(M.reactDom.render(this.component,e),N.onRemoved(e,()=>{M.reactDom.unmountComponentAtNode(e)})):console.log("FAILED TO LOCATE ROOT: [class*='side-'] > [class*='item-']:not([class*=Danger])")}}var pe=new class{injectColoredText(){this.cancelColoredText||M.MessageComponent&&(this.cancelColoredText=N.monkeyPatch(M.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=u["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","")})}},me=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(!u["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=N.monkeyPatch(M.TimeFormatter,"calendarFormat",{after:t}),s=N.monkeyPatch(M.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};const ge=n(0),fe=n(2),be=n(1),ve=ge.remote.BrowserWindow,ye=ge.remote.getCurrentWebContents();var Ee=new class{constructor(){let e="";if(e="win32"===process.platform?be.resolve(process.env.LOCALAPPDATA,"Google/Chrome/User Data"):"linux"===process.platform?be.resolve(process.env.HOME,".config/google-chrome"):"darwin"===process.platform?be.resolve(process.env.HOME,"Library/Application Support/Google/Chrome"):be.resolve(process.env.HOME,".config/chromium"),e+="/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/",fe.existsSync(e)){const t=fe.readdirSync(e);e=be.resolve(e,t[t.length-1])}this.extensionPath=e,this.isExtensionInstalled=fe.existsSync(e),this.listener=this.listener.bind(this),c["React DevTools"].hidden=!this.isExtensionInstalled}listener(){if(!this.isExtensionInstalled)return;ve.removeDevToolsExtension("React Developer Tools"),ve.addDevToolsExtension(this.extensionPath)?N.log("React DevTools","Successfully installed react devtools."):N.err("React DevTools","Couldn't find react devtools in chrome extensions!")}start(){setImmediate(()=>ye.on("devtools-opened",this.listener)),ye.isDevToolsOpened()&&this.listener()}stop(){ye.removeListener("devtools-opened",this.listener)}};class Ce extends M.reactComponent{constructor(e){super(e)}render(){return M.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},M.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},M.react.createElement("path",{d:"M0 0h12v12H0"}),M.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 we extends M.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 M.react.createElement("div",{className:"tools-container "+e.toolsContainer},M.react.createElement("div",{className:"tools "+e.tools},M.react.createElement("div",{className:t.container},M.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},M.react.createElement(Ce,null)),M.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 Se extends M.reactComponent{constructor(e){super(e)}render(){return M.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20 "+BDModules.get(e=>e.marginTop60)[0].marginTop60},this.props.text)}}class xe extends M.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 M.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},M.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this)}),M.react.createElement("div",{className:n.flexChild+" bd-server-content"},M.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},M.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),M.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),M.react.createElement("div",{className:n.horizontal+" "+s.noWrap},M.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},M.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),M.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},M.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&M.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"}},M.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&M.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"}},M.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&M.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},M.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 De extends M.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 M.react.createElement("div",{key:"scrollerwrap",className:n},M.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class ke extends M.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return M.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},M.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},M.react.createElement(De,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),M.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},M.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},M.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},M.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},M.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class Me extends M.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=M.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=M.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=M.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=M.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){M.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 a=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(a+=` for ${n.state.term}`),n.setState({loading:!1,title:a,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[M.react.createElement(xe,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/705908350218666117/05a5652f7d1d0ae328ca7d6e2354a82a.webp",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),M.react.createElement(xe,{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 M.react.createElement(ke,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:M.react.createElement(we,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return M.react.createElement("div",{className:"sidebar",key:"ps"},M.react.createElement("div",{className:"ui-tab-bar SIDE"},M.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),M.react.createElement(K,null),this.searchInput,M.react.createElement(K,null),M.react.createElement(Q,{text:"Categories"}),this.categoryButtons.map((e,t)=>M.react.createElement(X,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),M.react.createElement(K,null),this.footer,this.connection))}get searchInput(){return M.react.createElement("div",{className:"ui-form-item"},M.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},M.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[M.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},M.react.createElement(Se,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>M.react.createElement(xe,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&M.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"}},M.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&M.react.createElement(Se,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[M.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},M.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",M.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"}},M.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return M.react.createElement("div",{className:"ui-tab-bar-header"},M.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?M.react.createElement("span",null):M.react.createElement("span",null,M.react.createElement(K,null),M.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),M.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},M.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},M.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Be extends M.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&M.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=B.query(`#${this.props.id}`);B.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=B.query(`#${this.props.id}`);B.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=B.query(".publicServersOpen");t.classList.remove("publicServersOpen"),B.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=B.query('[class*="layer-"]');e.classList.add("publicServersOpen"),B.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return M.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 Ne=new class{constructor(){this._appendButton=this._appendButton.bind(this)}get component(){return M.react.createElement(Be,{rootId:"pubslayerroot",id:"pubslayer"},M.react.createElement(Me,{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=B.query(".layers, ."+e);return!!t&&(t.append(B.createElement("
")),!0)}render(){const e=this.root;e?M.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=B.createElement(`
`);u["bda-gs-1"]||(e.style.display="none");const t=B.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[BDModules.get(e=>e.scroller&&e.scrollbarWidth)[0].scroller];if(B.query("#bd-pub-li"))return;const t=M.guildClasses.wrapper.split(" ")[0],n=B.query(`.${t} .${e} >:first-child`);B.after(n,this.button)}addButton(){if(this.guildPatch)return;const e=S(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=k("Guilds");e||t||N.warn("PublicServer","Can't find GuildList component"),this.guildPatch=N.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,B.query("#bd-pub-li").remove()}};var Pe=new class{start(){B.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(){B.removeStyle("VoiceMode")}};const Le=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var $e=new class{stop(){this.hasPatched&&(this.unpatchClassModules(x(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(x(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(!Le.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(Le);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].layer,BDModules.get(e=>e.contextMenu)[0]];setTimeout((function(){let r=B.query("."+s.contextMenu.split(" ")[0]);if(!r){const t=B.query("#app-mount"),o=B.createElement(`
`);r=B.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.style.zIndex="1002";const a=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",a),document.removeEventListener("contextmenu",a),document.removeEventListener("keyup",a))};document.addEventListener("click",a),document.addEventListener("contextmenu",a),document.addEventListener("keyup",a)}const o=B.query("."+n.split(" ")[0]),a=B.createElement(`
`),i=B.createElement(`
`);i.append(B.createElement(`
Copy Selector
`)),i.addEventListener("click",()=>{M.NativeModule.copy(t),r.style.display="none"}),a.append(i),r.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+(e.className||"").split(" ").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 Te=M.React;class Oe extends Te.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(){this.props.disabled||(this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked}))}render(){const e=this.props.disabled?" bd-switch-disabled":"",t=this.state.checked?" bd-switch-checked":"";return Te.createElement("div",{className:"bd-switch"+e+t},Te.createElement("input",{type:"checkbox",id:this.props.id,className:"bd-checkbox",disabled:this.props.disabled,checked:this.state.checked,onChange:this.onChange}))}}class je extends M.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(){const{text:e,info:t}=this.props.data;return M.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},M.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},M.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),M.react.createElement(Oe,{onChange:this.onChange,checked:this.props.checked})),M.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Re extends M.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?M.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[M.react.createElement(Se,{text:e}),s,t.map(e=>M.react.createElement(je,{id:e.id,key:e.id,data:e,checked:u[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}class Ie extends M.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return M.react.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default"},this.props.sections.map(e=>M.react.createElement(Re,Object.assign({},e,{onChange:this.props.onChange}))))}}M.reactComponent;class _e extends M.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return M.react.createElement("li",null,M.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},M.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},M.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),M.react.createElement("span",null)),M.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Fe extends M.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(){B.addClass(B.query("#app-mount"),"bd-detached-editor"),M.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",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){B.removeClass(B.query("#app-mount"),"bd-detached-editor"),M.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=Y.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=B.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=B.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(B.insertAfter(B.createElement('
'),e),!0)}render(){const e=this;return M.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},M.react.createElement("div",{id:"bd-customcss-innerpane"},M.react.createElement("div",{className:"editor-wrapper"},M.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),M.react.createElement("div",{id:"bd-customcss-attach-controls"},M.react.createElement("ul",{className:"checkbox-group"},M.react.createElement(_e,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:u["bda-css-0"]})),M.react.createElement("div",{id:"bd-customcss-detach-controls-button"},M.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),M.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),M.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),M.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":u["bda-css-0"]=t,mn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":B.query("#editor-detached")&&t.props.attach(),M.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){B.removeStyle("customcss"),B.addStyle("customcss",this.editor.session.getValue())}saveCss(){Y.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class We extends M.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=M.react.createElement(Fe,{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||M.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",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&M.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=Y.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;let n=BDModules.get(e=>e.contentColumn)[0];return M.react.createElement("div",{className:n.contentColumn+" "+n.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},t&&M.react.createElement("div",{id:"editor-detached"},M.react.createElement(Se,{text:"Custom CSS Editor"}),M.react.createElement("h3",null,"Editor Detached"),M.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&M.react.createElement("div",null,M.react.createElement(Se,{text:"Custom CSS Editor"}),M.react.createElement("div",{className:"editor-wrapper"},M.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),M.react.createElement("div",{id:"bd-customcss-attach-controls"},M.react.createElement("ul",{className:"checkbox-group"},M.react.createElement(_e,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:u["bda-css-0"]})),M.react.createElement("div",{id:"bd-customcss-detach-controls-button"},M.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),M.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),M.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),M.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),M.react.createElement("div",{className:"help-text"},"Press ",M.react.createElement("code",{className:"inline"},"ctrl"),"+",M.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":u["bda-css-0"]=t,mn.saveSettings()}}updateCss(){B.removeStyle("customcss"),B.addStyle("customcss",this.editor.session.getValue())}saveCss(){Y.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?M.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=B.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=B.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(B.insertAfter(B.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class ze extends M.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?M.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const Ue=ze.prototype.render;Object.defineProperty(ze.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:()=>Ue});class He extends M.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=BDModules.get(e=>e.contentColumn)[0];return M.react.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default"},M.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title),this.props.children)}}class qe extends M.reactComponent{constructor(e){super(e)}render(){return M.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"}},M.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"}),M.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const Ge=M.React;class Ve extends Ge.Component{render(){const e=this.props.size||"24px";return Ge.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"#FFFFFF",style:{width:e,height:e},onClick:this.props.onClick},Ge.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"}),Ge.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const Je=M.React;class Ze extends Je.Component{render(){const e=this.props.size||"24px";return Je.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},Je.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Je.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"}),Je.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const Ye=M.React,Ke=M.anchorClasses;class Qe extends M.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}}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),u["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest(".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=B.offset(e),s=B.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;B.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){N.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return M.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},M.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},M.react.createElement(Ce,null)),"object"==typeof this.settingsPanel&&M.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&M.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]=Ye.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=Ye.createElement("span",{className:"version bda-version"},t));const a=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${Ke.anchor} ${Ke.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{M.LayerStack.popLayer(),M.openDM(n.id)})),s[a]=Ye.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()}),M.react.createElement("a",n,e)}makeButton(e,t,n){return Ye.createElement(ue,{color:"black",side:"top",text:e},Ye.createElement("div",{className:"bd-addon-button",onClick:n},t))}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]),M.LayerStack.popLayer(),M.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)&&M.react.createElement("div",{className:"bd-card-footer bda-footer"},M.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>nXe});const et=M.React;class tt extends et.Component{render(){const e=this.props.size||"16px";return et.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},et.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 nt=M.React;class st extends nt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=nt.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 nt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>nt.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 nt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},nt.createElement("div",{className:"bd-select-value"},this.selected.label),nt.createElement(tt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const rt=M.React;class ot extends rt.Component{render(){const e=this.props.size||"16px";return rt.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},rt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),rt.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 at=M.React;class it extends at.Component{render(){return at.createElement("div",{className:"bd-search-wrapper"},at.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),at.createElement(ot,null))}}function lt(){return(lt=Object.assign||function(e){for(var t=1;t{is.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),remove:this.delete.bind(this),addon:e}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}getAddons(){const e=this.props.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;ndt.createElement(qe,lt({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?A.updatePluginList():O.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return dt.createElement(De,{contentColumn:!0,fade:!0,dark:!0},dt.createElement(He,{title:`${this.props.type.toUpperCase()}—${t.length}`},dt.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),!u["fork-ps-5"]&&e,dt.createElement("div",{className:"bd-controls bd-addon-controls"},dt.createElement(it,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),dt.createElement("div",{className:"bd-addon-dropdowns"},dt.createElement("div",{className:"bd-select-wrapper"},dt.createElement("label",{className:"bd-label"},"Sort by:"),dt.createElement(st,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),dt.createElement("div",{className:"bd-select-wrapper"},dt.createElement("label",{className:"bd-label"},"Order:"),dt.createElement(st,{options:this.directions,onChange:this.reverse,style:"transparent"})))),dt.createElement("div",{className:"bda-slist bd-addon-list"},t)),dt.createElement(we,{key:"tools"}))}}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=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,mt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,gt=process.pid;var ft=new class{constructor(){this.enabled=!1,this.game=h}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.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(){pt.dispatch({type:mt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:gt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(h||Object.create(p)),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()}};const bt=M.react;class vt extends bt.Component{handleChange(e){this.props.value=e,"function"==typeof this.props.onChange&&this.props.onChange(e,this),this.forceUpdate()}render(){let e=BDModules.get(e=>e.default&&e.default.Wrap&&e.default.Direction&&e.default.Child)[0].default,t=BDModules.get(e=>e.default&&"SelectTempWrapper"===e.default.displayName)[0].default;return bt.createElement("flex",{direction:e.Direction.HORIZONTAL,align:e.Align.CENTER},bt.createElement(t,Object.assign({},this.props,{onChange:this.handleChange.bind(this)})))}}const yt=M.react,Et=BDModules.get(e=>e.Interval)[0];var Ct=function(e,t){class n extends yt.PureComponent{constructor(e){super(e),this._interval=new Et.Interval,this.state=Object.assign({},this.getUpdatedTime())}componentDidMount(){let e=this;this._interval.start(1e3,(function(){return e.setState(e.getUpdatedTime())}))}componentWillUnmount(){this._interval.stop()}componentDidUpdate(e){e.timestamps.end===this.props.timestamps.end&&e.timestamps.start===this.props.timestamps.start||this.setState(this.getUpdatedTime())}getUpdatedTime(){let e=this.props.timestamps,t=Date.now()/1e3;return null!=e.end?this.getDiff(t,wt(e.end)/1e3):null!=e.start?this.getDiff(wt(e.start)/1e3,t):{hours:0,minutes:0,seconds:0}}renderTime(e,t){return void 0===t&&(t=!1),t&&e<=0?-1:e<10?"0"+e:e}getDiff(e,t){let n=Math.max(t-e,0),s=Math.floor(n)%60,r=Math.floor(n/60)%60;return{hours:Math.floor(n/3600)%24,minutes:r,seconds:s}}render(){let n=this.props,s=n.timestamps,r=function(e,t){if(null==e)return{};let n={},s=Object.keys(e);for(let r=0;r=0&&(n[o]=e[o])}return n}(n,["timestamps"]),o=this.state,a=o.hours,i=o.minutes,l=o.seconds,c={hours:this.renderTime(a,!0),minutes:this.renderTime(i),seconds:this.renderTime(l)};return null!==s.end?yt.createElement(e,Object.assign({},r,{message:t.USER_ACTIVITY_TIMESTAMP_END.format(c)})):null!==s.start?yt.createElement(e,Object.assign({},r,{message:t.USER_ACTIVITY_TIMESTAMP_START.format(c)})):null}}return n};function wt(e){return(""+e).length<13?1e3*e:e}var St=n(0);const xt=M.React;class Dt extends xt.Component{constructor(e){super(e),this.state={data:Y.getSettingGroup("rpc")||p,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets()}onChange(e,t){let n=kt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(h,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),Y.setSettingGroup("rpc",h),this.preview.forceUpdate(),ft.set(h)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}this.state.data.application_id?(this.isfetching=!0,ft.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()}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate()})):this.setState({data:this.state.data,assets:[]})}updatePreview(e){this.setState({data:e})}render(){let e=BDModules.get(e=>e.contentColumn)[0];return xt.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},xt.createElement(Re,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),xt.createElement(Se,{text:"RichPresence"}),xt.createElement("div",null,kt.map(e=>{if("text"===e.type)return xt.createElement(Mt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[xt.createElement(Bt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?xt.createElement(Nt,{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})),xt.createElement("div",null,xt.createElement(Se,{text:"Preview"}),xt.createElement(Pt,{settings:this})),xt.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20}),xt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),xt.createElement("button",{style:{opacity:.01},onclick:()=>{St.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4",{activate:!0})}},"See ? I pulled a litle sneaky on ya"))}}const kt=[{title:"Application ID",id:"application_id",type:"number"},{title:"Name",id:"name",type:"text"},{title:"Details",id:"details",type:"text"},{title:"State",id:"state",type:"text"},{title:"Timestamp Start",id:"timestamps.start",type:"number"},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];class Mt extends xt.Component{render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=BDModules.get(e=>e.inputMini)[0],l=BDModules.get(e=>e.size16&&e.size20)[0];return xt.createElement("div",{className:t.row+" "+n.marginBottom20},xt.createElement("div",{className:`${t.item} ${a.flexChild}`},xt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),xt.createElement("div",{className:i.inputWrapper},xt.createElement("input",{class:`${i.inputDefault} ${l.size16}`,name:"state",type:"text",placeholder:"",maxlength:"999",value:this.props.manager.state.data[e.id],onChange:e=>{this.props.manager.onChange(this,e.target.value)}}))),xt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}class Bt extends xt.Component{render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=BDModules.get(e=>e.inputMini)[0],l=BDModules.get(e=>e.size16&&e.size20)[0],c=BDModules.get(e=>e.colorTransparent)[0];return xt.createElement("div",{className:t.row+" "+n.marginBottom20},xt.createElement("div",{className:`${t.item} ${a.flexChild}`},xt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),xt.createElement("div",{className:i.inputWrapper},xt.createElement("input",{class:`${i.inputDefault} ${l.size16}`,name:"state",type:"text",placeholder:"",maxlength:"999",value:this.props.manager.state.data[e.id],onChange:e=>{let t=e.target.value.replace(/[^\d]+/g,"");t!==e.target.value&&(e.target.value=t),this.props.manager.onChange(this,t)}})),"timestamps.start"===e.id?xt.createElement("div",{className:BDModules.get(e=>e.buttonWrapper)[0].buttonWrapper},xt.createElement("button",{type:"button",class:`${a.flexChild} ${c.button} ${c.lookFilled} ${c.colorBrand} ${c.sizeSmall} ${c.grow}`,style:{flex:"0 1 auto"},onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")}},xt.createElement("div",{class:c.contents},"Copy current timestamp"))):null),xt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}class Nt extends xt.Component{onChange(e){this.props.manager.onChange(this,"none"===e.value?null:e.value.replace("asset-",""))}render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=this.props.choices;return xt.createElement("div",{className:t.row+" "+n.marginBottom20},xt.createElement("div",{className:`${t.item} ${a.flexChild}`},xt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),xt.createElement(vt,{value:"asset-"+this.props.manager.state.data[e.id]||!1,onChange:this.onChange.bind(this),options:i})),xt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}xt.Component;class Pt extends xt.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(){let e=new this.preview({preview:this});return e.setState(this.state.rpc),xt.createElement("div",{className:"lc-tabWrapper"},xt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},xt.createElement(Lt,{preview:this,title:"Full Profile",id:"profile"}),xt.createElement(Lt,{preview:this,title:"User Popout",id:"popout"})),e.render())}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?Ot:$t}}class Lt extends xt.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",xt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class $t extends xt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=e.getAvatarURL(e.avatar.startsWith("a_")?"gif":"png"),[n,s,r,o,a,i,l,c,d,u,h,m,g]=[BDModules.get(e=>e.userPopout)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.bot)[0],BDModules.get(e=>e.activityUserPopout)[0],BDModules.get(e=>e.muted&&e.wrapper&&e.base)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.themeGhostHairlineChannels)[0],BDModules.get(e=>e.note&&1===Object.keys(e).length)[0],BDModules.get(e=>e.pro&&e.inline)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.default&&e.default.Messages)[0].default.Messages,BDModules.get(e=>e.pointerEvents)[0]],f=Object.assign({},p,this.props.preview.props.settings.state.data);return Tt=Tt||a.timestamp,xt.createElement("div",{className:"lc-userPopout"},xt.createElement("div",{class:n.userPopout,role:"dialog",tabindex:"-1"},xt.createElement("div",{class:n.headerPlaying},xt.createElement("div",{class:`${s.flex} ${r.vertical} ${r.justifyCenter} ${r.alignCenter} ${r.noWrap} ${n.headerTop}`,style:{flex:"1 1 auto"}},xt.createElement("div",{class:n.avatarWrapperNormal,role:"button",tabindex:"0"},xt.createElement("div",{class:g,role:"img",style:{width:"80px",height:"80px"}},xt.createElement("svg",{width:"92",height:"80",viewBox:"0 0 92 80",class:`${g.mask} ${g.svg}`},xt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},xt.createElement("img",{src:t,alt:" ",class:g.avatar})),xt.createElement(At,null))),xt.createElement("svg",{width:"80",height:"80",class:n.avatarHint,viewBox:"0 0 80 80"},xt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},xt.createElement("div",{class:n.avatarHintInner},m.VIEW_PROFILE)))),xt.createElement("div",{class:n.headerText},xt.createElement("div",{class:`${s.flex} ${r.horizontal} ${r.justifyStart} ${r.alignCenter} ${r.noWrap}`,style:{flex:"1 1 auto"}},xt.createElement("div",{class:`${n.headerTagNoNickname} ${o.nameTag}`},xt.createElement("span",{class:`${o.username} ${n.headerTagUsernameNoNickname}`},e.username),xt.createElement("span",null,"#",e.discriminator))))),xt.createElement("div",{class:`${a.activityUserPopout} ${n.activity}`},xt.createElement("h3",{class:`${a.headerTextNormal} ${i.base} ${l.size12}`},m.USER_ACTIVITY_HEADER_PLAYING),xt.createElement("div",{class:a.bodyNormal},(()=>{if(!f["assets.large"])return null;let e=[];return f["assets.large"]&&e.push(xt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${f.application_id}/${f["assets.large"]}.png`,class:`${a.assetsLargeImageUserPopout} ${f["assets.small"]?a.assetsLargeMaskUserPopout:""}`})),f["assets.small"]&&e.push(xt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${f.application_id}/${f["assets.small"]}.png`,class:a.assetsSmallImageUserPopout})),xt.createElement("div",{class:a.assets},e)})(),xt.createElement("div",{class:a.contentImagesUserPopout,style:{flex:"1 1 auto"}},f.name?xt.createElement("h3",{class:`${a.nameNormal} ${i.base} ${l.size14}`,title:f.name},xt.createElement("span",{class:a.activityName},f.name)):null,f.details?xt.createElement("div",{title:f.title,class:a.details},f.details):null,f.state?xt.createElement("div",{class:a.state},xt.createElement("span",{title:f.state},f.state)):null,(()=>{if(!f["timestamps.start"])return null;let e=Ct(Ft,m);return xt.createElement("div",{class:a.timestamp},xt.createElement(e,{timestamps:{end:null,start:f["timestamps.start"]}}))})())))),xt.createElement("div",{class:`${c.scrollerWrap} ${n.body} ${c.scrollerThemed} ${c.themeGhostHairline} ${c.scrollerFade}`},xt.createElement("div",{class:`${c.scroller} ${n.bodyInner}`},xt.createElement("div",{class:n.bodyTitle},m.NOTE),xt.createElement("div",{class:`${d.note} ${n.note}`},xt.createElement("textarea",{placeholder:m.NOTE_PLACEHOLDER,maxlength:"256",autocorrect:"off",class:BDModules.get(e=>e.scrollbarGhostHairline)[0].scrollbarGhostHairline,style:{height:"36px"},disabled:!0})))),xt.createElement("div",{class:n.footer},xt.createElement("div",{class:`${n.protip} ${u.inline}`},xt.createElement("h3",{class:`${u.pro} ${i.base} ${l.size12}`,style:{color:"rgb(67, 181, 129)"}},m.PINNED_MESSAGES_PRO_TIP),xt.createElement("div",{class:`${h.colorStandard} ${l.size14} ${u.tip}`},m.CONTEXT_MENU_HINT)))))}}class At extends xt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getPresence)[0].default.getPresence().status;"invisible"===e&&(e="offline");let t=BDModules.get(e=>e.pointerEvents)[0].pointerEvents;return xt.createElement("rect",{width:"16",height:"16",x:"60",y:"60",fill:"#ffffff",mask:`url(#svg-mask-status-${e})`,className:t})}}let Tt="";class Ot extends xt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=e.getAvatarURL(e.avatar.startsWith("a_")?"gif":"png"),[n,s,r,o,a,i,l,c,d,u,h]=[BDModules.get(e=>e.flex&&e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.topSectionStreaming)[0],BDModules.get(e=>e.pointerEvents)[0],BDModules.get(e=>e.bot)[0],BDModules.get(e=>e.activityProfile)[0],BDModules.get(e=>e.muted&&e.wrapper&&e.base)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.scrollerFade)[0],BDModules.get(e=>e.note&&1===Object.keys(e).length)[0],BDModules.get(e=>e.default&&e.default.Messages)[0].default.Messages],m=Object.assign({},p,this.props.preview.props.settings.state.data);return Tt=Tt||i.timestamp,[xt.createElement("div",{className:"lc-tab"},xt.createElement("div",{class:`${n.flex} ${s.vertical} ${s.justifyStart} ${s.alignStretch} ${s.noWrap} ${r.root}`,style:{flex:"1 1 auto"}},xt.createElement("div",{class:r.topSectionPlaying},xt.createElement("header",{class:r.header},xt.createElement("div",{class:`${r.avatar} ${o.wrapper}`,role:"img",style:{width:"80px",height:"80px"}},xt.createElement("svg",{width:"92",height:"80",viewBox:"0 0 92 80",class:`${o.mask} ${o.svg}`},xt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},xt.createElement("img",{src:t,alt:" ",class:o.avatar})),xt.createElement(At,null))),xt.createElement("div",{class:`${r.headerInfo}`},xt.createElement("div",{class:`${r.nameTag} ${a.nameTag}`},xt.createElement("span",{class:`${r.username} ${r.username}`},e.username),xt.createElement("span",{class:r.discriminator},"#",e.discriminator)),xt.createElement("div",{class:`${n.flex} ${n.horizontal} ${s.justifyStart} ${s.alignStretch} ${s.noWrap} ${r.profileBadges}`,style:{flex:"1 1 auto"}},xt.createElement(It,null)))),xt.createElement("div",{class:r.headerFill},xt.createElement("div",{class:`${i.activityProfile} ${r.activity}`},xt.createElement("h3",{class:`${i.headerTextNormal} ${l.base} ${c.size12}`},h.USER_ACTIVITY_HEADER_PLAYING),xt.createElement("div",{class:i.bodyNormal},(()=>{if(!m["assets.large"])return null;let e=[];return m["assets.large"]&&e.push(xt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${m.application_id}/${m["assets.large"]}.png`,class:`${i.assetsLargeImageProfile} ${m["assets.small"]?i.assetsLargeMaskProfile:""}`})),m["assets.small"]&&e.push(xt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${m.application_id}/${m["assets.small"]}.png`,class:i.assetsSmallImageProfile})),xt.createElement("div",{class:i.assets},e)})(),xt.createElement("div",{class:i.contentImagesProfile,style:{flex:"1 1 auto"}},m.name?xt.createElement("h3",{class:`${i.nameNormal} ${l.base} ${c.size14}`,title:m.name},xt.createElement("span",{class:i.activityName},m.name)):null,m.details?xt.createElement("div",{title:m.title,class:i.details},m.details):null,m.state?xt.createElement("div",{class:i.state},xt.createElement("span",{title:m.state},m.state)):null,(()=>{if(!m["timestamps.start"])return null;let e=Ct(Ft,h);return xt.createElement("div",{class:i.timestamp},xt.createElement(e,{timestamps:{end:null,start:m["timestamps.start"]}}))})()))))),xt.createElement("div",{class:r.body},xt.createElement("div",{class:`${d.scrollerWrap} ${d.scrollerFade}`},xt.createElement("div",{class:d.scroller},xt.createElement("div",{class:r.userInfoSection},xt.createElement("div",{class:r.userInfoSectionHeader},h.NOTE),xt.createElement("div",{class:`${r.note} ${u.note}`},xt.createElement("textarea",{placeholder:h.NOTE_PLACEHOLDER,maxlength:"256",autocorrect:"off",class:BDModules.get(e=>e.scrollbarGhostHairline)[0].scrollbarGhostHairline,style:{height:"40px"},disabled:!0}))),xt.createElement(jt,null)))))),xt.createElement("div",{class:"lc- "})]}}class jt extends xt.Component{render(){let e=[],t=BDModules.get(e=>e.topSectionStreaming)[0],n=BDModules.get(e=>e.default&&e.default.getAccounts)[0].default.getAccounts().filter(e=>1===e.visibility);for(let t of n)e.push(xt.createElement(Rt,{acc:t}));return e.length>0?xt.createElement("div",{class:t.userInfoSection},xt.createElement("div",{class:t.connectedAccounts},e)):null}}class Rt extends xt.Component{render(){let[e,t,n,s,r,o]=[BDModules.get(e=>e.flex&&e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.topSectionStreaming)[0],BDModules.get(e=>e.flowerStarContainer)[0],BDModules.get(e=>e.anchor)[0],BDModules.get(e=>e.default&&e.default.get&&e.default.map)[0].default],a=this.props.acc,i=o.get(a.type);return xt.createElement("div",{class:`${e.flex} ${e.horizontal} ${t.justifyStart} ${t.alignCenter} ${t.noWrap} ${n.connectedAccount}`,style:{flex:"0 1 auto"}},xt.createElement("img",{alt:`Logo ${i.name}`,class:n.connectedAccountIcon,src:i.icon.color||i.icon.white||i.icon.grey}),xt.createElement("div",{class:n.connectedAccountNameInner},xt.createElement("div",{class:n.connectedAccountName},a.name),a.verified?xt.createElement("span",null,xt.createElement("div",{class:`${s.flowerStarContainer} ${n.connectedAccountVerifiedIcon}`,style:{width:"16px",height:"16px"}},xt.createElement("svg",{class:s.flowerStar,width:"16",height:"16",viewBox:"0 0 16 15.2"},xt.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"})),xt.createElement("div",{class:s.childContainer},xt.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 15.2"},xt.createElement("path",{d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z",fill:"#ffffff"}))))):null),xt.createElement("a",{class:`${r.anchor} ${r.anchorUnderlineOnHover}`,rel:"noreferrer noopener",target:"_blank",role:"button",tabindex:"0"},xt.createElement("svg",{class:n.connectedAccountOpenIcon,width:"24",height:"24",viewBox:"0 0 24 24"},xt.createElement("path",{fill:"currentColor",d:"M10 5V3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V14H19V19H5V5H10Z"}),xt.createElement("path",{fill:"currentColor",d:"M21 2.99902H14V4.99902H17.586L9.29297 13.292L10.707 14.706L19 6.41302V9.99902H21V2.99902Z"}))))}}class It extends xt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=BDModules.get(e=>e.topSectionStreaming)[0],n=BDModules.get(e=>e.UserFlags)[0].UserFlags,s=[],r=[];for(let t in n)e.hasFlag(n[t])&&r.push(t);for(let e of r){let n=`profileBadge${e.toLowerCase().replace(/_/g," ").split(" ").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}`;n=n.replace("HypesquadOnline","HypeSquadOnline"),t[n]&&s.push(xt.createElement(_t,{name:n}))}return e.hasPremiumSubscription&&s.push(xt.createElement(_t,{name:"profileBadgePremium"})),s}}class _t extends xt.Component{render(){let e=BDModules.get(e=>e.topSectionStreaming)[0];return xt.createElement("div",{class:e.profileBadgeWrapper},xt.createElement("div",null,xt.createElement("div",{class:"",role:"button",tabindex:"0"},xt.createElement("div",{class:`${e.profileBadge} ${e[this.props.name]}`}))))}}class Ft extends xt.Component{render(){return xt.createElement("div",{className:Tt},this.props.message)}}const Wt=M.React;let zt=BDModules.get(e=>e.contentColumn)[0],Ut=BDModules.get(e=>e.defaultMarginh5)[0],Ht=BDModules.get(e=>e.colorStandard)[0],qt=BDModules.get(e=>e.size32)[0],Gt=BDModules.get(e=>e.scrollbarGhostHairline)[0];const Vt=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,Jt=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Zt=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,Yt=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class Kt extends Wt.Component{constructor(e){super(e)}render(){return zt||(zt=BDModules.get(e=>e.contentColumn)[0]),Ut||(Ut=BDModules.get(e=>e.defaultMarginh5)[0]),Ht||(Ht=BDModules.get(e=>e.colorStandard)[0]),qt||(qt=BDModules.get(e=>e.size32)[0]),Wt.createElement("div",{className:zt.contentColumn+" "+zt.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},Wt.createElement(Se,{text:"Account Infos"}),Wt.createElement("div",null,Wt.createElement("h5",{className:Ht.colorStandard+" "+qt.size14+" "+Ut.h5+" "+Ut.defaultMarginh5},"Profile"),Wt.createElement(tn,{content:this.getProfileValue(),language:"diff"}),Wt.createElement("h5",{className:Ht.colorStandard+" "+qt.size14+" "+Ut.h5+" "+Ut.defaultMarginh5},"Statistics"),Wt.createElement(tn,{content:this.getStatistics(),language:"diff"}),Wt.createElement("h5",{className:Ht.colorStandard+" "+qt.size14+" "+Ut.h5+" "+Ut.defaultMarginh5},"Connected Sessions"),Wt.createElement(tn,{content:this.getSessionValue(),language:"diff"})),Wt.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20}))}getSessionValue(){const e=Zt.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+ active: ${e.active?"Yes":"No"}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=Yt.getCurrentUser(),t=e.createdAt;return`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: https://cdn.discordapp.com/avatars/${e.id}/${e.avatar}.${e.avatar.startsWith("a_")?"gif":"png"}?size=4096\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(Vt.getGuilds()),t=Object.keys(Jt.getRelationships()),n=t.filter(e=>Jt.isFriend(e)),s=t.filter(e=>Jt.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 Qt=BDModules.get(e=>e.highlight)[0],Xt=BDModules.get(e=>e.markup)[0],en=BDModules.get(e=>e.messageContent)[0];class tn extends Wt.Component{render(){return Xt||(Xt=BDModules.get(e=>e.markup)[0]),en||(en=BDModules.get(e=>e.messageContent)[0]),Gt||(Gt=BDModules.get(e=>e.scrollbarGhostHairline)[0]),Qt||(Qt=BDModules.get(e=>e.highlight)[0]),Wt.createElement("div",{class:`${Xt.markup} ${en.messageContent}`},Wt.createElement("pre",null,Wt.createElement("code",{class:`${Gt.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:Qt.highlight(this.props.language,this.props.content).value}})),Wt.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const nn=window.Lightcord.DiscordModules.dispatcher,sn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let rn=BDModules.get(e=>e.default&&e.default.addRelationship)[0],on=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const an={};let ln=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var cn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,nn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,nn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(ln?ln.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=sn.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)||dn(n,"discord.gg/")||dn(n,"discord.com/invite/")||dn(n,"discordapp.com/invite/"))&&(an[e.message.author.id]=!0,N.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),rn||(rn=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),rn.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),on||(on=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),on.default.closePrivateChannel(t.id,!1)))))}};function dn(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 un;const hn=N.removeDa;var pn=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,un=un||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=hn(e.standardSidebarView),n=[];return n.push(`#app-mount .${t} .payment-info .${hn(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${hn(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${hn(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),n.push(`#app-mount .${t} .${hn(BDModules.get(e=>e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${hn(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n}(),un||console.error(new Error("Couldn't find selectors to blur personnal informations.")),B.addStyle("blurPrivate",`\n${un[0]}, ${un[1]}, ${un[2]} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${un[0]}:hover, ${un[1]}:hover, ${un[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,B.removeStyle("blurPrivate"))}},mn=new class{constructor(){this.sideBarOnClick=this.sideBarOnClick.bind(this),this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new he(this.sideBarOnClick),this.showOriginal=this.showOriginal.bind(this)}get root(){const e=B.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=B.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=B.createElement(`
`);return n.append(s),N.onRemoved(s,()=>{M.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(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}sideBarOnClick(e){switch(B.query(".contentRegion-3nDuYy, .content-region").style.display="none",this.root.style.display="",e){case"core":this.renderCoreSettings();break;case"customcss":this.renderCustomCssEditor();break;case"plugins":case"themes":this.renderAddonPane(e);break;case"lightcord":this.renderLightcordSettings();break;case"status":this.renderPresenceSettings();break;case"accountinfo":this.renderAccountInfos()}}onClick(){}onChange(e,t){this.updateSettings(e,t)}updateSettings(e,t){if(u[e]=t,"bda-gs-2"==e&&(t?B.addClass(document.body,"bd-minimal"):B.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?B.addClass(document.body,"bd-minimal-chan"):B.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?Ne.addButton():Ne.removeButton()),"bda-gs-4"==e&&(t?Pe.start():Pe.stop()),"bda-gs-5"==e&&(t?B.addClass(B.query("#app-mount"),"bda-dark"):B.removeClass(B.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&me.inject24Hour(),"bda-gs-7"==e&&(t?pe.injectColoredText():pe.removeColoredText()),"fork-ps-4"==e&&(t?$e.start():$e.stop()),"fork-ps-5"==e&&(t?(q.watchContent("plugin"),q.watchContent("theme")):(q.unwatchContent("plugin"),q.unwatchContent("theme"))),"fork-wp-1"==e&&(N.setWindowPreference("transparent",t),t?N.setWindowPreference("backgroundColor",null):N.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?Ae.startDebugListener():Ae.stopDebugListener()),"fork-dm-1"==e&&(t?Ae.startCopySelector():Ae.stopCopySelector()),"reactDevTools"===e&&(t?Ee.start():Ee.stop()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){ft.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 ft.disable();"lightcord-3"===e&&(t?St.remote.getCurrentWindow().setAlwaysOnTop(!0):St.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?cn.enable():cn.disable()),"lightcord-6"===e&&(t?pn.enable():pn.disable()),this.saveSettings()}async initializeSettings(){u.reactDevTools&&Ee.start(),u["bda-gs-2"]&&B.addClass(document.body,"bd-minimal"),u["bda-gs-3"]&&B.addClass(document.body,"bd-minimal-chan"),u["bda-gs-1"]&&Ne.addButton(),u["bda-gs-4"]&&Pe.start(),u["bda-gs-5"]&&B.addClass(B.query("#app-mount"),"bda-dark"),u["bda-gs-6"]&&me.inject24Hour(),u["bda-gs-7"]&&pe.injectColoredText(),u["fork-ps-4"]&&$e.start(),u["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),u["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),u["lightcord-presence-1"]&&ft.enable(),u["lightcord-3"]&&St.remote.getCurrentWindow().setAlwaysOnTop(!0),u["lightcord-4"]&&cn.enable(),u["lightcord-6"]&&pn.enable(),u["fork-ps-5"]&&(q.watchContent("plugin"),q.watchContent("theme")),u["bda-gs-8"]&&Ae.startDebugListener(),u["fork-dm-1"]&&Ae.startCopySelector(),this.saveSettings()}saveSettings(){Y.setSettingGroup("settings",u),Y.setSettingGroup("rpc",h)}loadSettings(){Object.assign(u,Y.getSettingGroup("settings")),Object.assign(h,Y.getSettingGroup("rpc"))}showOriginal(){M.reactDom.unmountComponentAtNode(this.root),this.root.style.display="none",B.query("."+BDModules.get(e=>e.contentRegion)[0].contentRegion.split(" ")[0]+", .content-region").style.display=""}renderSidebar(){const e=document.querySelectorAll("[class*='side-'] > [class*='item-']");for(const t of e)t.removeEventListener("click",this.showOriginal),t.addEventListener("click",this.showOriginal);this.sidebar.render()}get coreComponent(){return M.react.createElement(De,{contentColumn:!0,fade:!0,dark:!0},M.react.createElement(Ie,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings}),M.react.createElement(we,{key:"tools"}))}get lightcordComponent(){return M.react.createElement(De,{contentColumn:!0,fade:!0,dark:!0},M.react.createElement(Ie,{key:"lspannel",onChange:this.onChange,sections:this.lightcordSettings}),M.react.createElement(we,{key:"tools"}))}get PresenceComponent(){return M.react.createElement(De,{contentColumn:!0,fade:!0,dark:!0},M.react.createElement(Dt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings}),M.react.createElement(we,{key:"tools"}))}get AccountInfosComponent(){return M.react.createElement(De,{contentColumn:!0,fade:!0,dark:!0},M.react.createElement(Kt,{key:"lapannel"}),M.react.createElement(we,{key:"tools"}))}get customCssComponent(){return M.react.createElement(De,{contentColumn:!0,fade:!0,dark:!0},M.react.createElement(We,{key:"csseditor"}),M.react.createElement(we,{key:"tools"}))}renderCoreSettings(){const e=this.root;if(!e)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");M.reactDom.render(this.coreComponent,e)}renderLightcordSettings(){const e=this.root;if(!e)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");M.reactDom.render(this.lightcordComponent,e)}renderPresenceSettings(){const e=this.root;if(!e)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");M.reactDom.render(this.PresenceComponent,e)}renderAccountInfos(){const e=this.root;if(!e)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");M.reactDom.render(this.AccountInfosComponent,e)}renderCustomCssEditor(){const e=this.root;if(!e)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");M.reactDom.render(this.customCssComponent,e)}renderAddonPane(e){if(!this.root)return N.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");class t extends M.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s",""),this.onChange=this.onChange.bind(this)}componentDidMount(){L.on(`${this.prefix}-reloaded`,this.onChange),L.on(`${this.prefix}-loaded`,this.onChange),L.on(`${this.prefix}-unloaded`,this.onChange)}componentWillUnmount(){L.off(`${this.prefix}-reloaded`,this.onChange),L.off(`${this.prefix}-loaded`,this.onChange),L.off(`${this.prefix}-unloaded`,this.onChange)}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;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});const s="plugins"===e?Object.values(v):Object.values(b);return M.reactDom.render(M.react.createElement(t,{type:e,onChange:this.sideBarOnClick},M.react.createElement(ut,{type:e,list:s})),this.root)}};class gn extends M.reactComponent{render(){return M.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"},M.react.createElement("metadata",null),M.react.createElement("defs",null,M.react.createElement("filter",{id:"shadow1"},M.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),M.react.createElement("filter",{id:"shadow2"},M.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),M.react.createElement("filter",{id:"shadow3"},M.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),M.react.createElement("g",null,M.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"}),M.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"}),M.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 fn(){return(fn=Object.assign||function(e){for(var t=1;t{!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();let n=(n,s)=>{if(Cn[n]){const s=Cn[n];Mn(t,s,e.filename)}else yn()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+n,{headers:{"User-Agent":St.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return function(e,t,n){t=t.toString("utf8").split(/[^\w\d]+/g);let s=!1;for(let e of t){for(let t of["token","email","phone","MFA","2fa","process","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())){s="token stealer/virus";break}if(s)break}if(!s){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(s="obfuscation/hidden code"),!s){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(s)break;s=!!n.test(e)&&"obfuscation/hidden code"}}}if(!s)return;Cn[e]={suspect:!0,name:xn[e].split("/").pop(),type:xn[e].endsWith(".js")?"Plugin":"Theme",harm:s},console.log(`Found potentially dangerous ${Cn[e].type.toLowerCase()}: ${Cn[e].name}`),Mn(n,Cn[e],Cn[e].name)}(n,s,t);const o=await r.json();Cn[n]=o,Mn(t,o,e.filename)}).catch(()=>{})};if(wn[e.url])return n(wn[e.url]);yn()(e.url,{headers:{"User-Agent":St.remote.getCurrentWebContents().userAgent}}).then(t=>{if(200!==t.status)throw new Error("File doesn't exist.");const s=En.createHash("sha256");let r=Buffer.alloc(0);t.body.on("data",e=>{r=Buffer.concat([r,e]),s.update(e)}),t.body.on("end",()=>{const t=s.digest("hex");wn[e.url]=t,xn[t]=e.url,n(t,r)})}).catch(()=>{})}(e,t)})}start(){}};const xn={};let Dn=BDModules.get(e=>e.flowerStarContainer)[0],kn=BDModules.get(e=>e.childContainer)[0];function Mn(e,t,n){const s=document.getElementById(e);if(s&&!(s.childNodes.length>0))if(Dn||(Dn=BDModules.get(e=>e.flowerStarContainer)[0]),kn||(kn=BDModules.get(e=>e.childContainer)[0]),console.log(t),t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let r of s.children)"A"===r.tagName?r.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),N.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:()=>{St.remote.shell.openExternal(r.href)}})}):["div"].includes(r.tagName.toLowerCase())&&e(r)};e(s.parentNode)}catch(e){console.error(e)}M.reactDom.render(M.react.createElement(ue,{text:t.type+" "+t.name+" is potentially dangerous."},M.react.createElement("div",{className:Dn.flowerStarContainer,style:{width:"16px",height:"16px"}},M.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 40 32"},M.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 t.official?(s.parentNode.style.borderColor="#4087ed",M.reactDom.render(M.react.createElement(ue,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},M.react.createElement("div",{className:Dn.flowerStarContainer,style:{width:"16px",height:"16px"}},M.react.createElement("svg",{className:Dn.flowerStar,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},M.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"})),M.react.createElement("div",{className:kn.childContainer},M.react.createElement("svg",{"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},M.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"}))))),s)):(s.parentNode.style.borderColor="#4087ed",M.reactDom.render(M.react.createElement(ue,{text:t.type+" "+t.name+" is certified by Lightcord."},M.react.createElement("div",{className:Dn.flowerStarContainer,style:{width:"16px",height:"16px"}},M.react.createElement("svg",{className:Dn.flowerStar,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},M.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"})),M.react.createElement("div",{className:kn.childContainer},M.react.createElement("svg",{"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},M.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),s))}function Bn(){return(Bn=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];class $n extends React.Component{render(){const e=this.props;return delete e.href.target,console.log(e),React.createElement(e.Anchor,Pn({href:"/users/"+e.user.id},e.href,{onClick:t=>{t.preventDefault(),Ln||(Ln=BDModules.get(e=>e.default&&e.default.open&&e.default.fetchMutualFriends)[0]),Ln.default.open(e.user.id)}}),React.createElement("svg",Pn({viewBox:"0 0 31.3 29.5"},e.svg,{height:"100%"}),React.createElement("path",{d:"M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1",fill:"rgba(227,6,19,.6)"}),React.createElement("path",{d:"M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z",fill:"#e30613"})))}}function An(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))}const Tn={};let On=[];var jn=new class{constructor(){this._cache={badges:{}}}get cache(){return this._cache}set cache(e){return"object"!=typeof e||"object"!=typeof this._cache?this._cache=e:this._cache=Object.assign(this._cache,e)}async delete(){return BdApi.showToast("Deleting all infos about you on Lightcord Servers...",{type:"warn"}),Rn(_n.delete,"delete").then(async e=>{if(200!==e.status)throw BdApi.showToast("An error occured, couldn't delete informations. See console for more infos",{type:"error"}),new Error(`Couldn't delete all informations: ${e.status+" "+e.statusText+" "+await e.text()}`);return console.info("Succesfully deleted informations."),BdApi.showToast("Succesfully deleted informations",{type:"success"}),window.Lightcord.Api.Authorization=null,e.json()}).catch(e=>{throw BdApi.showToast("An error occured, couldn't delete informations. See console for more infos",{type:"error"}),new Error(`Couldn't delete all informations: ${e.stack}`)})}async getBadges(e){if(this.cache.badges[e])return this.cache.badges[e];if(Tn[e])return Tn[e];let t;const n=new Promise(e=>t=e);Tn[e]=n;const s=[];for(let t of In.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{On.push([e,t]),setImmediate(()=>{let e=On;0!==e.length&&(On=[],Rn(_n.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();console.log(n);for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{console.error(t),e.forEach(e=>{e[1]([])})}))})});for(let e of r)In.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(In.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 Tn[e],s}};const Rn=function(e,t,n){return console.log(`Sending request on ${e} with method ${t} and body`,n),yn()(`${In.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}})},In={SERVER_URL:"http://127.0.0.1",badges:[{name:"Lightcord User",id:"01cfa7b0-7cdb-4b0e-8258-9c6a78235c93",defaultUsers:[],scopes:["user"],component:$n},{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:[],scopes:[],component:Nn,href:"https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"}]},_n={badges:"/users/badges",delete:"/delete"},Fn={EmojiRegex://g};let Wn=BDModules.get(e=>e.CustomEmoji)[0],zn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],Un=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],Hn=BDModules.get(e=>e.getAutocompleteOptions)[0],qn=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],Gn=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],Vn=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],Jn=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);new class{constructor(){this.init()}async init(){if(Un||(Un=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),Hn||(Hn=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),qn||(qn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),Gn||(Gn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),Vn||(Vn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),Jn||(Jn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),Un&&Hn&&qn&&Gn&&Vn&&Jn){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",Hn);const e=Hn.getAutocompleteOptions;Hn.getAutocompleteOptions=function(t,n,s,r,o){const a=e.call(this,...arguments);return a.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return ts(n),n},queryResults:e=>qn.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>Zn(e,t,r.emojis,n,s,Gn.default.Messages.EMOJI_MATCHING,Gn.default.Messages.EMOJI,Un.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?Vn.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+">"}},a}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!M.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=N.monkeyPatch(M.MessageComponent,"default",{before:e=>{if(!N.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=N.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=Fn.EmojiRegex.exec(e),r){o=!0,zn||(zn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=zn.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?(Wn||(Wn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Wn.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)}};function Zn(e,t,n,s,r,o,a,i,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(i,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[Yn(o,a,e,c),d]}function Yn(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(Un.default.Title,{title:r},r)}Yn.displayName="renderHeader";let Kn=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],Qn=Kn&&Kn.default.isEmojiDisabled,Xn=!1,es=!1;function ts(e){Xn=e,es||(Kn||(Kn=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),Kn&&(Qn||(Qn=Kn.default.isEmojiDisabled),es=!0,Kn.default.isEmojiDisabled=function(e){return Xn?!(!e.surrogates&&!e.diversity):Qn.call(this,...arguments)}))}function ns(){}ns.prototype.setConfig=function(e){Object.assign(f,e)},ns.prototype.init=async function(){if(!Array.prototype.flat)return void N.alert("Not Supported","BetterDiscord v"+i+" does not support this old version ("+o+") of Discord. Please update your Discord installation before proceeding.");if(f.version
Please download the latest version from GitHub");if(window.ED)return void N.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 N.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");const e=f.updater?f.updater.LatestVersion:f.latestVersion;e>f.version&&N.showConfirmationModal("Update Available",[`There is an update available for BandagedBD's Injector (${e}).`,"You can either update and restart now, or later."],{confirmText:"Update Now",cancelText:"Maybe Later",onConfirm:async()=>{const e=()=>{N.alert("Could Not Update","Unable to update automatically, please download the installer and reinstall normally.

Download Installer")};try{if(!await this.updateInjector())return e();const t=n(0).remote.app;t.relaunch(),t.exit()}catch(t){e()}}}),N.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),M.initialize(),N.log("Startup","Updating Settings"),mn.initializeSettings(),N.log("Startup","Loading Plugins"),await A.loadPlugins(),N.log("Startup","Loading Themes"),await O.loadThemes(),B.addStyle("customcss",atob(Y.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){u["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),Sn.start(),N.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),N.log("Startup","Initializing Main Observer"),this.initObserver(),u["fork-ps-1"]&&(N.log("Startup","Collecting Startup Errors"),N.showContentErrors({plugins:m,themes:g}));const t=Y.getBDData("version");i>t&&(l&&this.showChangelogModal(l),Y.setBDData("version",i));if(N.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),N.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),N.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),N.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),N.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),N.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),N.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),f.haveInstalledDefault){let e=N.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 s=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");s&&(s.innerHTML='\n \n \n \n')},ns.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=M.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=M.guildClasses.listItem.split(" ")[0],o=M.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(f.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},ns.prototype.injectExternals=async function(){await B.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},ns.prototype.initSettings=function(){if(Y.initialize(),Y.getSettingGroup("settings")||Y.getSettingGroup("rpc")){mn.loadSettings();for(const e in d)null==u[e]&&(u[e]=d[e],mn.saveSettings())}else Y.getSettingGroup("settings")||Object.assign(u,d),Y.getSettingGroup("rpc")||Object.assign(h,p),mn.saveSettings()},ns.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer,BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks];s.classList.contains(r)&&(s.getElementsByClassName("guild-settings-base-section").length&&s.setAttribute("layer-id","server-settings"),s.getElementsByClassName(o).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"),document.getElementById("bd-settings-sidebar")||mn.renderSidebar())),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},ns.prototype.showChangelogModal=function(e={}){return N.showChangelogModal(e)},ns.prototype.alert=function(e,t){return N.alert(e,t)},ns.prototype.patchSocial=function(){if(this.socialPatch)return;const e=S(e=>"TabBar"==e.displayName),t=S(e=>"Anchor"==e.displayName);e&&(this.socialPatch=N.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(M.React.createElement(ue,{color:"black",side:"top",text:"Lightcord"},M.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},M.React.createElement(bn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(M.React.createElement(ue,{color:"black",side:"top",text:"BandagedBD"},M.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},M.React.createElement(gn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,r,o]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${f.hash?f.hash.substring(0,7):f.branch})`,l=[M.react.createElement("div",{className:`${s} ${r.size12}`},`Lightcord ${St.remote.getGlobal("BuildInfo").version} `,M.react.createElement("span",{className:o+" da-versionHash"},`(${(St.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),M.react.createElement("div",{className:`${s} ${r.size12}`},`BBD ${i} `,M.react.createElement("span",{className:o+" 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 ss(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;const r=S(e=>"Anchor"==e.displayName);jn.getBadges(t.id).then(e=>{e.forEach(e=>{const o={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(o.user=t)}),e.href||(o.Anchor=r,o.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const a=M.React.createElement(ue,{color:"black",side:"top",text:e.name},e.href?M.react.createElement(r,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},M.React.createElement(e.component,o)):M.React.createElement(e.component,o)),i=document.createElement("div");M.reactDom.render(a,i),i.childNodes.forEach(e=>{s.appendChild(e)})})})})}ns.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=D("wrapper","unreadMentionsBar"),t=D("guildsError","selected"),n=D("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=M.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=N.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;return t.props.className+=" bd-guild",n.unread&&(t.props.className+=" bd-unread"),n.selected&&(t.props.className+=" bd-selected"),n.audio&&(t.props.className+=" bd-audio"),n.video&&(t.props.className+=" bd-video"),n.badge&&(t.props.className+=" bd-badge"),n.animatable&&(t.props.className+=" bd-animatable"),t}}}))},ns.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=S(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=N.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}}))},ns.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=k("Guilds"),t=D("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=N.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},ns.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];S(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=N.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0]||null,n=N.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=An();n.push(M.react.createElement("div",{id:"certified-"+s})),Sn.patch(t,"certified-"+s)}}))},ns.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=D("MessageTimestamp"),t=S(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=N.monkeyPatch(e,"default",{after:e=>{const n=N.getNestedProp(e.methodArguments[0],"message.author"),s=N.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(M.React.createElement(ue,{color:"black",side:"top",text:"BandagedBD Developer"},M.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},M.React.createElement(gn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(M.React.createElement(ue,{color:"black",side:"top",text:"Lightcord Developer"},M.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},M.React.createElement(bn,{size:"16px",className:"bd-logo"}))));const r=An();s.push(M.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),ss(r,n,!0)}}))},ns.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=k("MemberListItem"),t=S(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=N.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=N.getNestedProp(e.thisObject,"props.user"),s=N.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(M.React.createElement(ue,{color:"black",side:"top",text:"BandagedBD Developer"},M.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},M.React.createElement(gn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(M.React.createElement(ue,{color:"black",side:"top",text:"Lightcord Developer"},M.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},M.React.createElement(bn,{size:"32px",className:"bd-logo"}))));const r=An();s.push(M.React.createElement("div",{id:"badges-"+r})),ss(r,n,!1)}}))},ns.prototype.updateInjector=async function(){const e=Y.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),a=n(9),i=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",d=s.resolve(i,"injector.zip"),u=s.resolve(i,"BetterDiscordApp-injector");N.log("InjectorUpdate","Downloading "+c);let h=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(d,e))&&await new Promise(e=>t.rename(d,`${d}.bak${Math.round(performance.now())}`,e)),N.log("InjectorUpdate","Writing "+d),t.writeFile(d,r,t=>e(!t))})});if(!h)return h;await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e));const p=await new Promise(e=>o.open(d,{lazyEntries:!0},(t,n)=>e(n)));p.on("entry",(function(e){if(e.fileName.endsWith("/"))return p.readEntry();N.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(i,e.fileName);a.sync(s.dirname(n)),p.openReadStream(e,(function(e,s){if(e)return h=!1;s.on("end",(function(){p.readEntry()})),s.pipe(t.createWriteStream(n))}))})),p.readEntry(),await new Promise(e=>p.once("end",e));const m=s.resolve(i,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,m,n)),N.log("InjectorUpdate",`Renaming ${s.basename(u)} to ${l}`),h=await new Promise(n=>t.rename(u,e,e=>n(!e))),h?h?(await new Promise(e=>r(m,e)),await new Promise(e=>t.unlink(d,e)),N.log("InjectorUpdate","Injector Updated!"),h):(N.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(u,e)),await new Promise(n=>t.rename(m,e,n)),h):(N.err("InjectorUpdate","Failed to rename the final directory"),h)};var rs=new ns;const os={get React(){return M.React},get ReactDOM(){return M.ReactDom},get ReactComponent(){return M.ReactComponent},get WindowConfigFile(){return N.WindowConfigFile},get settings(){return c},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 N.getAllWindowPreferences()},getWindowPreference:function(e){return N.getWindowPreference(e)},setWindowPreference:function(e,t){return N.setWindowPreference(e,t)},injectCSS:function(e,t){B.addStyle(B.escapeID(e),t)},clearCSS:function(e){B.removeStyle(B.escapeID(e))},linkJS:function(e,t){B.addScript(B.escapeID(e),t)},unlinkJS:function(e){B.removeScript(B.escapeID(e))},getPlugin:function(e){return v.hasOwnProperty(e)?v[e].plugin:null},getCore:function(){return N.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),rs},alert:function(e,t){return N.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return N.showConfirmationModal(e,t,n)},showToast:function(e,t={}){N.showToast(e,t)},findModule:function(e){return M.WebpackModules.find(e)},findAllModules:function(e){return M.WebpackModules.findAll(e)},findModuleByProps:function(...e){return M.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return M.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return M.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),M.getInternalInstance(e)},loadData:function(e,t){return Y.getPluginData(e,t)}};os.getData=os.loadData,os.saveData=function(e,t,n){return Y.setPluginData(e,t,n)},os.setData=os.saveData,os.deleteData=function(e,t){return Y.deletePluginData(e,t)},os.monkeyPatch=function(e,t,n){return N.monkeyPatch(e,t,n)},os.onRemoved=function(e,t){return N.onRemoved(e,t)},os.suppressErrors=function(e,t){return N.suppressErrors(e,t)},os.testJSON=function(e){return N.testJSON(e)},os.isPluginEnabled=function(e){return!!y[e]},os.isThemeEnabled=function(e){return!!E[e]},os.isSettingEnabled=function(e){return!!u[e]},os.enableSetting=function(e){return mn.onChange(e,!0)},os.disableSetting=function(e){return mn.onChange(e,!1)},os.toggleSetting=function(e){return mn.onChange(e,!u[e])},os.getBDData=function(e){return Y.getBDData(e)},os.setBDData=function(e,t){return Y.setBDData(e,t)};const as=(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)}};os.Plugins=as(y,v,A),os.Themes=as(E,b,O);var is=os;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 ls=(e,t)=>{Object.defineProperty(window,e,{get:()=>(N.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},cs=Object.keys(s);for(const e of cs)ls(e,s[e]);ls("BDV2",M),ls("pluginModule",A),ls("themeModule",O),ls("Utils",N),ls("BDEvents",L),ls("settingsPanel",mn),ls("DataStore",Y),ls("ContentManager",q),ls("ClassNormalizer",$e),window.BdApi=is,ls("mainCore",rs);class ds{constructor(e){rs.setConfig(e)}init(){rs.init()}}n(10)}]); \ 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=11)}([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("node-fetch")},function(e,t){e.exports=require("crypto")},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){e.exports=require("request")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return h})),n.d(s,"currentDiscordVersion",(function(){return p})),n.d(s,"minSupportedVersion",(function(){return m})),n.d(s,"bbdVersion",(function(){return g})),n.d(s,"LCChanelog",(function(){return f})),n.d(s,"bbdChangelog",(function(){return b})),n.d(s,"settings",(function(){return v})),n.d(s,"defaultCookie",(function(){return y})),n.d(s,"settingsCookie",(function(){return E})),n.d(s,"settingsRPC",(function(){return C})),n.d(s,"defaultRPC",(function(){return w})),n.d(s,"bdpluginErrors",(function(){return S})),n.d(s,"bdthemeErrors",(function(){return x})),n.d(s,"bdConfig",(function(){return D})),n.d(s,"bdthemes",(function(){return k})),n.d(s,"bdplugins",(function(){return M})),n.d(s,"pluginCookie",(function(){return B})),n.d(s,"themeCookie",(function(){return N}));var r=n(0),o=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=>{if(e.remove&&e.set&&e.clear&&e.get&&!e.sort)return null;if(!e.getToken&&!e.getEmail&&!e.showToken)return e;return new Proxy(e,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t?()=>"puppet11112@gmail.com":"showToken"==t?()=>!0:e[t]}})},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);if(r&&n(r))return t(r)}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)):o&&n(o)&&s.push(t(o))}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"))]}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("cxfA2dT")}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(v).reduce((t,n)=>{const s=v[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const a=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete a.m.__extra_id__,delete a.c.__extra_id__;const i=e=>{for(const t in a.c)if(a.c.hasOwnProperty(t)){const n=a.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};var l=i,c=e=>{const t=[];for(const n in a.c)if(a.c.hasOwnProperty(n)){const s=a.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},d=(...e)=>i(t=>e.every(e=>void 0!==t[e])),u=e=>i(t=>t.displayName===e);const h="0.0.306",p=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",m="0.3.0",g="0.3.4",f={description:"Lightcord's changelog",changes:[{title:"What's New?",items:["Lightcord is now available !","We removed emotes. That's sad for people who were actually using it, but it was leading to more loading time and some basic words were emote."]}],image:"https://i.imgur.com/sfNhqwP.png",title:"Lightcord",subtitle:"v"+r.remote.getGlobal("BuildInfo").version,footer:function(){const e=u("Text"),t=d("push","update","pop","popWithKey");if(!e||!t)return null;const n=l(e=>"Anchor"==e.displayName),s=d("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},r=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),o.joinLC()},a=n?o.React.createElement(n,{onClick:r},"Join our Discord Server."):o.React.createElement("a",{className:`${s.anchor} ${s.anchorUnderlineOnHover}`,onClick:r},"Join our Discord Server.");return o.React.createElement(e,{size:e.Sizes.SMALL,color:e.Colors.STANDARD},"Need support? ",a)}()},b={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 Glasscord.","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`."]}]},v={"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"},"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"},"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).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personnal Informations":{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 Internal Developer Options. This allow the "Experiments" tab and the "Developer Options" tab. (must close and reopen settings)',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dm 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"},"Always-on-Top":{id:"lightcord-3",info:"Enable window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},y={"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-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},E={},C={},w={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},S=[],x=[],D=Object.create(BetterDiscordConfig),k={},M={},B={},N={};class L{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(L.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 a=(o-s)/n;a>1&&(a=1);const i=e(a);t(i),a<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("."),a=n&&s;s||(s=n);const i=a?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,i);const l=()=>{e.removeEventListener(r,i)};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("."),a=n&&s;s||(s=n);const i=a?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,i))}:function(t){s(t),e.removeEventListener(r,i)};e.addEventListener(r,i);const l=()=>{e.removeEventListener(r,i)};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 a=this.listeners[s]||[],i=n?a.filter(r):a.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:a=!1,silent:i=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(i||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const d=e[t],u=()=>{i||console.log("unpatch",t,"of",c),e[t]=d};return e[t]=function(){const n={thisObject:this,methodArguments:arguments,cancelPatch:u,originalMethod:d,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=P.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&P.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&P.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return a&&u(),n.returnValue},Object.assign(e[t],d),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=d,e[t].toString=function(){return d.toString()}),u}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=a.some(t=>t.contains(e));(i||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:P.screenWidth-s-240,a=n?n.offsetHeight:80,i=document.createElement("div");i.classList.add("bd-toasts"),i.style.setProperty("left",s+"px"),i.style.setProperty("width",o+"px"),i.style.setProperty("bottom",a+"px"),document.querySelector("#app-mount").appendChild(i)}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=L.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",()=>{L.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{L.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),L.query("#app-mount").append(o);const a=[];return{close:()=>{L.addClass(o,"closing"),setTimeout(()=>{o.remove(),a.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{a.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=L.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 a(e){const t=L.createElement('
');for(const n of e){const e=L.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(),P.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const i=[a(e),a(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&L.removeClass(t,"selected"),L.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(i[L.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{L.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{L.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),L.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=d("push","update","pop","popWithKey"),n=d("fixed","improved"),s=u("Text"),r=d("Child"),a=d("Tags","default"),i=l(e=>e.defaultProps&&0==e.defaultProps.selectable),c=d("defaultRules","parse");if(!(i&&t&&n&&s&&r&&a&&c))return;const{image:h="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:p="",changes:m=[],title:f="BandagedBD",subtitle:b=`v${g}`,footer:v}=e,y=o.React.createElement,E=[y("img",{src:h})];p&&E.push(y("p",null,c.parse(p)));for(let e=0;ey("li",null,c.parse(e))));E.push(o)}const C=function(){return y(r.Child,{grow:1,shrink:1},y(a.default,{tag:a.Tags.H4},f),y(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},b))},w=()=>{const e=l(e=>"Anchor"==e.displayName),n=d("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},a=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),o.joinBD2()},i=e?y(e,{onClick:a},"Join our Discord Server."):y("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:a},"Join our Discord Server."),c=y(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return y(r.Child,{grow:1,shrink:1},v||c)};return t.push((function(e){return y(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:C,renderFooter:w,children:E},e))}))}static showConfirmationModal(e,t,n={}){const s=d("push","update","pop","popWithKey"),r=u("Markdown"),a=l(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key());if(!s||!a||!r)return P.alert(e,t);const i=()=>{},{onConfirm:c=i,onCancel:h=i,confirmText:p="Okay",cancelText:m="Cancel",danger:g=!1,key:f}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?o.React.createElement(r,null,e):e),s.push(a,{header:e,children:t,red:g,confirmText:p,cancelText:m,onConfirm:c,onCancel:h},f)}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}P.showToast=P.suppressErrors(P.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=P;const $=n(5);var A=new class extends ${dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class T{get folder(){return V.pluginsFolder}}T.prototype.loadPlugins=async function(){this.loadPluginData(),S.splice(0,0,...await V.loadPlugins());const e=Object.keys(M);for(let t=0;tt.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){E["fork-ps-1"]&&P.showContentErrors({plugins:[e]})}P.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),E["fork-ps-2"]&&P.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),A.dispatch("plugin-loaded",n.getName())},T.prototype.unloadPlugin=function(e){const t=Object.values(M).find(t=>t.filename==e)||M[e];if(!t)return;const n=t.plugin.getName();B[n]&&this.disablePlugin(n,!0);const s=V.unloadContent(M[n].filename,"plugin");if(delete M[n],s)return E["fork-ps-1"]&&P.showContentErrors({plugins:[s]}),E["fork-ps-2"]&&P.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),P.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);P.log("ContentManager",`${n} was unloaded.`),E["fork-ps-2"]&&P.showToast(`${n} was unloaded.`,{type:"success"}),A.dispatch("plugin-unloaded",n)},T.prototype.delete=function(e){const t=Object.values(M).find(t=>t.filename==e)||M[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(V.pluginsFolder,t.filename);n(2).unlinkSync(s)},T.prototype.reloadPlugin=async function(e){const t=Object.values(M).find(t=>t.filename==e)||M[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=B[n];s&&this.stopPlugin(n,!0);const r=await V.reloadContent(M[n].filename,"plugin");if(r)return E["fork-ps-1"]&&P.showContentErrors({plugins:[r]}),E["fork-ps-2"]&&P.showToast(`${n} could not be reloaded.`,{type:"error"}),P.err("ContentManager",`${n} could not be reloaded.`,r);M[n].plugin.load&&"function"==typeof M[n].plugin.load&&M[n].plugin.load(),s&&this.startPlugin(n,!0),P.log("ContentManager",`${n} v${M[n].plugin.getVersion()} was reloaded.`),E["fork-ps-2"]&&P.showToast(`${n} v${M[n].plugin.getVersion()} was reloaded.`,{type:"success"}),A.dispatch("plugin-reloaded",n)},T.prototype.reload=function(e){return this.reloadPlugin(e)},T.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(M).find(t=>t.filename==e)||M[e];if(!t)return;const s=n(1).resolve(V.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},T.prototype.updatePluginList=function(){const e=V.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},T.prototype.loadPluginData=function(){const e=Q.getSettingGroup("plugins");e&&Object.assign(B,e)},T.prototype.savePluginData=function(){Q.setSettingGroup("plugins",B)},T.prototype.newMessage=function(){const e=Object.keys(M);for(let t=0;tt.filename==e);P.log("ContentManager",`${n.name} v${n.version} was loaded.`),E["fork-ps-2"]&&P.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),A.dispatch("theme-loaded",n.name)},j.prototype.unloadTheme=function(e){const t=Object.values(k).find(t=>t.filename==e)||k[e];if(!t)return;const n=t.name;N[n]&&this.disableTheme(n,!0);const s=V.unloadContent(k[n].filename,"theme");if(delete k[n],s)return E["fork-ps-1"]&&P.showContentErrors({themes:[s]}),E["fork-ps-2"]&&P.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),P.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);P.log("ContentManager",`${n} was unloaded.`),E["fork-ps-2"]&&P.showToast(`${n} was unloaded.`,{type:"success"}),A.dispatch("theme-unloaded",n)},j.prototype.delete=function(e){const t=Object.values(k).find(t=>t.filename==e)||k[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(V.pluginsFolder,t.filename);n(2).unlinkSync(s)},j.prototype.reloadTheme=async function(e){const t=Object.values(k).find(t=>t.filename==e)||k[e];if(!t)return this.loadTheme(e);const n=t.name,s=await V.reloadContent(k[n].filename,"theme");if(N[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return E["fork-ps-1"]&&P.showContentErrors({themes:[s]}),E["fork-ps-2"]&&P.showToast(`${n} could not be reloaded.`,{type:"error"}),P.err("ContentManager",`${n} could not be reloaded.`,s);P.log("ContentManager",`${n} v${k[n].version} was reloaded.`),E["fork-ps-2"]&&P.showToast(`${n} v${k[n].version} was reloaded.`,{type:"success"}),A.dispatch("theme-reloaded",n)},j.prototype.reload=function(e){return this.reloadTheme(e)},j.prototype.edit=function(e){const t=Object.values(k).find(t=>t.filename==e)||k[e];if(!t)return;const s=n(1).resolve(V.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},j.prototype.updateThemeList=function(){const e=V.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},j.prototype.loadThemeData=function(){const e=Q.getSettingGroup("themes");e&&Object.assign(N,e)},j.prototype.saveThemeData=function(){Q.setSettingGroup("themes",N)};var R=new j;const I=window.require,_=n(1),F=n(2),W=n(6).Module;W.globalPaths.push(_.resolve(n(0).remote.app.getAppPath(),"node_modules"));class U extends Error{constructor(e){super(e),this.name="MetaError"}}const z=W._extensions[".js"],H=W._extensions[".css"]?W._extensions[".css"]:()=>null,q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,G=/^\\@/;var V=new class{constructor(){this.timeCache={},this.watchers={},W._extensions[".js"]=this.getContentRequire("plugin"),W._extensions[".css"]=this.getContentRequire("theme")}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=F.realpathSync(_.resolve(D.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=F.realpathSync(_.resolve(D.dataPath+"themes/")))}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]=F.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{F.statSync(_.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?O.unloadPlugin(r):R.unloadTheme(r)}if(!F.statSync(_.resolve(n,r)).isFile())return;const o=F.statSync(_.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 O.loadPlugin(r):await R.loadTheme(r)),"change"==e&&(t?await O.reloadPlugin(r):await R.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 U("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 U("META was not found.");const s=P.testJSON(n);if(!s)throw new U("META could not be parsed.");if(!s.name)throw new U("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(G,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?z:H;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,a=_.resolve(o,_.basename(r));if(!F.existsSync(a)||r!==F.realpathSync(a))return Reflect.apply(s,this,arguments);let i=F.readFileSync(r,"utf8");i=P.stripBOM(i);const l=F.statSync(r),c=n.extractMeta(i);if(c.filename=_.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=i,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),i=`module.exports = ${JSON.stringify(c)};`),t){e._compile(i,e.filename),!P.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,i=""):i+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(i,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;try{I(_.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=I(_.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=P.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete M[r.plugin.getName()],M[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 k[r.name],k[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete I.cache[I.resolve(_.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{I.cache[I.resolve(_.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=F.readdirSync(s),o=Object.values(t?M:k),a=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)&&F.statSync(_.resolve(s,e)).isFile()),removed:a}}async loadAllContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=F.readdirSync(s);for(const t of o){if(!F.statSync(_.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")}};const J=window.require,Z=n(2),Y=n(1),K=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var Q=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={}}initialize(){try{Z.existsSync(this.BDFile)||Z.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(Z.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!Z.existsSync(this.settingsFile))return;let t=J(this.settingsFile);Z.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[K]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),P.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=Y.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=Y.resolve(D.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=Y.resolve(D.dataPath,"bdsettings.json"))}getPluginFile(e){return Y.resolve(V.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[K][e]||null}setSettingGroup(e,t){this.data.settings[K][e]=t,Z.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,Z.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:Z.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(Z.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,Z.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],Z.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};class X extends o.reactComponent{constructor(e){super(e)}render(){return o.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class ee extends o.reactComponent{constructor(e){super(e)}render(){return o.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class te extends o.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return o.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 ne extends o.reactComponent{constructor(e){super(e);const t=document.querySelector("[class*=side-] > [class*=selected]");t&&(this.scn=t.className);const n=document.querySelector("[class*=side-] > [class*='item-']:not([class*=selected])");n&&(this.nscn=n.className);const s=document.querySelectorAll("[class*='side-'] > [class*='item-']");for(const e of s)e.addEventListener("click",()=>{this.setState({selected:null})});this.setInitialState(),this.onClick=this.onClick.bind(this),this.setSelected=this.setSelected.bind(this)}setInitialState(){const e=this;e.state={selected:null,items:e.props.items};const t=e.props.items.find(e=>e.selected);t&&(e.state.selected=t.id)}render(){const e=this,{headerText:t}=e.props,{items:n,selected:s}=e.state;return o.react.createElement("div",null,o.react.createElement(X,null),o.react.createElement(ee,{text:t,button:this.props.headerButton}),n.map(t=>{const{id:n,text:r}=t;return o.react.createElement(te,{key:n,selected:s===n,text:r,id:n,onClick:e.onClick})}))}setSelected(e){e.target.className=this.scn}onClick(e){const t=document.querySelector("[class*=side] > [class*=selected]");t&&(t.removeEventListener("click",this.setSelected),t.addEventListener("click",this.setSelected),t.className=this.nscn),this.setState({selected:null}),this.setState({selected:e}),this.props.onClick&&this.props.onClick(e)}}const se=o.React;class re extends se.Component{render(){const e=this.props.size||"18px";return se.createElement("svg",{viewBox:"0 0 24 24",fill:"#FFFFFF",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},se.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),se.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"}))}}let oe,ae;function ie(){return oe||(oe=d("tooltip","tooltipBlack"))}function le(){return ae||(ae=d("layer","layerContainer"))}const ce=function(e){const t=e[0].toUpperCase()+e.slice(1),n=ie()[`tooltip${t}`];return n||null},de=function(e){return!!ce(e)},ue=function(e){return`${e}px`};class he{constructor(e,t,n={}){const{style:s="black",side:r="top",preventFlip:o=!1,disabled:a=!1}=n;if(this.node=e instanceof jQuery?e[0]:e,this.label=t,this.style=s.toLowerCase(),this.side=r.toLowerCase(),this.preventFlip=o,this.disabled=a,!de(this.side))return P.err("EmulatedTooltip",`Side ${this.side} does not exist.`);if(!de(this.style))return P.err("EmulatedTooltip",`Style ${this.style} does not exist.`);this.element=document.createElement("div"),this.element.className=le().layer+" "+le().disabledPointerEvents,this.tooltipElement=document.createElement("div"),this.tooltipElement.className=`${ie().tooltip} ${ce(this.style)}`,this.labelElement=document.createElement("div"),this.labelElement.className=ie().tooltipContent;const i=document.createElement("div");i.className=ie().tooltipPointer,this.tooltipElement.append(i),this.tooltipElement.append(this.labelElement),this.element.append(this.tooltipElement),this.node.addEventListener("mouseenter",()=>{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<=P.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<=P.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${ie().tooltip} ${ce(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(ce("top")),this.element.style.setProperty("top",ue(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(ce("bottom")),this.element.style.setProperty("top",ue(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(ce("left")),this.element.style.setProperty("left",ue(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(ce("right")),this.element.style.setProperty("left",ue(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",ue(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",ue(e-this.element.offsetHeight/2))}}var pe=class extends o.reactComponent{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=o.reactDom.findDOMNode(this),this.tooltip=new he(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}};class me{constructor(e,t){this.onClick=e,this.onClickLightcord=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 component(){const e=o.react.createElement(pe,{color:"black",side:"top",text:"BBD's Changelog"},o.react.createElement("div",{className:"bd-changelog-button",onClick:()=>{P.showChangelogModal(b)}},o.react.createElement(re,{className:"bd-icon",size:"16px"}))),t=o.react.createElement(pe,{color:"black",side:"top",text:"Lightcord's Changelog"},o.react.createElement("div",{className:"bd-changelog-button",onClick:()=>{P.showChangelogModal(f)}},o.react.createElement(re,{className:"bd-icon",size:"16px"})));return[o.react.createElement("span",null,o.react.createElement(ne,{onClick:this.onClick,headerText:"Lightcord",headerButton:t,items:this.LCitems})),o.react.createElement("span",null,o.react.createElement(ne,{onClick:this.onClick,headerText:"Bandaged BD",headerButton:e,items:this.items}))]}get root(){const e=L.query("#bd-settings-sidebar");return e||(this.injectRoot()?this.root:null)}injectRoot(){const e=L.queryAll("[class*='side-'] > [class*='item-']:not([class*=Danger])"),t=e[e.length-1];return!!t&&(t.parentElement.insertBefore(L.createElement('
'),t.previousElementSibling),!0)}render(){const e=this.root;e?(o.reactDom.render(this.component,e),P.onRemoved(e,()=>{o.reactDom.unmountComponentAtNode(e)})):console.log("FAILED TO LOCATE ROOT: [class*='side-'] > [class*='item-']:not([class*=Danger])")}}var ge=new class{injectColoredText(){this.cancelColoredText||o.MessageComponent&&(this.cancelColoredText=P.monkeyPatch(o.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=E["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","")})}},fe=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(!E["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=P.monkeyPatch(o.TimeFormatter,"calendarFormat",{after:t}),s=P.monkeyPatch(o.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};const be=n(0),ve=n(2),ye=n(1),Ee=be.remote.BrowserWindow,Ce=be.remote.getCurrentWebContents();var we=new class{constructor(){let e="";if(e="win32"===process.platform?ye.resolve(process.env.LOCALAPPDATA,"Google/Chrome/User Data"):"linux"===process.platform?ye.resolve(process.env.HOME,".config/google-chrome"):"darwin"===process.platform?ye.resolve(process.env.HOME,"Library/Application Support/Google/Chrome"):ye.resolve(process.env.HOME,".config/chromium"),e+="/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/",ve.existsSync(e)){const t=ve.readdirSync(e);e=ye.resolve(e,t[t.length-1])}this.extensionPath=e,this.isExtensionInstalled=ve.existsSync(e),this.listener=this.listener.bind(this),v["React DevTools"].hidden=!this.isExtensionInstalled}listener(){if(!this.isExtensionInstalled)return;Ee.removeDevToolsExtension("React Developer Tools"),Ee.addDevToolsExtension(this.extensionPath)?P.log("React DevTools","Successfully installed react devtools."):P.err("React DevTools","Couldn't find react devtools in chrome extensions!")}start(){setImmediate(()=>Ce.on("devtools-opened",this.listener)),Ce.isDevToolsOpened()&&this.listener()}stop(){Ce.removeListener("devtools-opened",this.listener)}};class Se extends o.reactComponent{constructor(e){super(e)}render(){return o.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},o.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},o.react.createElement("path",{d:"M0 0h12v12H0"}),o.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 xe extends o.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 o.react.createElement("div",{className:"tools-container "+e.toolsContainer},o.react.createElement("div",{className:"tools "+e.tools},o.react.createElement("div",{className:t.container},o.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},o.react.createElement(Se,null)),o.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 De extends o.reactComponent{constructor(e){super(e)}render(){return o.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20 "+BDModules.get(e=>e.marginTop60)[0].marginTop60},this.props.text)}}class ke extends o.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 o.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},o.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this)}),o.react.createElement("div",{className:n.flexChild+" bd-server-content"},o.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},o.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),o.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),o.react.createElement("div",{className:n.horizontal+" "+s.noWrap},o.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},o.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),o.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},o.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&o.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"}},o.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&o.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"}},o.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&o.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},o.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 Me extends o.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 o.react.createElement("div",{key:"scrollerwrap",className:n},o.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class Be extends o.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return o.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},o.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},o.react.createElement(Me,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),o.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},o.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},o.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},o.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},o.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class Ne extends o.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=o.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=o.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=o.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=o.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){o.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 a=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(a+=` for ${n.state.term}`),n.setState({loading:!1,title:a,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[o.react.createElement(ke,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/705908350218666117/05a5652f7d1d0ae328ca7d6e2354a82a.webp",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),o.react.createElement(ke,{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 o.react.createElement(Be,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:o.react.createElement(xe,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return o.react.createElement("div",{className:"sidebar",key:"ps"},o.react.createElement("div",{className:"ui-tab-bar SIDE"},o.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),o.react.createElement(X,null),this.searchInput,o.react.createElement(X,null),o.react.createElement(ee,{text:"Categories"}),this.categoryButtons.map((e,t)=>o.react.createElement(te,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),o.react.createElement(X,null),this.footer,this.connection))}get searchInput(){return o.react.createElement("div",{className:"ui-form-item"},o.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},o.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[o.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},o.react.createElement(De,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>o.react.createElement(ke,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&o.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"}},o.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&o.react.createElement(De,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[o.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},o.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",o.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"}},o.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return o.react.createElement("div",{className:"ui-tab-bar-header"},o.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?o.react.createElement("span",null):o.react.createElement("span",null,o.react.createElement(X,null),o.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),o.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},o.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},o.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Le extends o.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&o.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=L.query(`#${this.props.id}`);L.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=L.query(`#${this.props.id}`);L.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=L.query(".publicServersOpen");t.classList.remove("publicServersOpen"),L.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=L.query('[class*="layer-"]');e.classList.add("publicServersOpen"),L.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return o.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 Pe=new class{constructor(){this._appendButton=this._appendButton.bind(this)}get component(){return o.react.createElement(Le,{rootId:"pubslayerroot",id:"pubslayer"},o.react.createElement(Ne,{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=L.query(".layers, ."+e);return!!t&&(t.append(L.createElement("
")),!0)}render(){const e=this.root;e?o.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=L.createElement(`
`);E["bda-gs-1"]||(e.style.display="none");const t=L.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[BDModules.get(e=>e.scroller&&e.scrollbarWidth)[0].scroller];if(L.query("#bd-pub-li"))return;const t=o.guildClasses.wrapper.split(" ")[0],n=L.query(`.${t} .${e} >:first-child`);L.after(n,this.button)}addButton(){if(this.guildPatch)return;const e=l(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=u("Guilds");e||t||P.warn("PublicServer","Can't find GuildList component"),this.guildPatch=P.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,L.query("#bd-pub-li").remove()}};var $e=new class{start(){L.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(){L.removeStyle("VoiceMode")}};const Ae=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var Te=new class{stop(){this.hasPatched&&(this.unpatchClassModules(c(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(c(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(!Ae.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(Ae);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].layer,BDModules.get(e=>e.contextMenu)[0]];setTimeout((function(){let r=L.query("."+s.contextMenu.split(" ")[0]);if(!r){const t=L.query("#app-mount"),o=L.createElement(`
`);r=L.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.style.zIndex="1002";const a=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",a),document.removeEventListener("contextmenu",a),document.removeEventListener("keyup",a))};document.addEventListener("click",a),document.addEventListener("contextmenu",a),document.addEventListener("keyup",a)}const a=L.query("."+n.split(" ")[0]),i=L.createElement(`
`),l=L.createElement(`
`);l.append(L.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{o.NativeModule.copy(t),r.style.display="none"}),i.append(l),r.append(i),a.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+(e.className||"").split(" ").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 je=o.React;class Re extends je.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(){this.props.disabled||(this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked}))}render(){const e=this.props.disabled?" bd-switch-disabled":"",t=this.state.checked?" bd-switch-checked":"";return je.createElement("div",{className:"bd-switch"+e+t},je.createElement("input",{type:"checkbox",id:this.props.id,className:"bd-checkbox",disabled:this.props.disabled,checked:this.state.checked,onChange:this.onChange}))}}class Ie extends o.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(){const{text:e,info:t}=this.props.data;return o.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},o.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},o.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),o.react.createElement(Re,{onChange:this.onChange,checked:this.props.checked})),o.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class _e extends o.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?o.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[o.react.createElement(De,{text:e}),s,t.map(e=>o.react.createElement(Ie,{id:e.id,key:e.id,data:e,checked:E[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}class Fe extends o.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return o.react.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default"},this.props.sections.map(e=>o.react.createElement(_e,Object.assign({},e,{onChange:this.props.onChange}))))}}o.reactComponent;class We extends o.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return o.react.createElement("li",null,o.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},o.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},o.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),o.react.createElement("span",null)),o.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Ue extends o.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(){L.addClass(L.query("#app-mount"),"bd-detached-editor"),o.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",()=>{E["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){L.removeClass(L.query("#app-mount"),"bd-detached-editor"),o.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=Q.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=L.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=L.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(L.insertAfter(L.createElement('
'),e),!0)}render(){const e=this;return o.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},o.react.createElement("div",{id:"bd-customcss-innerpane"},o.react.createElement("div",{className:"editor-wrapper"},o.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),o.react.createElement("div",{id:"bd-customcss-attach-controls"},o.react.createElement("ul",{className:"checkbox-group"},o.react.createElement(We,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:E["bda-css-0"]})),o.react.createElement("div",{id:"bd-customcss-detach-controls-button"},o.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),o.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),o.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),o.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":E["bda-css-0"]=t,gn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":L.query("#editor-detached")&&t.props.attach(),o.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){L.removeStyle("customcss"),L.addStyle("customcss",this.editor.session.getValue())}saveCss(){Q.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class ze extends o.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=o.react.createElement(Ue,{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||o.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",()=>{E["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&o.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=Q.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;let n=BDModules.get(e=>e.contentColumn)[0];return o.react.createElement("div",{className:n.contentColumn+" "+n.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},t&&o.react.createElement("div",{id:"editor-detached"},o.react.createElement(De,{text:"Custom CSS Editor"}),o.react.createElement("h3",null,"Editor Detached"),o.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&o.react.createElement("div",null,o.react.createElement(De,{text:"Custom CSS Editor"}),o.react.createElement("div",{className:"editor-wrapper"},o.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),o.react.createElement("div",{id:"bd-customcss-attach-controls"},o.react.createElement("ul",{className:"checkbox-group"},o.react.createElement(We,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:E["bda-css-0"]})),o.react.createElement("div",{id:"bd-customcss-detach-controls-button"},o.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),o.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),o.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),o.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),o.react.createElement("div",{className:"help-text"},"Press ",o.react.createElement("code",{className:"inline"},"ctrl"),"+",o.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":E["bda-css-0"]=t,gn.saveSettings()}}updateCss(){L.removeStyle("customcss"),L.addStyle("customcss",this.editor.session.getValue())}saveCss(){Q.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?o.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=L.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=L.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(L.insertAfter(L.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class He extends o.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?o.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const qe=He.prototype.render;Object.defineProperty(He.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:()=>qe});class Ge extends o.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=BDModules.get(e=>e.contentColumn)[0];return o.react.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default"},o.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title),this.props.children)}}class Ve extends o.reactComponent{constructor(e){super(e)}render(){return o.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"}},o.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"}),o.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const Je=o.React;class Ze extends Je.Component{render(){const e=this.props.size||"24px";return Je.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"#FFFFFF",style:{width:e,height:e},onClick:this.props.onClick},Je.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"}),Je.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const Ye=o.React;class Ke extends Ye.Component{render(){const e=this.props.size||"24px";return Ye.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},Ye.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Ye.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"}),Ye.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const Qe=o.React,Xe=o.anchorClasses;class et extends o.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}}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),E["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest(".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=L.offset(e),s=L.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;L.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){P.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return o.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},o.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},o.react.createElement(Se,null)),"object"==typeof this.settingsPanel&&o.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&o.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]=Qe.createElement("span",{className:"name bda-name"},e));const a=s.findIndex(e=>"{{version}}"==e);r&&(s[a]=Qe.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+=` ${Xe.anchor} ${Xe.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{o.LayerStack.popLayer(),o.openDM(n.id)})),s[i]=Qe.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()}),o.react.createElement("a",n,e)}makeButton(e,t,n){return Qe.createElement(pe,{color:"black",side:"top",text:e},Qe.createElement("div",{className:"bd-addon-button",onClick:n},t))}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]),o.LayerStack.popLayer(),o.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)&&o.react.createElement("div",{className:"bd-card-footer bda-footer"},o.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>ntt});const nt=o.React;class st extends nt.Component{render(){const e=this.props.size||"16px";return nt.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},nt.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 rt=o.React;class ot extends rt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=rt.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 rt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>rt.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 rt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},rt.createElement("div",{className:"bd-select-value"},this.selected.label),rt.createElement(st,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const at=o.React;class it extends at.Component{render(){const e=this.props.size||"16px";return at.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},at.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),at.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 lt=o.React;class ct extends lt.Component{render(){return lt.createElement("div",{className:"bd-search-wrapper"},lt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),lt.createElement(it,null))}}function dt(){return(dt=Object.assign||function(e){for(var t=1;t{cs.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),remove:this.delete.bind(this),addon:e}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}getAddons(){const e=this.props.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;nht.createElement(Ve,dt({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?O.updatePluginList():R.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return ht.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},ht.createElement(Ge,{title:`${this.props.type.toUpperCase()}—${t.length}`},ht.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),!E["fork-ps-5"]&&e,ht.createElement("div",{className:"bd-controls bd-addon-controls"},ht.createElement(ct,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),ht.createElement("div",{className:"bd-addon-dropdowns"},ht.createElement("div",{className:"bd-select-wrapper"},ht.createElement("label",{className:"bd-label"},"Sort by:"),ht.createElement(ot,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),ht.createElement("div",{className:"bd-select-wrapper"},ht.createElement("label",{className:"bd-label"},"Order:"),ht.createElement(ot,{options:this.directions,onChange:this.reverse,style:"transparent"})))),ht.createElement("div",{className:"bda-slist bd-addon-list"},t)),ht.createElement(xe,{key:"tools"}))}}const mt=pt.prototype.render;Object.defineProperty(pt.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:()=>mt});const gt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,ft=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,bt=process.pid;var vt=new class{constructor(){this.enabled=!1,this.game=C}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||w.name,application_id:this.game.application_id||w.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(){gt.dispatch({type:ft.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(C||Object.create(w)),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()}};const yt=o.react;class Et extends yt.Component{handleChange(e){this.props.value=e,"function"==typeof this.props.onChange&&this.props.onChange(e,this),this.forceUpdate()}render(){let e=BDModules.get(e=>e.default&&e.default.Wrap&&e.default.Direction&&e.default.Child)[0].default,t=BDModules.get(e=>e.default&&"SelectTempWrapper"===e.default.displayName)[0].default;return yt.createElement("flex",{direction:e.Direction.HORIZONTAL,align:e.Align.CENTER},yt.createElement(t,Object.assign({},this.props,{onChange:this.handleChange.bind(this)})))}}const Ct=o.react,wt=BDModules.get(e=>e.Interval)[0];var St=function(e,t){class n extends Ct.PureComponent{constructor(e){super(e),this._interval=new wt.Interval,this.state=Object.assign({},this.getUpdatedTime())}componentDidMount(){let e=this;this._interval.start(1e3,(function(){return e.setState(e.getUpdatedTime())}))}componentWillUnmount(){this._interval.stop()}componentDidUpdate(e){e.timestamps.end===this.props.timestamps.end&&e.timestamps.start===this.props.timestamps.start||this.setState(this.getUpdatedTime())}getUpdatedTime(){let e=this.props.timestamps,t=Date.now()/1e3;return null!=e.end?this.getDiff(t,xt(e.end)/1e3):null!=e.start?this.getDiff(xt(e.start)/1e3,t):{hours:0,minutes:0,seconds:0}}renderTime(e,t){return void 0===t&&(t=!1),t&&e<=0?-1:e<10?"0"+e:e}getDiff(e,t){let n=Math.max(t-e,0),s=Math.floor(n)%60,r=Math.floor(n/60)%60;return{hours:Math.floor(n/3600)%24,minutes:r,seconds:s}}render(){let n=this.props,s=n.timestamps,r=function(e,t){if(null==e)return{};let n={},s=Object.keys(e);for(let r=0;r=0&&(n[o]=e[o])}return n}(n,["timestamps"]),o=this.state,a=o.hours,i=o.minutes,l=o.seconds,c={hours:this.renderTime(a,!0),minutes:this.renderTime(i),seconds:this.renderTime(l)};return null!==s.end?Ct.createElement(e,Object.assign({},r,{message:t.USER_ACTIVITY_TIMESTAMP_END.format(c)})):null!==s.start?Ct.createElement(e,Object.assign({},r,{message:t.USER_ACTIVITY_TIMESTAMP_START.format(c)})):null}}return n};function xt(e){return(""+e).length<13?1e3*e:e}const Dt=o.React;class kt extends Dt.Component{constructor(e){super(e),this.state={data:Q.getSettingGroup("rpc")||w,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets()}onChange(e,t){let n=Mt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(C,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),Q.setSettingGroup("rpc",C),this.preview.forceUpdate(),vt.set(C)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}this.state.data.application_id?(this.isfetching=!0,vt.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()}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate()})):this.setState({data:this.state.data,assets:[]})}updatePreview(e){this.setState({data:e})}render(){let e=BDModules.get(e=>e.contentColumn)[0];return Dt.createElement("div",{className:e.contentColumn+" "+e.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},Dt.createElement(_e,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),Dt.createElement(De,{text:"RichPresence"}),Dt.createElement("div",null,Mt.map(e=>{if("text"===e.type)return Dt.createElement(Bt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[Dt.createElement(Nt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?Dt.createElement(Lt,{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})),Dt.createElement("div",null,Dt.createElement(De,{text:"Preview"}),Dt.createElement(Pt,{settings:this})),Dt.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20}),Dt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),Dt.createElement("button",{style:{opacity:.01},onclick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4",{activate:!0})}},"See ? I pulled a litle sneaky on ya"))}}const Mt=[{title:"Application ID",id:"application_id",type:"number"},{title:"Name",id:"name",type:"text"},{title:"Details",id:"details",type:"text"},{title:"State",id:"state",type:"text"},{title:"Timestamp Start",id:"timestamps.start",type:"number"},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];class Bt extends Dt.Component{render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=BDModules.get(e=>e.inputMini)[0],l=BDModules.get(e=>e.size16&&e.size20)[0];return Dt.createElement("div",{className:t.row+" "+n.marginBottom20},Dt.createElement("div",{className:`${t.item} ${a.flexChild}`},Dt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Dt.createElement("div",{className:i.inputWrapper},Dt.createElement("input",{class:`${i.inputDefault} ${l.size16}`,name:"state",type:"text",placeholder:"",maxlength:"999",value:this.props.manager.state.data[e.id],onChange:e=>{this.props.manager.onChange(this,e.target.value)}}))),Dt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}class Nt extends Dt.Component{render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=BDModules.get(e=>e.inputMini)[0],l=BDModules.get(e=>e.size16&&e.size20)[0],c=BDModules.get(e=>e.colorTransparent)[0];return Dt.createElement("div",{className:t.row+" "+n.marginBottom20},Dt.createElement("div",{className:`${t.item} ${a.flexChild}`},Dt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Dt.createElement("div",{className:i.inputWrapper},Dt.createElement("input",{class:`${i.inputDefault} ${l.size16}`,name:"state",type:"text",placeholder:"",maxlength:"999",value:this.props.manager.state.data[e.id],onChange:e=>{let t=e.target.value.replace(/[^\d]+/g,"");t!==e.target.value&&(e.target.value=t),this.props.manager.onChange(this,t)}})),"timestamps.start"===e.id?Dt.createElement("div",{className:BDModules.get(e=>e.buttonWrapper)[0].buttonWrapper},Dt.createElement("button",{type:"button",class:`${a.flexChild} ${c.button} ${c.lookFilled} ${c.colorBrand} ${c.sizeSmall} ${c.grow}`,style:{flex:"0 1 auto"},onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")}},Dt.createElement("div",{class:c.contents},"Copy current timestamp"))):null),Dt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}class Lt extends Dt.Component{onChange(e){this.props.manager.onChange(this,"none"===e.value?null:e.value.replace("asset-",""))}render(){let e=this.props.setting,t=BDModules.get(e=>e.removeKeybind)[0],n=BDModules.get(e=>e.marginBottom20)[0],s=BDModules.get(e=>e.defaultMarginh5)[0],r=BDModules.get(e=>e.colorStandard)[0],o=BDModules.get(e=>e.size32)[0],a=BDModules.get(e=>e._horizontal)[0],i=this.props.choices;return Dt.createElement("div",{className:t.row+" "+n.marginBottom20},Dt.createElement("div",{className:`${t.item} ${a.flexChild}`},Dt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Dt.createElement(Et,{value:"asset-"+this.props.manager.state.data[e.id]||!1,onChange:this.onChange.bind(this),options:i})),Dt.createElement("div",{class:`${BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0].divider} ${BDModules.get(e=>e.dividerDefault)[0].dividerDefault}`}))}}Dt.Component;class Pt extends Dt.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(){let e=new this.preview({preview:this});return e.setState(this.state.rpc),Dt.createElement("div",{className:"lc-tabWrapper"},Dt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},Dt.createElement($t,{preview:this,title:"Full Profile",id:"profile"}),Dt.createElement($t,{preview:this,title:"User Popout",id:"popout"})),e.render())}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?jt:At}}class $t extends Dt.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",Dt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class At extends Dt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=e.getAvatarURL(e.avatar.startsWith("a_")?"gif":"png"),[n,s,r,o,a,i,l,c,d,u,h,p,m]=[BDModules.get(e=>e.userPopout)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.bot)[0],BDModules.get(e=>e.activityUserPopout)[0],BDModules.get(e=>e.muted&&e.wrapper&&e.base)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.themeGhostHairlineChannels)[0],BDModules.get(e=>e.note&&1===Object.keys(e).length)[0],BDModules.get(e=>e.pro&&e.inline)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.default&&e.default.Messages)[0].default.Messages,BDModules.get(e=>e.pointerEvents)[0]],g=Object.assign({},w,this.props.preview.props.settings.state.data);return Ot=Ot||a.timestamp,Dt.createElement("div",{className:"lc-userPopout"},Dt.createElement("div",{class:n.userPopout,role:"dialog",tabindex:"-1"},Dt.createElement("div",{class:n.headerPlaying},Dt.createElement("div",{class:`${s.flex} ${r.vertical} ${r.justifyCenter} ${r.alignCenter} ${r.noWrap} ${n.headerTop}`,style:{flex:"1 1 auto"}},Dt.createElement("div",{class:n.avatarWrapperNormal,role:"button",tabindex:"0"},Dt.createElement("div",{class:m,role:"img",style:{width:"80px",height:"80px"}},Dt.createElement("svg",{width:"92",height:"80",viewBox:"0 0 92 80",class:`${m.mask} ${m.svg}`},Dt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},Dt.createElement("img",{src:t,alt:" ",class:m.avatar})),Dt.createElement(Tt,null))),Dt.createElement("svg",{width:"80",height:"80",class:n.avatarHint,viewBox:"0 0 80 80"},Dt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},Dt.createElement("div",{class:n.avatarHintInner},p.VIEW_PROFILE)))),Dt.createElement("div",{class:n.headerText},Dt.createElement("div",{class:`${s.flex} ${r.horizontal} ${r.justifyStart} ${r.alignCenter} ${r.noWrap}`,style:{flex:"1 1 auto"}},Dt.createElement("div",{class:`${n.headerTagNoNickname} ${o.nameTag}`},Dt.createElement("span",{class:`${o.username} ${n.headerTagUsernameNoNickname}`},e.username),Dt.createElement("span",null,"#",e.discriminator))))),Dt.createElement("div",{class:`${a.activityUserPopout} ${n.activity}`},Dt.createElement("h3",{class:`${a.headerTextNormal} ${i.base} ${l.size12}`},p.USER_ACTIVITY_HEADER_PLAYING),Dt.createElement("div",{class:a.bodyNormal},(()=>{if(!g["assets.large"])return null;let e=[];return g["assets.large"]&&e.push(Dt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${g.application_id}/${g["assets.large"]}.png`,class:`${a.assetsLargeImageUserPopout} ${g["assets.small"]?a.assetsLargeMaskUserPopout:""}`})),g["assets.small"]&&e.push(Dt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${g.application_id}/${g["assets.small"]}.png`,class:a.assetsSmallImageUserPopout})),Dt.createElement("div",{class:a.assets},e)})(),Dt.createElement("div",{class:a.contentImagesUserPopout,style:{flex:"1 1 auto"}},g.name?Dt.createElement("h3",{class:`${a.nameNormal} ${i.base} ${l.size14}`,title:g.name},Dt.createElement("span",{class:a.activityName},g.name)):null,g.details?Dt.createElement("div",{title:g.title,class:a.details},g.details):null,g.state?Dt.createElement("div",{class:a.state},Dt.createElement("span",{title:g.state},g.state)):null,(()=>{if(!g["timestamps.start"])return null;let e=St(Wt,p);return Dt.createElement("div",{class:a.timestamp},Dt.createElement(e,{timestamps:{end:null,start:g["timestamps.start"]}}))})())))),Dt.createElement("div",{class:`${c.scrollerWrap} ${n.body} ${c.scrollerThemed} ${c.themeGhostHairline} ${c.scrollerFade}`},Dt.createElement("div",{class:`${c.scroller} ${n.bodyInner}`},Dt.createElement("div",{class:n.bodyTitle},p.NOTE),Dt.createElement("div",{class:`${d.note} ${n.note}`},Dt.createElement("textarea",{placeholder:p.NOTE_PLACEHOLDER,maxlength:"256",autocorrect:"off",class:BDModules.get(e=>e.scrollbarGhostHairline)[0].scrollbarGhostHairline,style:{height:"36px"},disabled:!0})))),Dt.createElement("div",{class:n.footer},Dt.createElement("div",{class:`${n.protip} ${u.inline}`},Dt.createElement("h3",{class:`${u.pro} ${i.base} ${l.size12}`,style:{color:"rgb(67, 181, 129)"}},p.PINNED_MESSAGES_PRO_TIP),Dt.createElement("div",{class:`${h.colorStandard} ${l.size14} ${u.tip}`},p.CONTEXT_MENU_HINT)))))}}class Tt extends Dt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getPresence)[0].default.getPresence().status;"invisible"===e&&(e="offline");let t=BDModules.get(e=>e.pointerEvents)[0].pointerEvents;return Dt.createElement("rect",{width:"16",height:"16",x:"60",y:"60",fill:"#ffffff",mask:`url(#svg-mask-status-${e})`,className:t})}}let Ot="";class jt extends Dt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=e.getAvatarURL(e.avatar.startsWith("a_")?"gif":"png"),[n,s,r,o,a,i,l,c,d,u,h]=[BDModules.get(e=>e.flex&&e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.topSectionStreaming)[0],BDModules.get(e=>e.pointerEvents)[0],BDModules.get(e=>e.bot)[0],BDModules.get(e=>e.activityProfile)[0],BDModules.get(e=>e.muted&&e.wrapper&&e.base)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.scrollerFade)[0],BDModules.get(e=>e.note&&1===Object.keys(e).length)[0],BDModules.get(e=>e.default&&e.default.Messages)[0].default.Messages],p=Object.assign({},w,this.props.preview.props.settings.state.data);return Ot=Ot||i.timestamp,[Dt.createElement("div",{className:"lc-tab"},Dt.createElement("div",{class:`${n.flex} ${s.vertical} ${s.justifyStart} ${s.alignStretch} ${s.noWrap} ${r.root}`,style:{flex:"1 1 auto"}},Dt.createElement("div",{class:r.topSectionPlaying},Dt.createElement("header",{class:r.header},Dt.createElement("div",{class:`${r.avatar} ${o.wrapper}`,role:"img",style:{width:"80px",height:"80px"}},Dt.createElement("svg",{width:"92",height:"80",viewBox:"0 0 92 80",class:`${o.mask} ${o.svg}`},Dt.createElement("foreignObject",{x:"0",y:"0",width:"80",height:"80",mask:"url(#svg-mask-avatar-status-round-80)"},Dt.createElement("img",{src:t,alt:" ",class:o.avatar})),Dt.createElement(Tt,null))),Dt.createElement("div",{class:`${r.headerInfo}`},Dt.createElement("div",{class:`${r.nameTag} ${a.nameTag}`},Dt.createElement("span",{class:`${r.username} ${r.username}`},e.username),Dt.createElement("span",{class:r.discriminator},"#",e.discriminator)),Dt.createElement("div",{class:`${n.flex} ${n.horizontal} ${s.justifyStart} ${s.alignStretch} ${s.noWrap} ${r.profileBadges}`,style:{flex:"1 1 auto"}},Dt.createElement(_t,null)))),Dt.createElement("div",{class:r.headerFill},Dt.createElement("div",{class:`${i.activityProfile} ${r.activity}`},Dt.createElement("h3",{class:`${i.headerTextNormal} ${l.base} ${c.size12}`},h.USER_ACTIVITY_HEADER_PLAYING),Dt.createElement("div",{class:i.bodyNormal},(()=>{if(!p["assets.large"])return null;let e=[];return p["assets.large"]&&e.push(Dt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${p.application_id}/${p["assets.large"]}.png`,class:`${i.assetsLargeImageProfile} ${p["assets.small"]?i.assetsLargeMaskProfile:""}`})),p["assets.small"]&&e.push(Dt.createElement("img",{alt:"",src:`https://cdn.discordapp.com/app-assets/${p.application_id}/${p["assets.small"]}.png`,class:i.assetsSmallImageProfile})),Dt.createElement("div",{class:i.assets},e)})(),Dt.createElement("div",{class:i.contentImagesProfile,style:{flex:"1 1 auto"}},p.name?Dt.createElement("h3",{class:`${i.nameNormal} ${l.base} ${c.size14}`,title:p.name},Dt.createElement("span",{class:i.activityName},p.name)):null,p.details?Dt.createElement("div",{title:p.title,class:i.details},p.details):null,p.state?Dt.createElement("div",{class:i.state},Dt.createElement("span",{title:p.state},p.state)):null,(()=>{if(!p["timestamps.start"])return null;let e=St(Wt,h);return Dt.createElement("div",{class:i.timestamp},Dt.createElement(e,{timestamps:{end:null,start:p["timestamps.start"]}}))})()))))),Dt.createElement("div",{class:r.body},Dt.createElement("div",{class:`${d.scrollerWrap} ${d.scrollerFade}`},Dt.createElement("div",{class:d.scroller},Dt.createElement("div",{class:r.userInfoSection},Dt.createElement("div",{class:r.userInfoSectionHeader},h.NOTE),Dt.createElement("div",{class:`${r.note} ${u.note}`},Dt.createElement("textarea",{placeholder:h.NOTE_PLACEHOLDER,maxlength:"256",autocorrect:"off",class:BDModules.get(e=>e.scrollbarGhostHairline)[0].scrollbarGhostHairline,style:{height:"40px"},disabled:!0}))),Dt.createElement(Rt,null)))))),Dt.createElement("div",{class:"lc- "})]}}class Rt extends Dt.Component{render(){let e=[],t=BDModules.get(e=>e.topSectionStreaming)[0],n=BDModules.get(e=>e.default&&e.default.getAccounts)[0].default.getAccounts().filter(e=>1===e.visibility);for(let t of n)e.push(Dt.createElement(It,{acc:t}));return e.length>0?Dt.createElement("div",{class:t.userInfoSection},Dt.createElement("div",{class:t.connectedAccounts},e)):null}}class It extends Dt.Component{render(){let[e,t,n,s,r,o]=[BDModules.get(e=>e.flex&&e._horizontal)[0],BDModules.get(e=>e.vertical&&e.alignStretch&&!e.streamerModeEnabledBtn)[0],BDModules.get(e=>e.topSectionStreaming)[0],BDModules.get(e=>e.flowerStarContainer)[0],BDModules.get(e=>e.anchor)[0],BDModules.get(e=>e.default&&e.default.get&&e.default.map)[0].default],a=this.props.acc,i=o.get(a.type);return Dt.createElement("div",{class:`${e.flex} ${e.horizontal} ${t.justifyStart} ${t.alignCenter} ${t.noWrap} ${n.connectedAccount}`,style:{flex:"0 1 auto"}},Dt.createElement("img",{alt:`Logo ${i.name}`,class:n.connectedAccountIcon,src:i.icon.color||i.icon.white||i.icon.grey}),Dt.createElement("div",{class:n.connectedAccountNameInner},Dt.createElement("div",{class:n.connectedAccountName},a.name),a.verified?Dt.createElement("span",null,Dt.createElement("div",{class:`${s.flowerStarContainer} ${n.connectedAccountVerifiedIcon}`,style:{width:"16px",height:"16px"}},Dt.createElement("svg",{class:s.flowerStar,width:"16",height:"16",viewBox:"0 0 16 15.2"},Dt.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"})),Dt.createElement("div",{class:s.childContainer},Dt.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 15.2"},Dt.createElement("path",{d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z",fill:"#ffffff"}))))):null),Dt.createElement("a",{class:`${r.anchor} ${r.anchorUnderlineOnHover}`,rel:"noreferrer noopener",target:"_blank",role:"button",tabindex:"0"},Dt.createElement("svg",{class:n.connectedAccountOpenIcon,width:"24",height:"24",viewBox:"0 0 24 24"},Dt.createElement("path",{fill:"currentColor",d:"M10 5V3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V14H19V19H5V5H10Z"}),Dt.createElement("path",{fill:"currentColor",d:"M21 2.99902H14V4.99902H17.586L9.29297 13.292L10.707 14.706L19 6.41302V9.99902H21V2.99902Z"}))))}}class _t extends Dt.Component{render(){let e=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default.getCurrentUser(),t=BDModules.get(e=>e.topSectionStreaming)[0],n=BDModules.get(e=>e.UserFlags)[0].UserFlags,s=[],r=[];for(let t in n)e.hasFlag(n[t])&&r.push(t);for(let e of r){let n=`profileBadge${e.toLowerCase().replace(/_/g," ").split(" ").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}`;n=n.replace("HypesquadOnline","HypeSquadOnline"),t[n]&&s.push(Dt.createElement(Ft,{name:n}))}return e.hasPremiumSubscription&&s.push(Dt.createElement(Ft,{name:"profileBadgePremium"})),s}}class Ft extends Dt.Component{render(){let e=BDModules.get(e=>e.topSectionStreaming)[0];return Dt.createElement("div",{class:e.profileBadgeWrapper},Dt.createElement("div",null,Dt.createElement("div",{class:"",role:"button",tabindex:"0"},Dt.createElement("div",{class:`${e.profileBadge} ${e[this.props.name]}`}))))}}class Wt extends Dt.Component{render(){return Dt.createElement("div",{className:Ot},this.props.message)}}const Ut=o.React;let zt=BDModules.get(e=>e.contentColumn)[0],Ht=BDModules.get(e=>e.defaultMarginh5)[0],qt=BDModules.get(e=>e.colorStandard)[0],Gt=BDModules.get(e=>e.size32)[0],Vt=BDModules.get(e=>e.scrollbarGhostHairline)[0];const Jt=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,Zt=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Yt=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,Kt=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class Qt extends Ut.Component{constructor(e){super(e)}render(){return zt||(zt=BDModules.get(e=>e.contentColumn)[0]),Ht||(Ht=BDModules.get(e=>e.defaultMarginh5)[0]),qt||(qt=BDModules.get(e=>e.colorStandard)[0]),Gt||(Gt=BDModules.get(e=>e.size32)[0]),Ut.createElement("div",{className:zt.contentColumn+" "+zt.contentColumnDefault+" content-column default",style:{padding:"60px 40px 0px"}},Ut.createElement(De,{text:"Account Infos"}),Ut.createElement("div",null,Ut.createElement("h5",{className:qt.colorStandard+" "+Gt.size14+" "+Ht.h5+" "+Ht.defaultMarginh5},"Profile"),Ut.createElement(nn,{content:this.getProfileValue(),language:"diff"}),Ut.createElement("h5",{className:qt.colorStandard+" "+Gt.size14+" "+Ht.h5+" "+Ht.defaultMarginh5},"Statistics"),Ut.createElement(nn,{content:this.getStatistics(),language:"diff"}),Ut.createElement("h5",{className:qt.colorStandard+" "+Gt.size14+" "+Ht.h5+" "+Ht.defaultMarginh5},"Connected Sessions"),Ut.createElement(nn,{content:this.getSessionValue(),language:"diff"})),Ut.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20}))}getSessionValue(){const e=Yt.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+ active: ${e.active?"Yes":"No"}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=Kt.getCurrentUser(),t=e.createdAt;return`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: https://cdn.discordapp.com/avatars/${e.id}/${e.avatar}.${e.avatar.startsWith("a_")?"gif":"png"}?size=4096\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(Jt.getGuilds()),t=Object.keys(Zt.getRelationships()),n=t.filter(e=>Zt.isFriend(e)),s=t.filter(e=>Zt.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 Xt=BDModules.get(e=>e.highlight)[0],en=BDModules.get(e=>e.markup)[0],tn=BDModules.get(e=>e.messageContent)[0];class nn extends Ut.Component{render(){return en||(en=BDModules.get(e=>e.markup)[0]),tn||(tn=BDModules.get(e=>e.messageContent)[0]),Vt||(Vt=BDModules.get(e=>e.scrollbarGhostHairline)[0]),Xt||(Xt=BDModules.get(e=>e.highlight)[0]),Ut.createElement("div",{class:`${en.markup} ${tn.messageContent}`},Ut.createElement("pre",null,Ut.createElement("code",{class:`${Vt.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:Xt.highlight(this.props.language,this.props.content).value}})),Ut.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const sn=window.Lightcord.DiscordModules.dispatcher,rn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let on=BDModules.get(e=>e.default&&e.default.addRelationship)[0],an=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const ln={};let cn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var dn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,sn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,sn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(cn?cn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=rn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(ln[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||un(n,"discord.gg/")||un(n,"discord.com/invite/")||un(n,"discordapp.com/invite/"))&&(ln[e.message.author.id]=!0,P.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),on||(on=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),on.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),an||(an=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),an.default.closePrivateChannel(t.id,!1)))))}};function un(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 hn;const pn=P.removeDa;var mn=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,hn=hn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=pn(e.standardSidebarView),n=[];return n.push(`#app-mount .${t} .payment-info .${pn(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${pn(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${pn(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),n.push(`#app-mount .${t} .${pn(BDModules.get(e=>e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${pn(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n}(),hn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),L.addStyle("blurPrivate",`\n${hn[0]}, ${hn[1]}, ${hn[2]} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${hn[0]}:hover, ${hn[1]}:hover, ${hn[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,L.removeStyle("blurPrivate"))}},gn=new class{constructor(){this.sideBarOnClick=this.sideBarOnClick.bind(this),this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new me(this.sideBarOnClick),this.showOriginal=this.showOriginal.bind(this)}get root(){const e=L.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=L.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=L.createElement(`
`);return n.append(s),P.onRemoved(s,()=>{o.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(v).reduce((t,n)=>{const s=v[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}sideBarOnClick(e){switch(L.query(".contentRegion-3nDuYy, .content-region").style.display="none",this.root.style.display="",e){case"core":this.renderCoreSettings();break;case"customcss":this.renderCustomCssEditor();break;case"plugins":case"themes":this.renderAddonPane(e);break;case"lightcord":this.renderLightcordSettings();break;case"status":this.renderPresenceSettings();break;case"accountinfo":this.renderAccountInfos()}}onClick(){}onChange(e,t){this.updateSettings(e,t)}updateSettings(e,t){if(E[e]=t,"bda-gs-2"==e&&(t?L.addClass(document.body,"bd-minimal"):L.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?L.addClass(document.body,"bd-minimal-chan"):L.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?Pe.addButton():Pe.removeButton()),"bda-gs-4"==e&&(t?$e.start():$e.stop()),"bda-gs-5"==e&&(t?L.addClass(L.query("#app-mount"),"bda-dark"):L.removeClass(L.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&fe.inject24Hour(),"bda-gs-7"==e&&(t?ge.injectColoredText():ge.removeColoredText()),"fork-ps-4"==e&&(t?Te.start():Te.stop()),"fork-ps-5"==e&&(t?(V.watchContent("plugin"),V.watchContent("theme")):(V.unwatchContent("plugin"),V.unwatchContent("theme"))),"fork-wp-1"==e&&(P.setWindowPreference("transparent",t),t?P.setWindowPreference("backgroundColor",null):P.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?Oe.startDebugListener():Oe.stopDebugListener()),"fork-dm-1"==e&&(t?Oe.startCopySelector():Oe.stopCopySelector()),"reactDevTools"===e&&(t?we.start():we.stop()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){vt.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 vt.disable();"lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?dn.enable():dn.disable()),"lightcord-6"===e&&(t?mn.enable():mn.disable()),this.saveSettings()}async initializeSettings(){E.reactDevTools&&we.start(),E["bda-gs-2"]&&L.addClass(document.body,"bd-minimal"),E["bda-gs-3"]&&L.addClass(document.body,"bd-minimal-chan"),E["bda-gs-1"]&&Pe.addButton(),E["bda-gs-4"]&&$e.start(),E["bda-gs-5"]&&L.addClass(L.query("#app-mount"),"bda-dark"),E["bda-gs-6"]&&fe.inject24Hour(),E["bda-gs-7"]&&ge.injectColoredText(),E["fork-ps-4"]&&Te.start(),E["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),E["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),E["lightcord-presence-1"]&&vt.enable(),E["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),E["lightcord-4"]&&dn.enable(),E["lightcord-6"]&&mn.enable(),E["fork-ps-5"]&&(V.watchContent("plugin"),V.watchContent("theme")),E["bda-gs-8"]&&Oe.startDebugListener(),E["fork-dm-1"]&&Oe.startCopySelector(),this.saveSettings()}saveSettings(){Q.setSettingGroup("settings",E),Q.setSettingGroup("rpc",C)}loadSettings(){Object.assign(E,Q.getSettingGroup("settings")),Object.assign(C,Q.getSettingGroup("rpc"))}showOriginal(){o.reactDom.unmountComponentAtNode(this.root),this.root.style.display="none",L.query("."+BDModules.get(e=>e.contentRegion)[0].contentRegion.split(" ")[0]+", .content-region").style.display=""}renderSidebar(){const e=document.querySelectorAll("[class*='side-'] > [class*='item-']");for(const t of e)t.removeEventListener("click",this.showOriginal),t.addEventListener("click",this.showOriginal);this.sidebar.render()}get coreComponent(){return o.react.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},o.react.createElement(Fe,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings}),o.react.createElement(xe,{key:"tools"}))}get lightcordComponent(){return o.react.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},o.react.createElement(Fe,{key:"lspannel",onChange:this.onChange,sections:this.lightcordSettings}),o.react.createElement(xe,{key:"tools"}))}get PresenceComponent(){return o.react.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},o.react.createElement(kt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings}),o.react.createElement(xe,{key:"tools"}))}get AccountInfosComponent(){return o.react.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},o.react.createElement(Qt,{key:"lapannel"}),o.react.createElement(xe,{key:"tools"}))}get customCssComponent(){return o.react.createElement(Me,{contentColumn:!0,fade:!0,dark:!0},o.react.createElement(ze,{key:"csseditor"}),o.react.createElement(xe,{key:"tools"}))}renderCoreSettings(){const e=this.root;if(!e)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");o.reactDom.render(this.coreComponent,e)}renderLightcordSettings(){const e=this.root;if(!e)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");o.reactDom.render(this.lightcordComponent,e)}renderPresenceSettings(){const e=this.root;if(!e)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");o.reactDom.render(this.PresenceComponent,e)}renderAccountInfos(){const e=this.root;if(!e)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");o.reactDom.render(this.AccountInfosComponent,e)}renderCustomCssEditor(){const e=this.root;if(!e)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");o.reactDom.render(this.customCssComponent,e)}renderAddonPane(e){if(!this.root)return P.err("SettingsPanel","FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");class t extends o.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s",""),this.onChange=this.onChange.bind(this)}componentDidMount(){A.on(`${this.prefix}-reloaded`,this.onChange),A.on(`${this.prefix}-loaded`,this.onChange),A.on(`${this.prefix}-unloaded`,this.onChange)}componentWillUnmount(){A.off(`${this.prefix}-reloaded`,this.onChange),A.off(`${this.prefix}-loaded`,this.onChange),A.off(`${this.prefix}-unloaded`,this.onChange)}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;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});const s="plugins"===e?Object.values(M):Object.values(k);return o.reactDom.render(o.react.createElement(t,{type:e,onChange:this.sideBarOnClick},o.react.createElement(pt,{type:e,list:s})),this.root)}};class fn extends o.reactComponent{render(){return o.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"},o.react.createElement("metadata",null),o.react.createElement("defs",null,o.react.createElement("filter",{id:"shadow1"},o.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),o.react.createElement("filter",{id:"shadow2"},o.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),o.react.createElement("filter",{id:"shadow3"},o.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),o.react.createElement("g",null,o.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"}),o.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"}),o.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 bn(){return(bn=Object.assign||function(e){for(var t=1;t{!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();let n=(n,s)=>{if(wn[n]){const s=wn[n];Bn(t,s,e.filename)}else En()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+n,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return function(e,t,n){t=t.toString("utf8").split(/[^\w\d]+/g);let s=!1;for(let e of t){for(let t of["token","email","phone","MFA","2fa","process","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())){s="token stealer/virus";break}if(s)break}if(!s){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(s="obfuscation/hidden code"),!s){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(s)break;s=!!n.test(e)&&"obfuscation/hidden code"}}}if(!s)return;wn[e]={suspect:!0,name:Dn[e].split("/").pop(),type:Dn[e].endsWith(".js")?"Plugin":"Theme",harm:s},console.log(`Found potentially dangerous ${wn[e].type.toLowerCase()}: ${wn[e].name}`),Bn(n,wn[e],wn[e].name)}(n,s,t);const o=await r.json();wn[n]=o,Bn(t,o,e.filename)}).catch(()=>{})};if(Sn[e.url])return n(Sn[e.url]);En()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(t=>{if(200!==t.status)throw new Error("File doesn't exist.");const s=Cn.createHash("sha256");let r=Buffer.alloc(0);t.body.on("data",e=>{r=Buffer.concat([r,e]),s.update(e)}),t.body.on("end",()=>{const t=s.digest("hex");Sn[e.url]=t,Dn[t]=e.url,n(t,r)})}).catch(()=>{})}(e,t)})}start(){}};const Dn={};let kn=BDModules.get(e=>e.flowerStarContainer)[0],Mn=BDModules.get(e=>e.childContainer)[0];function Bn(e,t,n){const s=document.getElementById(e);if(s&&!(s.childNodes.length>0))if(kn||(kn=BDModules.get(e=>e.flowerStarContainer)[0]),Mn||(Mn=BDModules.get(e=>e.childContainer)[0]),console.log(t),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(),P.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)}o.reactDom.render(o.react.createElement(pe,{text:t.type+" "+t.name+" is potentially dangerous."},o.react.createElement("div",{className:kn.flowerStarContainer,style:{width:"16px",height:"16px"}},o.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 40 32"},o.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 t.official?(s.parentNode.style.borderColor="#4087ed",o.reactDom.render(o.react.createElement(pe,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},o.react.createElement("div",{className:kn.flowerStarContainer,style:{width:"16px",height:"16px"}},o.react.createElement("svg",{className:kn.flowerStar,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},o.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"})),o.react.createElement("div",{className:Mn.childContainer},o.react.createElement("svg",{"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},o.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"}))))),s)):(s.parentNode.style.borderColor="#4087ed",o.reactDom.render(o.react.createElement(pe,{text:t.type+" "+t.name+" is certified by Lightcord."},o.react.createElement("div",{className:kn.flowerStarContainer,style:{width:"16px",height:"16px"}},o.react.createElement("svg",{className:kn.flowerStar,"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},o.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"})),o.react.createElement("div",{className:Mn.childContainer},o.react.createElement("svg",{"aria-hidden":"false",width:"16px",height:"16px",viewBox:"0 0 16 15.2"},o.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),s))}function Nn(){return(Nn=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];class An extends React.Component{render(){const e=this.props;return delete e.href.target,console.log(e),React.createElement(e.Anchor,Pn({href:"/users/"+e.user.id},e.href,{onClick:t=>{t.preventDefault(),$n||($n=BDModules.get(e=>e.default&&e.default.open&&e.default.fetchMutualFriends)[0]),$n.default.open(e.user.id)}}),React.createElement("svg",Pn({viewBox:"0 0 31.3 29.5"},e.svg,{height:"100%"}),React.createElement("path",{d:"M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1",fill:"rgba(227,6,19,.6)"}),React.createElement("path",{d:"M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z",fill:"#e30613"})))}}function Tn(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))}const On={};let jn=[];var Rn=new class{constructor(){this._cache={badges:{}}}get cache(){return this._cache}set cache(e){return"object"!=typeof e||"object"!=typeof this._cache?this._cache=e:this._cache=Object.assign(this._cache,e)}async delete(){return BdApi.showToast("Deleting all infos about you on Lightcord Servers...",{type:"warn"}),In(Wn.delete,"delete").then(async e=>{if(200!==e.status)throw BdApi.showToast("An error occured, couldn't delete informations. See console for more infos",{type:"error"}),new Error(`Couldn't delete all informations: ${e.status+" "+e.statusText+" "+await e.text()}`);return console.info("Succesfully deleted informations."),BdApi.showToast("Succesfully deleted informations",{type:"success"}),window.Lightcord.Api.Authorization=null,e.json()}).catch(e=>{throw BdApi.showToast("An error occured, couldn't delete informations. See console for more infos",{type:"error"}),new Error(`Couldn't delete all informations: ${e.stack}`)})}async getBadges(e){if(this.cache.badges[e])return this.cache.badges[e];if(On[e])return On[e];let t;const n=new Promise(e=>t=e);On[e]=n;const s=[];for(let t of Fn.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{jn.push([e,t]),setTimeout(()=>{let e=jn;0!==e.length&&(jn=[],In(Wn.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();console.log(n);for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Fn.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Fn.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 On[e],s}};const In=function(e,t,n){return E["lightcord-5"]?(console.log(`Sending request on ${e} with method ${t} and body`,n),En()(`${Fn.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}})):(console.warn(`Canceling request on ${e} with method ${t} and body`,n,"because of settings."),Promise.reject(new _n("The current settings blocked the request.")))};class _n extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Fn={SERVER_URL:"http://127.0.0.1",badges:[{name:"Lightcord User",id:"01cfa7b0-7cdb-4b0e-8258-9c6a78235c93",defaultUsers:[],scopes:["user"],component:An},{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:[],scopes:[],component:Ln,href:"https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"}]},Wn={badges:"/users/badges",delete:"/delete"},Un={EmojiRegex://g};let zn=BDModules.get(e=>e.CustomEmoji)[0],Hn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],qn=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],Gn=BDModules.get(e=>e.getAutocompleteOptions)[0],Vn=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],Jn=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],Zn=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],Yn=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);new class{constructor(){this.init()}async init(){if(qn||(qn=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),Gn||(Gn=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),Vn||(Vn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),Jn||(Jn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),Zn||(Zn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),Yn||(Yn=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),qn&&Gn&&Vn&&Jn&&Zn&&Yn){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",Gn);const e=Gn.getAutocompleteOptions;Gn.getAutocompleteOptions=function(t,n,s,r,o){const a=e.call(this,...arguments);return a.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return ss(n),n},queryResults:e=>Vn.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>Kn(e,t,r.emojis,n,s,Jn.default.Messages.EMOJI_MATCHING,Jn.default.Messages.EMOJI,qn.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?Zn.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+">"}},a}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!o.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=P.monkeyPatch(o.MessageComponent,"default",{before:e=>{if(!P.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=P.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=Un.EmojiRegex.exec(e),r){o=!0,Hn||(Hn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=Hn.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?(zn||(zn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(zn.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)}};function Kn(e,t,n,s,r,o,a,i,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(i,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[Qn(o,a,e,c),d]}function Qn(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(qn.default.Title,{title:r},r)}Qn.displayName="renderHeader";let Xn=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],es=Xn&&Xn.default.isEmojiDisabled,ts=!1,ns=!1;function ss(e){ts=e,ns||(Xn||(Xn=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),Xn&&(es||(es=Xn.default.isEmojiDisabled),ns=!0,Xn.default.isEmojiDisabled=function(e){return ts?!(!e.surrogates&&!e.diversity):es.call(this,...arguments)}))}function rs(){}rs.prototype.setConfig=function(e){Object.assign(D,e)},rs.prototype.init=async function(){if(!Array.prototype.flat)return void P.alert("Not Supported","BetterDiscord v"+g+" does not support this old version ("+p+") of Discord. Please update your Discord installation before proceeding.");if(D.version
Please download the latest version from GitHub");if(window.ED)return void P.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 P.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");const e=D.updater?D.updater.LatestVersion:D.latestVersion;e>D.version&&P.showConfirmationModal("Update Available",[`There is an update available for BandagedBD's Injector (${e}).`,"You can either update and restart now, or later."],{confirmText:"Update Now",cancelText:"Maybe Later",onConfirm:async()=>{const e=()=>{P.alert("Could Not Update","Unable to update automatically, please download the installer and reinstall normally.

Download Installer")};try{if(!await this.updateInjector())return e();const t=n(0).remote.app;t.relaunch(),t.exit()}catch(t){e()}}}),P.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),o.initialize(),P.log("Startup","Updating Settings"),gn.initializeSettings(),P.log("Startup","Loading Plugins"),await O.loadPlugins(),P.log("Startup","Loading Themes"),await R.loadThemes(),L.addStyle("customcss",atob(Q.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){E["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),xn.start(),P.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),P.log("Startup","Initializing Main Observer"),this.initObserver(),E["fork-ps-1"]&&(P.log("Startup","Collecting Startup Errors"),P.showContentErrors({plugins:S,themes:x}));const t=Q.getBDData("version");g>t&&(b&&this.showChangelogModal(b),Q.setBDData("version",g));if(P.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),P.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),P.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),P.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),P.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),P.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),P.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),D.haveInstalledDefault){let e=P.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 s=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");s&&(s.innerHTML='\n \n \n \n')},rs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=o.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=o.guildClasses.listItem.split(" ")[0],a=o.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${a}`).length>0||e>=50?t(D.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},rs.prototype.injectExternals=async function(){await L.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},rs.prototype.initSettings=function(){if(Q.initialize(),Q.getSettingGroup("settings")||Q.getSettingGroup("rpc")){gn.loadSettings();for(const e in y)null==E[e]&&(E[e]=y[e],gn.saveSettings())}else Q.getSettingGroup("settings")||Object.assign(E,y),Q.getSettingGroup("rpc")||Object.assign(C,w),gn.saveSettings()},rs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer,BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks];s.classList.contains(r)&&(s.getElementsByClassName("guild-settings-base-section").length&&s.setAttribute("layer-id","server-settings"),s.getElementsByClassName(o).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"),document.getElementById("bd-settings-sidebar")||gn.renderSidebar())),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},rs.prototype.showChangelogModal=function(e={}){return P.showChangelogModal(e)},rs.prototype.alert=function(e,t){return P.alert(e,t)},rs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l(e=>"TabBar"==e.displayName),t=l(e=>"Anchor"==e.displayName);e&&(this.socialPatch=P.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(o.React.createElement(pe,{color:"black",side:"top",text:"Lightcord"},o.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},o.React.createElement(vn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(o.React.createElement(pe,{color:"black",side:"top",text:"BandagedBD"},o.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},o.React.createElement(fn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,a,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const l=`(${D.hash?D.hash.substring(0,7):D.branch})`,c=[o.react.createElement("div",{className:`${s} ${a.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,o.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),o.react.createElement("div",{className:`${s} ${a.size12}`},`BBD ${g} `,o.react.createElement("span",{className:i+" da-versionHash"},l))],d=n[n.length-1].type;n[n.length-1].type=function(){const e=d(...arguments);return e.props.children.splice(1,0,c),e}}}))};function os(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;const r=l(e=>"Anchor"==e.displayName);Rn.getBadges(t.id).then(e=>{e.forEach(e=>{const a={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(a.user=t)}),e.href||(a.Anchor=r,a.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=o.React.createElement(pe,{color:"black",side:"top",text:e.name},e.href?o.react.createElement(r,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},o.React.createElement(e.component,a)):o.React.createElement(e.component,a)),l=document.createElement("div");o.reactDom.render(i,l),l.childNodes.forEach(e=>{s.appendChild(e)})})})})}rs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=d("wrapper","unreadMentionsBar"),t=d("guildsError","selected"),n=d("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=o.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=P.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;return t.props.className+=" bd-guild",n.unread&&(t.props.className+=" bd-unread"),n.selected&&(t.props.className+=" bd-selected"),n.audio&&(t.props.className+=" bd-audio"),n.video&&(t.props.className+=" bd-video"),n.badge&&(t.props.className+=" bd-badge"),n.animatable&&(t.props.className+=" bd-animatable"),t}}}))},rs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=P.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}}))},rs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=u("Guilds"),t=d("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=P.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},rs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=P.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0]||null,n=P.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=Tn();n.push(o.react.createElement("div",{id:"certified-"+s})),xn.patch(t,"certified-"+s)}}))},rs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=d("MessageTimestamp"),t=l(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=P.monkeyPatch(e,"default",{after:e=>{const n=P.getNestedProp(e.methodArguments[0],"message.author"),s=P.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(o.React.createElement(pe,{color:"black",side:"top",text:"BandagedBD Developer"},o.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},o.React.createElement(fn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(o.React.createElement(pe,{color:"black",side:"top",text:"Lightcord Developer"},o.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},o.React.createElement(vn,{size:"16px",className:"bd-logo"}))));const r=Tn();s.push(o.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),os(r,n,!0)}}))},rs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=u("MemberListItem"),t=l(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=P.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=P.getNestedProp(e.thisObject,"props.user"),s=P.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(o.React.createElement(pe,{color:"black",side:"top",text:"BandagedBD Developer"},o.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},o.React.createElement(fn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(o.React.createElement(pe,{color:"black",side:"top",text:"Lightcord Developer"},o.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},o.React.createElement(vn,{size:"32px",className:"bd-logo"}))));const r=Tn();s.push(o.React.createElement("div",{id:"badges-"+r})),os(r,n,!1)}}))},rs.prototype.updateInjector=async function(){const e=Q.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),a=n(9),i=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",d=s.resolve(i,"injector.zip"),u=s.resolve(i,"BetterDiscordApp-injector");P.log("InjectorUpdate","Downloading "+c);let h=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(d,e))&&await new Promise(e=>t.rename(d,`${d}.bak${Math.round(performance.now())}`,e)),P.log("InjectorUpdate","Writing "+d),t.writeFile(d,r,t=>e(!t))})});if(!h)return h;await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e));const p=await new Promise(e=>o.open(d,{lazyEntries:!0},(t,n)=>e(n)));p.on("entry",(function(e){if(e.fileName.endsWith("/"))return p.readEntry();P.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(i,e.fileName);a.sync(s.dirname(n)),p.openReadStream(e,(function(e,s){if(e)return h=!1;s.on("end",(function(){p.readEntry()})),s.pipe(t.createWriteStream(n))}))})),p.readEntry(),await new Promise(e=>p.once("end",e));const m=s.resolve(i,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,m,n)),P.log("InjectorUpdate",`Renaming ${s.basename(u)} to ${l}`),h=await new Promise(n=>t.rename(u,e,e=>n(!e))),h?h?(await new Promise(e=>r(m,e)),await new Promise(e=>t.unlink(d,e)),P.log("InjectorUpdate","Injector Updated!"),h):(P.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(u,e)),await new Promise(n=>t.rename(m,e,n)),h):(P.err("InjectorUpdate","Failed to rename the final directory"),h)};var as=new rs;const is={get React(){return o.React},get ReactDOM(){return o.ReactDom},get ReactComponent(){return o.ReactComponent},get WindowConfigFile(){return P.WindowConfigFile},get settings(){return v},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 P.getAllWindowPreferences()},getWindowPreference:function(e){return P.getWindowPreference(e)},setWindowPreference:function(e,t){return P.setWindowPreference(e,t)},injectCSS:function(e,t){L.addStyle(L.escapeID(e),t)},clearCSS:function(e){L.removeStyle(L.escapeID(e))},linkJS:function(e,t){L.addScript(L.escapeID(e),t)},unlinkJS:function(e){L.removeScript(L.escapeID(e))},getPlugin:function(e){return M.hasOwnProperty(e)?M[e].plugin:null},getCore:function(){return P.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),as},alert:function(e,t){return P.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return P.showConfirmationModal(e,t,n)},showToast:function(e,t={}){P.showToast(e,t)},findModule:function(e){return o.WebpackModules.find(e)},findAllModules:function(e){return o.WebpackModules.findAll(e)},findModuleByProps:function(...e){return o.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return o.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return o.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),o.getInternalInstance(e)},loadData:function(e,t){return Q.getPluginData(e,t)}};is.getData=is.loadData,is.saveData=function(e,t,n){return Q.setPluginData(e,t,n)},is.setData=is.saveData,is.deleteData=function(e,t){return Q.deletePluginData(e,t)},is.monkeyPatch=function(e,t,n){return P.monkeyPatch(e,t,n)},is.onRemoved=function(e,t){return P.onRemoved(e,t)},is.suppressErrors=function(e,t){return P.suppressErrors(e,t)},is.testJSON=function(e){return P.testJSON(e)},is.isPluginEnabled=function(e){return!!B[e]},is.isThemeEnabled=function(e){return!!N[e]},is.isSettingEnabled=function(e){return!!E[e]},is.enableSetting=function(e){return gn.onChange(e,!0)},is.disableSetting=function(e){return gn.onChange(e,!1)},is.toggleSetting=function(e){return gn.onChange(e,!E[e])},is.getBDData=function(e){return Q.getBDData(e)},is.setBDData=function(e,t){return Q.setBDData(e,t)};const ls=(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)}};is.Plugins=ls(B,M,O),is.Themes=ls(N,k,R);var cs=is;n.d(t,"default",(function(){return hs})),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 ds=(e,t)=>{Object.defineProperty(window,e,{get:()=>(P.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},us=Object.keys(s);for(const e of us)ds(e,s[e]);ds("BDV2",o),ds("pluginModule",O),ds("themeModule",R),ds("Utils",P),ds("BDEvents",A),ds("settingsPanel",gn),ds("DataStore",Q),ds("ContentManager",V),ds("ClassNormalizer",Te),window.BdApi=cs,ds("mainCore",as);class hs{constructor(e){as.setConfig(e)}init(){as.init()}}n(10)}]); \ No newline at end of file diff --git a/BetterDiscordApp/src/0globals.js b/BetterDiscordApp/src/0globals.js index 8ac1c89..27a8e6c 100644 --- a/BetterDiscordApp/src/0globals.js +++ b/BetterDiscordApp/src/0globals.js @@ -93,7 +93,7 @@ export const settings = { "Calling Ring Beat": {id: "lightcord-2", info: "Enable Discord's special calling beat.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, "Developer Options": {id: "lightcord-1", info: "Enable Discord's Internal Developer Options. This allow the \"Experiments\" tab and the \"Developer Options\" tab. (must close and reopen settings)", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, "Ad Block": {id: "lightcord-4", info: "Block any BOT that dm you with an invite link. Even in an embed.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, - "Enable Lightcord Servers": {id: "lightcord-5", info: "Disabling it erase any informations about you in our servers. But you won't see anything like custom badges.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, + "Enable Lightcord Servers": {id: "lightcord-5", info: "Enable Lightcord's servers. Disabling this will disable custom badges.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, /** Lightcord Window */ "Always-on-Top": {id: "lightcord-3", info: "Enable window's Always-on-Top mode, where Lightcord stays on top of other applications.", implemented: true, hidden: false, cat: "lightcord", category: "Window"}, diff --git a/BetterDiscordApp/src/modules/CustomRichPresence.js b/BetterDiscordApp/src/modules/CustomRichPresence.js index 9de481e..dc83811 100644 --- a/BetterDiscordApp/src/modules/CustomRichPresence.js +++ b/BetterDiscordApp/src/modules/CustomRichPresence.js @@ -1,6 +1,4 @@ -import {settingsCookie, settingsRPC, defaultRPC} from "../0globals"; -import BDV2 from "./v2"; -import Utils from "./utils"; +import {settingsRPC, defaultRPC} from "../0globals"; const dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default const ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes diff --git a/BetterDiscordApp/src/modules/distant.js b/BetterDiscordApp/src/modules/distant.js index 28b7cbb..64b156a 100644 --- a/BetterDiscordApp/src/modules/distant.js +++ b/BetterDiscordApp/src/modules/distant.js @@ -1,6 +1,7 @@ import BugHunterBadge from "../svg/bug_hunter" import LightcordUserBadge from "../svg/LightcordUser"; import nodeFetch from "node-fetch" +import { settingsCookie } from "../0globals"; export function uuidv4() { // Generate UUID (No crypto rng) return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { @@ -67,7 +68,7 @@ export default new class DistantServer { } const fetchedBadges = await new Promise((resolve) => { badgesToFetch.push([user, resolve]) - setImmediate(() => { + setTimeout(() => { let users = badgesToFetch if(users.length === 0)return badgesToFetch = [] @@ -90,7 +91,7 @@ export default new class DistantServer { data[1]([])// resolve no badge fetched }) }) - }) + }, 0) }) for(let badge of fetchedBadges){ if(!Constants.badges.find(e => e.id === badge))continue // We do not have the Component, skip it. @@ -111,6 +112,10 @@ export default new class DistantServer { } const handleRequest = function(route, method, data){ + if(!settingsCookie["lightcord-5"]){ + console.warn(`Canceling request on ${route} with method ${method} and body`, data, "because of settings.") + return Promise.reject(new LightcordError("The current settings blocked the request.")) + } console.log(`Sending request on ${route} with method ${method} and body`, data) return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, { method, @@ -124,6 +129,14 @@ const handleRequest = function(route, method, data){ }) } +class LightcordError extends Error { + constructor(){ + super(...arguments) + this.name = "LightcordError" + + } +} + export const Constants = { SERVER_URL: "http://127.0.0.1", badges: [ diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/index.js b/modules/discord_desktop_core/core/app/BetterDiscord/index.js index 04ca4e3..a7f778e 100644 --- a/modules/discord_desktop_core/core/app/BetterDiscord/index.js +++ b/modules/discord_desktop_core/core/app/BetterDiscord/index.js @@ -194,6 +194,7 @@ async function privateInit(){ require("../../../../../LightcordApi/js/main") + /* if(shouldShowPrompt){ let onConn = (ev) => { console.log(`Showing auth window.`, ev) @@ -262,7 +263,7 @@ async function privateInit(){ authWindow.loadURL("lightcord://index.html") } dispatcher.subscribe(constants.ActionTypes.CONNECTION_OPEN || "CONNECTION_OPEN", onConn) - } + }*/ const BetterDiscord = window.BetterDiscord = window.mainCore = new(require("../../../../../BetterDiscordApp/js/main.js").default)(BetterDiscordConfig)