From 13a0b77db94f114238937f9ae83971403bb91fb5 Mon Sep 17 00:00:00 2001 From: andrey-git Date: Sun, 24 Mar 2019 12:04:21 +0200 Subject: [PATCH] Release 2019-03-24 --- CHANGELOG.md | 4 ++ README.md | 7 ++++ scripts-dbg-es5.js | 69 +++++++++++++++++++++++-------- scripts-dbg.js | 69 +++++++++++++++++++++++-------- scripts-es5.js.map | 2 +- scripts.js.map | 2 +- src/utils/version.js | 2 +- state-card-custom-ui-es5.html | 2 +- state-card-custom-ui-es5.html.gz | Bin 12081 -> 12205 bytes state-card-custom-ui.html | 4 +- state-card-custom-ui.html.gz | Bin 10207 -> 10330 bytes 11 files changed, 119 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bad745..1a43fb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changelog +#### 2019-03-24 +* Fix for `icon-color` for HA 0.88+ +* Fox config panel for HA 0.90+ + #### 2019-01-13 * Hotfix for `extra_badge` for HA 0.85+ diff --git a/README.md b/README.md index 2541e46..d3eb86f 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,13 @@ Please ask questions and post feature requests in the [forum](https://community. ## Changelog +#### 2019-03-24 +* Fix for `icon-color` for HA 0.88+ +* Fox config panel for HA 0.90+ + +#### 2019-01-13 +* Hotfix for `extra_badge` for HA 0.85+ + #### 2018-12-17 * Hotfix for HA 0.84.1+ diff --git a/scripts-dbg-es5.js b/scripts-dbg-es5.js index 423a5f5..67a0fbf 100644 --- a/scripts-dbg-es5.js +++ b/scripts-dbg-es5.js @@ -1182,7 +1182,7 @@ __webpack_require__.r(__webpack_exports__); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _templateObject() { - var data = _taggedTemplateLiteral(["\n \n \n \n \n \n
Custom UI settings
\n
\n
\n\n \n \n
\n Set device name so that you can reference it in per-device settings\n \n
\n
\n
\n
\n "]); + var data = _taggedTemplateLiteral(["\n \n \n \n \n \n
Custom UI settings
\n
\n
\n\n \n \n
\n Set device name so that you can reference it in per-device settings\n \n
\n
\n
\n
\n "]); _templateObject = function _templateObject() { return data; @@ -2781,7 +2781,7 @@ window.customUI = window.customUI || { } }); } - } else { + } else if (haPanelConfig.shadowRoot) { var root = haPanelConfig.shadowRoot || haPanelConfig; if (root.lastElementChild.tagName !== 'HA-CONFIG-CUSTOM-UI') { @@ -2792,6 +2792,19 @@ window.customUI = window.customUI || { var visible = window.location.pathname.startsWith('/config/customui'); root.lastElementChild.style.display = visible ? '' : 'none'; + } else if (haPanelConfig.routerOptions && haPanelConfig.routerOptions.routes) { + if (!haPanelConfig.routerOptions.routes.customui) { + haPanelConfig.routerOptions.routes.customui = { + tag: 'ha-config-custom-ui', + load: function load() { + return Promise.resolve(); + } + }; // CustomUI panel is the entrypoint, so we need to reload the page. + + if (window.location.pathname.startsWith('/config/customui')) { + haPanelConfig.update(new Map([['route', undefined]])); + } + } } }, installStatesHook: function installStatesHook() { @@ -2922,20 +2935,40 @@ window.customUI = window.customUI || { installStateBadge: function installStateBadge() { customElements.whenDefined('state-badge').then(function () { var stateBadge = customElements.get('state-badge'); - if (!stateBadge || !stateBadge.prototype._updateIconAppearance) return; - var originalUpdateIconAppearance = stateBadge.prototype._updateIconAppearance; // Use named function to preserve 'this'. - - stateBadge.prototype._updateIconAppearance = function customUpdateIconAppearance(stateObj) { - if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { - this.style.backgroundImage = ''; - Object.assign(this.$.icon.style, { - color: stateObj.attributes.icon_color, - filter: '' - }); - } else { - originalUpdateIconAppearance.call(this, stateObj); - } - }; + if (!stateBadge) return; + + if (stateBadge.prototype._updateIconAppearance) { + var originalUpdateIconAppearance = stateBadge.prototype._updateIconAppearance; // Use named function to preserve 'this'. + + stateBadge.prototype._updateIconAppearance = function customUpdateIconAppearance(stateObj) { + if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { + this.style.backgroundImage = ''; + Object.assign(this.$.icon.style, { + color: stateObj.attributes.icon_color, + filter: '' + }); + } else { + originalUpdateIconAppearance.call(this, stateObj); + } + }; + } else if (stateBadge.prototype.updated) { + var originalUpdated = stateBadge.prototype.updated; // Use named function to preserve 'this'. + + stateBadge.prototype.updated = function customUpdated(changedProps) { + if (!changedProps.has('stateObj')) return; + var stateObj = this.stateObj; + + if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { + this.style.backgroundImage = ''; + Object.assign(this._icon.style, { + color: stateObj.attributes.icon_color, + filter: '' + }); + } else { + originalUpdated.call(this, changedProps); + } + }; + } }); }, installHaAttributes: function installHaAttributes() { @@ -3074,9 +3107,9 @@ window.customUI.init(); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ('20190113'); +/* harmony default export */ __webpack_exports__["default"] = ('20190324'); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9keW5hbWljX2NvbnRlbnRfdXBkYXRlci5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX2RvbWFpbi50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX3N0YXRlLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfc3RhdGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2dldF9ncm91cF9lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9nZXRfdmlld19lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvc3VwcG9ydHMtZmVhdHVyZS50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvdXRpbC9oYXNzLWF0dHJpYnV0ZXMtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvYm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2N1aS1iYXNlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2R5bmFtaWMtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvZHluYW1pYy13aXRoLWV4dHJhLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS1jb25maWctY3VzdG9tLXVpLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS10aGVtZWQtc2xpZGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9zdGF0ZS1jYXJkLWN1c3RvbS11aS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRoLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWl4aW5zL2V2ZW50cy1taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaGFzcy1hdHRyaWJ1dGUtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiREVGQVVMVF9ET01BSU5fSUNPTiIsIkRFRkFVTFRfUEFORUwiLCJET01BSU5TX1dJVEhfQ0FSRCIsIkRPTUFJTlNfV0lUSF9NT1JFX0lORk8iLCJET01BSU5TX0hJREVfTU9SRV9JTkZPIiwiRE9NQUlOU19NT1JFX0lORk9fTk9fSElTVE9SWSIsIlNUQVRFU19PRkYiLCJET01BSU5TX1RPR0dMRSIsIlNldCIsIlVOSVRfQyIsIlVOSVRfRiIsIkRFRkFVTFRfVklFV19FTlRJVFlfSUQiLCJhcHBseVRoZW1lc09uRWxlbWVudCIsImVsZW1lbnQiLCJ0aGVtZXMiLCJsb2NhbFRoZW1lIiwidXBkYXRlTWV0YSIsIl90aGVtZXMiLCJ0aGVtZU5hbWUiLCJkZWZhdWx0X3RoZW1lIiwic3R5bGVzIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbWUiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByZWZpeGVkS2V5IiwidXBkYXRlU3R5bGVzIiwid2luZG93IiwiU2hhZHlDU1MiLCJzdHlsZVN1YnRyZWUiLCJtZXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiaGFzQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwidGhlbWVDb2xvciIsImR5bmFtaWNDb250ZW50VXBkYXRlciIsInJvb3QiLCJuZXdFbGVtZW50VGFnIiwiYXR0cmlidXRlcyIsInJvb3RFbCIsImN1c3RvbUVsIiwibGFzdENoaWxkIiwidGFnTmFtZSIsInJlbW92ZUNoaWxkIiwiY3JlYXRlRWxlbWVudCIsInRvTG93ZXJDYXNlIiwic2V0UHJvcGVydGllcyIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsImNhblRvZ2dsZURvbWFpbiIsImhhc3MiLCJkb21haW4iLCJzZXJ2aWNlcyIsImNhblRvZ2dsZVN0YXRlIiwic3RhdGVPYmoiLCJzdGF0ZSIsImNvbXB1dGVEb21haW4iLCJlbnRpdHlJZCIsInN1YnN0ciIsImluZGV4T2YiLCJjb21wdXRlU3RhdGVEb21haW4iLCJlbnRpdHlfaWQiLCJnZXRHcm91cEVudGl0aWVzIiwiZW50aXRpZXMiLCJncm91cCIsInJlc3VsdCIsImVudGl0eSIsImdldFZpZXdFbnRpdGllcyIsInZpZXciLCJ2aWV3RW50aXRpZXMiLCJoaWRkZW4iLCJncm91cEVudGl0aWVzIiwiZ3JFbnRpdHlJZCIsImdyRW50aXR5Iiwic3RhdGVDYXJkVHlwZSIsImluY2x1ZGVzIiwiY29udHJvbCIsInN1cHBvcnRzRmVhdHVyZSIsImZlYXR1cmUiLCJzdXBwb3J0ZWRfZmVhdHVyZXMiLCJoYXNzQXR0cmlidXRlVXRpbCIsIkRPTUFJTl9ERVZJQ0VfQ0xBU1MiLCJiaW5hcnlfc2Vuc29yIiwiY292ZXIiLCJzZW5zb3IiLCJVTktOT1dOX1RZUEUiLCJBRERfVFlQRSIsIlRZUEVfVE9fVEFHIiwic3RyaW5nIiwianNvbiIsImljb24iLCJib29sZWFuIiwiYXJyYXkiLCJMT0dJQ19TVEFURV9BVFRSSUJVVEVTIiwiZW50aXR5X3BpY3R1cmUiLCJ1bmRlZmluZWQiLCJmcmllbmRseV9uYW1lIiwidHlwZSIsImRlc2NyaXB0aW9uIiwiZW11bGF0ZWRfaHVlIiwiZG9tYWlucyIsImVtdWxhdGVkX2h1ZV9uYW1lIiwiaGFhc2thX2hpZGRlbiIsImhhYXNrYV9uYW1lIiwiaG9tZWJyaWRnZV9oaWRkZW4iLCJob21lYnJpZGdlX25hbWUiLCJhdHRyaWJ1dGlvbiIsImN1c3RvbV91aV9tb3JlX2luZm8iLCJjdXN0b21fdWlfc3RhdGVfY2FyZCIsImRldmljZV9jbGFzcyIsIm9wdGlvbnMiLCJhc3N1bWVkX3N0YXRlIiwiaW5pdGlhbF9zdGF0ZSIsInVuaXRfb2ZfbWVhc3VyZW1lbnQiLCJKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5IiwicHJvcCIsIkxpdGVyYWxTdHJpbmciLCJ2YWx1ZSIsInRvU3RyaW5nIiwibGl0ZXJhbFZhbHVlIiwiRXJyb3IiLCJodG1sVmFsdWUiLCJIVE1MVGVtcGxhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiaHRtbCIsInN0cmluZ3MiLCJ0ZW1wbGF0ZSIsInZhbHVlcyIsInJlZHVjZSIsImFjYyIsInYiLCJpZHgiLCJodG1sTGl0ZXJhbCIsIkN1aUJhc2VFbGVtZW50IiwiZXh0cmFzIiwiZXh0cmFfZGF0YV90ZW1wbGF0ZSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImV4dHJhIiwiY3VzdG9tVUkiLCJjb21wdXRlVGVtcGxhdGUiLCJzdGF0ZXMiLCJmaWx0ZXIiLCJpbkRpYWxvZyIsImxlbmd0aCIsInNob3dfbGFzdF9jaGFuZ2VkIiwiQm9vbGVhbiIsImNvbnRyb2xFbGVtZW50IiwiU3RyaW5nIiwiY29tcHV0ZWQiLCJQb2x5bWVyIiwiRWxlbWVudCIsIkR5bmFtaWNFbGVtZW50IiwiZWxlbWVudE5hbWUiLCJ0b1VwcGVyQ2FzZSIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIiwid2hlbkRlZmluZWQiLCJ0aGVuIiwiRHluYW1pY1dpdGhFeHRyYSIsIl9hdHRhY2hlZCIsIl9pc0F0dGFjaGVkIiwiYXR0YWNoZWQiLCJleHRyYV9iYWRnZSIsImV4dHJhQmFkZ2VzIiwiZXh0cmFCYWRnZSIsIm1heWJlQ2hhbmdlT2JqZWN0IiwiYXR0cmlidXRlIiwidW5pdCIsImJsYWNrbGlzdCIsImJsYWNrbGlzdF9zdGF0ZXMiLCJzb21lIiwiUmVnRXhwIiwidGVzdCIsIl9lbnRpdHlEaXNwbGF5IiwiZXh0cmFPYmoiLCJleHRyYU9ialZpc2libGUiLCJoaWRlX2NvbnRyb2wiLCJoYUxvY2FsaXplIiwibG9jYWxpemUiLCJjb25maXJtX2NvbnRyb2xzIiwiY29uZmlybV9jb250cm9sc19zaG93X2xvY2siLCJlIiwic3R5bGUiLCJwb2ludGVyRXZlbnRzIiwibG9jayIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwicXVlcnlTZWxlY3RvckFsbCIsImVsZW0iLCJhcHBseVRoZW1lcyIsImdldCIsIkhhQ29uZmlnQ3VzdG9tVWkiLCJuYW1lIiwiZ2V0TmFtZSIsInNldE5hbWUiLCJoaXN0b3J5IiwiYmFjayIsImZpcmUiLCJpc1dpZGUiLCJvYnNlcnZlciIsIkhhVGhlbWVkU2xpZGVyIiwiZGlzYWJsZU9mZldoZW5NaW4iLCJfY29tcHV0ZUF0dHJpYnV0ZSIsImNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJfZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkIiwiYXR0ciIsImRlZiIsImlzT24iLCJ0aGVtZWRNaW4iLCJldiIsInRhcmdldCIsIm1pbiIsIk51bWJlciIsIm1heCIsInBpbiIsIm5vdGlmeSIsIl90aGVtZWRNaW4iLCJTSE9XX0xBU1RfQ0hBTkdFRF9CTEFDS0xJU1RFRF9DQVJEUyIsIkRPTUFJTl9UT19TTElERVJfU1VQUE9SVCIsImxpZ2h0IiwiY2xpbWF0ZSIsIlRZUEVfVE9fQ09OVFJPTCIsInRvZ2dsZSIsImRpc3BsYXkiLCJTdGF0ZUNhcmRDdXN0b21VaSIsImNvbnRhaW5lciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiX2NvbnRhaW5lciIsInNldFByb3BlcnR5IiwiaW5wdXRDaGFuZ2VkIiwibWFyZ2luIiwicGFkZGluZyIsImlkIiwiY29uc29sZSIsIndhcm4iLCJiYWRnZXNfbGlzdCIsInB1c2giLCJwYXJhbXMiLCJ3aWR0aCIsImZvbnRTaXplIiwibW9kaWZpZWRPYmoiLCJ0aGVtZVRhcmdldCIsIm9iaiIsInN0YXRlX2NhcmRfbW9kZSIsIm1heWJlSGlkZUVudGl0eSIsImJhZGdlTW9kZSIsInJlZ3VsYXJNb2RlXyIsImNsZWFuQmFkZ2VTdHlsZSIsIm9yaWdpbmFsU3RhdGVDYXJkVHlwZSIsImN1c3RvbVN0YXRlQ2FyZFR5cGUiLCJzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlIiwic3RhdGVfY2FyZF9jdXN0b21fdWlfc2Vjb25kYXJ5Iiwic2xpZGVyRWxpZ2libGVfIiwic2VydmljZU1pbiIsInNlcnZpY2VNYXgiLCJ2YWx1ZU5hbWUiLCJzZXRWYWx1ZU5hbWUiLCJuYW1lT24iLCJtaW5fdGVtcCIsIm1heF90ZW1wIiwiY29udHJvbF9lbGVtZW50IiwiU3RhdGVDYXJkV2l0aFNsaWRlciIsIl9vbklyb25SZXNpemUiLCJiaW5kIiwiX2lzQ29ubmVjdGVkIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl93YWl0Rm9yTGF5b3V0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9zZXRNb2RlIiwiX2ZyYW1lSWQiLCJyZWFkeVRvQ29tcHV0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImhpZGVTbGlkZXIiLCJtb2RlIiwibGluZVRvb0xvbmciLCJicmVha1NsaWRlciIsInNob3dTbGlkZXIiLCJwcmV2QnJlYWtTbGlkZXIiLCJwcmV2SGlkZVNsaWRlciIsIiQiLCJjb250YWluZXJXaWR0aCIsImNsaWVudFdpZHRoIiwibWluTGluZUJyZWFrIiwibWF4TGluZUJyZWFrIiwiY29udGFpbmVySGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwic3RhdGVIZWlnaHQiLCJzdHJldGNoU2xpZGVyIiwicGFyc2VJbnQiLCJwYXJhbSIsImlzTmFOIiwicGF0aCIsImNvbXBvc2VkUGF0aCIsImNhbGxTZXJ2aWNlIiwic2xpZGVyVmFsdWUiLCJzdHJldGNoX3NsaWRlciIsIlN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIiLCJzdXBlckNsYXNzIiwiRXZlbnRzTWl4aW4iLCJkZXRhaWwiLCJldmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJjb21wb3NlZCIsIm5vZGUiLCJkaXNwYXRjaEV2ZW50IiwiU1VQUE9SVEVEX1NMSURFUl9NT0RFUyIsImN1c3RvbVVpQXR0cmlidXRlcyIsImRldmljZSIsInRlbXBsYXRlcyIsIl9zdGF0ZURpc3BsYXkiLCJjb25jYXQiLCJzbGlkZXJfdGhlbWUiLCJoaWRlX2luX2RlZmF1bHRfdmlldyIsImljb25fY29sb3IiLCJkb21Ib3N0IiwiZ2V0Um9vdE5vZGUiLCJEb2N1bWVudEZyYWdtZW50IiwiaG9zdCIsImxpZ2h0T3JTaGFkb3ciLCJzZWxlY3RvciIsInNoYWRvd1Jvb3QiLCJnZXRFbGVtZW50SGllcmFyY2h5IiwiaGllcmFyY2h5Iiwic2hpZnQiLCJnZXRDb250ZXh0IiwiX2NvbnRleHQiLCJncm91cEVudGl0eSIsInJldmVyc2UiLCJmaW5kTWF0Y2giLCJmaW5kIiwib3B0aW9uIiwibWF0Y2giLCJtYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlIiwiYXBwbHlBdHRyaWJ1dGVzIiwibWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwIiwiY29udGV4dCIsImMiLCJfc2V0S2VlcCIsIl9jdWlfa2VlcCIsIm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMiLCJuZXdBdHRyaWJ1dGVzIiwiaGFzR2xvYmFsIiwiaGFzQ2hhbmdlcyIsInVudGVtcGxhdGVkX2F0dHJpYnV0ZXMiLCJ1bnRlbXBsYXRlZF9zdGF0ZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInVudGVtcGxhdGVkX3N0YXRlRGlzcGxheSIsIm1heWJlQXBwbHlUZW1wbGF0ZXMiLCJuZXdSZXN1bHQiLCJjaGVja0F0dHJpYnV0ZXMiLCJsYXN0X2NoYW5nZWQiLCJhbGxvd0hpZGRlbiIsImZpeEdyb3VwVGl0bGVzIiwiaG9tZUFzc2lzdGFudE1haW4iLCJoYUNhcmRzIiwibWFpbiIsImNhcmRzIiwiY2FyZCIsIm5hbWVFbGVtIiwidGV4dENvbnRlbnQiLCJjb250cm9sQ29sdW1ucyIsImNvbHVtbnMiLCJwYXJ0aWFsQ2FyZHMiLCJmIiwiaGFuZGxlV2luZG93Q2hhbmdlIiwiX3VwZGF0ZUNvbHVtbnMiLCJtcWxzIiwibXFsIiwicmVtb3ZlTGlzdGVuZXIiLCJtYXRjaE1lZGlhIiwiYWRkTGlzdGVuZXIiLCJ1c2VDdXN0b21pemVyIiwiY3VzdG9taXplciIsImhpZGVfYXR0cmlidXRlcyIsInVwZGF0ZUNvbmZpZ1BhbmVsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJoYVBhbmVsQ29uZmlnIiwiaGFDb25maWdOYXZpZ2F0aW9uIiwiY3VpUGF0Y2giLCJfb3JpZ2luYWxDb21wdXRlTG9hZGVkIiwiX2NvbXB1dGVMb2FkZWQiLCJfb3JpZ2luYWxDb21wdXRlQ2FwdGlvbiIsIl9jb21wdXRlQ2FwdGlvbiIsIl9vcmlnaW5hbENvbXB1dGVEZXNjcmlwdGlvbiIsIl9jb21wdXRlRGVzY3JpcHRpb24iLCJwYWdlIiwicGFnZXMiLCJjb25mIiwiY2FwdGlvbiIsImxvYWRlZCIsImdldEhhQ29uZmlnQ3VzdG9tVWkiLCJoYUNvbmZpZ0N1c3RvbVVpIiwiaXJvblBhZ2VzIiwibGFzdEVsZW1lbnRDaGlsZCIsInNlbGVjdCIsInZpc2libGUiLCJpbnN0YWxsU3RhdGVzSG9vayIsImhvbWVBc3Npc3RhbnQiLCJfdXBkYXRlSGFzcyIsIm9yaWdpbmFsVXBkYXRlIiwidXBkYXRlIiwibmV3RW50aXR5IiwiX3RoZW1lV2FpdGVycyIsIndhaXRlciIsInN0YXRlQ2hhbmdlZCIsImluc3RhbGxQYXJ0aWFsQ2FyZHMiLCJfZGVmYXVsdFZpZXdGaWx0ZXIiLCJleGNsdWRlcyIsImV4Y2x1ZGVFbnRpdHlJZCIsImluc3RhbGxBY3Rpb25OYW1lIiwia2xhc3MiLCJkZWZpbmVQcm9wZXJ0eSIsImN1c3RvbUxvY2FsaXplIiwiYWN0aW9uX25hbWUiLCJfX2RhdGEiLCJzZXQiLCJpbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UiLCJoYVN0YXRlTGFiZWxCYWRnZSIsInN0YXJ0SW50ZXJ2YWwiLCJpbnN0YWxsU3RhdGVCYWRnZSIsInN0YXRlQmFkZ2UiLCJfdXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJvcmlnaW5hbFVwZGF0ZUljb25BcHBlYXJhbmNlIiwiY3VzdG9tVXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJjb2xvciIsImluc3RhbGxIYUF0dHJpYnV0ZXMiLCJoYUF0dHJpYnV0ZXMiLCJjb21wdXRlRmlsdGVyc0FycmF5IiwiY3VzdG9tQ29tcHV0ZUZpbHRlcnNBcnJheSIsImV4dHJhRmlsdGVycyIsInNwbGl0IiwiaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSIsImhhRm9ybUN1c3RvbWl6ZSIsImhhRm9ybUN1c3RvbWl6ZUluaXREb25lIiwiX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUiLCJjdXN0b21Db21wdXRlU2luZ2xlQXR0cmlidXRlIiwic2Vjb25kYXJ5IiwiY29uZmlnIiwiX2luaXRPcGVuT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5ld0F0dHJpYnV0ZXNPcHRpb25zIiwiY3VzdG9tZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMiLCJsb2NhbEF0dHJpYnV0ZXMiLCJnbG9iYWxBdHRyaWJ1dGVzIiwiZXhpc3RpbmdBdHRyaWJ1dGVzIiwia25vd25LZXlzIiwiZmlsdGVyRnJvbUF0dHJpYnV0ZXMiLCJzb3J0IiwiaW5zdGFsbENsYXNzSG9va3MiLCJjbGFzc0luaXREb25lIiwiaW5pdCIsImluaXREb25lIiwicnVuSG9va3MiLCJsb2ciLCJDVVNUT01fVUlfTElTVCIsInZlcnNpb24iLCJ1cmwiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwic2V0SXRlbSIsImZ1bmN0aW9uQm9keSIsImZ1bmMiLCJGdW5jdGlvbiIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDTyxJQUFNQSxtQkFBbUIsR0FBRyxlQUE1QjtBQUVQOztBQUNPLElBQU1DLGFBQWEsR0FBRyxRQUF0QjtBQUVQOztBQUNPLElBQU1DLGlCQUFpQixHQUFHLENBQy9CLFNBRCtCLEVBRS9CLE9BRitCLEVBRy9CLGNBSCtCLEVB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LE9BQVQsQ0FBaUIsUUFBakIsS0FBOEIsQ0FBL0IsR0FBb0NtRSxRQUFwQyxxQkFBMkRBLFFBQTNELE9BQXJCOztBQUNBLFFBQUk7QUFDRjtBQUNBLFVBQU00VixJQUFJLEdBQUcsSUFBSUMsUUFBSixDQUNYLE1BRFcsRUFDSCxVQURHLEVBQ1MsUUFEVCxFQUNtQixZQURuQixFQUNpQyxXQURqQyxFQUM4QyxPQUQ5QyxFQUN1REYsWUFEdkQsQ0FBYjtBQUVBOztBQUNBLGFBQU9DLElBQUksQ0FBQ3hhLElBQUQsRUFBT2EsUUFBUCxFQUFpQkcsTUFBakIsRUFBeUI1QixVQUF6QixFQUFxQ2tJLFNBQXJDLEVBQWdEakgsS0FBaEQsQ0FBWDtBQUNELEtBTkQsQ0FNRSxPQUFPZ0ksQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxVQUFLQSxDQUFDLFlBQVlxUyxXQUFkLElBQThCclMsQ0FBQyxZQUFZc1MsY0FBL0MsRUFBK0Q7QUFDN0QvTyxlQUFPLENBQUNDLElBQVIsV0FBZ0J4RCxDQUFDLENBQUNZLElBQWxCLGVBQTJCWixDQUFDLENBQUN1UyxPQUE3QiwwQkFBb0RMLFlBQXBEO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7QUFDRDs7O0FBQ0EsWUFBTWxTLENBQU47QUFDRDtBQUNGO0FBbG1Ca0MsQ0FBckM7QUFvbUJBOUosTUFBTSxDQUFDbUgsUUFBUCxDQUFnQm1VLElBQWhCLEc7Ozs7Ozs7Ozs7Ozs7QUM1bUJBLCtEQUFlLFVBQWYsRSIsImZpbGUiOiJzY3JpcHRzLWRiZy1lczUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cnlwb2ludHMvc2NyaXB0cy5qc1wiKTtcbiIsIi8qKiBDb25zdGFudHMgdG8gYmUgdXNlZCBpbiB0aGUgZnJvbnRlbmQuICovXG5cbi8vIENvbnN0YW50cyBzaG91bGQgYmUgYWxwaGFiZXRpY2FsbHkgc29ydGVkIGJ5IG5hbWUuXG4vLyBBcnJheXMgd2l0aCB2YWx1ZXMgc2hvdWxkIGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBpZiBvcmRlciBkb2Vzbid0IG1hdHRlci5cbi8vIEVhY2ggY29uc3RhbnQgc2hvdWxkIGhhdmUgYSBkZXNjcmlwdGlvbiB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgZm9yLlxuXG4vKiogSWNvbiB0byB1c2Ugd2hlbiBubyBpY29uIHNwZWNpZmllZCBmb3IgZG9tYWluLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRE9NQUlOX0lDT04gPSBcImhhc3M6Ym9va21hcmtcIjtcblxuLyoqIFBhbmVsIHRvIHNob3cgd2hlbiBubyBwYW5lbCBpcyBwaWNrZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQU5FTCA9IFwic3RhdGVzXCI7XG5cbi8qKiBEb21haW5zIHRoYXQgaGF2ZSBhIHN0YXRlIGNhcmQuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19XSVRIX0NBUkQgPSBbXG4gIFwiY2xpbWF0ZVwiLFxuICBcImNvdmVyXCIsXG4gIFwiY29uZmlndXJhdG9yXCIsXG4gIFwiaW5wdXRfc2VsZWN0XCIsXG4gIFwiaW5wdXRfbnVtYmVyXCIsXG4gIFwiaW5wdXRfdGV4dFwiLFxuICBcImxvY2tcIixcbiAgXCJtZWRpYV9wbGF5ZXJcIixcbiAgXCJzY2VuZVwiLFxuICBcInNjcmlwdFwiLFxuICBcInRpbWVyXCIsXG4gIFwidmFjdXVtXCIsXG4gIFwid2F0ZXJfaGVhdGVyXCIsXG4gIFwid2VibGlua1wiLFxuXTtcblxuLyoqIERvbWFpbnMgd2l0aCBzZXBhcmF0ZSBtb3JlIGluZm8gZGlhbG9nLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfV0lUSF9NT1JFX0lORk8gPSBbXG4gIFwiYWxhcm1fY29udHJvbF9wYW5lbFwiLFxuICBcImF1dG9tYXRpb25cIixcbiAgXCJjYW1lcmFcIixcbiAgXCJjbGltYXRlXCIsXG4gIFwiY29uZmlndXJhdG9yXCIsXG4gIFwiY292ZXJcIixcbiAgXCJmYW5cIixcbiAgXCJncm91cFwiLFxuICBcImhpc3RvcnlfZ3JhcGhcIixcbiAgXCJpbnB1dF9kYXRldGltZVwiLFxuICBcImxpZ2h0XCIsXG4gIFwibG9ja1wiLFxuICBcIm1lZGlhX3BsYXllclwiLFxuICBcInNjcmlwdFwiLFxuICBcInN1blwiLFxuICBcInVwZGF0ZXJcIixcbiAgXCJ2YWN1dW1cIixcbiAgXCJ3YXRlcl9oZWF0ZXJcIixcbiAgXCJ3ZWF0aGVyXCIsXG5dO1xuXG4vKiogRG9tYWlucyB0aGF0IHNob3cgbm8gbW9yZSBpbmZvIGRpYWxvZy4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX0hJREVfTU9SRV9JTkZPID0gW1xuICBcImlucHV0X251bWJlclwiLFxuICBcImlucHV0X3NlbGVjdFwiLFxuICBcImlucHV0X3RleHRcIixcbiAgXCJzY2VuZVwiLFxuICBcIndlYmxpbmtcIixcbl07XG5cbi8qKiBEb21haW5zIHRoYXQgc2hvdWxkIGhhdmUgdGhlIGhpc3RvcnkgaGlkZGVuIGluIHRoZSBtb3JlIGluZm8gZGlhbG9nLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfTU9SRV9JTkZPX05PX0hJU1RPUlkgPSBbXG4gIFwiY2FtZXJhXCIsXG4gIFwiY29uZmlndXJhdG9yXCIsXG4gIFwiaGlzdG9yeV9ncmFwaFwiLFxuICBcInNjZW5lXCIsXG5dO1xuXG4vKiogU3RhdGVzIHRoYXQgd2UgY29uc2lkZXIgXCJvZmZcIi4gKi9cbmV4cG9ydCBjb25zdCBTVEFURVNfT0ZGID0gW1wiY2xvc2VkXCIsIFwibG9ja2VkXCIsIFwib2ZmXCJdO1xuXG4vKiogRG9tYWlucyB3aGVyZSB3ZSBhbGxvdyB0b2dnbGUgaW4gTG92ZWxhY2UuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19UT0dHTEUgPSBuZXcgU2V0KFtcbiAgXCJmYW5cIixcbiAgXCJpbnB1dF9ib29sZWFuXCIsXG4gIFwibGlnaHRcIixcbiAgXCJzd2l0Y2hcIixcbl0pO1xuXG4vKiogVGVtcGVyYXR1cmUgdW5pdHMuICovXG5leHBvcnQgY29uc3QgVU5JVF9DID0gXCLCsENcIjtcbmV4cG9ydCBjb25zdCBVTklUX0YgPSBcIsKwRlwiO1xuXG4vKiogRW50aXR5IElEIG9mIHRoZSBkZWZhdWx0IHZpZXcuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9WSUVXX0VOVElUWV9JRCA9IFwiZ3JvdXAuZGVmYXVsdF92aWV3XCI7XG4iLCIvKipcbiAqIEFwcGx5IGEgdGhlbWUgdG8gYW4gZWxlbWVudCBieSBzZXR0aW5nIHRoZSBDU1MgdmFyaWFibGVzIG9uIGl0LlxuICpcbiAqIGVsZW1lbnQ6IEVsZW1lbnQgdG8gYXBwbHkgdGhlbWUgb24uXG4gKiB0aGVtZXM6IEhBU1MgVGhlbWUgaW5mb3JtYXRpb25cbiAqIGxvY2FsVGhlbWU6IHNlbGVjdGVkIHRoZW1lLlxuICogdXBkYXRlTWV0YTogYm9vbGVhbiBpZiB3ZSBzaG91bGQgdXBkYXRlIHRoZSB0aGVtZS1jb2xvciBtZXRhIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICBlbGVtZW50LFxuICB0aGVtZXMsXG4gIGxvY2FsVGhlbWUsXG4gIHVwZGF0ZU1ldGEgPSBmYWxzZVxuKSB7XG4gIGlmICghZWxlbWVudC5fdGhlbWVzKSB7XG4gICAgZWxlbWVudC5fdGhlbWVzID0ge307XG4gIH1cbiAgbGV0IHRoZW1lTmFtZSA9IHRoZW1lcy5kZWZhdWx0X3RoZW1lO1xuICBpZiAobG9jYWxUaGVtZSA9PT0gXCJkZWZhdWx0XCIgfHwgKGxvY2FsVGhlbWUgJiYgdGhlbWVzLnRoZW1lc1tsb2NhbFRoZW1lXSkpIHtcbiAgICB0aGVtZU5hbWUgPSBsb2NhbFRoZW1lO1xuICB9XG4gIGNvbnN0IHN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIGVsZW1lbnQuX3RoZW1lcyk7XG4gIGlmICh0aGVtZU5hbWUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgdmFyIHRoZW1lID0gdGhlbWVzLnRoZW1lc1t0aGVtZU5hbWVdO1xuICAgIE9iamVjdC5rZXlzKHRoZW1lKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHZhciBwcmVmaXhlZEtleSA9IFwiLS1cIiArIGtleTtcbiAgICAgIGVsZW1lbnQuX3RoZW1lc1twcmVmaXhlZEtleV0gPSBcIlwiO1xuICAgICAgc3R5bGVzW3ByZWZpeGVkS2V5XSA9IHRoZW1lW2tleV07XG4gICAgfSk7XG4gIH1cbiAgaWYgKGVsZW1lbnQudXBkYXRlU3R5bGVzKSB7XG4gICAgZWxlbWVudC51cGRhdGVTdHlsZXMoc3R5bGVzKTtcbiAgfSBlbHNlIGlmICh3aW5kb3cuU2hhZHlDU1MpIHtcbiAgICAvLyBpbXBsZW1lbnQgdXBkYXRlU3R5bGVzKCkgbWV0aG9kIG9mIFBvbGVtZXIgZWxlbWVudHNcbiAgICB3aW5kb3cuU2hhZHlDU1Muc3R5bGVTdWJ0cmVlKC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyAoZWxlbWVudCksIHN0eWxlcyk7XG4gIH1cblxuICBpZiAoIXVwZGF0ZU1ldGEpIHJldHVybjtcblxuICBjb25zdCBtZXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT10aGVtZS1jb2xvcl1cIik7XG4gIGlmIChtZXRhKSB7XG4gICAgaWYgKCFtZXRhLmhhc0F0dHJpYnV0ZShcImRlZmF1bHQtY29udGVudFwiKSkge1xuICAgICAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LWNvbnRlbnRcIiwgbWV0YS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpKTtcbiAgICB9XG4gICAgY29uc3QgdGhlbWVDb2xvciA9XG4gICAgICBzdHlsZXNbXCItLXByaW1hcnktY29sb3JcIl0gfHwgbWV0YS5nZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LWNvbnRlbnRcIik7XG4gICAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIHRoZW1lQ29sb3IpO1xuICB9XG59XG4iLCIvKipcbiAqIFVwZGF0ZSByb290J3MgY2hpbGQgZWxlbWVudCB0byBiZSBuZXdFbGVtZW50VGFnIHJlcGxhY2luZyBhbm90aGVyIGV4aXN0aW5nIGNoaWxkIGlmIGFueS5cbiAqIENvcHkgYXR0cmlidXRlcyBpbnRvIHRoZSBjaGlsZCBlbGVtZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkeW5hbWljQ29udGVudFVwZGF0ZXIocm9vdCwgbmV3RWxlbWVudFRhZywgYXR0cmlidXRlcykge1xuICBjb25zdCByb290RWwgPSByb290O1xuICBsZXQgY3VzdG9tRWw7XG5cbiAgaWYgKHJvb3RFbC5sYXN0Q2hpbGQgJiYgcm9vdEVsLmxhc3RDaGlsZC50YWdOYW1lID09PSBuZXdFbGVtZW50VGFnKSB7XG4gICAgY3VzdG9tRWwgPSByb290RWwubGFzdENoaWxkO1xuICB9IGVsc2Uge1xuICAgIGlmIChyb290RWwubGFzdENoaWxkKSB7XG4gICAgICByb290RWwucmVtb3ZlQ2hpbGQocm9vdEVsLmxhc3RDaGlsZCk7XG4gICAgfVxuICAgIC8vIENyZWF0aW5nIGFuIGVsZW1lbnQgd2l0aCB1cHBlciBjYXNlIHdvcmtzIGZpbmUgaW4gQ2hyb21lLCBidXQgaW4gRkYgaXQgZG9lc24ndCBpbW1lZGlhdGVseVxuICAgIC8vIGJlY29tZSBhIGRlZmluZWQgQ3VzdG9tIEVsZW1lbnQuIFBvbHltZXIgZG9lcyB0aGF0IGluIHNvbWUgbGF0ZXIgcGFzcy5cbiAgICBjdXN0b21FbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmV3RWxlbWVudFRhZy50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGlmIChjdXN0b21FbC5zZXRQcm9wZXJ0aWVzKSB7XG4gICAgY3VzdG9tRWwuc2V0UHJvcGVydGllcyhhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBjdXN0b20gZWxlbWVudCBkZWZpbml0aW9uIHdhc24ndCBsb2FkZWQgeWV0IC0gc2V0UHJvcGVydGllcyB3b3VsZCBiZVxuICAgIC8vIG1pc3NpbmcsIGJ1dCBubyBoYXJtIGluIHNldHRpbmcgYXR0cmlidXRlcyBvbmUtYnktb25lIHRoZW4uXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjdXN0b21FbFtrZXldID0gYXR0cmlidXRlc1trZXldO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGN1c3RvbUVsLnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByb290RWwuYXBwZW5kQ2hpbGQoY3VzdG9tRWwpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBIb21lQXNzaXN0YW50IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhblRvZ2dsZURvbWFpbihoYXNzOiBIb21lQXNzaXN0YW50LCBkb21haW46IHN0cmluZykge1xuICBjb25zdCBzZXJ2aWNlcyA9IGhhc3Muc2VydmljZXNbZG9tYWluXTtcbiAgaWYgKCFzZXJ2aWNlcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChkb21haW4gPT09IFwibG9ja1wiKSB7XG4gICAgcmV0dXJuIFwibG9ja1wiIGluIHNlcnZpY2VzO1xuICB9XG4gIGlmIChkb21haW4gPT09IFwiY292ZXJcIikge1xuICAgIHJldHVybiBcIm9wZW5fY292ZXJcIiBpbiBzZXJ2aWNlcztcbiAgfVxuICByZXR1cm4gXCJ0dXJuX29uXCIgaW4gc2VydmljZXM7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXR5IH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNhblRvZ2dsZURvbWFpbiBmcm9tIFwiLi9jYW5fdG9nZ2xlX2RvbWFpblwiO1xuaW1wb3J0IGNvbXB1dGVTdGF0ZURvbWFpbiBmcm9tIFwiLi9jb21wdXRlX3N0YXRlX2RvbWFpblwiO1xuaW1wb3J0IHsgSG9tZUFzc2lzdGFudCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgc3VwcG9ydHNGZWF0dXJlIH0gZnJvbSBcIi4vc3VwcG9ydHMtZmVhdHVyZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYW5Ub2dnbGVTdGF0ZShcbiAgaGFzczogSG9tZUFzc2lzdGFudCxcbiAgc3RhdGVPYmo6IEhhc3NFbnRpdHlcbikge1xuICBjb25zdCBkb21haW4gPSBjb21wdXRlU3RhdGVEb21haW4oc3RhdGVPYmopO1xuICBpZiAoZG9tYWluID09PSBcImdyb3VwXCIpIHtcbiAgICByZXR1cm4gc3RhdGVPYmouc3RhdGUgPT09IFwib25cIiB8fCBzdGF0ZU9iai5zdGF0ZSA9PT0gXCJvZmZcIjtcbiAgfVxuICBpZiAoZG9tYWluID09PSBcImNsaW1hdGVcIikge1xuICAgIHJldHVybiBzdXBwb3J0c0ZlYXR1cmUoc3RhdGVPYmosIDQwOTYpO1xuICB9XG5cbiAgcmV0dXJuIGNhblRvZ2dsZURvbWFpbihoYXNzLCBkb21haW4pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZURvbWFpbihlbnRpdHlJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVudGl0eUlkLnN1YnN0cigwLCBlbnRpdHlJZC5pbmRleE9mKFwiLlwiKSk7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXR5IH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNvbXB1dGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9kb21haW5cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZVN0YXRlRG9tYWluKHN0YXRlT2JqOiBIYXNzRW50aXR5KSB7XG4gIHJldHVybiBjb21wdXRlRG9tYWluKHN0YXRlT2JqLmVudGl0eV9pZCk7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXRpZXMgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5pbXBvcnQgeyBHcm91cEVudGl0eSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHcm91cEVudGl0aWVzKFxuICBlbnRpdGllczogSGFzc0VudGl0aWVzLFxuICBncm91cDogR3JvdXBFbnRpdHlcbikge1xuICBjb25zdCByZXN1bHQgPSB7fTtcblxuICBncm91cC5hdHRyaWJ1dGVzLmVudGl0eV9pZC5mb3JFYWNoKChlbnRpdHlJZCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzW2VudGl0eUlkXTtcblxuICAgIGlmIChlbnRpdHkpIHtcbiAgICAgIHJlc3VsdFtlbnRpdHkuZW50aXR5X2lkXSA9IGVudGl0eTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXRpZXMgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5pbXBvcnQgY29tcHV0ZURvbWFpbiBmcm9tIFwiLi9jb21wdXRlX2RvbWFpblwiO1xuaW1wb3J0IGdldEdyb3VwRW50aXRpZXMgZnJvbSBcIi4vZ2V0X2dyb3VwX2VudGl0aWVzXCI7XG5pbXBvcnQgeyBHcm91cEVudGl0eSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG4vLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGVudGl0aWVzIHRoYXQgdGhlIHZpZXcgd2lsbCBzaG93XG4vLyBpbmNsdWRpbmcgZW1iZWRkZWQgZ3JvdXBzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld0VudGl0aWVzKFxuICBlbnRpdGllczogSGFzc0VudGl0aWVzLFxuICB2aWV3OiBHcm91cEVudGl0eVxuKTogSGFzc0VudGl0aWVzIHtcbiAgY29uc3Qgdmlld0VudGl0aWVzID0ge307XG5cbiAgdmlldy5hdHRyaWJ1dGVzLmVudGl0eV9pZC5mb3JFYWNoKChlbnRpdHlJZCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzW2VudGl0eUlkXTtcblxuICAgIGlmIChlbnRpdHkgJiYgIWVudGl0eS5hdHRyaWJ1dGVzLmhpZGRlbikge1xuICAgICAgdmlld0VudGl0aWVzW2VudGl0eS5lbnRpdHlfaWRdID0gZW50aXR5O1xuXG4gICAgICBpZiAoY29tcHV0ZURvbWFpbihlbnRpdHkuZW50aXR5X2lkKSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwRW50aXRpZXMgPSBnZXRHcm91cEVudGl0aWVzKGVudGl0aWVzLCBlbnRpdHkgYXMgR3JvdXBFbnRpdHkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwRW50aXRpZXMpLmZvckVhY2goKGdyRW50aXR5SWQpID0+IHtcbiAgICAgICAgICBjb25zdCBnckVudGl0eSA9IGdyb3VwRW50aXRpZXNbZ3JFbnRpdHlJZF07XG5cbiAgICAgICAgICBpZiAoIWdyRW50aXR5LmF0dHJpYnV0ZXMuaGlkZGVuKSB7XG4gICAgICAgICAgICB2aWV3RW50aXRpZXNbZ3JFbnRpdHlJZF0gPSBnckVudGl0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZpZXdFbnRpdGllcztcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdHkgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5pbXBvcnQgY2FuVG9nZ2xlU3RhdGUgZnJvbSBcIi4vY2FuX3RvZ2dsZV9zdGF0ZVwiO1xuaW1wb3J0IGNvbXB1dGVTdGF0ZURvbWFpbiBmcm9tIFwiLi9jb21wdXRlX3N0YXRlX2RvbWFpblwiO1xuaW1wb3J0IHsgRE9NQUlOU19XSVRIX0NBUkQgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IEhvbWVBc3Npc3RhbnQgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhdGVDYXJkVHlwZShcbiAgaGFzczogSG9tZUFzc2lzdGFudCxcbiAgc3RhdGVPYmo6IEhhc3NFbnRpdHlcbikge1xuICBpZiAoc3RhdGVPYmouc3RhdGUgPT09IFwidW5hdmFpbGFibGVcIikge1xuICAgIHJldHVybiBcImRpc3BsYXlcIjtcbiAgfVxuXG4gIGNvbnN0IGRvbWFpbiA9IGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iaik7XG5cbiAgaWYgKERPTUFJTlNfV0lUSF9DQVJELmluY2x1ZGVzKGRvbWFpbikpIHtcbiAgICByZXR1cm4gZG9tYWluO1xuICB9XG4gIGlmIChcbiAgICBjYW5Ub2dnbGVTdGF0ZShoYXNzLCBzdGF0ZU9iaikgJiZcbiAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbnRyb2wgIT09IFwiaGlkZGVuXCJcbiAgKSB7XG4gICAgcmV0dXJuIFwidG9nZ2xlXCI7XG4gIH1cbiAgcmV0dXJuIFwiZGlzcGxheVwiO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRzRmVhdHVyZSA9IChcbiAgc3RhdGVPYmo6IEhhc3NFbnRpdHksXG4gIGZlYXR1cmU6IG51bWJlclxuKTogYm9vbGVhbiA9PiB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gIHJldHVybiAoc3RhdGVPYmouYXR0cmlidXRlcy5zdXBwb3J0ZWRfZmVhdHVyZXMhICYgZmVhdHVyZSkgIT09IDA7XG59O1xuIiwiY29uc3QgaGFzc0F0dHJpYnV0ZVV0aWwgPSB7fTtcblxuaGFzc0F0dHJpYnV0ZVV0aWwuRE9NQUlOX0RFVklDRV9DTEFTUyA9IHtcbiAgYmluYXJ5X3NlbnNvcjogW1xuICAgIFwiYmF0dGVyeVwiLFxuICAgIFwiY29sZFwiLFxuICAgIFwiY29ubmVjdGl2aXR5XCIsXG4gICAgXCJkb29yXCIsXG4gICAgXCJnYXJhZ2VfZG9vclwiLFxuICAgIFwiZ2FzXCIsXG4gICAgXCJoZWF0XCIsXG4gICAgXCJsaWdodFwiLFxuICAgIFwibG9ja1wiLFxuICAgIFwibW9pc3R1cmVcIixcbiAgICBcIm1vdGlvblwiLFxuICAgIFwibW92aW5nXCIsXG4gICAgXCJvY2N1cGFuY3lcIixcbiAgICBcIm9wZW5pbmdcIixcbiAgICBcInBsdWdcIixcbiAgICBcInBvd2VyXCIsXG4gICAgXCJwcmVzZW5jZVwiLFxuICAgIFwicHJvYmxlbVwiLFxuICAgIFwic2FmZXR5XCIsXG4gICAgXCJzbW9rZVwiLFxuICAgIFwic291bmRcIixcbiAgICBcInZpYnJhdGlvblwiLFxuICAgIFwid2luZG93XCIsXG4gIF0sXG4gIGNvdmVyOiBbXCJnYXJhZ2VcIl0sXG4gIHNlbnNvcjogW1wiYmF0dGVyeVwiLCBcImh1bWlkaXR5XCIsIFwiaWxsdW1pbmFuY2VcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInByZXNzdXJlXCJdLFxufTtcblxuaGFzc0F0dHJpYnV0ZVV0aWwuVU5LTk9XTl9UWVBFID0gXCJqc29uXCI7XG5oYXNzQXR0cmlidXRlVXRpbC5BRERfVFlQRSA9IFwia2V5LXZhbHVlXCI7XG5cbmhhc3NBdHRyaWJ1dGVVdGlsLlRZUEVfVE9fVEFHID0ge1xuICBzdHJpbmc6IFwiaGEtY3VzdG9taXplLXN0cmluZ1wiLFxuICBqc29uOiBcImhhLWN1c3RvbWl6ZS1zdHJpbmdcIixcbiAgaWNvbjogXCJoYS1jdXN0b21pemUtaWNvblwiLFxuICBib29sZWFuOiBcImhhLWN1c3RvbWl6ZS1ib29sZWFuXCIsXG4gIGFycmF5OiBcImhhLWN1c3RvbWl6ZS1hcnJheVwiLFxuICBcImtleS12YWx1ZVwiOiBcImhhLWN1c3RvbWl6ZS1rZXktdmFsdWVcIixcbn07XG5cbi8vIEF0dHJpYnV0ZXMgaGVyZSBzZXJ2ZSBkdWFsIHB1cnBvc2U6XG4vLyAxKSBBbnkga2V5IG9mIHRoaXMgb2JqZWN0IHdvbid0IGJlIHNob3duIGluIG1vcmUtaW5mbyB3aW5kb3cuXG4vLyAyKSBBbnkga2V5IHdoaWNoIGhhcyB2YWx1ZSBvdGhlciB0aGFuIHVuZGVmaW5lZCB3aWxsIGFwcGVhciBpbiBjdXN0b21pemF0aW9uXG4vLyAgICBjb25maWcgYWNjb3JkaW5nIHRvIGl0cyB2YWx1ZS5cbmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMgPSBoYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTIHx8IHtcbiAgZW50aXR5X3BpY3R1cmU6IHVuZGVmaW5lZCxcbiAgZnJpZW5kbHlfbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJOYW1lXCIgfSxcbiAgaWNvbjogeyB0eXBlOiBcImljb25cIiB9LFxuICBlbXVsYXRlZF9odWU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkb21haW5zOiBbXCJlbXVsYXRlZF9odWVcIl0sXG4gIH0sXG4gIGVtdWxhdGVkX2h1ZV9uYW1lOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkb21haW5zOiBbXCJlbXVsYXRlZF9odWVcIl0sXG4gIH0sXG4gIGhhYXNrYV9oaWRkZW46IHVuZGVmaW5lZCxcbiAgaGFhc2thX25hbWU6IHVuZGVmaW5lZCxcbiAgaG9tZWJyaWRnZV9oaWRkZW46IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgaG9tZWJyaWRnZV9uYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgc3VwcG9ydGVkX2ZlYXR1cmVzOiB1bmRlZmluZWQsXG4gIGF0dHJpYnV0aW9uOiB1bmRlZmluZWQsXG4gIGN1c3RvbV91aV9tb3JlX2luZm86IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICBjdXN0b21fdWlfc3RhdGVfY2FyZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gIGRldmljZV9jbGFzczoge1xuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBvcHRpb25zOiBoYXNzQXR0cmlidXRlVXRpbC5ET01BSU5fREVWSUNFX0NMQVNTLFxuICAgIGRlc2NyaXB0aW9uOiBcIkRldmljZSBjbGFzc1wiLFxuICAgIGRvbWFpbnM6IFtcImJpbmFyeV9zZW5zb3JcIiwgXCJjb3ZlclwiLCBcInNlbnNvclwiXSxcbiAgfSxcbiAgaGlkZGVuOiB7IHR5cGU6IFwiYm9vbGVhblwiLCBkZXNjcmlwdGlvbjogXCJIaWRlIGZyb20gVUlcIiB9LFxuICBhc3N1bWVkX3N0YXRlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZG9tYWluczogW1xuICAgICAgXCJzd2l0Y2hcIixcbiAgICAgIFwibGlnaHRcIixcbiAgICAgIFwiY292ZXJcIixcbiAgICAgIFwiY2xpbWF0ZVwiLFxuICAgICAgXCJmYW5cIixcbiAgICAgIFwiZ3JvdXBcIixcbiAgICAgIFwid2F0ZXJfaGVhdGVyXCIsXG4gICAgXSxcbiAgfSxcbiAgaW5pdGlhbF9zdGF0ZToge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZG9tYWluczogW1wiYXV0b21hdGlvblwiXSxcbiAgfSxcbiAgdW5pdF9vZl9tZWFzdXJlbWVudDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYXNzQXR0cmlidXRlVXRpbDtcbiIsIi8qKlxuQGxpY2Vuc2VcbkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG5cbndpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcCkgeyByZXR1cm4gcHJvcDsgfTtcbiIsIi8qKlxuQGxpY2Vuc2VcbkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG5pbXBvcnQgJy4vYm9vdC5qcyc7XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgc3RhdGljIHN0cmluZyB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBmaWx0ZXJcbiAqIHN0cmluZ3MgYnkgYXNzZXRpbmcgdGhhdCB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkIHZpYSB0aGlzIGNsYXNzLiBUaGVcbiAqIGB2YWx1ZWAgcHJvcGVydHkgcmV0dXJucyB0aGUgc3RyaW5nIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gKi9cbmNsYXNzIExpdGVyYWxTdHJpbmcge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcpIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLnZhbHVlID0gc3RyaW5nLnRvU3RyaW5nKCk7XG4gIH1cbiAgLyoqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTGl0ZXJhbFN0cmluZyBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBPYmplY3QgdG8gc3RyaW5naWZ5IGludG8gSFRNTFxuICogQHJldHVybiB7c3RyaW5nfSBIVE1MIHN0cmluZ2lmaWVkIGZvcm0gb2YgYG9iamBcbiAqL1xuZnVuY3Rpb24gbGl0ZXJhbFZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpdGVyYWxTdHJpbmcpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHshTGl0ZXJhbFN0cmluZ30gKi8odmFsdWUpLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbExpdGVyYWwgZnVuY3Rpb246ICR7dmFsdWV9YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlIE9iamVjdCB0byBzdHJpbmdpZnkgaW50byBIVE1MXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEhUTUwgc3RyaW5naWZpZWQgZm9ybSBvZiBgb2JqYFxuICovXG5mdW5jdGlvbiBodG1sVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuICAgIHJldHVybiAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50IH0gKi8odmFsdWUpLmlubmVySFRNTDtcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpdGVyYWxTdHJpbmcpIHtcbiAgICByZXR1cm4gbGl0ZXJhbFZhbHVlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBub24tdGVtcGxhdGUgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sIGZ1bmN0aW9uOiAke3ZhbHVlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSB0ZW1wbGF0ZSBsaXRlcmFsIHRhZyB0aGF0IGNyZWF0ZXMgYW4gSFRNTCA8dGVtcGxhdGU+IGVsZW1lbnQgZnJvbSB0aGVcbiAqIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuXG4gKlxuICogVGhpcyBhbGxvd3MgeW91IHRvIHdyaXRlIGEgUG9seW1lciBUZW1wbGF0ZSBpbiBKYXZhU2NyaXB0LlxuICpcbiAqIFRlbXBsYXRlcyBjYW4gYmUgY29tcG9zZWQgYnkgaW50ZXJwb2xhdGluZyBgSFRNTFRlbXBsYXRlRWxlbWVudGBzIGluXG4gKiBleHByZXNzaW9ucyBpbiB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSBsaXRlcmFsLiBUaGUgbmVzdGVkIHRlbXBsYXRlJ3NcbiAqIGBpbm5lckhUTUxgIGlzIGluY2x1ZGVkIGluIHRoZSBjb250YWluaW5nIHRlbXBsYXRlLiAgVGhlIG9ubHkgb3RoZXJcbiAqIHZhbHVlcyBhbGxvd2VkIGluIGV4cHJlc3Npb25zIGFyZSB0aG9zZSByZXR1cm5lZCBmcm9tIGBodG1sTGl0ZXJhbGBcbiAqIHdoaWNoIGVuc3VyZXMgb25seSBsaXRlcmFsIHZhbHVlcyBmcm9tIEpTIHNvdXJjZSBldmVyIHJlYWNoIHRoZSBIVE1MLCB0b1xuICogZ3VhcmQgYWdhaW5zdCBYU1Mgcmlza3MuXG4gKlxuICogQWxsIG90aGVyIHZhbHVlcyBhcmUgZGlzYWxsb3dlZCBpbiBleHByZXNzaW9ucyB0byBoZWxwIHByZXZlbnQgWFNTXG4gKiBhdHRhY2tzOyBob3dldmVyLCBgaHRtbExpdGVyYWxgIGNhbiBiZSB1c2VkIHRvIGNvbXBvc2Ugc3RhdGljXG4gKiBzdHJpbmcgdmFsdWVzIGludG8gdGVtcGxhdGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBjb21wb3NlIHN0cmluZ3MgaW50b1xuICogcGxhY2VzIHRoYXQgZG8gbm90IGFjY2VwdCBodG1sLCBsaWtlIHRoZSBjc3MgdGV4dCBvZiBhIGBzdHlsZWBcbiAqIGVsZW1lbnQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAqICAgICAgIHJldHVybiBodG1sYFxuICogICAgICAgICA8c3R5bGU+Omhvc3R7IGNvbnRlbnQ6XCIuLi5cIiB9PC9zdHlsZT5cbiAqICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvd2VkXCI+JHt0aGlzLnBhcnRpYWxUZW1wbGF0ZX08L2Rpdj5cbiAqICAgICAgICAgJHtzdXBlci50ZW1wbGF0ZX1cbiAqICAgICAgIGA7XG4gKiAgICAgfVxuICogICAgIHN0YXRpYyBnZXQgcGFydGlhbFRlbXBsYXRlKCkgeyByZXR1cm4gaHRtbGA8c3Bhbj5QYXJ0aWFsITwvc3Bhbj5gOyB9XG4gKlxuICogQHBhcmFtIHshSVRlbXBsYXRlQXJyYXl9IHN0cmluZ3MgQ29uc3RhbnQgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB7Li4uKn0gdmFsdWVzIFZhcmlhYmxlIHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJuIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gQ29uc3RydWN0ZWQgSFRNTFRlbXBsYXRlRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaHRtbCA9IGZ1bmN0aW9uIGh0bWwoc3RyaW5ncywgLi4udmFsdWVzKSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gLyoqIEB0eXBlIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gKi8oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdiwgaWR4KSA9PlxuICAgICAgYWNjICsgaHRtbFZhbHVlKHYpICsgc3RyaW5nc1tpZHggKyAxXSwgc3RyaW5nc1swXSk7XG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07XG5cbi8qKlxuICogQW4gaHRtbCBsaXRlcmFsIHRhZyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYGh0bWxgIHRvIGNvbXBvc2UuXG4gKiBhIGxpdGVyYWwgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gKiAgICAgICByZXR1cm4gaHRtbGBcbiAqICAgICAgICAgPHN0eWxlPlxuICogICAgICAgICAgIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IH1cbiAqICAgICAgICAgICAke3RoaXMuc3R5bGVUZW1wbGF0ZSgpfVxuICogICAgICAgICA8L3N0eWxlPlxuICogICAgICAgICA8ZGl2IGNsYXNzPVwic2hhZG93ZWRcIj4ke3N0YXRpY1ZhbHVlfTwvZGl2PlxuICogICAgICAgICAke3N1cGVyLnRlbXBsYXRlfVxuICogICAgICAgYDtcbiAqICAgICB9XG4gKiAgICAgc3RhdGljIGdldCBzdHlsZVRlbXBsYXRlKCkge1xuICogICAgICAgIHJldHVybiBodG1sTGl0ZXJhbGAuc2hhZG93ZWQgeyBiYWNrZ3JvdW5kOiBncmF5OyB9YDtcbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHshSVRlbXBsYXRlQXJyYXl9IHN0cmluZ3MgQ29uc3RhbnQgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB7Li4uKn0gdmFsdWVzIFZhcmlhYmxlIHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJuIHshTGl0ZXJhbFN0cmluZ30gQ29uc3RydWN0ZWQgbGl0ZXJhbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxMaXRlcmFsID0gZnVuY3Rpb24oc3RyaW5ncywgLi4udmFsdWVzKSB7XG4gIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZXMucmVkdWNlKChhY2MsIHYsIGlkeCkgPT5cbiAgICAgIGFjYyArIGxpdGVyYWxWYWx1ZSh2KSArIHN0cmluZ3NbaWR4ICsgMV0sIHN0cmluZ3NbMF0pKTtcbn07XG4iLCJpbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyBIVE1MRWxlbWVudFxuICovXG5jbGFzcyBDdWlCYXNlRWxlbWVudCBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzczogT2JqZWN0LFxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHN0YXRlT2JqOiBPYmplY3QsXG4gICAgICBjb250cm9sRWxlbWVudDogU3RyaW5nLFxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGNvbXB1dGVkOiAnY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqKScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjb21wdXRlRXh0cmEoaGFzcywgc3RhdGVPYmopIHtcbiAgICBsZXQgZXh0cmFzID0gc3RhdGVPYmouYXR0cmlidXRlcy5leHRyYV9kYXRhX3RlbXBsYXRlO1xuICAgIGlmIChleHRyYXMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShleHRyYXMpKSB7XG4gICAgICAgIGV4dHJhcyA9IFtleHRyYXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhcy5tYXAoZXh0cmEgPT4gd2luZG93LmN1c3RvbVVJLmNvbXB1dGVUZW1wbGF0ZShcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIGhhc3MsXG4gICAgICAgIGhhc3Muc3RhdGVzLFxuICAgICAgICBzdGF0ZU9iaixcbiAgICAgICAgc3RhdGVPYmouYXR0cmlidXRlcyxcbiAgICAgICAgLyogYXR0cmlidXRlPSAqLyB1bmRlZmluZWQsXG4gICAgICAgIHN0YXRlT2JqLnN0YXRlLFxuICAgICAgKSkuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQgIT09IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBzaG93TGFzdENoYW5nZWQoc3RhdGVPYmosIGluRGlhbG9nLCBleHRyYSkge1xuICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGV4dHJhLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXN0YXRlT2JqLmF0dHJpYnV0ZXMuc2hvd19sYXN0X2NoYW5nZWQ7XG4gIH1cblxuICBoYXNFeHRyYShleHRyYSkge1xuICAgIHJldHVybiBleHRyYS5sZW5ndGggPiAwO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBDdWlCYXNlRWxlbWVudDtcbiIsImltcG9ydCBkeW5hbWljQ29udGVudFVwZGF0ZXIgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9keW5hbWljX2NvbnRlbnRfdXBkYXRlci5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgRHluYW1pY0VsZW1lbnQgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcbiAgICAgIHN0YXRlT2JqOiBPYmplY3QsXG4gICAgICBlbGVtZW50TmFtZTogU3RyaW5nLFxuXG4gICAgICBpbkRpYWxvZzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ29ic2VydmVyRnVuYyhoYXNzLCBzdGF0ZU9iaiwgZWxlbWVudE5hbWUsIGluRGlhbG9nKScsXG4gICAgXTtcbiAgfVxuXG4gIG9ic2VydmVyRnVuYyhoYXNzLCBzdGF0ZU9iaiwgZWxlbWVudE5hbWUsIGluRGlhbG9nKSB7XG4gICAgZHluYW1pY0NvbnRlbnRVcGRhdGVyKFxuICAgICAgdGhpcyxcbiAgICAgIGVsZW1lbnROYW1lID8gZWxlbWVudE5hbWUudG9VcHBlckNhc2UoKSA6ICdESVYnLFxuICAgICAgeyBoYXNzLCBzdGF0ZU9iaiwgaW5EaWFsb2cgfSk7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZHluYW1pYy1lbGVtZW50JywgRHluYW1pY0VsZW1lbnQpO1xuIiwiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bwb2x5bWVyL3BvbHltZXIvbGliL3V0aWxzL2h0bWwtdGFnLmpzJztcbmltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcblxuaW1wb3J0ICcuL2R5bmFtaWMtZWxlbWVudC5qcyc7XG5pbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcblxuY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ3N0YXRlLWNhcmQtZGlzcGxheScpLnRoZW4oKCkgPT4ge1xuICAvKipcbiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAgICovXG4gIGNsYXNzIER5bmFtaWNXaXRoRXh0cmEgZXh0ZW5kcyBjdXN0b21FbGVtZW50cy5nZXQoJ3N0YXRlLWNhcmQtZGlzcGxheScpIHtcbiAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3R5bGUgaXM9XCJjdXN0b20tc3R5bGVcIiBpbmNsdWRlPVwiaXJvbi1mbGV4IGlyb24tZmxleC1hbGlnbm1lbnQgaXJvbi1mbGV4LWZhY3RvcnNcIj48L3N0eWxlPlxuICAgICAgPHN0eWxlPlxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIC5jb250cm9sLXdyYXBwZXIge1xuICAgICAgICAgIG1hcmdpbjogLTRweCAtMTZweCAtNHB4IDA7XG4gICAgICAgICAgcGFkZGluZzogNHB4IDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgaGEtc3RhdGUtbGFiZWwtYmFkZ2Uge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgZHluYW1pYy1lbGVtZW50IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgfVxuICAgICAgICAjb3ZlcmxheSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICAgICNsb2NrIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogN3B4O1xuICAgICAgICB9XG4gICAgICAgICNsb2NrLmhhLWNvdmVyLWNvbnRyb2xzIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDUycHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIH1cbiAgICAgICAgLmV4dHJhIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTZweDtcbiAgICAgICAgICAtLWhhLWxhYmVsLWJhZGdlLXNpemU6IDM2cHg7XG4gICAgICAgICAgLS1oYS1sYWJlbC1iYWRnZS1mb250LXNpemU6IDEuMmVtO1xuICAgICAgICB9XG4gICAgICAgIC5zdGF0ZSB7XG4gICAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMTZweDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgICAgfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3MkPSdbW2V4dHJhQ2xhc3MoZXh0cmFPYmpWaXNpYmxlKV1dIGhvcml6b250YWwgbGF5b3V0Jz5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW2V4dHJhT2JqVmlzaWJsZV1dJz5cbiAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1yZXBlYXQnXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zPSdbW2V4dHJhT2JqXV0nXG4gICAgICAgICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9J2V4dHJhRG9tQ2hhbmdlZCc+XG4gICAgICAgICAgICA8aGEtc3RhdGUtbGFiZWwtYmFkZ2UgaGFzcz0nW1toYXNzXV0nIHN0YXRlPSdbW2l0ZW1dXSc+PC9oYS1zdGF0ZS1sYWJlbC1iYWRnZT5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbX3Nob3dDb250cm9sKGluRGlhbG9nLCBzdGF0ZU9iaildXSc+XG4gICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW2NvbnRyb2xFbGVtZW50XV0nPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8ZHluYW1pYy1lbGVtZW50XG4gICAgICAgICAgICAgICAgICBjbGFzcz0nZmxleCdcbiAgICAgICAgICAgICAgICAgIHN0YXRlLW9iaj1cIltbc3RhdGVPYmpdXVwiXG4gICAgICAgICAgICAgICAgICBoYXNzPSdbW2hhc3NdXSdcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQtbmFtZT0nW1tjb250cm9sRWxlbWVudF1dJz5cbiAgICAgICAgICAgICAgPC9keW5hbWljLWVsZW1lbnQ+XG4gICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tpc0NvbmZpcm1Db250cm9scyhzdGF0ZU9iaildXSc+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm92ZXJsYXlcIiBvbi1jbGljaz0nY2xpY2tIYW5kbGVyJz5cbiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbmZpcm1fY29udHJvbHNfc2hvd19sb2NrXV0nPlxuICAgICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGlkPVwibG9ja1wiIGNsYXNzJD1cIltbY29udHJvbEVsZW1lbnRdXVwiIGljb249XCJtZGk6bG9jay1vdXRsaW5lXCI+PC9pcm9uLWljb24+XG4gICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbIWNvbnRyb2xFbGVtZW50XV0nPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0nc3RhdGUnPltbY29tcHV0ZVN0YXRlRGlzcGxheShzdGF0ZU9iaildXTwvZGl2PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzczogT2JqZWN0LFxuICAgICAgICBpbkRpYWxvZzoge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZU9iajogT2JqZWN0LFxuICAgICAgICBjb250cm9sRWxlbWVudDogU3RyaW5nLFxuICAgICAgICBleHRyYU9iajoge1xuICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgIGNvbXB1dGVkOiAnY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqLCBfYXR0YWNoZWQpJyxcbiAgICAgICAgfSxcbiAgICAgICAgX2F0dGFjaGVkOiBCb29sZWFuLFxuICAgICAgICBleHRyYU9ialZpc2libGU6IHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGNvbXB1dGVkOiAnY29tcHV0ZUV4dHJhVmlzaWJsZShleHRyYU9iaiwgaW5EaWFsb2cpJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5fYXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgdGhpcy5faXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBjb21wdXRlRXh0cmEoaGFzcywgc3RhdGVPYmosIGF0dGFjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlT2JqLmF0dHJpYnV0ZXMuZXh0cmFfYmFkZ2UgfHwgIWF0dGFjaGVkKSByZXR1cm4gW107XG4gICAgICBsZXQgZXh0cmFCYWRnZXMgPSBzdGF0ZU9iai5hdHRyaWJ1dGVzLmV4dHJhX2JhZGdlO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4dHJhQmFkZ2VzKSkge1xuICAgICAgICBleHRyYUJhZGdlcyA9IFtleHRyYUJhZGdlc107XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFCYWRnZXMubWFwKChleHRyYUJhZGdlKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBpZiAoZXh0cmFCYWRnZS5lbnRpdHlfaWQgJiYgaGFzcy5zdGF0ZXNbZXh0cmFCYWRnZS5lbnRpdHlfaWRdKSB7XG4gICAgICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0KFxuICAgICAgICAgICAgdGhpcywgaGFzcy5zdGF0ZXNbZXh0cmFCYWRnZS5lbnRpdHlfaWRdLCB0aGlzLmluRGlhbG9nLFxuICAgICAgICAgICAgLyogYWxsb3dIaWRkZW49ICovZmFsc2UpKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHRyYUJhZGdlLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXNbZXh0cmFCYWRnZS5hdHRyaWJ1dGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICBzdGF0ZTogU3RyaW5nKHN0YXRlT2JqLmF0dHJpYnV0ZXNbZXh0cmFCYWRnZS5hdHRyaWJ1dGVdKSxcbiAgICAgICAgICAgIGVudGl0eV9pZDogJ25vbmUubm9uZScsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHVuaXRfb2ZfbWVhc3VyZW1lbnQ6IGV4dHJhQmFkZ2UudW5pdCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgYmxhY2tsaXN0ID0gZXh0cmFCYWRnZS5ibGFja2xpc3Rfc3RhdGVzO1xuICAgICAgICBpZiAoYmxhY2tsaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmxhY2tsaXN0KSkge1xuICAgICAgICAgICAgYmxhY2tsaXN0ID0gW2JsYWNrbGlzdF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChibGFja2xpc3Quc29tZSh2ID0+IFJlZ0V4cCh2KS50ZXN0KHJlc3VsdC5zdGF0ZS50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuX2VudGl0eURpc3BsYXkgPSAnJztcbiAgICAgICAgcmVzdWx0LmF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCB7IGZyaWVuZGx5X25hbWU6ICcnIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSkuZmlsdGVyKGV4dHJhQmFkZ2UgPT4gZXh0cmFCYWRnZSAhPSBudWxsKTtcbiAgICB9XG5cbiAgICBjb21wdXRlRXh0cmFWaXNpYmxlKGV4dHJhT2JqLCBpbkRpYWxvZykge1xuICAgICAgaWYgKGluRGlhbG9nIHx8ICFleHRyYU9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGV4dHJhT2JqLmxlbmd0aCAhPT0gMDtcbiAgICB9XG5cbiAgICBleHRyYUNsYXNzKGV4dHJhT2JqVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIGV4dHJhT2JqVmlzaWJsZSA/ICdleHRyYScgOiAnJztcbiAgICB9XG5cbiAgICBfc2hvd0NvbnRyb2woaW5EaWFsb2csIHN0YXRlT2JqKSB7XG4gICAgICBpZiAoaW5EaWFsb2cpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuICFzdGF0ZU9iai5hdHRyaWJ1dGVzLmhpZGVfY29udHJvbDtcbiAgICB9XG5cbiAgICBjb21wdXRlU3RhdGVEaXNwbGF5KHN0YXRlT2JqKSB7XG4gICAgICAvLyBoYUxvY2FsaXplIHJlbW92ZWQgaW4gMC42MVxuICAgICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVTdGF0ZURpc3BsYXkodGhpcy5oYUxvY2FsaXplIHx8IHRoaXMubG9jYWxpemUsIHN0YXRlT2JqKTtcbiAgICB9XG5cbiAgICBpc0NvbmZpcm1Db250cm9scyhzdGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29uZmlybV9jb250cm9scyB8fFxuICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29uZmlybV9jb250cm9sc19zaG93X2xvY2s7XG4gICAgfVxuXG4gICAgY2xpY2tIYW5kbGVyKGUpIHtcbiAgICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjb3ZlcmxheScpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICBjb25zdCBsb2NrID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNsb2NrJyk7XG4gICAgICBpZiAobG9jaykge1xuICAgICAgICBsb2NrLmljb24gPSAnbWRpOmxvY2stb3Blbi1vdXRsaW5lJztcbiAgICAgICAgbG9jay5zdHlsZS5vcGFjaXR5ID0gJzAuMSc7XG4gICAgICB9XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjb3ZlcmxheScpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnJztcbiAgICAgICAgaWYgKGxvY2spIHtcbiAgICAgICAgICBsb2NrLmljb24gPSAnbWRpOmxvY2stb3V0bGluZSc7XG4gICAgICAgICAgbG9jay5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMDApO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBhcHBseVRoZW1lcyhoYXNzLCBlbGVtZW50LCBzdGF0ZU9iaikge1xuICAgICAgY29uc3QgdGhlbWVOYW1lID0gc3RhdGVPYmouYXR0cmlidXRlcy50aGVtZSB8fCAnZGVmYXVsdCc7XG4gICAgICBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgICAgICAgZWxlbWVudCwgaGFzcy50aGVtZXMgfHwgeyBkZWZhdWx0X3RoZW1lOiAnZGVmYXVsdCcsIHRoZW1lczoge30gfSwgdGhlbWVOYW1lKTtcbiAgICB9XG5cbiAgICBleHRyYURvbUNoYW5nZWQoKSB7XG4gICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnaGEtc3RhdGUtbGFiZWwtYmFkZ2UnKVxuICAgICAgICAuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgIHRoaXMuYXBwbHlUaGVtZXModGhpcy5oYXNzLCBlbGVtLCBlbGVtLnN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZHluYW1pYy13aXRoLWV4dHJhJywgRHluYW1pY1dpdGhFeHRyYSk7XG59KTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgRXZlbnRzTWl4aW4gZnJvbSAnLi4vbWl4aW5zL2V2ZW50cy1taXhpbi5qcyc7XG5pbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyBIVE1MRWxlbWVudFxuICovXG5jbGFzcyBIYUNvbmZpZ0N1c3RvbVVpIGV4dGVuZHMgRXZlbnRzTWl4aW4oUG9seW1lci5FbGVtZW50KSB7XG4gIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgPHN0eWxlIGluY2x1ZGU9XCJoYS1zdHlsZVwiPjwvc3R5bGU+XG4gICAgPGFwcC1oZWFkZXItbGF5b3V0IGhhcy1zY3JvbGxpbmctcmVnaW9uPlxuICAgICAgPGFwcC1oZWFkZXIgc2xvdD1cImhlYWRlclwiIGZpeGVkPlxuICAgICAgICA8YXBwLXRvb2xiYXI+XG4gICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uXG4gICAgICAgICAgICBpY29uPSdtZGk6YXJyb3ctbGVmdCdcbiAgICAgICAgICAgIG9uLWNsaWNrPSdfYmFja0hhbmRsZXInXG4gICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+XG4gICAgICAgICAgPGRpdiBtYWluLXRpdGxlPkN1c3RvbSBVSSBzZXR0aW5nczwvZGl2PlxuICAgICAgICA8L2FwcC10b29sYmFyPlxuICAgICAgPC9hcHAtaGVhZGVyPlxuXG4gICAgICA8aGEtY29uZmlnLXNlY3Rpb24gaXMtd2lkZT0nW1tpc1dpZGVdXSc+XG4gICAgICAgIDxwYXBlci1jYXJkIGhlYWRpbmc9J0RldmljZSBuYW1lJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXJkLWNvbnRlbnQnPlxuICAgICAgICAgICAgU2V0IGRldmljZSBuYW1lIHNvIHRoYXQgeW91IGNhbiByZWZlcmVuY2UgaXQgaW4gcGVyLWRldmljZSBzZXR0aW5nc1xuICAgICAgICAgICAgPHBhcGVyLWlucHV0XG4gICAgICAgICAgICAgIGxhYmVsPSdOYW1lJ1xuICAgICAgICAgICAgICB2YWx1ZT0ne3tuYW1lfX0nXG4gICAgICAgICAgICA+PC9wYXBlci1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wYXBlci1jYXJkPlxuICAgICAgPC9oYS1jb25maWctc2VjdGlvbj5cbiAgICA8L2FwcC1oZWFkZXItbGF5b3V0PlxuICAgIGA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzV2lkZTogQm9vbGVhbixcblxuICAgICAgbmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIG9ic2VydmVyOiAnbmFtZUNoYW5nZWQnLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmVhZHkoKSB7XG4gICAgc3VwZXIucmVhZHkoKTtcbiAgICB0aGlzLm5hbWUgPSB3aW5kb3cuY3VzdG9tVUkuZ2V0TmFtZSgpO1xuICB9XG5cbiAgbmFtZUNoYW5nZWQobmFtZSkge1xuICAgIHdpbmRvdy5jdXN0b21VSS5zZXROYW1lKG5hbWUpO1xuICB9XG5cbiAgX2JhY2tIYW5kbGVyKCkge1xuICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcbiAgICB0aGlzLmZpcmUoJ2xvY2F0aW9uLWNoYW5nZWQnKTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdoYS1jb25maWctY3VzdG9tLXVpJywgSGFDb25maWdDdXN0b21VaSk7XG4iLCJpbXBvcnQgeyBodG1sIH0gZnJvbSAnQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIEhhVGhlbWVkU2xpZGVyIGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHtcbiAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIG1hcmdpbjogdmFyKC0taGEtdGhlbWVkLXNsaWRlci1tYXJnaW4sIGluaXRpYWwpO1xuICAgICAgfVxuICAgICAgLmRpc2FibGUtb2ZmLXdoZW4tbWluIHtcbiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiAgdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC5kaXNhYmxlLW9mZi13aGVuLW1pbi5pcy1vbiB7XG4gICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yKTtcbiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yKTtcbiAgICAgIH1cbiAgICAgIHBhcGVyLXNsaWRlciB7XG4gICAgICAgIG1hcmdpbjogNHB4IDA7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICAgICAgd2lkdGg6IHZhcigtLWhhLXBhcGVyLXNsaWRlci13aWR0aCwgMjAwcHgpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8cGFwZXItc2xpZGVyXG4gICAgICAgICBtaW49J1tbX3RoZW1lZE1pbl1dJ1xuICAgICAgICAgbWF4PSdbW19jb21wdXRlQXR0cmlidXRlKHRoZW1lLCBcIm1heFwiLCBtYXgpXV0nXG4gICAgICAgICBwaW49J1tbX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIFwicGluXCIsIHBpbildXSdcbiAgICAgICAgIGNsYXNzJD0nW1tjb21wdXRlQ2xhc3ModGhlbWUsIGlzT24sIF90aGVtZWRNaW4pXV0nIHZhbHVlPSdbW3ZhbHVlXV0nXG4gICAgICAgICBvbi1jaGFuZ2U9J3ZhbHVlQ2hhbmdlZCc+XG4gICAgPC9wYXBlci1zbGlkZXI+XG4gICAgYDtcbiAgfVxuXG4gIHJlYWR5KCkge1xuICAgIHN1cGVyLnJlYWR5KCk7XG4gICAgdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbiA9ICF0aGlzLl9jb21wdXRlQXR0cmlidXRlKHRoaXMudGhlbWUsICdvZmZfd2hlbl9taW4nLCAhdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbik7XG4gICAgdGhpcy5jb21wdXRlRW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkKHRoaXMudGhlbWUsIHRoaXMuZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWluOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICB9LFxuICAgICAgbWF4OiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgdmFsdWU6IDEwMCxcbiAgICAgIH0sXG4gICAgICBwaW46IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGlzT246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVPZmZXaGVuTWluOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgbm90aWZ5OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVSZXBvcnRXaGVuTm90Q2hhbmdlZDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuXG4gICAgICB0aGVtZTogT2JqZWN0LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICBub3RpZnk6IHRydWUsXG4gICAgICB9LFxuICAgICAgX3RoZW1lZE1pbjoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIGNvbXB1dGVkOiAnX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIFwibWluXCIsIG1pbiknLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdjb21wdXRlRW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkKHRoZW1lLCBkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpJyxcbiAgICBdO1xuICB9XG5cbiAgY29tcHV0ZUVuYWJsZWRUaGVtZWRSZXBvcnRXaGVuTm90Q2hhbmdlZCh0aGVtZSwgZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkKSB7XG4gICAgdGhpcy5fZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkID0gdGhpcy5fY29tcHV0ZUF0dHJpYnV0ZShcbiAgICAgIHRoZW1lLCAncmVwb3J0X3doZW5fbm90X2NoYW5nZWQnLCAhZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkKTtcbiAgfVxuXG4gIF9jb21wdXRlQXR0cmlidXRlKHRoZW1lLCBhdHRyLCBkZWYpIHtcbiAgICBpZiAodGhlbWUpIHtcbiAgICAgIGlmIChhdHRyIGluIHRoZW1lKSB7XG4gICAgICAgIHJldHVybiB0aGVtZVthdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGNvbXB1dGVDbGFzcyh0aGVtZSwgaXNPbiwgdGhlbWVkTWluKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGlmIChpc09uKSB7XG4gICAgICByZXN1bHQgKz0gJ2lzLW9uICc7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb21wdXRlQXR0cmlidXRlKHRoZW1lLCAnb2ZmX3doZW5fbWluJywgIXRoaXMuZGlzYWJsZU9mZldoZW5NaW4pIHx8IHRoZW1lZE1pbiA9PT0gMCkge1xuICAgICAgLy8gSWYgb2ZmV2hlbk1pbiBpcyBlbmFibGVkIGRvbid0IGN1c3RvbWl6ZS5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3Jlc3VsdH1kaXNhYmxlLW9mZi13aGVuLW1pbmA7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoZXYpIHtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWRUaGVtZWRSZXBvcnRXaGVuTm90Q2hhbmdlZCAmJiB0aGlzLnZhbHVlID09PSBldi50YXJnZXQudmFsdWUpIHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gZXYudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2hhLXRoZW1lZC1zbGlkZXInLCBIYVRoZW1lZFNsaWRlcik7XG4iLCJpbXBvcnQgYXBwbHlUaGVtZXNPbkVsZW1lbnQgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyc7XG5pbXBvcnQgY29tcHV0ZVN0YXRlRG9tYWluIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvY29tcHV0ZV9zdGF0ZV9kb21haW4udHMnO1xuaW1wb3J0IGR5bmFtaWNDb250ZW50VXBkYXRlciBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2R5bmFtaWNfY29udGVudF91cGRhdGVyLmpzJztcbmltcG9ydCBzdGF0ZUNhcmRUeXBlIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvc3RhdGVfY2FyZF90eXBlLnRzJztcblxuaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5pbXBvcnQgJy4vc3RhdGUtY2FyZC13aXRoLXNsaWRlci5qcyc7XG5pbXBvcnQgJy4vc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlci5qcyc7XG5cbmNvbnN0IFNIT1dfTEFTVF9DSEFOR0VEX0JMQUNLTElTVEVEX0NBUkRTID0gWydjb25maWd1cmF0b3InXTtcbmNvbnN0IERPTUFJTl9UT19TTElERVJfU1VQUE9SVCA9IHtcbiAgbGlnaHQ6IDEsIC8vIFNVUFBPUlRfQlJJR0hUTkVTU1xuICBjb3ZlcjogNCwgLy8gU1VQUE9SVF9TRVRfUE9TSVRJT05cbiAgY2xpbWF0ZTogMSwgLy8gU1VQUE9SVF9UQVJHRVRfVEVNUEVSQVRVUkVcbn07XG5jb25zdCBUWVBFX1RPX0NPTlRST0wgPSB7XG4gIHRvZ2dsZTogJ2hhLWVudGl0eS10b2dnbGUnLFxuICBkaXNwbGF5OiAnJyxcbiAgY292ZXI6ICdoYS1jb3Zlci1jb250cm9scycsXG59O1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIFN0YXRlQ2FyZEN1c3RvbVVpIGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNzOiBPYmplY3QsXG5cbiAgICAgIGluRGlhbG9nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG5cbiAgICAgIHN0YXRlT2JqOiBPYmplY3QsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnaW5wdXRDaGFuZ2VkKGhhc3MsIGluRGlhbG9nLCBzdGF0ZU9iaiknLFxuICAgIF07XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIGlmIChjb250YWluZXIudGFnTmFtZSA9PT0gJ0RJVicgJiZcbiAgICAgICAgKGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ3N0YXRlJykgfHwgY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnY2hpbGQtY2FyZCcpKSkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyO1xuXG4gICAgICAvLyBTaW5jZSB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBiYWNrZ3JvdW5kIC0gbm8gbmVlZCB0byBjbGVhciBpdC5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yLCBpbmhlcml0KScpO1xuXG4gICAgICAvLyBQb2x5ZmlsbCAndXBkYXRlU3R5bGVzJy5cbiAgICAgIGlmICghY29udGFpbmVyLnVwZGF0ZVN0eWxlcykge1xuICAgICAgICBjb250YWluZXIudXBkYXRlU3R5bGVzID0gKHN0eWxlcykgPT4ge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBzdHlsZXNba2V5XSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHRoaXMuaGFzcywgdGhpcy5pbkRpYWxvZywgdGhpcy5zdGF0ZU9iaik7XG4gIH1cblxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgdGhpcy5fY29udGFpbmVyLnVwZGF0ZVN0eWxlcyh7IGRpc3BsYXk6ICcnLCBtYXJnaW46ICcnLCBwYWRkaW5nOiAnJyB9KTtcbiAgICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgICB0aGlzLl9jb250YWluZXIsIHRoaXMuaGFzcy50aGVtZXMgfHwgeyBkZWZhdWx0X3RoZW1lOiAnZGVmYXVsdCcsIHRoZW1lczoge30gfSwgJ2RlZmF1bHQnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cblxuICBiYWRnZU1vZGUoaGFzcywgc3RhdGVPYmosIGRvbWFpbikge1xuICAgIGNvbnN0IHN0YXRlcyA9IFtdO1xuICAgIGlmIChkb21haW4gPT09ICdncm91cCcpIHtcbiAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuZW50aXR5X2lkLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gaGFzcy5zdGF0ZXNbaWRdO1xuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biBJRCAke2lkfSBpbiBncm91cCAke3N0YXRlT2JqLmVudGl0eV9pZH1gKTtcbiAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmJhZGdlc19saXN0IHx8XG4gICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLmJhZGdlc19saXN0LmluY2x1ZGVzKHN0YXRlLmVudGl0eV9pZCkpIHtcbiAgICAgICAgICBzdGF0ZXMucHVzaCh3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3QoXG4gICAgICAgICAgICB0aGlzLCBzdGF0ZSwgZmFsc2UgLyogaW5EaWFsb2cgKi8sIGZhbHNlIC8qIGFsbG93SGlkZGVuICovKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZXMucHVzaChzdGF0ZU9iaik7XG4gICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZGlzcGxheTogJ2lubGluZS1ibG9jaycgfTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ3N0YXRlJykpIHtcbiAgICAgICAgICBwYXJhbXMubWFyZ2luID0gJ3ZhcigtLWhhLWJhZGdlcy1jYXJkLW1hcmdpbiwgMCknO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICAnSEEtQkFER0VTLUNBUkQnLFxuICAgICAgeyBoYXNzLCBzdGF0ZXMgfSk7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgdGhpcy5fY29udGFpbmVyLnVwZGF0ZVN0eWxlcyh7XG4gICAgICAgIHdpZHRoOiAndmFyKC0taGEtYmFkZ2VzLWNhcmQtd2lkdGgsIGluaXRpYWwpJyxcbiAgICAgICAgJ3RleHQtYWxpZ24nOiAndmFyKC0taGEtYmFkZ2VzLWNhcmQtdGV4dC1hbGlnbiwgaW5pdGlhbCknLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdENoaWxkLnN0eWxlLmZvbnRTaXplID0gJzg1JSc7XG5cbiAgICAvLyBTaW5jZSB0aGlzIHZhcmlhYmxlIG9ubHkgYWZmZWN0cyBiYWRnZXMgbW9kZSAtIG5vIG5lZWQgdG8gY2xlYW4gaXQgdXAuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oYS1zdGF0ZS1sYWJlbC1iYWRnZS1tYXJnaW4tYm90dG9tJywgJzAnKTtcbiAgfVxuXG4gIGNsZWFuQmFkZ2VTdHlsZSgpIHtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHtcbiAgICAgICAgZGlzcGxheTogJycsXG4gICAgICAgIHdpZHRoOiAnJyxcbiAgICAgICAgJ3RleHQtYWxpZ24nOiAnJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVN0eWxlcyh7IGRpc3BsYXk6ICcnLCBtYXJnaW46ICcnIH0pO1xuICB9XG5cbiAgYXBwbHlUaGVtZXMoaGFzcywgbW9kaWZpZWRPYmopIHtcbiAgICBsZXQgdGhlbWVUYXJnZXQgPSB0aGlzO1xuICAgIGxldCB0aGVtZU5hbWUgPSAnZGVmYXVsdCc7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgdGhlbWVUYXJnZXQgPSB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuICAgIGlmIChtb2RpZmllZE9iai5hdHRyaWJ1dGVzLnRoZW1lKSB7XG4gICAgICB0aGVtZU5hbWUgPSBtb2RpZmllZE9iai5hdHRyaWJ1dGVzLnRoZW1lO1xuICAgIH1cbiAgICBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgICAgIHRoZW1lVGFyZ2V0LCBoYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LCB0aGVtZU5hbWUpO1xuICB9XG5cbiAgbWF5YmVIaWRlRW50aXR5KG1vZGlmaWVkT2JqKSB7XG4gICAgaWYgKCFtb2RpZmllZE9iaikge1xuICAgICAgaWYgKHRoaXMubGFzdENoaWxkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5sYXN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHsgbWFyZ2luOiAnMCcsIHBhZGRpbmc6ICcwJyB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHsgbWFyZ2luOiAnJywgcGFkZGluZzogJycgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNsaWRlckVsaWdpYmxlXyhkb21haW4sIG9iaiwgaW5EaWFsb2cpIHtcbiAgICBpZiAoaW5EaWFsb2cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gRE9NQUlOX1RPX1NMSURFUl9TVVBQT1JUW2RvbWFpbl0gJiZcbiAgICAgIChET01BSU5fVE9fU0xJREVSX1NVUFBPUlRbZG9tYWluXSAmIG9iai5hdHRyaWJ1dGVzLnN1cHBvcnRlZF9mZWF0dXJlcykgJiZcbiAgICAgIG9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSAmJiBvYmouYXR0cmlidXRlcy5zdGF0ZV9jYXJkX21vZGUgIT09ICduby1zbGlkZXInO1xuICB9XG5cbiAgaW5wdXRDaGFuZ2VkKGhhc3MsIGluRGlhbG9nLCBzdGF0ZU9iaikge1xuICAgIGlmICghc3RhdGVPYmogfHwgIWhhc3MgfHwgIXRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcbiAgICBjb25zdCBkb21haW4gPSBjb21wdXRlU3RhdGVEb21haW4oc3RhdGVPYmopO1xuICAgIGNvbnN0IG1vZGlmaWVkT2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0KFxuICAgICAgdGhpcywgc3RhdGVPYmosIGluRGlhbG9nLCB0cnVlIC8qIGFsbG93SGlkZGVuICovKTtcblxuICAgIGlmICh0aGlzLm1heWJlSGlkZUVudGl0eShtb2RpZmllZE9iaikpIHJldHVybjtcblxuICAgIHRoaXMuYXBwbHlUaGVtZXMoaGFzcywgbW9kaWZpZWRPYmopO1xuXG4gICAgaWYgKCFpbkRpYWxvZyAmJiBtb2RpZmllZE9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSA9PT0gJ2JhZGdlcycpIHtcbiAgICAgIHRoaXMuYmFkZ2VNb2RlKGhhc3MsIG1vZGlmaWVkT2JqLCBkb21haW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ3VsYXJNb2RlXyhoYXNzLCBpbkRpYWxvZywgbW9kaWZpZWRPYmosIGRvbWFpbik7XG4gICAgfVxuICB9XG5cbiAgcmVndWxhck1vZGVfKGhhc3MsIGluRGlhbG9nLCBzdGF0ZU9iaiwgZG9tYWluKSB7XG4gICAgdGhpcy5jbGVhbkJhZGdlU3R5bGUoKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGhhc3MsXG4gICAgICBzdGF0ZU9iaixcbiAgICAgIGluRGlhbG9nLFxuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxTdGF0ZUNhcmRUeXBlID0gc3RhdGVDYXJkVHlwZShoYXNzLCBzdGF0ZU9iaik7XG4gICAgbGV0IGN1c3RvbVN0YXRlQ2FyZFR5cGU7XG4gICAgY29uc3Qgc2Vjb25kYXJ5U3RhdGVDYXJkVHlwZSA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9jdXN0b21fdWlfc2Vjb25kYXJ5O1xuXG4gICAgaWYgKGRvbWFpbiA9PT0gJ2xpZ2h0JyAmJiB0aGlzLnNsaWRlckVsaWdpYmxlXyhkb21haW4sIHN0YXRlT2JqLCBpbkRpYWxvZykpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50OiAnaGEtZW50aXR5LXRvZ2dsZScsXG4gICAgICAgIHNlcnZpY2VNaW46ICd0dXJuX29mZicsXG4gICAgICAgIHNlcnZpY2VNYXg6ICd0dXJuX29uJyxcbiAgICAgICAgdmFsdWVOYW1lOiAnYnJpZ2h0bmVzcycsXG4gICAgICAgIGRvbWFpbixcbiAgICAgIH0pO1xuICAgICAgY3VzdG9tU3RhdGVDYXJkVHlwZSA9ICdzdGF0ZS1jYXJkLXdpdGgtc2xpZGVyJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbiA9PT0gJ2NvdmVyJyAmJiB0aGlzLnNsaWRlckVsaWdpYmxlXyhkb21haW4sIHN0YXRlT2JqLCBpbkRpYWxvZykpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50OiAnaGEtY292ZXItY29udHJvbHMnLFxuICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgc2VydmljZU1pbjogJ2Nsb3NlX2NvdmVyJyxcbiAgICAgICAgc2VydmljZU1heDogJ3NldF9jb3Zlcl9wb3NpdGlvbicsXG4gICAgICAgIHNldFZhbHVlTmFtZTogJ3Bvc2l0aW9uJyxcbiAgICAgICAgdmFsdWVOYW1lOiAnY3VycmVudF9wb3NpdGlvbicsXG4gICAgICAgIG5hbWVPbjogJ29wZW4nLFxuICAgICAgICBkb21haW4sXG4gICAgICB9KTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRoLXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChkb21haW4gPT09ICdjbGltYXRlJyAmJiB0aGlzLnNsaWRlckVsaWdpYmxlXyhkb21haW4sIHN0YXRlT2JqLCBpbkRpYWxvZykpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50OiAnaGEtY2xpbWF0ZS1zdGF0ZScsXG4gICAgICAgIG1pbjogc3RhdGVPYmouYXR0cmlidXRlcy5taW5fdGVtcCB8fCAtMTAwLFxuICAgICAgICBtYXg6IHN0YXRlT2JqLmF0dHJpYnV0ZXMubWF4X3RlbXAgfHwgMjAwLFxuICAgICAgICBzZXJ2aWNlTWluOiAnc2V0X3RlbXBlcmF0dXJlJyxcbiAgICAgICAgc2VydmljZU1heDogJ3NldF90ZW1wZXJhdHVyZScsXG4gICAgICAgIHZhbHVlTmFtZTogJ3RlbXBlcmF0dXJlJyxcbiAgICAgICAgbmFtZU9uOiAnJyxcbiAgICAgICAgZG9tYWluLFxuICAgICAgfSk7XG4gICAgICBjdXN0b21TdGF0ZUNhcmRUeXBlID0gJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInO1xuICAgIH0gZWxzZSBpZiAoVFlQRV9UT19DT05UUk9MW29yaWdpbmFsU3RhdGVDYXJkVHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLmNvbnRyb2xFbGVtZW50ID0gVFlQRV9UT19DT05UUk9MW29yaWdpbmFsU3RhdGVDYXJkVHlwZV07XG4gICAgICBjdXN0b21TdGF0ZUNhcmRUeXBlID0gJ3N0YXRlLWNhcmQtd2l0aG91dC1zbGlkZXInO1xuICAgIH0gZWxzZSBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5zaG93X2xhc3RfY2hhbmdlZCAmJlxuICAgICAgICAgICAgICAgIVNIT1dfTEFTVF9DSEFOR0VEX0JMQUNLTElTVEVEX0NBUkRTLmluY2x1ZGVzKG9yaWdpbmFsU3RhdGVDYXJkVHlwZSkpIHtcbiAgICAgIHBhcmFtcy5pbkRpYWxvZyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChzdGF0ZU9iai5zdGF0ZSA9PT0gJ3VuYXZhaWxhYmxlJykge1xuICAgICAgcGFyYW1zLmNvbnRyb2xFbGVtZW50ID0gJyc7XG4gICAgfVxuICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbnRyb2xfZWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbnRyb2xfZWxlbWVudDtcbiAgICB9XG5cbiAgICBkeW5hbWljQ29udGVudFVwZGF0ZXIoXG4gICAgICB0aGlzLFxuICAgICAgKHNlY29uZGFyeVN0YXRlQ2FyZFR5cGUgfHwgY3VzdG9tU3RhdGVDYXJkVHlwZSB8fCBgU1RBVEUtQ0FSRC0ke29yaWdpbmFsU3RhdGVDYXJkVHlwZX1gKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgcGFyYW1zKTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdzdGF0ZS1jYXJkLWN1c3RvbS11aScsIFN0YXRlQ2FyZEN1c3RvbVVpKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgQ3VpQmFzZUVsZW1lbnQgZnJvbSAnLi9jdWktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCAnLi9keW5hbWljLXdpdGgtZXh0cmEuanMnO1xuaW1wb3J0ICcuL2hhLXRoZW1lZC1zbGlkZXIuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIFN0YXRlQ2FyZFdpdGhTbGlkZXIgZXh0ZW5kcyBDdWlCYXNlRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50IGlyb24tZmxleC1mYWN0b3JzXCI+PC9zdHlsZT5cbiAgICA8c3R5bGU+XG4gICAgICAjY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgICAgLnNlY29uZC1saW5lLCAuc3RhdGUtYW5kLXRvZ2dsZSwgLnN0YXRlLWluZm8ge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICAubm93cmFwIC5zdGF0ZS1hbmQtdG9nZ2xlIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZmxleC1ncm93OiAwO1xuICAgICAgfVxuICAgICAgLm5vd3JhcCAuc2Vjb25kLWxpbmUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAuc2Vjb25kLWxpbmUge1xuICAgICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IC0yMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTZweDtcbiAgICAgIH1cbiAgICAgIC5zdHJldGNoIC5zZWNvbmQtbGluZSwgLnN0cmV0Y2ggaGEtdGhlbWVkLXNsaWRlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAtLWhhLXBhcGVyLXNsaWRlci13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5ub3dyYXAgLnN0YXRlLWluZm8ge1xuICAgICAgICBtaW4td2lkdGg6IGluaXRpYWw7XG4gICAgICB9XG4gICAgICBoYS10aGVtZWQtc2xpZGVyLCAudG9wLXdyYXBwZXIge1xuICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICAudG9wLXdyYXBwZXIuc3RyZXRjaCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuaGlkZGVuIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuXG4gICAgPGRpdiBpZD0nY29udGFpbmVyJyBjbGFzcyQ9J2hvcml6b250YWwgbGF5b3V0IGZsZXggdG9wLXdyYXBwZXIgW1tfY29tcHV0ZVdyYXBDbGFzcyhtb2RlLCBzdHJldGNoU2xpZGVyLCBsaW5lVG9vTG9uZywgaW5EaWFsb2cpXV0nPlxuICAgICAgPGRpdiBjbGFzcz0naG9yaXpvbnRhbCBsYXlvdXQganVzdGlmaWVkIGZsZXgtYXV0byBzdGF0ZS1hbmQtdG9nZ2xlJz5cbiAgICAgICAgPHN0YXRlLWluZm9cbiAgICAgICAgICAgIGNsYXNzPSdzdGF0ZS1pbmZvIGZsZXgtYXV0bydcbiAgICAgICAgICAgIGhhc3M9J1tbaGFzc11dJ1xuICAgICAgICAgICAgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nXG4gICAgICAgICAgICBpbi1kaWFsb2c9J1tbc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpXV0nXG4gICAgICAgICAgICBzZWNvbmRhcnktbGluZSQ9J1tbaGFzRXh0cmEoZXh0cmEpXV0nXG4gICAgICAgID5cbiAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1yZXBlYXQnIGl0ZW1zPSdbW2V4dHJhXV0nPlxuICAgICAgICAgICAgPGRpdj5bW2l0ZW1dXTwvZGl2PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvc3RhdGUtaW5mbz5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW2JyZWFrU2xpZGVyXV0nIGNsYXNzPSdoaWRkZW4nPlxuICAgICAgICAgIDxkeW5hbWljLXdpdGgtZXh0cmEgaGFzcz0nW1toYXNzXV0nIHN0YXRlLW9iaj0nW1tzdGF0ZU9ial1dJyBjb250cm9sLWVsZW1lbnQ9J1tbY29udHJvbEVsZW1lbnRdXScgaW4tZGlhbG9nPSdbW2luRGlhbG9nXV0nPjwvZHluYW1pYy13aXRoLWV4dHJhPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbc2hvd1NsaWRlcl1dJyByZXN0YW1wPlxuICAgICAgICA8ZGl2IGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBmbGV4LWF1dG8gZW5kLWp1c3RpZmllZCBzZWNvbmQtbGluZSc+XG4gICAgICAgICAgPGhhLXRoZW1lZC1zbGlkZXJcbiAgICAgICAgICAgIGlkPSdzbGlkZXInXG4gICAgICAgICAgICBtYXg9W1ttYXhdXVxuICAgICAgICAgICAgbWluPVtbbWluXV1cbiAgICAgICAgICAgIHRoZW1lPSdbW3N0YXRlT2JqLmF0dHJpYnV0ZXMuc2xpZGVyX3RoZW1lXV0nXG4gICAgICAgICAgICBpcy1vbj0nW1tpc09uKHN0YXRlT2JqLCBuYW1lT24pXV0nXG4gICAgICAgICAgICB2YWx1ZT0ne3tzbGlkZXJWYWx1ZX19J1xuICAgICAgICAgICAgZGlzYWJsZS1vZmYtd2hlbi1taW49J3t7ZGlzYWJsZU9mZldoZW5NaW59fSdcbiAgICAgICAgICAgIG9uLWNoYW5nZT0nc2xpZGVyQ2hhbmdlZCdcbiAgICAgICAgICAgIG9uLWNsaWNrPSdzdG9wUHJvcGFnYXRpb24nPlxuICAgICAgICAgIDwvaGEtdGhlbWVkLXNsaWRlcj5cbiAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbIWJyZWFrU2xpZGVyXV0nPlxuICAgICAgICAgICAgPGR5bmFtaWMtd2l0aC1leHRyYSBoYXNzPSdbW2hhc3NdXScgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nIGNvbnRyb2wtZWxlbWVudD0nW1tjb250cm9sRWxlbWVudF1dJyBpbi1kaWFsb2c9J1tbaW5EaWFsb2ddXSc+PC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbWFpbjogU3RyaW5nLFxuICAgICAgc2VydmljZU1pbjogU3RyaW5nLFxuICAgICAgc2VydmljZU1heDogU3RyaW5nLFxuICAgICAgdmFsdWVOYW1lOiBTdHJpbmcsXG4gICAgICBzZXRWYWx1ZU5hbWU6IFN0cmluZyxcbiAgICAgIG5hbWVPbjogeyB0eXBlOiBTdHJpbmcsIHZhbHVlOiAnb24nIH0sXG4gICAgICBtaW46IHsgdHlwZTogTnVtYmVyLCB2YWx1ZTogMCB9LFxuICAgICAgbWF4OiB7IHR5cGU6IE51bWJlciwgdmFsdWU6IDI1NSB9LFxuXG4gICAgICBzbGlkZXJWYWx1ZToge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHZhbHVlOiAwLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVPZmZXaGVuTWluOiBCb29sZWFuLFxuICAgICAgbW9kZTogU3RyaW5nLFxuICAgICAgc3RyZXRjaFNsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYnJlYWtTbGlkZXI6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGhpZGVTbGlkZXI6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGxpbmVUb29Mb25nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBtaW5MaW5lQnJlYWs6IE51bWJlcixcbiAgICAgIG1heExpbmVCcmVhazogTnVtYmVyLFxuICAgICAgc2hvd1NsaWRlcjoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIGNvbXB1dGVkOiAnX3Nob3dTbGlkZXIoaW5EaWFsb2csIHN0YXRlT2JqLCBoaWRlU2xpZGVyKScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZWFkeSgpIHtcbiAgICBzdXBlci5yZWFkeSgpO1xuICAgIHRoaXMuX29uSXJvblJlc2l6ZSA9IHRoaXMuX29uSXJvblJlc2l6ZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uSXJvblJlc2l6ZSk7XG4gICAgdGhpcy5fd2FpdEZvckxheW91dCgpO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uSXJvblJlc2l6ZSk7XG4gICAgdGhpcy5faXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdzdGF0ZU9iakNoYW5nZWQoc3RhdGVPYmosIG5hbWVPbiwgdmFsdWVOYW1lKScsXG4gICAgXTtcbiAgfVxuXG4gIF93YWl0Rm9yTGF5b3V0KCkge1xuICAgIGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHJldHVybjtcbiAgICB0aGlzLl9zZXRNb2RlKCk7XG4gICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHJldHVybjtcbiAgICB0aGlzLnJlYWR5VG9Db21wdXRlID0gZmFsc2U7XG4gICAgdGhpcy5fZnJhbWVJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICB0aGlzLnJlYWR5VG9Db21wdXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uSXJvblJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3NldE1vZGUoKSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgaGlkZVNsaWRlcjogdGhpcy5tb2RlID09PSAnaGlkZS1zbGlkZXInICYmIHRoaXMubGluZVRvb0xvbmcsXG4gICAgICBicmVha1NsaWRlcjpcbiAgICAgICAgICAgKHRoaXMubW9kZSA9PT0gJ2JyZWFrLXNsaWRlcicgfHwgdGhpcy5tb2RlID09PSAnaGlkZS1zbGlkZXInKSAmJlxuICAgICAgICAgICB0aGlzLmxpbmVUb29Mb25nLFxuICAgIH07XG4gICAgaWYgKCF0aGlzLnNob3dTbGlkZXIpIHtcbiAgICAgIG9iai5icmVha1NsaWRlciA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhvYmopO1xuICB9XG5cbiAgX29uSXJvblJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMucmVhZHlUb0NvbXB1dGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnbm8tc2xpZGVyJykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgaGlkZVNsaWRlcjogdHJ1ZSxcbiAgICAgICAgYnJlYWtTbGlkZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldkJyZWFrU2xpZGVyID0gdGhpcy5icmVha1NsaWRlcjtcbiAgICBjb25zdCBwcmV2SGlkZVNsaWRlciA9IHRoaXMuaGlkZVNsaWRlcjtcbiAgICB0aGlzLnNldFByb3BlcnRpZXMoe1xuICAgICAgbGluZVRvb0xvbmc6IGZhbHNlLFxuICAgICAgaGlkZVNsaWRlcjogZmFsc2UsXG4gICAgICBicmVha1NsaWRlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuJDtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHJldHVybjtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPD0gdGhpcy5taW5MaW5lQnJlYWspIHtcbiAgICAgIHRoaXMubGluZVRvb0xvbmcgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbmVyV2lkdGggPj0gdGhpcy5tYXhMaW5lQnJlYWspIHtcbiAgICAgIHRoaXMubGluZVRvb0xvbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByZXZIaWRlU2xpZGVyICYmIHRoaXMubW9kZSA9PT0gJ2hpZGUtc2xpZGVyJykge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVuaGlkZSB0aGUgc2xpZGVyIGluIG9yZGVyIHRvIHJlY2FsY3VsYXRlIGhlaWdodC5cbiAgICAgICAgdGhpcy5fd2FpdEZvckxheW91dCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgc3RhdGVIZWlnaHQgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLnN0YXRlLWluZm8nKS5jbGllbnRIZWlnaHQ7XG4gICAgICB0aGlzLmxpbmVUb29Mb25nID0gY29udGFpbmVySGVpZ2h0ID4gc3RhdGVIZWlnaHQgKiAxLjU7XG4gICAgICBpZiAodGhpcy5saW5lVG9vTG9uZykge1xuICAgICAgICB0aGlzLm1pbkxpbmVCcmVhayA9IGNvbnRhaW5lcldpZHRoO1xuICAgICAgfSBlbHNlIGlmICghcHJldkJyZWFrU2xpZGVyKSB7XG4gICAgICAgIHRoaXMubWF4TGluZUJyZWFrID0gY29udGFpbmVyV2lkdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3NldE1vZGUoKTtcbiAgfVxuXG4gIF9jb21wdXRlV3JhcENsYXNzKG1vZGUsIHN0cmV0Y2hTbGlkZXIsIGxpbmVUb29Mb25nLCBpbkRpYWxvZykge1xuICAgIGlmIChpbkRpYWxvZykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZS1saW5lJykge1xuICAgICAgcmV0dXJuICdub3dyYXAnO1xuICAgIH1cbiAgICBpZiAoc3RyZXRjaFNsaWRlciAmJiBsaW5lVG9vTG9uZykge1xuICAgICAgcmV0dXJuICdzdHJldGNoIHdyYXAnO1xuICAgIH1cbiAgICByZXR1cm4gJ3dyYXAnO1xuICB9XG5cbiAgX3Nob3dTbGlkZXIoaW5EaWFsb2csIHN0YXRlT2JqLCBoaWRlU2xpZGVyKSB7XG4gICAgaWYgKGluRGlhbG9nIHx8IGhpZGVTbGlkZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzbGlkZXJDaGFuZ2VkKGV2KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldi50YXJnZXQudmFsdWUsIDEwKTtcbiAgICBjb25zdCBwYXJhbSA9IHsgZW50aXR5X2lkOiB0aGlzLnN0YXRlT2JqLmVudGl0eV9pZCB9O1xuICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSByZXR1cm47XG4gICAgbGV0IHRhcmdldCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjc2xpZGVyJyk7XG4gICAgaWYgKGV2LnRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAvLyBObyBTaGFkb3cgRE9NIC0gd2UgaGF2ZSBhY2Nlc3MgdG8gb3JpZ2luYWwgdGFyZ2V0LlxuICAgICAgKHsgdGFyZ2V0IH0gPSBldik7XG4gICAgfSBlbHNlIGlmIChldi5wYXRoKSB7XG4gICAgICBbdGFyZ2V0XSA9IGV2LnBhdGg7XG4gICAgfSBlbHNlIGlmIChldi5jb21wb3NlZFBhdGgpIHtcbiAgICAgIFt0YXJnZXRdID0gZXYuY29tcG9zZWRQYXRoKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gMCB8fCAodmFsdWUgPD0gdGFyZ2V0Lm1pbiAmJiAhdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbikpIHtcbiAgICAgIHRoaXMuaGFzcy5jYWxsU2VydmljZSh0aGlzLmRvbWFpbiwgdGhpcy5zZXJ2aWNlTWluLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtW3RoaXMuc2V0VmFsdWVOYW1lIHx8IHRoaXMudmFsdWVOYW1lXSA9IHZhbHVlO1xuICAgICAgdGhpcy5oYXNzLmNhbGxTZXJ2aWNlKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2VNYXgsIHBhcmFtKTtcbiAgICB9XG4gIH1cblxuICBzdGF0ZU9iakNoYW5nZWQoc3RhdGVPYmosIG5hbWVPbiwgdmFsdWVOYW1lKSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgc2xpZGVyVmFsdWU6IHRoaXMuaXNPbihzdGF0ZU9iaiwgbmFtZU9uKSA/IHN0YXRlT2JqLmF0dHJpYnV0ZXNbdmFsdWVOYW1lXSA6IDAsXG4gICAgfTtcbiAgICBpZiAoc3RhdGVPYmopIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1pbkxpbmVCcmVhazogMCxcbiAgICAgICAgbWF4TGluZUJyZWFrOiA5OTksXG4gICAgICAgIGhpZGVTbGlkZXI6IGZhbHNlLFxuICAgICAgICBicmVha1NsaWRlcjogZmFsc2UsXG4gICAgICAgIGxpbmVUb29Mb25nOiBmYWxzZSxcbiAgICAgICAgbW9kZTogc3RhdGVPYmouYXR0cmlidXRlcy5zdGF0ZV9jYXJkX21vZGUsXG4gICAgICAgIHN0cmV0Y2hTbGlkZXI6ICEhc3RhdGVPYmouYXR0cmlidXRlcy5zdHJldGNoX3NsaWRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnRpZXMob2JqKTtcbiAgICBpZiAoc3RhdGVPYmopIHtcbiAgICAgIHRoaXMuX3dhaXRGb3JMYXlvdXQoKTtcbiAgICB9XG4gIH1cblxuICBpc09uKHN0YXRlT2JqLCBuYW1lT24pIHtcbiAgICByZXR1cm4gc3RhdGVPYmogJiYgKCFuYW1lT24gfHwgc3RhdGVPYmouc3RhdGUgPT09IG5hbWVPbik7XG4gIH1cblxuICBzdG9wUHJvcGFnYXRpb24oZXYpIHtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdzdGF0ZS1jYXJkLXdpdGgtc2xpZGVyJywgU3RhdGVDYXJkV2l0aFNsaWRlcik7XG4iLCJpbXBvcnQgeyBodG1sIH0gZnJvbSAnQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMnO1xuaW1wb3J0IEN1aUJhc2VFbGVtZW50IGZyb20gJy4vY3VpLWJhc2UtZWxlbWVudC5qcyc7XG5pbXBvcnQgJy4vZHluYW1pYy13aXRoLWV4dHJhLmpzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyBIVE1MRWxlbWVudFxuICovXG5jbGFzcyBTdGF0ZUNhcmRXaXRob3V0U2xpZGVyIGV4dGVuZHMgQ3VpQmFzZUVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZSBpcz1cImN1c3RvbS1zdHlsZVwiIGluY2x1ZGU9XCJpcm9uLWZsZXggaXJvbi1mbGV4LWFsaWdubWVudFwiPjwvc3R5bGU+XG4gICAgPHN0eWxlPlxuICAgICAgI2NvbnRhaW5lciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuXG4gICAgPGRpdiBpZD0nY29udGFpbmVyJyBjbGFzcz0naG9yaXpvbnRhbCBsYXlvdXQganVzdGlmaWVkJz5cbiAgICAgIDxzdGF0ZS1pbmZvXG4gICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgY2xhc3M9J3N0YXRlLWluZm8nXG4gICAgICAgICAgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nXG4gICAgICAgICAgaW4tZGlhbG9nPSdbW3Nob3dMYXN0Q2hhbmdlZChzdGF0ZU9iaiwgaW5EaWFsb2csIGV4dHJhKV1dJ1xuICAgICAgICAgIHNlY29uZGFyeS1saW5lJD0nW1toYXNFeHRyYShleHRyYSldXSc+XG4gICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLXJlcGVhdCcgaXRlbXM9J1tbZXh0cmFdXSc+XG4gICAgICAgICAgPGRpdj5bW2l0ZW1dXTwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC9zdGF0ZS1pbmZvPlxuICAgICAgPGR5bmFtaWMtd2l0aC1leHRyYVxuICAgICAgICAgIGhhc3M9J1tbaGFzc11dJ1xuICAgICAgICAgIHN0YXRlLW9iaj0nW1tzdGF0ZU9ial1dJ1xuICAgICAgICAgIGNvbnRyb2wtZWxlbWVudD0nW1tjb250cm9sRWxlbWVudF1dJ1xuICAgICAgICAgIGluLWRpYWxvZz0nW1tpbkRpYWxvZ11dJz5cbiAgICAgIDwvZHluYW1pYy13aXRoLWV4dHJhPlxuICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlcicsIFN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIpO1xuIiwiLy8gUG9seW1lciBsZWdhY3kgZXZlbnQgaGVscGVycyB1c2VkIGNvdXJ0ZXN5IG9mIHRoZSBQb2x5bWVyIHByb2plY3QuXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyXG4vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlXG4vLyBkaXN0cmlidXRpb24uXG4vLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuZXhwb3J0IGRlZmF1bHQgKHN1cGVyQ2xhc3MpID0+IHtcbiAgLyoqXG4gICAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gICAqL1xuICBjbGFzcyBFdmVudHNNaXhpbiBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8qKlxuICAgICAqIERpc3BhdGNoZXMgYSBjdXN0b20gZXZlbnQgd2l0aCBhbiBvcHRpb25hbCBkZXRhaWwgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBOYW1lIG9mIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHsqPX0gZGV0YWlsIERldGFpbCB2YWx1ZSBjb250YWluaW5nIGV2ZW50LXNwZWNpZmljXG4gICAgICogICBwYXlsb2FkLlxuICAgICAqIEBwYXJhbSB7eyBidWJibGVzOiAoYm9vbGVhbnx1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAoYm9vbGVhbnx1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICBjb21wb3NlZDogKGJvb2xlYW58dW5kZWZpbmVkKSB9PX1cbiAgICAgKiAgb3B0aW9ucyBPYmplY3Qgc3BlY2lmeWluZyBvcHRpb25zLiAgVGhlc2UgbWF5IGluY2x1ZGU6XG4gICAgICogIGBidWJibGVzYCAoYm9vbGVhbiwgZGVmYXVsdHMgdG8gYHRydWVgKSxcbiAgICAgKiAgYGNhbmNlbGFibGVgIChib29sZWFuLCBkZWZhdWx0cyB0byBmYWxzZSksIGFuZFxuICAgICAqICBgbm9kZWAgb24gd2hpY2ggdG8gZmlyZSB0aGUgZXZlbnQgKEhUTUxFbGVtZW50LCBkZWZhdWx0cyB0byBgdGhpc2ApLlxuICAgICAqIEByZXR1cm4ge0V2ZW50fSBUaGUgbmV3IGV2ZW50IHRoYXQgd2FzIGZpcmVkLlxuICAgICAqL1xuICAgIGZpcmUodHlwZSwgZGV0YWlsID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodHlwZSwge1xuICAgICAgICBidWJibGVzOiBvcHRpb25zLmJ1YmJsZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmJ1YmJsZXMsXG4gICAgICAgIGNhbmNlbGFibGU6IEJvb2xlYW4ob3B0aW9ucy5jYW5jZWxhYmxlKSxcbiAgICAgICAgY29tcG9zZWQ6IG9wdGlvbnMuY29tcG9zZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmNvbXBvc2VkLFxuICAgICAgfSk7XG4gICAgICBldmVudC5kZXRhaWwgPSBkZXRhaWw7XG4gICAgICBjb25zdCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IHRoaXM7XG4gICAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gRXZlbnRzTWl4aW47XG59O1xuIiwiaW1wb3J0IGhhc3NBdHRyaWJ1dGVzVXRpbCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy91dGlsL2hhc3MtYXR0cmlidXRlcy11dGlsLmpzJztcblxud2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsID0gd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsIHx8IHt9O1xuY29uc3QgU1VQUE9SVEVEX1NMSURFUl9NT0RFUyA9IFtcbiAgJ3NpbmdsZS1saW5lJywgJ2JyZWFrLXNsaWRlcicsICdicmVhay1zbGlkZXItdG9nZ2xlJywgJ2hpZGUtc2xpZGVyJywgJ25vLXNsaWRlcicsXG5dO1xuXG5jb25zdCBjdXN0b21VaUF0dHJpYnV0ZXMgPSB7XG4gIGdyb3VwOiB1bmRlZmluZWQsXG4gIGRldmljZTogdW5kZWZpbmVkLFxuICB0ZW1wbGF0ZXM6IHVuZGVmaW5lZCxcbiAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgX3N0YXRlRGlzcGxheTogdW5kZWZpbmVkLFxuICBjb250cm9sX2VsZW1lbnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgc3RhdGVfY2FyZF9tb2RlOiB7XG4gICAgdHlwZTogJ2FycmF5JyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBsaWdodDogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgY292ZXI6IFNVUFBPUlRFRF9TTElERVJfTU9ERVMuY29uY2F0KCdiYWRnZXMnKSxcbiAgICAgIGNsaW1hdGU6IFNVUFBPUlRFRF9TTElERVJfTU9ERVMuY29uY2F0KCdiYWRnZXMnKSxcbiAgICAgICcqJzogWydiYWRnZXMnXSxcbiAgICB9LFxuICB9LFxuICBzdGF0ZV9jYXJkX2N1c3RvbV91aV9zZWNvbmRhcnk6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgYmFkZ2VzX2xpc3Q6IHsgdHlwZTogJ2pzb24nIH0sXG4gIHNob3dfbGFzdF9jaGFuZ2VkOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBoaWRlX2NvbnRyb2w6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGV4dHJhX2RhdGFfdGVtcGxhdGU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgZXh0cmFfYmFkZ2U6IHsgdHlwZTogJ2pzb24nIH0sXG4gIHN0cmV0Y2hfc2xpZGVyOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBzbGlkZXJfdGhlbWU6IHsgdHlwZTogJ2pzb24nIH0sXG4gIHRoZW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gIGNvbmZpcm1fY29udHJvbHM6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGNvbmZpcm1fY29udHJvbHNfc2hvd19sb2NrOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBoaWRlX2luX2RlZmF1bHRfdmlldzogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgaWNvbl9jb2xvcjogeyB0eXBlOiAnc3RyaW5nJyB9LFxufTtcbndpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTID0gaGFzc0F0dHJpYnV0ZXNVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVM7XG53aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuVU5LTk9XTl9UWVBFID0gaGFzc0F0dHJpYnV0ZXNVdGlsLlVOS05PV05fVFlQRTtcbk9iamVjdC5hc3NpZ24od2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMsIGN1c3RvbVVpQXR0cmlidXRlcyk7XG4iLCJpbXBvcnQgYXBwbHlUaGVtZXNPbkVsZW1lbnQgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyc7XG5pbXBvcnQgY29tcHV0ZVN0YXRlRG9tYWluIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvY29tcHV0ZV9zdGF0ZV9kb21haW4udHMnO1xuaW1wb3J0IGdldFZpZXdFbnRpdGllcyBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2dldF92aWV3X2VudGl0aWVzLnRzJztcblxuaW1wb3J0ICcuLi9lbGVtZW50cy9oYS1jb25maWctY3VzdG9tLXVpLmpzJztcbmltcG9ydCBWRVJTSU9OIGZyb20gJy4vdmVyc2lvbi5qcyc7XG5pbXBvcnQgJy4vaGFzcy1hdHRyaWJ1dGUtdXRpbC5qcyc7XG5cbndpbmRvdy5jdXN0b21VSSA9IHdpbmRvdy5jdXN0b21VSSB8fCB7XG4gIFNVUFBPUlRFRF9TTElERVJfTU9ERVM6IFtcbiAgICAnc2luZ2xlLWxpbmUnLCAnYnJlYWstc2xpZGVyJywgJ2JyZWFrLXNsaWRlci10b2dnbGUnLCAnaGlkZS1zbGlkZXInLCAnbm8tc2xpZGVyJyxcbiAgXSxcblxuICBkb21Ib3N0KGVsZW0pIHtcbiAgICBpZiAoZWxlbSA9PT0gZG9jdW1lbnQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJvb3QgPSBlbGVtLmdldFJvb3ROb2RlKCk7XG4gICAgcmV0dXJuIChyb290IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkgPyAvKiogQHR5cGUge1NoYWRvd1Jvb3R9ICovIChyb290KS5ob3N0IDogcm9vdDtcbiAgfSxcblxuICBsaWdodE9yU2hhZG93KGVsZW0sIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGVsZW0uc2hhZG93Um9vdCA/XG4gICAgICBlbGVtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgOlxuICAgICAgZWxlbS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfSxcblxuICBnZXRFbGVtZW50SGllcmFyY2h5KHJvb3QsIGhpZXJhcmNoeSkge1xuICAgIGlmIChyb290ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBlbGVtID0gaGllcmFyY2h5LnNoaWZ0KCk7XG4gICAgaWYgKGVsZW0pIHtcbiAgICAgIHJldHVybiB3aW5kb3cuY3VzdG9tVUkuZ2V0RWxlbWVudEhpZXJhcmNoeShcbiAgICAgICAgd2luZG93LmN1c3RvbVVJLmxpZ2h0T3JTaGFkb3cocm9vdCwgZWxlbSksIGhpZXJhcmNoeSk7XG4gICAgfVxuICAgIHJldHVybiByb290O1xuICB9LFxuXG4gIGdldENvbnRleHQoZWxlbSkge1xuICAgIGlmIChlbGVtLl9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVsZW0uX2NvbnRleHQgPSBbXTtcbiAgICAgIGZvciAobGV0IGVsZW1lbnQgPSAoZWxlbS50YWdOYW1lID09PSAnSEEtRU5USVRJRVMtQ0FSRCcgPyB3aW5kb3cuY3VzdG9tVUkuZG9tSG9zdChlbGVtKSA6IGVsZW0pO1xuICAgICAgICBlbGVtZW50OyBlbGVtZW50ID0gd2luZG93LmN1c3RvbVVJLmRvbUhvc3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3dpdGNoIChlbGVtZW50LnRhZ05hbWUpIHtcbiAgICAgICAgICBjYXNlICdIQS1FTlRJVElFUy1DQVJEJzpcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lmdyb3VwRW50aXR5KSB7XG4gICAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChlbGVtZW50Lmdyb3VwRW50aXR5LmVudGl0eV9pZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZ3JvdXBFbnRpdHkgPT09IGZhbHNlICYmIGVsZW1lbnQuc3RhdGVzICYmIGVsZW1lbnQuc3RhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBlbGVtLl9jb250ZXh0LnB1c2goYGdyb3VwLiR7Y29tcHV0ZVN0YXRlRG9tYWluKGVsZW1lbnQuc3RhdGVzWzBdKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ01PUkUtSU5GTy1HUk9VUCc6XG4gICAgICAgICAgY2FzZSAnU1RBVEUtQ0FSRC1DT05URU5UJzpcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnN0YXRlT2JqKSB7XG4gICAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChlbGVtZW50LnN0YXRlT2JqLmVudGl0eV9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdIQS1DQVJEUyc6XG4gICAgICAgICAgICBlbGVtLl9jb250ZXh0LnB1c2goZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlldycpIHx8ICdkZWZhdWx0X3ZpZXcnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbS5fY29udGV4dC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtLl9jb250ZXh0O1xuICB9LFxuXG4gIGZpbmRNYXRjaChrZXksIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBudWxsO1xuICAgIGlmIChvcHRpb25zW2tleV0pIHJldHVybiBrZXk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbmQob3B0aW9uID0+IGtleS5tYXRjaChgXiR7b3B0aW9ufSRgKSk7XG4gIH0sXG5cbiAgbWF5YmVDaGFuZ2VPYmplY3RCeURldmljZShzdGF0ZU9iaikge1xuICAgIGNvbnN0IG5hbWUgPSB3aW5kb3cuY3VzdG9tVUkuZ2V0TmFtZSgpO1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHN0YXRlT2JqO1xuICAgIGNvbnN0IG1hdGNoID0gdGhpcy5maW5kTWF0Y2gobmFtZSwgc3RhdGVPYmouYXR0cmlidXRlcy5kZXZpY2UpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBzdGF0ZU9iajtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmouYXR0cmlidXRlcy5kZXZpY2VbbWF0Y2hdKTtcblxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cmlidXRlcykubGVuZ3RoKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5hcHBseUF0dHJpYnV0ZXMoc3RhdGVPYmosIGF0dHJpYnV0ZXMpO1xuICB9LFxuXG4gIG1heWJlQ2hhbmdlT2JqZWN0QnlHcm91cChlbGVtLCBzdGF0ZU9iaikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB3aW5kb3cuY3VzdG9tVUkuZ2V0Q29udGV4dChlbGVtKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybiBzdGF0ZU9iajtcblxuICAgIGlmICghc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cCkge1xuICAgICAgcmV0dXJuIHN0YXRlT2JqO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgY29udGV4dC5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaCA9IHRoaXMuZmluZE1hdGNoKGMsIHN0YXRlT2JqLmF0dHJpYnV0ZXMuZ3JvdXApO1xuICAgICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMuZ3JvdXBbbWF0Y2hdKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywgc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cFttYXRjaF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHJldHVybiBzdGF0ZU9iajtcblxuICAgIHJldHVybiB3aW5kb3cuY3VzdG9tVUkuYXBwbHlBdHRyaWJ1dGVzKHN0YXRlT2JqLCBhdHRyaWJ1dGVzKTtcbiAgfSxcblxuICBfc2V0S2VlcChvYmosIHZhbHVlKSB7XG4gICAgaWYgKG9iai5fY3VpX2tlZXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLl9jdWlfa2VlcCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouX2N1aV9rZWVwID0gb2JqLl9jdWlfa2VlcCAmJiB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgbWF5YmVBcHBseVRlbXBsYXRlQXR0cmlidXRlcyhoYXNzLCBzdGF0ZXMsIHN0YXRlT2JqLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKCFhdHRyaWJ1dGVzLnRlbXBsYXRlcykge1xuICAgICAgd2luZG93LmN1c3RvbVVJLl9zZXRLZWVwKHN0YXRlT2JqLCB0cnVlKTtcbiAgICAgIHJldHVybiBzdGF0ZU9iajtcbiAgICB9XG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHt9O1xuICAgIGxldCBoYXNHbG9iYWwgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMudGVtcGxhdGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXR0cmlidXRlcy50ZW1wbGF0ZXNba2V5XTtcbiAgICAgIGlmICh0ZW1wbGF0ZS5tYXRjaCgvXFxiKGVudGl0aWVzfGhhc3MpXFxiLykpIHtcbiAgICAgICAgaGFzR2xvYmFsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gd2luZG93LmN1c3RvbVVJLmNvbXB1dGVUZW1wbGF0ZShcbiAgICAgICAgdGVtcGxhdGUsIGhhc3MsIHN0YXRlcywgc3RhdGVPYmosIGF0dHJpYnV0ZXMsXG4gICAgICAgIChzdGF0ZU9iai51bnRlbXBsYXRlZF9hdHRyaWJ1dGVzICYmIHN0YXRlT2JqLnVudGVtcGxhdGVkX2F0dHJpYnV0ZXNba2V5XSkgfHxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSxcbiAgICAgICAgc3RhdGVPYmoudW50ZW1wbGF0ZWRfc3RhdGUgfHwgc3RhdGVPYmouc3RhdGUpO1xuICAgICAgLy8gSW4gY2FzZSBvZiBudWxsIGRvbid0IHNldCB0aGUgdmFsdWUuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgIG5ld0F0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgaWYgKGtleSA9PT0gJ3N0YXRlJykge1xuICAgICAgICBpZiAodmFsdWUgIT09IHN0YXRlT2JqLnN0YXRlKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX3N0YXRlRGlzcGxheScpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBzdGF0ZU9iai5fc3RhdGVEaXNwbGF5KSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IGF0dHJpYnV0ZXNba2V5XSkge1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuX3NldEtlZXAoc3RhdGVPYmosICFoYXNHbG9iYWwpO1xuICAgIGlmICghaGFzQ2hhbmdlcykge1xuICAgICAgcmV0dXJuIHN0YXRlT2JqO1xuICAgIH1cbiAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcyA9PT0gYXR0cmlidXRlcykge1xuICAgICAgLy8gV2UgYXJlIG9wZXJhdGluZyBvbiByZWFsIGF0dHJpYnV0ZXMuIFJlcGxhY2UgdGhlbS5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHdpbmRvdy5jdXN0b21VSS5hcHBseUF0dHJpYnV0ZXMoc3RhdGVPYmosIG5ld0F0dHJpYnV0ZXMpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBdHRyaWJ1dGVzLCAnc3RhdGUnKSkge1xuICAgICAgICBpZiAobmV3QXR0cmlidXRlcy5zdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5zdGF0ZSA9IFN0cmluZyhuZXdBdHRyaWJ1dGVzLnN0YXRlKTtcbiAgICAgICAgICByZXN1bHQudW50ZW1wbGF0ZWRfc3RhdGUgPSBzdGF0ZU9iai5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBdHRyaWJ1dGVzLCAnX3N0YXRlRGlzcGxheScpKSB7XG4gICAgICAgIHJlc3VsdC5fc3RhdGVEaXNwbGF5ID0gbmV3QXR0cmlidXRlcy5fc3RhdGVEaXNwbGF5O1xuICAgICAgICByZXN1bHQudW50ZW1wbGF0ZWRfc3RhdGVEaXNwbGF5ID0gc3RhdGVPYmouX3N0YXRlRGlzcGxheTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5jdXN0b21VSS5fc2V0S2VlcChyZXN1bHQsICFoYXNHbG9iYWwpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gT3BlcmF0aW5nIG9uIGNvbnRleHQtYXdhcmUgYXR0cmlidXRlcy4gUmV0dXJuIHNoYWxsb3cgY29weSBvZiBvYmplY3QuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlT2JqKTtcbiAgfSxcblxuICBtYXliZUFwcGx5VGVtcGxhdGVzKGhhc3MsIHN0YXRlcywgc3RhdGVPYmopIHtcbiAgICBjb25zdCBuZXdSZXN1bHQgPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVBcHBseVRlbXBsYXRlQXR0cmlidXRlcyhcbiAgICAgIGhhc3MsIHN0YXRlcywgc3RhdGVPYmosIHN0YXRlT2JqLmF0dHJpYnV0ZXMpO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gKG5ld1Jlc3VsdCAhPT0gc3RhdGVPYmopO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVzKG9iaikge1xuICAgICAgaWYgKCFvYmopIHJldHVybjtcbiAgICAgIE9iamVjdC52YWx1ZXMob2JqKS5mb3JFYWNoKChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgICAgICAgIGhhc3MsIHN0YXRlcywgbmV3UmVzdWx0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgaGFzQ2hhbmdlcyB8PSAocmVzdWx0ICE9PSBuZXdSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICBjaGVja0F0dHJpYnV0ZXMob2JqLmRldmljZSk7XG4gICAgICBjaGVja0F0dHJpYnV0ZXMob2JqLmdyb3VwKTtcbiAgICB9XG5cbiAgICBjaGVja0F0dHJpYnV0ZXMoc3RhdGVPYmouYXR0cmlidXRlcy5kZXZpY2UpO1xuICAgIGNoZWNrQXR0cmlidXRlcyhzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwKTtcbiAgICBpZiAobmV3UmVzdWx0ICE9PSBzdGF0ZU9iaikgcmV0dXJuIG5ld1Jlc3VsdDtcbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlT2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlT2JqO1xuICB9LFxuXG4gIGFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlfaWQ6IHN0YXRlT2JqLmVudGl0eV9pZCxcbiAgICAgIHN0YXRlOiBzdGF0ZU9iai5zdGF0ZSxcbiAgICAgIGF0dHJpYnV0ZXM6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlT2JqLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpLFxuICAgICAgdW50ZW1wbGF0ZWRfYXR0cmlidXRlczogc3RhdGVPYmouYXR0cmlidXRlcyxcbiAgICAgIGxhc3RfY2hhbmdlZDogc3RhdGVPYmoubGFzdF9jaGFuZ2VkLFxuICAgIH07XG4gIH0sXG5cbiAgbWF5YmVDaGFuZ2VPYmplY3QoZWxlbSwgc3RhdGVPYmosIGluRGlhbG9nLCBhbGxvd0hpZGRlbikge1xuICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIHN0YXRlT2JqO1xuICAgIGxldCBvYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3RCeURldmljZShzdGF0ZU9iaik7XG4gICAgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0QnlHcm91cChlbGVtLCBvYmopO1xuICAgIG9iaiA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgICAgZWxlbS5oYXNzLCBlbGVtLmhhc3Muc3RhdGVzLCBvYmosIG9iai5hdHRyaWJ1dGVzKTtcblxuICAgIGlmIChvYmogIT09IHN0YXRlT2JqICYmIG9iai5hdHRyaWJ1dGVzLmhpZGRlbiAmJiBhbGxvd0hpZGRlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgZml4R3JvdXBUaXRsZXMoKSB7XG4gICAgY29uc3QgaG9tZUFzc2lzdGFudE1haW4gPSB3aW5kb3cuY3VzdG9tVUkuZ2V0RWxlbWVudEhpZXJhcmNoeShkb2N1bWVudCwgW1xuICAgICAgJ2hvbWUtYXNzaXN0YW50JyxcbiAgICAgICdob21lLWFzc2lzdGFudC1tYWluJ10pO1xuICAgIGlmIChob21lQXNzaXN0YW50TWFpbiA9PT0gbnVsbCkge1xuICAgICAgLy8gRE9NIG5vdCByZWFkeS4gV2FpdCAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHdpbmRvdy5jdXN0b21VSS5maXhHcm91cFRpdGxlcywgMTAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFDYXJkcyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGhvbWVBc3Npc3RhbnRNYWluLCBbXG4gICAgICAncGFydGlhbC1jYXJkcycsXG4gICAgICAnaGEtY2FyZHNbdmlldy12aXNpYmxlXSddKTtcbiAgICBpZiAoaGFDYXJkcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IG1haW4gPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhoYUNhcmRzLCAnLm1haW4nKSB8fCBoYUNhcmRzLiQubWFpbjtcbiAgICBjb25zdCBjYXJkcyA9IG1haW4ucXVlcnlTZWxlY3RvckFsbCgnaGEtZW50aXRpZXMtY2FyZCcpO1xuICAgIGNhcmRzLmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgIGlmIChjYXJkLmdyb3VwRW50aXR5KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICBjYXJkLFxuICAgICAgICAgIGNhcmQuZ3JvdXBFbnRpdHksXG4gICAgICAgICAgZmFsc2UgLyogaW5EaWFsb2cgKi8sXG4gICAgICAgICAgZmFsc2UgLyogYWxsb3dIaWRkZW4gKi8pO1xuICAgICAgICBpZiAob2JqICE9PSBjYXJkLmdyb3VwRW50aXR5ICYmIG9iai5hdHRyaWJ1dGVzLmZyaWVuZGx5X25hbWUpIHtcbiAgICAgICAgICBjb25zdCBuYW1lRWxlbSA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGNhcmQsICcubmFtZScpO1xuICAgICAgICAgIG5hbWVFbGVtLnRleHRDb250ZW50ID0gb2JqLmF0dHJpYnV0ZXMuZnJpZW5kbHlfbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIGNvbnRyb2xDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICBjb25zdCBwYXJ0aWFsQ2FyZHMgPSB3aW5kb3cuY3VzdG9tVUkuZ2V0RWxlbWVudEhpZXJhcmNoeShkb2N1bWVudCwgW1xuICAgICAgJ2hvbWUtYXNzaXN0YW50JyxcbiAgICAgICdob21lLWFzc2lzdGFudC1tYWluJyxcbiAgICAgICdwYXJ0aWFsLWNhcmRzJ10pO1xuICAgIGlmIChwYXJ0aWFsQ2FyZHMgPT09IG51bGwpIHtcbiAgICAgIC8vIERPTSBub3QgcmVhZHkuIFdhaXQgMSBzZWNvbmQuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgd2luZG93LmN1c3RvbVVJLmNvbnRyb2xDb2x1bW5zLmJpbmQobnVsbCwgY29sdW1ucyksXG4gICAgICAgIDEwMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBGdW5jdGlvbiByZW5hbWVkIGZyb20gaGFuZGxlV2luZG93Q2hhbmdlIHRvIF91cGRhdGVDb2x1bW5zIG9uIDMuNy4xOFxuICAgIGNvbnN0IGYgPSBwYXJ0aWFsQ2FyZHMuaGFuZGxlV2luZG93Q2hhbmdlIHx8IHBhcnRpYWxDYXJkcy5fdXBkYXRlQ29sdW1ucztcbiAgICBwYXJ0aWFsQ2FyZHMubXFscy5mb3JFYWNoKChtcWwpID0+IHtcbiAgICAgIG1xbC5yZW1vdmVMaXN0ZW5lcihmKTtcbiAgICB9KTtcbiAgICBwYXJ0aWFsQ2FyZHMubXFscyA9IGNvbHVtbnMubWFwKCh3aWR0aCkgPT4ge1xuICAgICAgY29uc3QgbXFsID0gd2luZG93Lm1hdGNoTWVkaWEoYChtaW4td2lkdGg6ICR7d2lkdGh9cHgpYCk7XG4gICAgICBtcWwuYWRkTGlzdGVuZXIoZik7XG4gICAgICByZXR1cm4gbXFsO1xuICAgIH0pO1xuICAgIGYoKTtcbiAgfSxcblxuICB1c2VDdXN0b21pemVyKCkge1xuICAgIGNvbnN0IG1haW4gPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhkb2N1bWVudCwgJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgY29uc3QgY3VzdG9taXplciA9IG1haW4uaGFzcy5zdGF0ZXNbJ2N1c3RvbWl6ZXIuY3VzdG9taXplciddO1xuICAgIGlmICghY3VzdG9taXplcikgcmV0dXJuO1xuICAgIGlmIChjdXN0b21pemVyLmF0dHJpYnV0ZXMuY29sdW1ucykge1xuICAgICAgd2luZG93LmN1c3RvbVVJLmNvbnRyb2xDb2x1bW5zKGN1c3RvbWl6ZXIuYXR0cmlidXRlcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKGN1c3RvbWl6ZXIuYXR0cmlidXRlcy5oaWRlX2F0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICh3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgJiYgd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMpIHtcbiAgICAgICAgY3VzdG9taXplci5hdHRyaWJ1dGVzLmhpZGVfYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUywgYXR0cikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTW2F0dHJdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZUNvbmZpZ1BhbmVsKCkge1xuICAgIGlmICghd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9jb25maWcnKSkgcmV0dXJuO1xuICAgIGNvbnN0IGhhUGFuZWxDb25maWcgPSB3aW5kb3cuY3VzdG9tVUkuZ2V0RWxlbWVudEhpZXJhcmNoeShkb2N1bWVudCwgW1xuICAgICAgJ2hvbWUtYXNzaXN0YW50JyxcbiAgICAgICdob21lLWFzc2lzdGFudC1tYWluJyxcbiAgICAgICdwYXJ0aWFsLXBhbmVsLXJlc29sdmVyJyxcbiAgICAgICdoYS1wYW5lbC1jb25maWcnXSk7XG4gICAgaWYgKCFoYVBhbmVsQ29uZmlnKSB7XG4gICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEwMG1zLlxuICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93LmN1c3RvbVVJLnVwZGF0ZUNvbmZpZ1BhbmVsLCAxMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYUNvbmZpZ05hdmlnYXRpb24gPSB3aW5kb3cuY3VzdG9tVUkuZ2V0RWxlbWVudEhpZXJhcmNoeShoYVBhbmVsQ29uZmlnLCBbXG4gICAgICAnaGEtY29uZmlnLWRhc2hib2FyZCcsXG4gICAgICAnaGEtY29uZmlnLW5hdmlnYXRpb24nXSk7XG4gICAgaWYgKGhhQ29uZmlnTmF2aWdhdGlvbikge1xuICAgICAgLy8gSGFDb25maWdOYXZpZ2F0aW9uIHN0YXJ0ZWQgdXNpbmcgbG9jYWxpemUgb24gMjEuMDEuMjAxOFxuICAgICAgaWYgKGhhQ29uZmlnTmF2aWdhdGlvbi5sb2NhbGl6ZSAmJiAhaGFDb25maWdOYXZpZ2F0aW9uLmN1aVBhdGNoKSB7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5jdWlQYXRjaCA9IHRydWU7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlTG9hZGVkID0gaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlTG9hZGVkO1xuICAgICAgICBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZUNhcHRpb24gPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVDYXB0aW9uO1xuICAgICAgICBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uID0gaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlRGVzY3JpcHRpb247XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZUxvYWRlZCA9IChoYXNzLCBwYWdlKSA9PlxuICAgICAgICAgIHBhZ2UgPT09ICdjdXN0b211aScgfHwgaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVMb2FkZWQoaGFzcywgcGFnZSk7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZUNhcHRpb24gPSAocGFnZSwgbG9jYWxpemUpID0+XG4gICAgICAgICAgKHBhZ2UgPT09ICdjdXN0b211aScgPyAnQ3VzdG9tIFVJJyA6IGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlQ2FwdGlvbihwYWdlLCBsb2NhbGl6ZSkpO1xuICAgICAgICBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVEZXNjcmlwdGlvbiA9IChwYWdlLCBsb2NhbGl6ZSkgPT5cbiAgICAgICAgICAocGFnZSA9PT0gJ2N1c3RvbXVpJyA/ICdTZXRVSSB0d2Vha3MnIDogaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVEZXNjcmlwdGlvbihwYWdlLCBsb2NhbGl6ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFoYUNvbmZpZ05hdmlnYXRpb24ucGFnZXMuc29tZShjb25mID0+IGNvbmYgPT09ICdjdXN0b211aScgfHwgY29uZi5kb21haW4gPT09ICdjdXN0b211aScpKSB7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5wdXNoKCdwYWdlcycsIGhhQ29uZmlnTmF2aWdhdGlvbi5sb2NhbGl6ZSA/ICdjdXN0b211aScgOiB7XG4gICAgICAgICAgZG9tYWluOiAnY3VzdG9tdWknLFxuICAgICAgICAgIGNhcHRpb246ICdDdXN0b20gVUknLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2V0IFVJIHR3ZWFrcy4nLFxuICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGdldEhhQ29uZmlnQ3VzdG9tVWkgPSAoKSA9PiB7XG4gICAgICBjb25zdCBoYUNvbmZpZ0N1c3RvbVVpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaGEtY29uZmlnLWN1c3RvbS11aScpO1xuICAgICAgaGFDb25maWdDdXN0b21VaS5pc1dpZGUgPSBoYVBhbmVsQ29uZmlnLmlzV2lkZTtcbiAgICAgIGhhQ29uZmlnQ3VzdG9tVWkuc2V0QXR0cmlidXRlKCdwYWdlLW5hbWUnLCAnY3VzdG9tdWknKTtcbiAgICAgIHJldHVybiBoYUNvbmZpZ0N1c3RvbVVpO1xuICAgIH07XG5cbiAgICBjb25zdCBpcm9uUGFnZXMgPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhoYVBhbmVsQ29uZmlnLCAnaXJvbi1wYWdlcycpO1xuICAgIGlmIChpcm9uUGFnZXMpIHtcbiAgICAgIGlmIChpcm9uUGFnZXMubGFzdEVsZW1lbnRDaGlsZC50YWdOYW1lICE9PSAnSEEtQ09ORklHLUNVU1RPTS1VSScpIHtcbiAgICAgICAgY29uc3QgaGFDb25maWdDdXN0b21VaSA9IGdldEhhQ29uZmlnQ3VzdG9tVWkoKTtcbiAgICAgICAgaXJvblBhZ2VzLmFwcGVuZENoaWxkKGhhQ29uZmlnQ3VzdG9tVWkpO1xuICAgICAgICBpcm9uUGFnZXMuYWRkRXZlbnRMaXN0ZW5lcignaXJvbi1pdGVtcy1jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZy9jdXN0b211aScpKSB7XG4gICAgICAgICAgICBpcm9uUGFnZXMuc2VsZWN0KCdjdXN0b211aScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBoYVBhbmVsQ29uZmlnLnNoYWRvd1Jvb3QgfHwgaGFQYW5lbENvbmZpZztcbiAgICAgIGlmIChyb290Lmxhc3RFbGVtZW50Q2hpbGQudGFnTmFtZSAhPT0gJ0hBLUNPTkZJRy1DVVNUT00tVUknKSB7XG4gICAgICAgIGNvbnN0IGhhQ29uZmlnQ3VzdG9tVWkgPSBnZXRIYUNvbmZpZ0N1c3RvbVVpKCk7XG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoaGFDb25maWdDdXN0b21VaSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2aXNpYmxlID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9jb25maWcvY3VzdG9tdWknKTtcbiAgICAgIHJvb3QubGFzdEVsZW1lbnRDaGlsZC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICcnIDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICBpbnN0YWxsU3RhdGVzSG9vaygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaG9tZS1hc3Npc3RhbnQnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbWVBc3Npc3RhbnQgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAoIWhvbWVBc3Npc3RhbnQgfHwgIWhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzO1xuICAgICAgaG9tZUFzc2lzdGFudC5wcm90b3R5cGUuX3VwZGF0ZUhhc3MgPSBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGNvbnN0IHsgaGFzcyB9ID0gdGhpcztcbiAgICAgICAgaWYgKG9iai5zdGF0ZXMpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhvYmouc3RhdGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9iai5zdGF0ZXNba2V5XTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuX2N1aV9rZWVwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdFbnRpdHkgPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVBcHBseVRlbXBsYXRlcyhoYXNzLCBvYmouc3RhdGVzLCBlbnRpdHkpO1xuICAgICAgICAgICAgaWYgKGhhc3Muc3RhdGVzICYmIGVudGl0eSAhPT0gaGFzcy5zdGF0ZXNba2V5XSkge1xuICAgICAgICAgICAgICAvLyBOZXcgc3RhdGUgYXJyaXZlZC4gUHV0IG1vZGlmaWVkIHN0YXRlIGluLlxuICAgICAgICAgICAgICBvYmouc3RhdGVzW2tleV0gPSBuZXdFbnRpdHk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSAhPT0gbmV3RW50aXR5KSB7XG4gICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHNhbWUgc3RhdGUgYnV0IGNvbnRlbnRzIGNoYW5nZWQgZHVlIHRvIG90aGVyIHN0YXRlIGNoYW5nZXMuXG4gICAgICAgICAgICAgIG9iai5zdGF0ZXNba2V5XSA9IG5ld0VudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbFVwZGF0ZS5jYWxsKHRoaXMsIG9iaik7XG4gICAgICAgIGlmIChvYmoudGhlbWVzICYmIGhhc3MuX3RoZW1lV2FpdGVycykge1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycy5mb3JFYWNoKHdhaXRlciA9PiB3YWl0ZXIuc3RhdGVDaGFuZ2VkKHdhaXRlci5zdGF0ZSkpO1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1haW4gPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhkb2N1bWVudCwgJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAobWFpbi5oYXNzICYmIG1haW4uaGFzcy5zdGF0ZXMpIHtcbiAgICAgICAgbWFpbi5fdXBkYXRlSGFzcyh7IHN0YXRlczogbWFpbi5oYXNzLnN0YXRlcyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsUGFydGlhbENhcmRzKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdwYXJ0aWFsLWNhcmRzJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0aWFsQ2FyZHMgPSBjdXN0b21FbGVtZW50cy5nZXQoJ3BhcnRpYWwtY2FyZHMnKTtcbiAgICAgIGlmICghcGFydGlhbENhcmRzIHx8ICFwYXJ0aWFsQ2FyZHMucHJvdG90eXBlLl9kZWZhdWx0Vmlld0ZpbHRlcikgcmV0dXJuO1xuICAgICAgcGFydGlhbENhcmRzLnByb3RvdHlwZS5fZGVmYXVsdFZpZXdGaWx0ZXIgPSAoaGFzcywgZW50aXR5SWQpID0+IHtcbiAgICAgICAgaWYgKGhhc3Muc3RhdGVzW2VudGl0eUlkXS5hdHRyaWJ1dGVzLmhpZGRlbikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBleGNsdWRlcyA9IHt9O1xuICAgICAgICBPYmplY3QudmFsdWVzKGhhc3Muc3RhdGVzKS5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgICBpZiAoZW50aXR5LmF0dHJpYnV0ZXMgJiYgZW50aXR5LmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVFbnRpdHlJZCA9IGVudGl0eS5lbnRpdHlfaWQ7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSkgcmV0dXJuO1xuICAgICAgICAgICAgZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSA9IGVudGl0eTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuYXR0cmlidXRlcy52aWV3KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZXdFbnRpdGllcyA9IGdldFZpZXdFbnRpdGllcyhoYXNzLnN0YXRlcywgZW50aXR5KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModmlld0VudGl0aWVzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBpZCA9PiB2aWV3RW50aXRpZXNbaWRdLmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXhjbHVkZXNbaWRdID0gdmlld0VudGl0aWVzW2lkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gIWV4Y2x1ZGVzW2VudGl0eUlkXTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgLy8gQWxsb3dzIGNoYW5naW5nIHRoZSAnRXhlY3V0ZScgLyAnQWN0aXZhdGUnIHRleHQgb24gc2NyaXB0L3NjZW5lIGNhcmRzLlxuICBpbnN0YWxsQWN0aW9uTmFtZShlbGVtZW50TmFtZSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKGVsZW1lbnROYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGtsYXNzID0gY3VzdG9tRWxlbWVudHMuZ2V0KGVsZW1lbnROYW1lKTtcbiAgICAgIGlmICgha2xhc3MgfHwgIWtsYXNzLnByb3RvdHlwZSkgcmV0dXJuO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtsYXNzLnByb3RvdHlwZSwgJ2xvY2FsaXplJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tTG9jYWxpemUodikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVPYmogJiYgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzLmFjdGlvbl9uYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlT2JqLmF0dHJpYnV0ZXMuYWN0aW9uX25hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGEubG9jYWxpemUodik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXN0b21Mb2NhbGl6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KCkge30sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBBbGxvd3MgdGhlbWluZyBcInJlZ3VsYXJcIiB0b3AgYmFkZ2VzLlxuICBpbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UoKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLXN0YXRlLWxhYmVsLWJhZGdlJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYVN0YXRlTGFiZWxCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnaGEtc3RhdGUtbGFiZWwtYmFkZ2UnKTtcbiAgICAgIGlmICghaGFTdGF0ZUxhYmVsQmFkZ2UgfHwgIWhhU3RhdGVMYWJlbEJhZGdlLnByb3RvdHlwZS5zdGF0ZUNoYW5nZWQpIHJldHVybjtcbiAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICBoYVN0YXRlTGFiZWxCYWRnZS5wcm90b3R5cGUuc3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24gdXBkYXRlKHN0YXRlT2JqKSB7XG4gICAgICAgIC8vIFRPRE86IENhbGwgd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0XG4gICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzcy50aGVtZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzcy5fdGhlbWVXYWl0ZXJzID0gdGhpcy5oYXNzLl90aGVtZVdhaXRlcnMgfHwgW107XG4gICAgICAgICAgICB0aGlzLmhhc3MuX3RoZW1lV2FpdGVycy5wdXNoKHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LFxuICAgICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lIHx8ICdkZWZhdWx0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKCk7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAvLyBBZGRlZCBvbiAxOS4xLjIwMThcbiAgICAgICAgICB0aGlzLnN0YXJ0SW50ZXJ2YWwoc3RhdGVPYmopO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxTdGF0ZUJhZGdlKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdzdGF0ZS1iYWRnZScpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnc3RhdGUtYmFkZ2UnKTtcbiAgICAgIGlmICghc3RhdGVCYWRnZSB8fCAhc3RhdGVCYWRnZS5wcm90b3R5cGUuX3VwZGF0ZUljb25BcHBlYXJhbmNlKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZUljb25BcHBlYXJhbmNlID0gc3RhdGVCYWRnZS5wcm90b3R5cGUuX3VwZGF0ZUljb25BcHBlYXJhbmNlO1xuICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgIHN0YXRlQmFkZ2UucHJvdG90eXBlLl91cGRhdGVJY29uQXBwZWFyYW5jZSA9IGZ1bmN0aW9uIGN1c3RvbVVwZGF0ZUljb25BcHBlYXJhbmNlKHN0YXRlT2JqKSB7XG4gICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IgJiYgIXN0YXRlT2JqLmF0dHJpYnV0ZXMuZW50aXR5X3BpY3R1cmUpIHtcbiAgICAgICAgICB0aGlzLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kLmljb24uc3R5bGUsIHtcbiAgICAgICAgICAgIGNvbG9yOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IsXG4gICAgICAgICAgICBmaWx0ZXI6ICcnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdpbmFsVXBkYXRlSWNvbkFwcGVhcmFuY2UuY2FsbCh0aGlzLCBzdGF0ZU9iaik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgaW5zdGFsbEhhQXR0cmlidXRlcygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaGEtYXR0cmlidXRlcycpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFBdHRyaWJ1dGVzID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdoYS1hdHRyaWJ1dGVzJyk7XG4gICAgICBpZiAoIWhhQXR0cmlidXRlcyB8fCAhaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5IHx8XG4gICAgICAgICAhd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsKSByZXR1cm47XG4gICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5ID1cbiAgICAgICAgZnVuY3Rpb24gY3VzdG9tQ29tcHV0ZUZpbHRlcnNBcnJheShleHRyYUZpbHRlcnMpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMpLmNvbmNhdChcbiAgICAgICAgICAgIGV4dHJhRmlsdGVycyA/IGV4dHJhRmlsdGVycy5zcGxpdCgnLCcpIDogW10pO1xuICAgICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxIYUZvcm1DdXN0b21pemUoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLWZvcm0tY3VzdG9taXplJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYUZvcm1DdXN0b21pemUgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hhLWZvcm0tY3VzdG9taXplJyk7XG4gICAgICBpZiAoIWhhRm9ybUN1c3RvbWl6ZSkge1xuICAgICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEwMG1zLlxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSwgMTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHdpbmRvdy5jdXN0b21VSS5oYUZvcm1DdXN0b21pemVJbml0RG9uZSkgcmV0dXJuO1xuICAgICAgd2luZG93LmN1c3RvbVVJLmhhRm9ybUN1c3RvbWl6ZUluaXREb25lID0gdHJ1ZTtcblxuICAgICAgaWYgKCF3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwpIHJldHVybjtcbiAgICAgIGlmIChoYUZvcm1DdXN0b21pemUucHJvdG90eXBlLl9jb21wdXRlU2luZ2xlQXR0cmlidXRlKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUgPVxuICAgICAgICAgIGZ1bmN0aW9uIGN1c3RvbUNvbXB1dGVTaW5nbGVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFU1trZXldXG4gICAgICAgICAgICAgICAgfHwgeyB0eXBlOiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuVU5LTk9XTl9UWVBFIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdE9wZW5PYmplY3Qoa2V5LCBjb25maWcudHlwZSA9PT0gJ2pzb24nID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogdmFsdWUsIHNlY29uZGFyeSwgY29uZmlnKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMpIHtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgaGFGb3JtQ3VzdG9taXplLnByb3RvdHlwZS5nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyA9XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMoXG4gICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZXMsIGdsb2JhbEF0dHJpYnV0ZXMsIGV4aXN0aW5nQXR0cmlidXRlcywgbmV3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga25vd25LZXlzID1cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25mID0gd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmYgJiYgKCFjb25mLmRvbWFpbnMgfHwgIXRoaXMuZW50aXR5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYuZG9tYWlucy5pbmNsdWRlcyhjb21wdXRlU3RhdGVEb21haW4odGhpcy5lbnRpdHkpKSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcih0aGlzLmZpbHRlckZyb21BdHRyaWJ1dGVzKGxvY2FsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZ2xvYmFsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZXhpc3RpbmdBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJGcm9tQXR0cmlidXRlcyhuZXdBdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICByZXR1cm4ga25vd25LZXlzLnNvcnQoKS5jb25jYXQoJ090aGVyJyk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsQ2xhc3NIb29rcygpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmNsYXNzSW5pdERvbmUpIHJldHVybjtcbiAgICB3aW5kb3cuY3VzdG9tVUkuY2xhc3NJbml0RG9uZSA9IHRydWU7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxQYXJ0aWFsQ2FyZHMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbFN0YXRlc0hvb2soKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhU3RhdGVMYWJlbEJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxTdGF0ZUJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUF0dHJpYnV0ZXMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NlbmUnKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NyaXB0Jyk7XG4gIH0sXG5cbiAgaW5pdCgpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmluaXREb25lKSByZXR1cm47XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxDbGFzc0hvb2tzKCk7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBpZiAoIW1haW4uaGFzcyB8fCAhbWFpbi5oYXNzLnN0YXRlcykge1xuICAgICAgLy8gQ29ubmVjdGlvbiB3YXNuJ3QgbWFkZSB5ZXQuIFRyeSBpbiAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHdpbmRvdy5jdXN0b21VSS5pbml0LCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LmN1c3RvbVVJLmluaXREb25lID0gdHJ1ZTtcblxuICAgIHdpbmRvdy5jdXN0b21VSS51c2VDdXN0b21pemVyKCk7XG5cbiAgICB3aW5kb3cuY3VzdG9tVUkucnVuSG9va3MoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9jYXRpb24tY2hhbmdlZCcsIHdpbmRvdy5zZXRUaW1lb3V0LmJpbmQobnVsbCwgd2luZG93LmN1c3RvbVVJLnJ1bkhvb2tzLCAxMDApKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5sb2coYExvYWRlZCBDdXN0b21VSSAke1ZFUlNJT059YCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKCF3aW5kb3cuQ1VTVE9NX1VJX0xJU1QpIHtcbiAgICAgIHdpbmRvdy5DVVNUT01fVUlfTElTVCA9IFtdO1xuICAgIH1cbiAgICB3aW5kb3cuQ1VTVE9NX1VJX0xJU1QucHVzaCh7XG4gICAgICBuYW1lOiAnQ3VzdG9tVUknLFxuICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgIHVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXktZ2l0L2hvbWUtYXNzaXN0YW50LWN1c3RvbS11aScsXG4gICAgfSk7XG4gIH0sXG5cbiAgcnVuSG9va3MoKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLnVwZGF0ZUNvbmZpZ1BhbmVsKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUZvcm1DdXN0b21pemUoKTtcbiAgfSxcblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hhLWRldmljZS1uYW1lJykgfHwgJyc7XG4gIH0sXG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoYS1kZXZpY2UtbmFtZScsIG5hbWUgfHwgJycpO1xuICB9LFxuXG4gIGNvbXB1dGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgaGFzcywgZW50aXRpZXMsIGVudGl0eSwgYXR0cmlidXRlcywgYXR0cmlidXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9ICh0ZW1wbGF0ZS5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSA/IHRlbXBsYXRlIDogYHJldHVybiBcXGAke3RlbXBsYXRlfVxcYDtgO1xuICAgIHRyeSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYyAqL1xuICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcbiAgICAgICAgJ2hhc3MnLCAnZW50aXRpZXMnLCAnZW50aXR5JywgJ2F0dHJpYnV0ZXMnLCAnYXR0cmlidXRlJywgJ3N0YXRlJywgZnVuY3Rpb25Cb2R5KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3LWZ1bmMgKi9cbiAgICAgIHJldHVybiBmdW5jKGhhc3MsIGVudGl0aWVzLCBlbnRpdHksIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgc3RhdGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIGlmICgoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB8fCBlIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2UubmFtZX06ICR7ZS5tZXNzYWdlfSBpbiB0ZW1wbGF0ZSAke2Z1bmN0aW9uQm9keX1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9LFxufTtcbndpbmRvdy5jdXN0b21VSS5pbml0KCk7XG4iLCJleHBvcnQgZGVmYXVsdCAnMjAxOTAxMTMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9keW5hbWljX2NvbnRlbnRfdXBkYXRlci5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX2RvbWFpbi50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX3N0YXRlLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfc3RhdGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2dldF9ncm91cF9lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9nZXRfdmlld19lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvc3VwcG9ydHMtZmVhdHVyZS50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvdXRpbC9oYXNzLWF0dHJpYnV0ZXMtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvYm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2N1aS1iYXNlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2R5bmFtaWMtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvZHluYW1pYy13aXRoLWV4dHJhLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS1jb25maWctY3VzdG9tLXVpLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS10aGVtZWQtc2xpZGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9zdGF0ZS1jYXJkLWN1c3RvbS11aS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRoLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWl4aW5zL2V2ZW50cy1taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaGFzcy1hdHRyaWJ1dGUtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiREVGQVVMVF9ET01BSU5fSUNPTiIsIkRFRkFVTFRfUEFORUwiLCJET01BSU5TX1dJVEhfQ0FSRCIsIkRPTUFJTlNfV0lUSF9NT1JFX0lORk8iLCJET01BSU5TX0hJREVfTU9SRV9JTkZPIiwiRE9NQUlOU19NT1JFX0lORk9fTk9fSElTVE9SWSIsIlNUQVRFU19PRkYiLCJET01BSU5TX1RPR0dMRSIsIlNldCIsIlVOSVRfQyIsIlVOSVRfRiIsIkRFRkFVTFRfVklFV19FTlRJVFlfSUQiLCJhcHBseVRoZW1lc09uRWxlbWVudCIsImVsZW1lbnQiLCJ0aGVtZXMiLCJsb2NhbFRoZW1lIiwidXBkYXRlTWV0YSIsIl90aGVtZXMiLCJ0aGVtZU5hbWUiLCJkZWZhdWx0X3RoZW1lIiwic3R5bGVzIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbWUiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByZWZpeGVkS2V5IiwidXBkYXRlU3R5bGVzIiwid2luZG93IiwiU2hhZHlDU1MiLCJzdHlsZVN1YnRyZWUiLCJtZXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiaGFzQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwidGhlbWVDb2xvciIsImR5bmFtaWNDb250ZW50VXBkYXRlciIsInJvb3QiLCJuZXdFbGVtZW50VGFnIiwiYXR0cmlidXRlcyIsInJvb3RFbCIsImN1c3RvbUVsIiwibGFzdENoaWxkIiwidGFnTmFtZSIsInJlbW92ZUNoaWxkIiwiY3JlYXRlRWxlbWVudCIsInRvTG93ZXJDYXNlIiwic2V0UHJvcGVydGllcyIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsImNhblRvZ2dsZURvbWFpbiIsImhhc3MiLCJkb21haW4iLCJzZXJ2aWNlcyIsImNhblRvZ2dsZVN0YXRlIiwic3RhdGVPYmoiLCJzdGF0ZSIsImNvbXB1dGVEb21haW4iLCJlbnRpdHlJZCIsInN1YnN0ciIsImluZGV4T2YiLCJjb21wdXRlU3RhdGVEb21haW4iLCJlbnRpdHlfaWQiLCJnZXRHcm91cEVudGl0aWVzIiwiZW50aXRpZXMiLCJncm91cCIsInJlc3VsdCIsImVudGl0eSIsImdldFZpZXdFbnRpdGllcyIsInZpZXciLCJ2aWV3RW50aXRpZXMiLCJoaWRkZW4iLCJncm91cEVudGl0aWVzIiwiZ3JFbnRpdHlJZCIsImdyRW50aXR5Iiwic3RhdGVDYXJkVHlwZSIsImluY2x1ZGVzIiwiY29udHJvbCIsInN1cHBvcnRzRmVhdHVyZSIsImZlYXR1cmUiLCJzdXBwb3J0ZWRfZmVhdHVyZXMiLCJoYXNzQXR0cmlidXRlVXRpbCIsIkRPTUFJTl9ERVZJQ0VfQ0xBU1MiLCJiaW5hcnlfc2Vuc29yIiwiY292ZXIiLCJzZW5zb3IiLCJVTktOT1dOX1RZUEUiLCJBRERfVFlQRSIsIlRZUEVfVE9fVEFHIiwic3RyaW5nIiwianNvbiIsImljb24iLCJib29sZWFuIiwiYXJyYXkiLCJMT0dJQ19TVEFURV9BVFRSSUJVVEVTIiwiZW50aXR5X3BpY3R1cmUiLCJ1bmRlZmluZWQiLCJmcmllbmRseV9uYW1lIiwidHlwZSIsImRlc2NyaXB0aW9uIiwiZW11bGF0ZWRfaHVlIiwiZG9tYWlucyIsImVtdWxhdGVkX2h1ZV9uYW1lIiwiaGFhc2thX2hpZGRlbiIsImhhYXNrYV9uYW1lIiwiaG9tZWJyaWRnZV9oaWRkZW4iLCJob21lYnJpZGdlX25hbWUiLCJhdHRyaWJ1dGlvbiIsImN1c3RvbV91aV9tb3JlX2luZm8iLCJjdXN0b21fdWlfc3RhdGVfY2FyZCIsImRldmljZV9jbGFzcyIsIm9wdGlvbnMiLCJhc3N1bWVkX3N0YXRlIiwiaW5pdGlhbF9zdGF0ZSIsInVuaXRfb2ZfbWVhc3VyZW1lbnQiLCJKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5IiwicHJvcCIsIkxpdGVyYWxTdHJpbmciLCJ2YWx1ZSIsInRvU3RyaW5nIiwibGl0ZXJhbFZhbHVlIiwiRXJyb3IiLCJodG1sVmFsdWUiLCJIVE1MVGVtcGxhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiaHRtbCIsInN0cmluZ3MiLCJ0ZW1wbGF0ZSIsInZhbHVlcyIsInJlZHVjZSIsImFjYyIsInYiLCJpZHgiLCJodG1sTGl0ZXJhbCIsIkN1aUJhc2VFbGVtZW50IiwiZXh0cmFzIiwiZXh0cmFfZGF0YV90ZW1wbGF0ZSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImV4dHJhIiwiY3VzdG9tVUkiLCJjb21wdXRlVGVtcGxhdGUiLCJzdGF0ZXMiLCJmaWx0ZXIiLCJpbkRpYWxvZyIsImxlbmd0aCIsInNob3dfbGFzdF9jaGFuZ2VkIiwiQm9vbGVhbiIsImNvbnRyb2xFbGVtZW50IiwiU3RyaW5nIiwiY29tcHV0ZWQiLCJQb2x5bWVyIiwiRWxlbWVudCIsIkR5bmFtaWNFbGVtZW50IiwiZWxlbWVudE5hbWUiLCJ0b1VwcGVyQ2FzZSIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIiwid2hlbkRlZmluZWQiLCJ0aGVuIiwiRHluYW1pY1dpdGhFeHRyYSIsIl9hdHRhY2hlZCIsIl9pc0F0dGFjaGVkIiwiYXR0YWNoZWQiLCJleHRyYV9iYWRnZSIsImV4dHJhQmFkZ2VzIiwiZXh0cmFCYWRnZSIsIm1heWJlQ2hhbmdlT2JqZWN0IiwiYXR0cmlidXRlIiwidW5pdCIsImJsYWNrbGlzdCIsImJsYWNrbGlzdF9zdGF0ZXMiLCJzb21lIiwiUmVnRXhwIiwidGVzdCIsIl9lbnRpdHlEaXNwbGF5IiwiZXh0cmFPYmoiLCJleHRyYU9ialZpc2libGUiLCJoaWRlX2NvbnRyb2wiLCJoYUxvY2FsaXplIiwibG9jYWxpemUiLCJjb25maXJtX2NvbnRyb2xzIiwiY29uZmlybV9jb250cm9sc19zaG93X2xvY2siLCJlIiwic3R5bGUiLCJwb2ludGVyRXZlbnRzIiwibG9jayIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwicXVlcnlTZWxlY3RvckFsbCIsImVsZW0iLCJhcHBseVRoZW1lcyIsImdldCIsIkhhQ29uZmlnQ3VzdG9tVWkiLCJuYW1lIiwiZ2V0TmFtZSIsInNldE5hbWUiLCJoaXN0b3J5IiwiYmFjayIsImZpcmUiLCJpc1dpZGUiLCJvYnNlcnZlciIsIkhhVGhlbWVkU2xpZGVyIiwiZGlzYWJsZU9mZldoZW5NaW4iLCJfY29tcHV0ZUF0dHJpYnV0ZSIsImNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJfZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkIiwiYXR0ciIsImRlZiIsImlzT24iLCJ0aGVtZWRNaW4iLCJldiIsInRhcmdldCIsIm1pbiIsIk51bWJlciIsIm1heCIsInBpbiIsIm5vdGlmeSIsIl90aGVtZWRNaW4iLCJTSE9XX0xBU1RfQ0hBTkdFRF9CTEFDS0xJU1RFRF9DQVJEUyIsIkRPTUFJTl9UT19TTElERVJfU1VQUE9SVCIsImxpZ2h0IiwiY2xpbWF0ZSIsIlRZUEVfVE9fQ09OVFJPTCIsInRvZ2dsZSIsImRpc3BsYXkiLCJTdGF0ZUNhcmRDdXN0b21VaSIsImNvbnRhaW5lciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiX2NvbnRhaW5lciIsInNldFByb3BlcnR5IiwiaW5wdXRDaGFuZ2VkIiwibWFyZ2luIiwicGFkZGluZyIsImlkIiwiY29uc29sZSIsIndhcm4iLCJiYWRnZXNfbGlzdCIsInB1c2giLCJwYXJhbXMiLCJ3aWR0aCIsImZvbnRTaXplIiwibW9kaWZpZWRPYmoiLCJ0aGVtZVRhcmdldCIsIm9iaiIsInN0YXRlX2NhcmRfbW9kZSIsIm1heWJlSGlkZUVudGl0eSIsImJhZGdlTW9kZSIsInJlZ3VsYXJNb2RlXyIsImNsZWFuQmFkZ2VTdHlsZSIsIm9yaWdpbmFsU3RhdGVDYXJkVHlwZSIsImN1c3RvbVN0YXRlQ2FyZFR5cGUiLCJzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlIiwic3RhdGVfY2FyZF9jdXN0b21fdWlfc2Vjb25kYXJ5Iiwic2xpZGVyRWxpZ2libGVfIiwic2VydmljZU1pbiIsInNlcnZpY2VNYXgiLCJ2YWx1ZU5hbWUiLCJzZXRWYWx1ZU5hbWUiLCJuYW1lT24iLCJtaW5fdGVtcCIsIm1heF90ZW1wIiwiY29udHJvbF9lbGVtZW50IiwiU3RhdGVDYXJkV2l0aFNsaWRlciIsIl9vbklyb25SZXNpemUiLCJiaW5kIiwiX2lzQ29ubmVjdGVkIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl93YWl0Rm9yTGF5b3V0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9zZXRNb2RlIiwiX2ZyYW1lSWQiLCJyZWFkeVRvQ29tcHV0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImhpZGVTbGlkZXIiLCJtb2RlIiwibGluZVRvb0xvbmciLCJicmVha1NsaWRlciIsInNob3dTbGlkZXIiLCJwcmV2QnJlYWtTbGlkZXIiLCJwcmV2SGlkZVNsaWRlciIsIiQiLCJjb250YWluZXJXaWR0aCIsImNsaWVudFdpZHRoIiwibWluTGluZUJyZWFrIiwibWF4TGluZUJyZWFrIiwiY29udGFpbmVySGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwic3RhdGVIZWlnaHQiLCJzdHJldGNoU2xpZGVyIiwicGFyc2VJbnQiLCJwYXJhbSIsImlzTmFOIiwicGF0aCIsImNvbXBvc2VkUGF0aCIsImNhbGxTZXJ2aWNlIiwic2xpZGVyVmFsdWUiLCJzdHJldGNoX3NsaWRlciIsIlN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIiLCJzdXBlckNsYXNzIiwiRXZlbnRzTWl4aW4iLCJkZXRhaWwiLCJldmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJjb21wb3NlZCIsIm5vZGUiLCJkaXNwYXRjaEV2ZW50IiwiU1VQUE9SVEVEX1NMSURFUl9NT0RFUyIsImN1c3RvbVVpQXR0cmlidXRlcyIsImRldmljZSIsInRlbXBsYXRlcyIsIl9zdGF0ZURpc3BsYXkiLCJjb25jYXQiLCJzbGlkZXJfdGhlbWUiLCJoaWRlX2luX2RlZmF1bHRfdmlldyIsImljb25fY29sb3IiLCJkb21Ib3N0IiwiZ2V0Um9vdE5vZGUiLCJEb2N1bWVudEZyYWdtZW50IiwiaG9zdCIsImxpZ2h0T3JTaGFkb3ciLCJzZWxlY3RvciIsInNoYWRvd1Jvb3QiLCJnZXRFbGVtZW50SGllcmFyY2h5IiwiaGllcmFyY2h5Iiwic2hpZnQiLCJnZXRDb250ZXh0IiwiX2NvbnRleHQiLCJncm91cEVudGl0eSIsInJldmVyc2UiLCJmaW5kTWF0Y2giLCJmaW5kIiwib3B0aW9uIiwibWF0Y2giLCJtYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlIiwiYXBwbHlBdHRyaWJ1dGVzIiwibWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwIiwiY29udGV4dCIsImMiLCJfc2V0S2VlcCIsIl9jdWlfa2VlcCIsIm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMiLCJuZXdBdHRyaWJ1dGVzIiwiaGFzR2xvYmFsIiwiaGFzQ2hhbmdlcyIsInVudGVtcGxhdGVkX2F0dHJpYnV0ZXMiLCJ1bnRlbXBsYXRlZF9zdGF0ZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInVudGVtcGxhdGVkX3N0YXRlRGlzcGxheSIsIm1heWJlQXBwbHlUZW1wbGF0ZXMiLCJuZXdSZXN1bHQiLCJjaGVja0F0dHJpYnV0ZXMiLCJsYXN0X2NoYW5nZWQiLCJhbGxvd0hpZGRlbiIsImZpeEdyb3VwVGl0bGVzIiwiaG9tZUFzc2lzdGFudE1haW4iLCJoYUNhcmRzIiwibWFpbiIsImNhcmRzIiwiY2FyZCIsIm5hbWVFbGVtIiwidGV4dENvbnRlbnQiLCJjb250cm9sQ29sdW1ucyIsImNvbHVtbnMiLCJwYXJ0aWFsQ2FyZHMiLCJmIiwiaGFuZGxlV2luZG93Q2hhbmdlIiwiX3VwZGF0ZUNvbHVtbnMiLCJtcWxzIiwibXFsIiwicmVtb3ZlTGlzdGVuZXIiLCJtYXRjaE1lZGlhIiwiYWRkTGlzdGVuZXIiLCJ1c2VDdXN0b21pemVyIiwiY3VzdG9taXplciIsImhpZGVfYXR0cmlidXRlcyIsInVwZGF0ZUNvbmZpZ1BhbmVsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJoYVBhbmVsQ29uZmlnIiwiaGFDb25maWdOYXZpZ2F0aW9uIiwiY3VpUGF0Y2giLCJfb3JpZ2luYWxDb21wdXRlTG9hZGVkIiwiX2NvbXB1dGVMb2FkZWQiLCJfb3JpZ2luYWxDb21wdXRlQ2FwdGlvbiIsIl9jb21wdXRlQ2FwdGlvbiIsIl9vcmlnaW5hbENvbXB1dGVEZXNjcmlwdGlvbiIsIl9jb21wdXRlRGVzY3JpcHRpb24iLCJwYWdlIiwicGFnZXMiLCJjb25mIiwiY2FwdGlvbiIsImxvYWRlZCIsImdldEhhQ29uZmlnQ3VzdG9tVWkiLCJoYUNvbmZpZ0N1c3RvbVVpIiwiaXJvblBhZ2VzIiwibGFzdEVsZW1lbnRDaGlsZCIsInNlbGVjdCIsInZpc2libGUiLCJyb3V0ZXJPcHRpb25zIiwicm91dGVzIiwiY3VzdG9tdWkiLCJ0YWciLCJsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1cGRhdGUiLCJNYXAiLCJpbnN0YWxsU3RhdGVzSG9vayIsImhvbWVBc3Npc3RhbnQiLCJfdXBkYXRlSGFzcyIsIm9yaWdpbmFsVXBkYXRlIiwibmV3RW50aXR5IiwiX3RoZW1lV2FpdGVycyIsIndhaXRlciIsInN0YXRlQ2hhbmdlZCIsImluc3RhbGxQYXJ0aWFsQ2FyZHMiLCJfZGVmYXVsdFZpZXdGaWx0ZXIiLCJleGNsdWRlcyIsImV4Y2x1ZGVFbnRpdHlJZCIsImluc3RhbGxBY3Rpb25OYW1lIiwia2xhc3MiLCJkZWZpbmVQcm9wZXJ0eSIsImN1c3RvbUxvY2FsaXplIiwiYWN0aW9uX25hbWUiLCJfX2RhdGEiLCJzZXQiLCJpbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UiLCJoYVN0YXRlTGFiZWxCYWRnZSIsInN0YXJ0SW50ZXJ2YWwiLCJpbnN0YWxsU3RhdGVCYWRnZSIsInN0YXRlQmFkZ2UiLCJfdXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJvcmlnaW5hbFVwZGF0ZUljb25BcHBlYXJhbmNlIiwiY3VzdG9tVXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJjb2xvciIsInVwZGF0ZWQiLCJvcmlnaW5hbFVwZGF0ZWQiLCJjdXN0b21VcGRhdGVkIiwiY2hhbmdlZFByb3BzIiwiaGFzIiwiX2ljb24iLCJpbnN0YWxsSGFBdHRyaWJ1dGVzIiwiaGFBdHRyaWJ1dGVzIiwiY29tcHV0ZUZpbHRlcnNBcnJheSIsImN1c3RvbUNvbXB1dGVGaWx0ZXJzQXJyYXkiLCJleHRyYUZpbHRlcnMiLCJzcGxpdCIsImluc3RhbGxIYUZvcm1DdXN0b21pemUiLCJoYUZvcm1DdXN0b21pemUiLCJoYUZvcm1DdXN0b21pemVJbml0RG9uZSIsIl9jb21wdXRlU2luZ2xlQXR0cmlidXRlIiwiY3VzdG9tQ29tcHV0ZVNpbmdsZUF0dHJpYnV0ZSIsInNlY29uZGFyeSIsImNvbmZpZyIsIl9pbml0T3Blbk9iamVjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyIsImN1c3RvbWdldE5ld0F0dHJpYnV0ZXNPcHRpb25zIiwibG9jYWxBdHRyaWJ1dGVzIiwiZ2xvYmFsQXR0cmlidXRlcyIsImV4aXN0aW5nQXR0cmlidXRlcyIsImtub3duS2V5cyIsImZpbHRlckZyb21BdHRyaWJ1dGVzIiwic29ydCIsImluc3RhbGxDbGFzc0hvb2tzIiwiY2xhc3NJbml0RG9uZSIsImluaXQiLCJpbml0RG9uZSIsInJ1bkhvb2tzIiwibG9nIiwiQ1VTVE9NX1VJX0xJU1QiLCJ2ZXJzaW9uIiwidXJsIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJmdW5jdGlvbkJvZHkiLCJmdW5jIiwiRnVuY3Rpb24iLCJTeW50YXhFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25FQTtBQUFBO0FB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QUEyQlosQ0FBQyxDQUFDcVQsT0FBN0IsMEJBQW9ETCxZQUFwRDtBQUNBLGVBQU8sSUFBUDtBQUNEO0FBQ0Q7OztBQUNBLFlBQU1oVCxDQUFOO0FBQ0Q7QUFDRjtBQS9uQmtDLENBQXJDO0FBaW9CQTlKLE1BQU0sQ0FBQ21ILFFBQVAsQ0FBZ0JpVixJQUFoQixHOzs7Ozs7Ozs7Ozs7O0FDem9CQSwrREFBZSxVQUFmLEUiLCJmaWxlIjoic2NyaXB0cy1kYmctZXM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJ5cG9pbnRzL3NjcmlwdHMuanNcIik7XG4iLCIvKiogQ29uc3RhbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGZyb250ZW5kLiAqL1xuXG4vLyBDb25zdGFudHMgc2hvdWxkIGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBieSBuYW1lLlxuLy8gQXJyYXlzIHdpdGggdmFsdWVzIHNob3VsZCBiZSBhbHBoYWJldGljYWxseSBzb3J0ZWQgaWYgb3JkZXIgZG9lc24ndCBtYXR0ZXIuXG4vLyBFYWNoIGNvbnN0YW50IHNob3VsZCBoYXZlIGEgZGVzY3JpcHRpb24gd2hhdCBpdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvci5cblxuLyoqIEljb24gdG8gdXNlIHdoZW4gbm8gaWNvbiBzcGVjaWZpZWQgZm9yIGRvbWFpbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RPTUFJTl9JQ09OID0gXCJoYXNzOmJvb2ttYXJrXCI7XG5cbi8qKiBQYW5lbCB0byBzaG93IHdoZW4gbm8gcGFuZWwgaXMgcGlja2VkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFORUwgPSBcInN0YXRlc1wiO1xuXG4vKiogRG9tYWlucyB0aGF0IGhhdmUgYSBzdGF0ZSBjYXJkLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfV0lUSF9DQVJEID0gW1xuICBcImNsaW1hdGVcIixcbiAgXCJjb3ZlclwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImlucHV0X3NlbGVjdFwiLFxuICBcImlucHV0X251bWJlclwiLFxuICBcImlucHV0X3RleHRcIixcbiAgXCJsb2NrXCIsXG4gIFwibWVkaWFfcGxheWVyXCIsXG4gIFwic2NlbmVcIixcbiAgXCJzY3JpcHRcIixcbiAgXCJ0aW1lclwiLFxuICBcInZhY3V1bVwiLFxuICBcIndhdGVyX2hlYXRlclwiLFxuICBcIndlYmxpbmtcIixcbl07XG5cbi8qKiBEb21haW5zIHdpdGggc2VwYXJhdGUgbW9yZSBpbmZvIGRpYWxvZy4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX1dJVEhfTU9SRV9JTkZPID0gW1xuICBcImFsYXJtX2NvbnRyb2xfcGFuZWxcIixcbiAgXCJhdXRvbWF0aW9uXCIsXG4gIFwiY2FtZXJhXCIsXG4gIFwiY2xpbWF0ZVwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImNvdmVyXCIsXG4gIFwiZmFuXCIsXG4gIFwiZ3JvdXBcIixcbiAgXCJoaXN0b3J5X2dyYXBoXCIsXG4gIFwiaW5wdXRfZGF0ZXRpbWVcIixcbiAgXCJsaWdodFwiLFxuICBcImxvY2tcIixcbiAgXCJtZWRpYV9wbGF5ZXJcIixcbiAgXCJzY3JpcHRcIixcbiAgXCJzdW5cIixcbiAgXCJ1cGRhdGVyXCIsXG4gIFwidmFjdXVtXCIsXG4gIFwid2F0ZXJfaGVhdGVyXCIsXG4gIFwid2VhdGhlclwiLFxuXTtcblxuLyoqIERvbWFpbnMgdGhhdCBzaG93IG5vIG1vcmUgaW5mbyBkaWFsb2cuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19ISURFX01PUkVfSU5GTyA9IFtcbiAgXCJpbnB1dF9udW1iZXJcIixcbiAgXCJpbnB1dF9zZWxlY3RcIixcbiAgXCJpbnB1dF90ZXh0XCIsXG4gIFwic2NlbmVcIixcbiAgXCJ3ZWJsaW5rXCIsXG5dO1xuXG4vKiogRG9tYWlucyB0aGF0IHNob3VsZCBoYXZlIHRoZSBoaXN0b3J5IGhpZGRlbiBpbiB0aGUgbW9yZSBpbmZvIGRpYWxvZy4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX01PUkVfSU5GT19OT19ISVNUT1JZID0gW1xuICBcImNhbWVyYVwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImhpc3RvcnlfZ3JhcGhcIixcbiAgXCJzY2VuZVwiLFxuXTtcblxuLyoqIFN0YXRlcyB0aGF0IHdlIGNvbnNpZGVyIFwib2ZmXCIuICovXG5leHBvcnQgY29uc3QgU1RBVEVTX09GRiA9IFtcImNsb3NlZFwiLCBcImxvY2tlZFwiLCBcIm9mZlwiXTtcblxuLyoqIERvbWFpbnMgd2hlcmUgd2UgYWxsb3cgdG9nZ2xlIGluIExvdmVsYWNlLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfVE9HR0xFID0gbmV3IFNldChbXG4gIFwiZmFuXCIsXG4gIFwiaW5wdXRfYm9vbGVhblwiLFxuICBcImxpZ2h0XCIsXG4gIFwic3dpdGNoXCIsXG5dKTtcblxuLyoqIFRlbXBlcmF0dXJlIHVuaXRzLiAqL1xuZXhwb3J0IGNvbnN0IFVOSVRfQyA9IFwiwrBDXCI7XG5leHBvcnQgY29uc3QgVU5JVF9GID0gXCLCsEZcIjtcblxuLyoqIEVudGl0eSBJRCBvZiB0aGUgZGVmYXVsdCB2aWV3LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVklFV19FTlRJVFlfSUQgPSBcImdyb3VwLmRlZmF1bHRfdmlld1wiO1xuIiwiLyoqXG4gKiBBcHBseSBhIHRoZW1lIHRvIGFuIGVsZW1lbnQgYnkgc2V0dGluZyB0aGUgQ1NTIHZhcmlhYmxlcyBvbiBpdC5cbiAqXG4gKiBlbGVtZW50OiBFbGVtZW50IHRvIGFwcGx5IHRoZW1lIG9uLlxuICogdGhlbWVzOiBIQVNTIFRoZW1lIGluZm9ybWF0aW9uXG4gKiBsb2NhbFRoZW1lOiBzZWxlY3RlZCB0aGVtZS5cbiAqIHVwZGF0ZU1ldGE6IGJvb2xlYW4gaWYgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgdGhlbWUtY29sb3IgbWV0YSBlbGVtZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgZWxlbWVudCxcbiAgdGhlbWVzLFxuICBsb2NhbFRoZW1lLFxuICB1cGRhdGVNZXRhID0gZmFsc2Vcbikge1xuICBpZiAoIWVsZW1lbnQuX3RoZW1lcykge1xuICAgIGVsZW1lbnQuX3RoZW1lcyA9IHt9O1xuICB9XG4gIGxldCB0aGVtZU5hbWUgPSB0aGVtZXMuZGVmYXVsdF90aGVtZTtcbiAgaWYgKGxvY2FsVGhlbWUgPT09IFwiZGVmYXVsdFwiIHx8IChsb2NhbFRoZW1lICYmIHRoZW1lcy50aGVtZXNbbG9jYWxUaGVtZV0pKSB7XG4gICAgdGhlbWVOYW1lID0gbG9jYWxUaGVtZTtcbiAgfVxuICBjb25zdCBzdHlsZXMgPSBPYmplY3QuYXNzaWduKHt9LCBlbGVtZW50Ll90aGVtZXMpO1xuICBpZiAodGhlbWVOYW1lICE9PSBcImRlZmF1bHRcIikge1xuICAgIHZhciB0aGVtZSA9IHRoZW1lcy50aGVtZXNbdGhlbWVOYW1lXTtcbiAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB2YXIgcHJlZml4ZWRLZXkgPSBcIi0tXCIgKyBrZXk7XG4gICAgICBlbGVtZW50Ll90aGVtZXNbcHJlZml4ZWRLZXldID0gXCJcIjtcbiAgICAgIHN0eWxlc1twcmVmaXhlZEtleV0gPSB0aGVtZVtrZXldO1xuICAgIH0pO1xuICB9XG4gIGlmIChlbGVtZW50LnVwZGF0ZVN0eWxlcykge1xuICAgIGVsZW1lbnQudXBkYXRlU3R5bGVzKHN0eWxlcyk7XG4gIH0gZWxzZSBpZiAod2luZG93LlNoYWR5Q1NTKSB7XG4gICAgLy8gaW1wbGVtZW50IHVwZGF0ZVN0eWxlcygpIG1ldGhvZCBvZiBQb2xlbWVyIGVsZW1lbnRzXG4gICAgd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8gKGVsZW1lbnQpLCBzdHlsZXMpO1xuICB9XG5cbiAgaWYgKCF1cGRhdGVNZXRhKSByZXR1cm47XG5cbiAgY29uc3QgbWV0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9dGhlbWUtY29sb3JdXCIpO1xuICBpZiAobWV0YSkge1xuICAgIGlmICghbWV0YS5oYXNBdHRyaWJ1dGUoXCJkZWZhdWx0LWNvbnRlbnRcIikpIHtcbiAgICAgIG1ldGEuc2V0QXR0cmlidXRlKFwiZGVmYXVsdC1jb250ZW50XCIsIG1ldGEuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lQ29sb3IgPVxuICAgICAgc3R5bGVzW1wiLS1wcmltYXJ5LWNvbG9yXCJdIHx8IG1ldGEuZ2V0QXR0cmlidXRlKFwiZGVmYXVsdC1jb250ZW50XCIpO1xuICAgIG1ldGEuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCB0aGVtZUNvbG9yKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBVcGRhdGUgcm9vdCdzIGNoaWxkIGVsZW1lbnQgdG8gYmUgbmV3RWxlbWVudFRhZyByZXBsYWNpbmcgYW5vdGhlciBleGlzdGluZyBjaGlsZCBpZiBhbnkuXG4gKiBDb3B5IGF0dHJpYnV0ZXMgaW50byB0aGUgY2hpbGQgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHluYW1pY0NvbnRlbnRVcGRhdGVyKHJvb3QsIG5ld0VsZW1lbnRUYWcsIGF0dHJpYnV0ZXMpIHtcbiAgY29uc3Qgcm9vdEVsID0gcm9vdDtcbiAgbGV0IGN1c3RvbUVsO1xuXG4gIGlmIChyb290RWwubGFzdENoaWxkICYmIHJvb3RFbC5sYXN0Q2hpbGQudGFnTmFtZSA9PT0gbmV3RWxlbWVudFRhZykge1xuICAgIGN1c3RvbUVsID0gcm9vdEVsLmxhc3RDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocm9vdEVsLmxhc3RDaGlsZCkge1xuICAgICAgcm9vdEVsLnJlbW92ZUNoaWxkKHJvb3RFbC5sYXN0Q2hpbGQpO1xuICAgIH1cbiAgICAvLyBDcmVhdGluZyBhbiBlbGVtZW50IHdpdGggdXBwZXIgY2FzZSB3b3JrcyBmaW5lIGluIENocm9tZSwgYnV0IGluIEZGIGl0IGRvZXNuJ3QgaW1tZWRpYXRlbHlcbiAgICAvLyBiZWNvbWUgYSBkZWZpbmVkIEN1c3RvbSBFbGVtZW50LiBQb2x5bWVyIGRvZXMgdGhhdCBpbiBzb21lIGxhdGVyIHBhc3MuXG4gICAgY3VzdG9tRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5ld0VsZW1lbnRUYWcudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBpZiAoY3VzdG9tRWwuc2V0UHJvcGVydGllcykge1xuICAgIGN1c3RvbUVsLnNldFByb3BlcnRpZXMoYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbiB3YXNuJ3QgbG9hZGVkIHlldCAtIHNldFByb3BlcnRpZXMgd291bGQgYmVcbiAgICAvLyBtaXNzaW5nLCBidXQgbm8gaGFybSBpbiBzZXR0aW5nIGF0dHJpYnV0ZXMgb25lLWJ5LW9uZSB0aGVuLlxuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY3VzdG9tRWxba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjdXN0b21FbC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcm9vdEVsLmFwcGVuZENoaWxkKGN1c3RvbUVsKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSG9tZUFzc2lzdGFudCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYW5Ub2dnbGVEb21haW4oaGFzczogSG9tZUFzc2lzdGFudCwgZG9tYWluOiBzdHJpbmcpIHtcbiAgY29uc3Qgc2VydmljZXMgPSBoYXNzLnNlcnZpY2VzW2RvbWFpbl07XG4gIGlmICghc2VydmljZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZG9tYWluID09PSBcImxvY2tcIikge1xuICAgIHJldHVybiBcImxvY2tcIiBpbiBzZXJ2aWNlcztcbiAgfVxuICBpZiAoZG9tYWluID09PSBcImNvdmVyXCIpIHtcbiAgICByZXR1cm4gXCJvcGVuX2NvdmVyXCIgaW4gc2VydmljZXM7XG4gIH1cbiAgcmV0dXJuIFwidHVybl9vblwiIGluIHNlcnZpY2VzO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjYW5Ub2dnbGVEb21haW4gZnJvbSBcIi4vY2FuX3RvZ2dsZV9kb21haW5cIjtcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9zdGF0ZV9kb21haW5cIjtcbmltcG9ydCB7IEhvbWVBc3Npc3RhbnQgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHN1cHBvcnRzRmVhdHVyZSB9IGZyb20gXCIuL3N1cHBvcnRzLWZlYXR1cmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2FuVG9nZ2xlU3RhdGUoXG4gIGhhc3M6IEhvbWVBc3Npc3RhbnQsXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5XG4pIHtcbiAgY29uc3QgZG9tYWluID0gY29tcHV0ZVN0YXRlRG9tYWluKHN0YXRlT2JqKTtcbiAgaWYgKGRvbWFpbiA9PT0gXCJncm91cFwiKSB7XG4gICAgcmV0dXJuIHN0YXRlT2JqLnN0YXRlID09PSBcIm9uXCIgfHwgc3RhdGVPYmouc3RhdGUgPT09IFwib2ZmXCI7XG4gIH1cbiAgaWYgKGRvbWFpbiA9PT0gXCJjbGltYXRlXCIpIHtcbiAgICByZXR1cm4gc3VwcG9ydHNGZWF0dXJlKHN0YXRlT2JqLCA0MDk2KTtcbiAgfVxuXG4gIHJldHVybiBjYW5Ub2dnbGVEb21haW4oaGFzcywgZG9tYWluKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVEb21haW4oZW50aXR5SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnRpdHlJZC5zdWJzdHIoMCwgZW50aXR5SWQuaW5kZXhPZihcIi5cIikpO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjb21wdXRlRG9tYWluIGZyb20gXCIuL2NvbXB1dGVfZG9tYWluXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iajogSGFzc0VudGl0eSkge1xuICByZXR1cm4gY29tcHV0ZURvbWFpbihzdGF0ZU9iai5lbnRpdHlfaWQpO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0aWVzIH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IHsgR3JvdXBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R3JvdXBFbnRpdGllcyhcbiAgZW50aXRpZXM6IEhhc3NFbnRpdGllcyxcbiAgZ3JvdXA6IEdyb3VwRW50aXR5XG4pIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgZ3JvdXAuYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoZW50aXR5SWQpID0+IHtcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tlbnRpdHlJZF07XG5cbiAgICBpZiAoZW50aXR5KSB7XG4gICAgICByZXN1bHRbZW50aXR5LmVudGl0eV9pZF0gPSBlbnRpdHk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0aWVzIH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNvbXB1dGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9kb21haW5cIjtcbmltcG9ydCBnZXRHcm91cEVudGl0aWVzIGZyb20gXCIuL2dldF9ncm91cF9lbnRpdGllc1wiO1xuaW1wb3J0IHsgR3JvdXBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuLy8gUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCBlbnRpdGllcyB0aGF0IHRoZSB2aWV3IHdpbGwgc2hvd1xuLy8gaW5jbHVkaW5nIGVtYmVkZGVkIGdyb3Vwcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdFbnRpdGllcyhcbiAgZW50aXRpZXM6IEhhc3NFbnRpdGllcyxcbiAgdmlldzogR3JvdXBFbnRpdHlcbik6IEhhc3NFbnRpdGllcyB7XG4gIGNvbnN0IHZpZXdFbnRpdGllcyA9IHt9O1xuXG4gIHZpZXcuYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoZW50aXR5SWQpID0+IHtcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tlbnRpdHlJZF07XG5cbiAgICBpZiAoZW50aXR5ICYmICFlbnRpdHkuYXR0cmlidXRlcy5oaWRkZW4pIHtcbiAgICAgIHZpZXdFbnRpdGllc1tlbnRpdHkuZW50aXR5X2lkXSA9IGVudGl0eTtcblxuICAgICAgaWYgKGNvbXB1dGVEb21haW4oZW50aXR5LmVudGl0eV9pZCkgPT09IFwiZ3JvdXBcIikge1xuICAgICAgICBjb25zdCBncm91cEVudGl0aWVzID0gZ2V0R3JvdXBFbnRpdGllcyhlbnRpdGllcywgZW50aXR5IGFzIEdyb3VwRW50aXR5KTtcblxuICAgICAgICBPYmplY3Qua2V5cyhncm91cEVudGl0aWVzKS5mb3JFYWNoKChnckVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JFbnRpdHkgPSBncm91cEVudGl0aWVzW2dyRW50aXR5SWRdO1xuXG4gICAgICAgICAgaWYgKCFnckVudGl0eS5hdHRyaWJ1dGVzLmhpZGRlbikge1xuICAgICAgICAgICAgdmlld0VudGl0aWVzW2dyRW50aXR5SWRdID0gZ3JFbnRpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2aWV3RW50aXRpZXM7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXR5IH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNhblRvZ2dsZVN0YXRlIGZyb20gXCIuL2Nhbl90b2dnbGVfc3RhdGVcIjtcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9zdGF0ZV9kb21haW5cIjtcbmltcG9ydCB7IERPTUFJTlNfV0lUSF9DQVJEIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBIb21lQXNzaXN0YW50IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXRlQ2FyZFR5cGUoXG4gIGhhc3M6IEhvbWVBc3Npc3RhbnQsXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5XG4pIHtcbiAgaWYgKHN0YXRlT2JqLnN0YXRlID09PSBcInVuYXZhaWxhYmxlXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH1cblxuICBjb25zdCBkb21haW4gPSBjb21wdXRlU3RhdGVEb21haW4oc3RhdGVPYmopO1xuXG4gIGlmIChET01BSU5TX1dJVEhfQ0FSRC5pbmNsdWRlcyhkb21haW4pKSB7XG4gICAgcmV0dXJuIGRvbWFpbjtcbiAgfVxuICBpZiAoXG4gICAgY2FuVG9nZ2xlU3RhdGUoaGFzcywgc3RhdGVPYmopICYmXG4gICAgc3RhdGVPYmouYXR0cmlidXRlcy5jb250cm9sICE9PSBcImhpZGRlblwiXG4gICkge1xuICAgIHJldHVybiBcInRvZ2dsZVwiO1xuICB9XG4gIHJldHVybiBcImRpc3BsYXlcIjtcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdHkgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0c0ZlYXR1cmUgPSAoXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5LFxuICBmZWF0dXJlOiBudW1iZXJcbik6IGJvb2xlYW4gPT4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICByZXR1cm4gKHN0YXRlT2JqLmF0dHJpYnV0ZXMuc3VwcG9ydGVkX2ZlYXR1cmVzISAmIGZlYXR1cmUpICE9PSAwO1xufTtcbiIsImNvbnN0IGhhc3NBdHRyaWJ1dGVVdGlsID0ge307XG5cbmhhc3NBdHRyaWJ1dGVVdGlsLkRPTUFJTl9ERVZJQ0VfQ0xBU1MgPSB7XG4gIGJpbmFyeV9zZW5zb3I6IFtcbiAgICBcImJhdHRlcnlcIixcbiAgICBcImNvbGRcIixcbiAgICBcImNvbm5lY3Rpdml0eVwiLFxuICAgIFwiZG9vclwiLFxuICAgIFwiZ2FyYWdlX2Rvb3JcIixcbiAgICBcImdhc1wiLFxuICAgIFwiaGVhdFwiLFxuICAgIFwibGlnaHRcIixcbiAgICBcImxvY2tcIixcbiAgICBcIm1vaXN0dXJlXCIsXG4gICAgXCJtb3Rpb25cIixcbiAgICBcIm1vdmluZ1wiLFxuICAgIFwib2NjdXBhbmN5XCIsXG4gICAgXCJvcGVuaW5nXCIsXG4gICAgXCJwbHVnXCIsXG4gICAgXCJwb3dlclwiLFxuICAgIFwicHJlc2VuY2VcIixcbiAgICBcInByb2JsZW1cIixcbiAgICBcInNhZmV0eVwiLFxuICAgIFwic21va2VcIixcbiAgICBcInNvdW5kXCIsXG4gICAgXCJ2aWJyYXRpb25cIixcbiAgICBcIndpbmRvd1wiLFxuICBdLFxuICBjb3ZlcjogW1wiZ2FyYWdlXCJdLFxuICBzZW5zb3I6IFtcImJhdHRlcnlcIiwgXCJodW1pZGl0eVwiLCBcImlsbHVtaW5hbmNlXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJwcmVzc3VyZVwiXSxcbn07XG5cbmhhc3NBdHRyaWJ1dGVVdGlsLlVOS05PV05fVFlQRSA9IFwianNvblwiO1xuaGFzc0F0dHJpYnV0ZVV0aWwuQUREX1RZUEUgPSBcImtleS12YWx1ZVwiO1xuXG5oYXNzQXR0cmlidXRlVXRpbC5UWVBFX1RPX1RBRyA9IHtcbiAgc3RyaW5nOiBcImhhLWN1c3RvbWl6ZS1zdHJpbmdcIixcbiAganNvbjogXCJoYS1jdXN0b21pemUtc3RyaW5nXCIsXG4gIGljb246IFwiaGEtY3VzdG9taXplLWljb25cIixcbiAgYm9vbGVhbjogXCJoYS1jdXN0b21pemUtYm9vbGVhblwiLFxuICBhcnJheTogXCJoYS1jdXN0b21pemUtYXJyYXlcIixcbiAgXCJrZXktdmFsdWVcIjogXCJoYS1jdXN0b21pemUta2V5LXZhbHVlXCIsXG59O1xuXG4vLyBBdHRyaWJ1dGVzIGhlcmUgc2VydmUgZHVhbCBwdXJwb3NlOlxuLy8gMSkgQW55IGtleSBvZiB0aGlzIG9iamVjdCB3b24ndCBiZSBzaG93biBpbiBtb3JlLWluZm8gd2luZG93LlxuLy8gMikgQW55IGtleSB3aGljaCBoYXMgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgd2lsbCBhcHBlYXIgaW4gY3VzdG9taXphdGlvblxuLy8gICAgY29uZmlnIGFjY29yZGluZyB0byBpdHMgdmFsdWUuXG5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTID0gaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUyB8fCB7XG4gIGVudGl0eV9waWN0dXJlOiB1bmRlZmluZWQsXG4gIGZyaWVuZGx5X25hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiTmFtZVwiIH0sXG4gIGljb246IHsgdHlwZTogXCJpY29uXCIgfSxcbiAgZW11bGF0ZWRfaHVlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZG9tYWluczogW1wiZW11bGF0ZWRfaHVlXCJdLFxuICB9LFxuICBlbXVsYXRlZF9odWVfbmFtZToge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZG9tYWluczogW1wiZW11bGF0ZWRfaHVlXCJdLFxuICB9LFxuICBoYWFza2FfaGlkZGVuOiB1bmRlZmluZWQsXG4gIGhhYXNrYV9uYW1lOiB1bmRlZmluZWQsXG4gIGhvbWVicmlkZ2VfaGlkZGVuOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gIGhvbWVicmlkZ2VfbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gIHN1cHBvcnRlZF9mZWF0dXJlczogdW5kZWZpbmVkLFxuICBhdHRyaWJ1dGlvbjogdW5kZWZpbmVkLFxuICBjdXN0b21fdWlfbW9yZV9pbmZvOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgY3VzdG9tX3VpX3N0YXRlX2NhcmQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICBkZXZpY2VfY2xhc3M6IHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgb3B0aW9uczogaGFzc0F0dHJpYnV0ZVV0aWwuRE9NQUlOX0RFVklDRV9DTEFTUyxcbiAgICBkZXNjcmlwdGlvbjogXCJEZXZpY2UgY2xhc3NcIixcbiAgICBkb21haW5zOiBbXCJiaW5hcnlfc2Vuc29yXCIsIFwiY292ZXJcIiwgXCJzZW5zb3JcIl0sXG4gIH0sXG4gIGhpZGRlbjogeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVzY3JpcHRpb246IFwiSGlkZSBmcm9tIFVJXCIgfSxcbiAgYXNzdW1lZF9zdGF0ZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRvbWFpbnM6IFtcbiAgICAgIFwic3dpdGNoXCIsXG4gICAgICBcImxpZ2h0XCIsXG4gICAgICBcImNvdmVyXCIsXG4gICAgICBcImNsaW1hdGVcIixcbiAgICAgIFwiZmFuXCIsXG4gICAgICBcImdyb3VwXCIsXG4gICAgICBcIndhdGVyX2hlYXRlclwiLFxuICAgIF0sXG4gIH0sXG4gIGluaXRpYWxfc3RhdGU6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRvbWFpbnM6IFtcImF1dG9tYXRpb25cIl0sXG4gIH0sXG4gIHVuaXRfb2ZfbWVhc3VyZW1lbnQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFzc0F0dHJpYnV0ZVV0aWw7XG4iLCIvKipcbkBsaWNlbnNlXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuXG53aW5kb3cuSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3ApIHsgcmV0dXJuIHByb3A7IH07XG4iLCIvKipcbkBsaWNlbnNlXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuaW1wb3J0ICcuL2Jvb3QuanMnO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIHN0YXRpYyBzdHJpbmcgdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmlsdGVyXG4gKiBzdHJpbmdzIGJ5IGFzc2V0aW5nIHRoYXQgdGhleSBoYXZlIGJlZW4gY3JlYXRlZCB2aWEgdGhpcyBjbGFzcy4gVGhlXG4gKiBgdmFsdWVgIHByb3BlcnR5IHJldHVybnMgdGhlIHN0cmluZyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICovXG5jbGFzcyBMaXRlcmFsU3RyaW5nIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy52YWx1ZSA9IHN0cmluZy50b1N0cmluZygpO1xuICB9XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IExpdGVyYWxTdHJpbmcgc3RyaW5nIHZhbHVlXG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgT2JqZWN0IHRvIHN0cmluZ2lmeSBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ30gSFRNTCBzdHJpbmdpZmllZCBmb3JtIG9mIGBvYmpgXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7IUxpdGVyYWxTdHJpbmd9ICovKHZhbHVlKS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke3ZhbHVlfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBPYmplY3QgdG8gc3RyaW5naWZ5IGludG8gSFRNTFxuICogQHJldHVybiB7c3RyaW5nfSBIVE1MIHN0cmluZ2lmaWVkIGZvcm0gb2YgYG9iamBcbiAqL1xuZnVuY3Rpb24gaHRtbFZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHshSFRNTFRlbXBsYXRlRWxlbWVudCB9ICovKHZhbHVlKS5pbm5lckhUTUw7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpdGVyYWxWYWx1ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbm9uLXRlbXBsYXRlIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbCBmdW5jdGlvbjogJHt2YWx1ZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgdGVtcGxhdGUgbGl0ZXJhbCB0YWcgdGhhdCBjcmVhdGVzIGFuIEhUTUwgPHRlbXBsYXRlPiBlbGVtZW50IGZyb20gdGhlXG4gKiBjb250ZW50cyBvZiB0aGUgc3RyaW5nLlxuICpcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB3cml0ZSBhIFBvbHltZXIgVGVtcGxhdGUgaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBUZW1wbGF0ZXMgY2FuIGJlIGNvbXBvc2VkIGJ5IGludGVycG9sYXRpbmcgYEhUTUxUZW1wbGF0ZUVsZW1lbnRgcyBpblxuICogZXhwcmVzc2lvbnMgaW4gdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgbGl0ZXJhbC4gVGhlIG5lc3RlZCB0ZW1wbGF0ZSdzXG4gKiBgaW5uZXJIVE1MYCBpcyBpbmNsdWRlZCBpbiB0aGUgY29udGFpbmluZyB0ZW1wbGF0ZS4gIFRoZSBvbmx5IG90aGVyXG4gKiB2YWx1ZXMgYWxsb3dlZCBpbiBleHByZXNzaW9ucyBhcmUgdGhvc2UgcmV0dXJuZWQgZnJvbSBgaHRtbExpdGVyYWxgXG4gKiB3aGljaCBlbnN1cmVzIG9ubHkgbGl0ZXJhbCB2YWx1ZXMgZnJvbSBKUyBzb3VyY2UgZXZlciByZWFjaCB0aGUgSFRNTCwgdG9cbiAqIGd1YXJkIGFnYWluc3QgWFNTIHJpc2tzLlxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGRpc2FsbG93ZWQgaW4gZXhwcmVzc2lvbnMgdG8gaGVscCBwcmV2ZW50IFhTU1xuICogYXR0YWNrczsgaG93ZXZlciwgYGh0bWxMaXRlcmFsYCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIHN0YXRpY1xuICogc3RyaW5nIHZhbHVlcyBpbnRvIHRlbXBsYXRlcy4gVGhpcyBpcyB1c2VmdWwgdG8gY29tcG9zZSBzdHJpbmdzIGludG9cbiAqIHBsYWNlcyB0aGF0IGRvIG5vdCBhY2NlcHQgaHRtbCwgbGlrZSB0aGUgY3NzIHRleHQgb2YgYSBgc3R5bGVgXG4gKiBlbGVtZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gKiAgICAgICByZXR1cm4gaHRtbGBcbiAqICAgICAgICAgPHN0eWxlPjpob3N0eyBjb250ZW50OlwiLi4uXCIgfTwvc3R5bGU+XG4gKiAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3dlZFwiPiR7dGhpcy5wYXJ0aWFsVGVtcGxhdGV9PC9kaXY+XG4gKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9XG4gKiAgICAgICBgO1xuICogICAgIH1cbiAqICAgICBzdGF0aWMgZ2V0IHBhcnRpYWxUZW1wbGF0ZSgpIHsgcmV0dXJuIGh0bWxgPHNwYW4+UGFydGlhbCE8L3NwYW4+YDsgfVxuICpcbiAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHJldHVybiB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IENvbnN0cnVjdGVkIEhUTUxUZW1wbGF0ZUVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWwgPSBmdW5jdGlvbiBodG1sKHN0cmluZ3MsIC4uLnZhbHVlcykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHYsIGlkeCkgPT5cbiAgICAgIGFjYyArIGh0bWxWYWx1ZSh2KSArIHN0cmluZ3NbaWR4ICsgMV0sIHN0cmluZ3NbMF0pO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG4vKipcbiAqIEFuIGh0bWwgbGl0ZXJhbCB0YWcgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBodG1sYCB0byBjb21wb3NlLlxuICogYSBsaXRlcmFsIHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICogICAgICAgcmV0dXJuIGh0bWxgXG4gKiAgICAgICAgIDxzdHlsZT5cbiAqICAgICAgICAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XG4gKiAgICAgICAgICAgJHt0aGlzLnN0eWxlVGVtcGxhdGUoKX1cbiAqICAgICAgICAgPC9zdHlsZT5cbiAqICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvd2VkXCI+JHtzdGF0aWNWYWx1ZX08L2Rpdj5cbiAqICAgICAgICAgJHtzdXBlci50ZW1wbGF0ZX1cbiAqICAgICAgIGA7XG4gKiAgICAgfVxuICogICAgIHN0YXRpYyBnZXQgc3R5bGVUZW1wbGF0ZSgpIHtcbiAqICAgICAgICByZXR1cm4gaHRtbExpdGVyYWxgLnNoYWRvd2VkIHsgYmFja2dyb3VuZDogZ3JheTsgfWA7XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHJldHVybiB7IUxpdGVyYWxTdHJpbmd9IENvbnN0cnVjdGVkIGxpdGVyYWwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sTGl0ZXJhbCA9IGZ1bmN0aW9uKHN0cmluZ3MsIC4uLnZhbHVlcykge1xuICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcodmFsdWVzLnJlZHVjZSgoYWNjLCB2LCBpZHgpID0+XG4gICAgICBhY2MgKyBsaXRlcmFsVmFsdWUodikgKyBzdHJpbmdzW2lkeCArIDFdLCBzdHJpbmdzWzBdKSk7XG59O1xuIiwiaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgQ3VpQmFzZUVsZW1lbnQgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcbiAgICAgIGluRGlhbG9nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZU9iajogT2JqZWN0LFxuICAgICAgY29udHJvbEVsZW1lbnQ6IFN0cmluZyxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaiknLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqKSB7XG4gICAgbGV0IGV4dHJhcyA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuZXh0cmFfZGF0YV90ZW1wbGF0ZTtcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXh0cmFzKSkge1xuICAgICAgICBleHRyYXMgPSBbZXh0cmFzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYXMubWFwKGV4dHJhID0+IHdpbmRvdy5jdXN0b21VSS5jb21wdXRlVGVtcGxhdGUoXG4gICAgICAgIGV4dHJhLFxuICAgICAgICBoYXNzLFxuICAgICAgICBoYXNzLnN0YXRlcyxcbiAgICAgICAgc3RhdGVPYmosXG4gICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMsXG4gICAgICAgIC8qIGF0dHJpYnV0ZT0gKi8gdW5kZWZpbmVkLFxuICAgICAgICBzdGF0ZU9iai5zdGF0ZSxcbiAgICAgICkpLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0ICE9PSBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpIHtcbiAgICBpZiAoaW5EaWFsb2cpIHJldHVybiB0cnVlO1xuICAgIGlmIChleHRyYS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISFzdGF0ZU9iai5hdHRyaWJ1dGVzLnNob3dfbGFzdF9jaGFuZ2VkO1xuICB9XG5cbiAgaGFzRXh0cmEoZXh0cmEpIHtcbiAgICByZXR1cm4gZXh0cmEubGVuZ3RoID4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQ3VpQmFzZUVsZW1lbnQ7XG4iLCJpbXBvcnQgZHluYW1pY0NvbnRlbnRVcGRhdGVyIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vZHluYW1pY19jb250ZW50X3VwZGF0ZXIuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIER5bmFtaWNFbGVtZW50IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNzOiBPYmplY3QsXG4gICAgICBzdGF0ZU9iajogT2JqZWN0LFxuICAgICAgZWxlbWVudE5hbWU6IFN0cmluZyxcblxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdvYnNlcnZlckZ1bmMoaGFzcywgc3RhdGVPYmosIGVsZW1lbnROYW1lLCBpbkRpYWxvZyknLFxuICAgIF07XG4gIH1cblxuICBvYnNlcnZlckZ1bmMoaGFzcywgc3RhdGVPYmosIGVsZW1lbnROYW1lLCBpbkRpYWxvZykge1xuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBlbGVtZW50TmFtZSA/IGVsZW1lbnROYW1lLnRvVXBwZXJDYXNlKCkgOiAnRElWJyxcbiAgICAgIHsgaGFzcywgc3RhdGVPYmosIGluRGlhbG9nIH0pO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2R5bmFtaWMtZWxlbWVudCcsIER5bmFtaWNFbGVtZW50KTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgYXBwbHlUaGVtZXNPbkVsZW1lbnQgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyc7XG5cbmltcG9ydCAnLi9keW5hbWljLWVsZW1lbnQuanMnO1xuaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbmN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdzdGF0ZS1jYXJkLWRpc3BsYXknKS50aGVuKCgpID0+IHtcbiAgLyoqXG4gICAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gICAqL1xuICBjbGFzcyBEeW5hbWljV2l0aEV4dHJhIGV4dGVuZHMgY3VzdG9tRWxlbWVudHMuZ2V0KCdzdGF0ZS1jYXJkLWRpc3BsYXknKSB7XG4gICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50IGlyb24tZmxleC1mYWN0b3JzXCI+PC9zdHlsZT5cbiAgICAgIDxzdHlsZT5cbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgICAuY29udHJvbC13cmFwcGVyIHtcbiAgICAgICAgICBtYXJnaW46IC00cHggLTE2cHggLTRweCAwO1xuICAgICAgICAgIHBhZGRpbmc6IDRweCAxNnB4O1xuICAgICAgICB9XG4gICAgICAgIGhhLXN0YXRlLWxhYmVsLWJhZGdlIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICAgIGR5bmFtaWMtZWxlbWVudCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgI292ZXJsYXkge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgICAjbG9jayB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICAgIG9wYWNpdHk6IDAuMztcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDdweDtcbiAgICAgICAgfVxuICAgICAgICAjbG9jay5oYS1jb3Zlci1jb250cm9scyB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1MnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICB9XG4gICAgICAgIC5leHRyYSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTE2cHg7XG4gICAgICAgICAgLS1oYS1sYWJlbC1iYWRnZS1zaXplOiAzNnB4O1xuICAgICAgICAgIC0taGEtbGFiZWwtYmFkZ2UtZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgfVxuICAgICAgICAuc3RhdGUge1xuICAgICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIH1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzJD0nW1tleHRyYUNsYXNzKGV4dHJhT2JqVmlzaWJsZSldXSBob3Jpem9udGFsIGxheW91dCc+XG4gICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tleHRyYU9ialZpc2libGVdXSc+XG4gICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20tcmVwZWF0J1xuICAgICAgICAgICAgICAgICAgICBpdGVtcz0nW1tleHRyYU9ial1dJ1xuICAgICAgICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSdleHRyYURvbUNoYW5nZWQnPlxuICAgICAgICAgICAgPGhhLXN0YXRlLWxhYmVsLWJhZGdlIGhhc3M9J1tbaGFzc11dJyBzdGF0ZT0nW1tpdGVtXV0nPjwvaGEtc3RhdGUtbGFiZWwtYmFkZ2U+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW19zaG93Q29udHJvbChpbkRpYWxvZywgc3RhdGVPYmopXV0nPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tjb250cm9sRWxlbWVudF1dJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGR5bmFtaWMtZWxlbWVudFxuICAgICAgICAgICAgICAgICAgY2xhc3M9J2ZsZXgnXG4gICAgICAgICAgICAgICAgICBzdGF0ZS1vYmo9XCJbW3N0YXRlT2JqXV1cIlxuICAgICAgICAgICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LW5hbWU9J1tbY29udHJvbEVsZW1lbnRdXSc+XG4gICAgICAgICAgICAgIDwvZHluYW1pYy1lbGVtZW50PlxuICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbaXNDb25maXJtQ29udHJvbHMoc3RhdGVPYmopXV0nPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJvdmVybGF5XCIgb24tY2xpY2s9J2NsaWNrSGFuZGxlcic+XG4gICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbc3RhdGVPYmouYXR0cmlidXRlcy5jb25maXJtX2NvbnRyb2xzX3Nob3dfbG9ja11dJz5cbiAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpZD1cImxvY2tcIiBjbGFzcyQ9XCJbW2NvbnRyb2xFbGVtZW50XV1cIiBpY29uPVwibWRpOmxvY2stb3V0bGluZVwiPjwvaXJvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbWyFjb250cm9sRWxlbWVudF1dJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J3N0YXRlJz5bW2NvbXB1dGVTdGF0ZURpc3BsYXkoc3RhdGVPYmopXV08L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhhc3M6IE9iamVjdCxcbiAgICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IFN0cmluZyxcbiAgICAgICAgZXh0cmFPYmo6IHtcbiAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaiwgX2F0dGFjaGVkKScsXG4gICAgICAgIH0sXG4gICAgICAgIF9hdHRhY2hlZDogQm9vbGVhbixcbiAgICAgICAgZXh0cmFPYmpWaXNpYmxlOiB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYVZpc2libGUoZXh0cmFPYmosIGluRGlhbG9nKScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqLCBhdHRhY2hlZCkge1xuICAgICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmV4dHJhX2JhZGdlIHx8ICFhdHRhY2hlZCkgcmV0dXJuIFtdO1xuICAgICAgbGV0IGV4dHJhQmFkZ2VzID0gc3RhdGVPYmouYXR0cmlidXRlcy5leHRyYV9iYWRnZTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShleHRyYUJhZGdlcykpIHtcbiAgICAgICAgZXh0cmFCYWRnZXMgPSBbZXh0cmFCYWRnZXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhQmFkZ2VzLm1hcCgoZXh0cmFCYWRnZSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKGV4dHJhQmFkZ2UuZW50aXR5X2lkICYmIGhhc3Muc3RhdGVzW2V4dHJhQmFkZ2UuZW50aXR5X2lkXSkge1xuICAgICAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICAgIHRoaXMsIGhhc3Muc3RhdGVzW2V4dHJhQmFkZ2UuZW50aXR5X2lkXSwgdGhpcy5pbkRpYWxvZyxcbiAgICAgICAgICAgIC8qIGFsbG93SGlkZGVuPSAqL2ZhbHNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmFCYWRnZS5hdHRyaWJ1dGUgJiZcbiAgICAgICAgICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzW2V4dHJhQmFkZ2UuYXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgc3RhdGU6IFN0cmluZyhzdGF0ZU9iai5hdHRyaWJ1dGVzW2V4dHJhQmFkZ2UuYXR0cmlidXRlXSksXG4gICAgICAgICAgICBlbnRpdHlfaWQ6ICdub25lLm5vbmUnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyB1bml0X29mX21lYXN1cmVtZW50OiBleHRyYUJhZGdlLnVuaXQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgbGV0IGJsYWNrbGlzdCA9IGV4dHJhQmFkZ2UuYmxhY2tsaXN0X3N0YXRlcztcbiAgICAgICAgaWYgKGJsYWNrbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGJsYWNrbGlzdCkpIHtcbiAgICAgICAgICAgIGJsYWNrbGlzdCA9IFtibGFja2xpc3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmxhY2tsaXN0LnNvbWUodiA9PiBSZWdFeHAodikudGVzdChyZXN1bHQuc3RhdGUudG9TdHJpbmcoKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Ll9lbnRpdHlEaXNwbGF5ID0gJyc7XG4gICAgICAgIHJlc3VsdC5hdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbih7fSwgeyBmcmllbmRseV9uYW1lOiAnJyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pLmZpbHRlcihleHRyYUJhZGdlID0+IGV4dHJhQmFkZ2UgIT0gbnVsbCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUV4dHJhVmlzaWJsZShleHRyYU9iaiwgaW5EaWFsb2cpIHtcbiAgICAgIGlmIChpbkRpYWxvZyB8fCAhZXh0cmFPYmopIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBleHRyYU9iai5sZW5ndGggIT09IDA7XG4gICAgfVxuXG4gICAgZXh0cmFDbGFzcyhleHRyYU9ialZpc2libGUpIHtcbiAgICAgIHJldHVybiBleHRyYU9ialZpc2libGUgPyAnZXh0cmEnIDogJyc7XG4gICAgfVxuXG4gICAgX3Nob3dDb250cm9sKGluRGlhbG9nLCBzdGF0ZU9iaikge1xuICAgICAgaWYgKGluRGlhbG9nKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiAhc3RhdGVPYmouYXR0cmlidXRlcy5oaWRlX2NvbnRyb2w7XG4gICAgfVxuXG4gICAgY29tcHV0ZVN0YXRlRGlzcGxheShzdGF0ZU9iaikge1xuICAgICAgLy8gaGFMb2NhbGl6ZSByZW1vdmVkIGluIDAuNjFcbiAgICAgIHJldHVybiBzdXBlci5jb21wdXRlU3RhdGVEaXNwbGF5KHRoaXMuaGFMb2NhbGl6ZSB8fCB0aGlzLmxvY2FsaXplLCBzdGF0ZU9iaik7XG4gICAgfVxuXG4gICAgaXNDb25maXJtQ29udHJvbHMoc3RhdGVPYmopIHtcbiAgICAgIHJldHVybiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbmZpcm1fY29udHJvbHMgfHxcbiAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbmZpcm1fY29udHJvbHNfc2hvd19sb2NrO1xuICAgIH1cblxuICAgIGNsaWNrSGFuZGxlcihlKSB7XG4gICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI292ZXJsYXknKS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgY29uc3QgbG9jayA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjbG9jaycpO1xuICAgICAgaWYgKGxvY2spIHtcbiAgICAgICAgbG9jay5pY29uID0gJ21kaTpsb2NrLW9wZW4tb3V0bGluZSc7XG4gICAgICAgIGxvY2suc3R5bGUub3BhY2l0eSA9ICcwLjEnO1xuICAgICAgfVxuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI292ZXJsYXknKS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJyc7XG4gICAgICAgIGlmIChsb2NrKSB7XG4gICAgICAgICAgbG9jay5pY29uID0gJ21kaTpsb2NrLW91dGxpbmUnO1xuICAgICAgICAgIGxvY2suc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9LCA1MDAwKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgYXBwbHlUaGVtZXMoaGFzcywgZWxlbWVudCwgc3RhdGVPYmopIHtcbiAgICAgIGNvbnN0IHRoZW1lTmFtZSA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMudGhlbWUgfHwgJ2RlZmF1bHQnO1xuICAgICAgYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gICAgICAgIGVsZW1lbnQsIGhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sIHRoZW1lTmFtZSk7XG4gICAgfVxuXG4gICAgZXh0cmFEb21DaGFuZ2VkKCkge1xuICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2hhLXN0YXRlLWxhYmVsLWJhZGdlJylcbiAgICAgICAgLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICB0aGlzLmFwcGx5VGhlbWVzKHRoaXMuaGFzcywgZWxlbSwgZWxlbS5zdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ2R5bmFtaWMtd2l0aC1leHRyYScsIER5bmFtaWNXaXRoRXh0cmEpO1xufSk7XG4iLCJpbXBvcnQgeyBodG1sIH0gZnJvbSAnQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMnO1xuaW1wb3J0IEV2ZW50c01peGluIGZyb20gJy4uL21peGlucy9ldmVudHMtbWl4aW4uanMnO1xuaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgSGFDb25maWdDdXN0b21VaSBleHRlbmRzIEV2ZW50c01peGluKFBvbHltZXIuRWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZSBpbmNsdWRlPVwiaGEtc3R5bGVcIj48L3N0eWxlPlxuICAgIDxhcHAtaGVhZGVyLWxheW91dCBoYXMtc2Nyb2xsaW5nLXJlZ2lvbj5cbiAgICAgIDxhcHAtaGVhZGVyIHNsb3Q9XCJoZWFkZXJcIiBmaXhlZD5cbiAgICAgICAgPGFwcC10b29sYmFyPlxuICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvblxuICAgICAgICAgICAgaWNvbj0naGFzczphcnJvdy1sZWZ0J1xuICAgICAgICAgICAgb24tY2xpY2s9J19iYWNrSGFuZGxlcidcbiAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj5cbiAgICAgICAgICA8ZGl2IG1haW4tdGl0bGU+Q3VzdG9tIFVJIHNldHRpbmdzPC9kaXY+XG4gICAgICAgIDwvYXBwLXRvb2xiYXI+XG4gICAgICA8L2FwcC1oZWFkZXI+XG5cbiAgICAgIDxoYS1jb25maWctc2VjdGlvbiBpcy13aWRlPSdbW2lzV2lkZV1dJz5cbiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0nRGV2aWNlIG5hbWUnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9J2NhcmQtY29udGVudCc+XG4gICAgICAgICAgICBTZXQgZGV2aWNlIG5hbWUgc28gdGhhdCB5b3UgY2FuIHJlZmVyZW5jZSBpdCBpbiBwZXItZGV2aWNlIHNldHRpbmdzXG4gICAgICAgICAgICA8cGFwZXItaW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9J05hbWUnXG4gICAgICAgICAgICAgIHZhbHVlPSd7e25hbWV9fSdcbiAgICAgICAgICAgID48L3BhcGVyLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3BhcGVyLWNhcmQ+XG4gICAgICA8L2hhLWNvbmZpZy1zZWN0aW9uPlxuICAgIDwvYXBwLWhlYWRlci1sYXlvdXQ+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNXaWRlOiBCb29sZWFuLFxuXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb2JzZXJ2ZXI6ICduYW1lQ2hhbmdlZCcsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZWFkeSgpIHtcbiAgICBzdXBlci5yZWFkeSgpO1xuICAgIHRoaXMubmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gIH1cblxuICBuYW1lQ2hhbmdlZChuYW1lKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLnNldE5hbWUobmFtZSk7XG4gIH1cblxuICBfYmFja0hhbmRsZXIoKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xuICAgIHRoaXMuZmlyZSgnbG9jYXRpb24tY2hhbmdlZCcpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2hhLWNvbmZpZy1jdXN0b20tdWknLCBIYUNvbmZpZ0N1c3RvbVVpKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgSGFUaGVtZWRTbGlkZXIgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgbWFyZ2luOiB2YXIoLS1oYS10aGVtZWQtc2xpZGVyLW1hcmdpbiwgaW5pdGlhbCk7XG4gICAgICB9XG4gICAgICAuZGlzYWJsZS1vZmYtd2hlbi1taW4ge1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6ICB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLmRpc2FibGUtb2ZmLXdoZW4tbWluLmlzLW9uIHtcbiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgfVxuICAgICAgcGFwZXItc2xpZGVyIHtcbiAgICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICB3aWR0aDogdmFyKC0taGEtcGFwZXItc2xpZGVyLXdpZHRoLCAyMDBweCk7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cblxuICAgIDxwYXBlci1zbGlkZXJcbiAgICAgICAgIG1pbj0nW1tfdGhlbWVkTWluXV0nXG4gICAgICAgICBtYXg9J1tbX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIFwibWF4XCIsIG1heCldXSdcbiAgICAgICAgIHBpbj0nW1tfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJwaW5cIiwgcGluKV1dJ1xuICAgICAgICAgY2xhc3MkPSdbW2NvbXB1dGVDbGFzcyh0aGVtZSwgaXNPbiwgX3RoZW1lZE1pbildXScgdmFsdWU9J1tbdmFsdWVdXSdcbiAgICAgICAgIG9uLWNoYW5nZT0ndmFsdWVDaGFuZ2VkJz5cbiAgICA8L3BhcGVyLXNsaWRlcj5cbiAgICBgO1xuICB9XG5cbiAgcmVhZHkoKSB7XG4gICAgc3VwZXIucmVhZHkoKTtcbiAgICB0aGlzLmRpc2FibGVPZmZXaGVuTWluID0gIXRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhpcy50aGVtZSwgJ29mZl93aGVuX21pbicsICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKTtcbiAgICB0aGlzLmNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhpcy50aGVtZSwgdGhpcy5kaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMCxcbiAgICAgIH0sXG4gICAgICBtYXg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMTAwLFxuICAgICAgfSxcbiAgICAgIHBpbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaXNPbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICBub3RpZnk6IHRydWUsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG5cbiAgICAgIHRoZW1lOiBPYmplY3QsXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIG5vdGlmeTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBfdGhlbWVkTWluOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJtaW5cIiwgbWluKScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2NvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhlbWUsIGRpc2FibGVSZXBvcnRXaGVuTm90Q2hhbmdlZCknLFxuICAgIF07XG4gIH1cblxuICBjb21wdXRlRW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkKHRoZW1lLCBkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpIHtcbiAgICB0aGlzLl9lbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQgPSB0aGlzLl9jb21wdXRlQXR0cmlidXRlKFxuICAgICAgdGhlbWUsICdyZXBvcnRfd2hlbl9ub3RfY2hhbmdlZCcsICFkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIGF0dHIsIGRlZikge1xuICAgIGlmICh0aGVtZSkge1xuICAgICAgaWYgKGF0dHIgaW4gdGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoZW1lW2F0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmO1xuICB9XG5cbiAgY29tcHV0ZUNsYXNzKHRoZW1lLCBpc09uLCB0aGVtZWRNaW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgaWYgKGlzT24pIHtcbiAgICAgIHJlc3VsdCArPSAnaXMtb24gJztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsICdvZmZfd2hlbl9taW4nLCAhdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbikgfHwgdGhlbWVkTWluID09PSAwKSB7XG4gICAgICAvLyBJZiBvZmZXaGVuTWluIGlzIGVuYWJsZWQgZG9uJ3QgY3VzdG9taXplLlxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cmVzdWx0fWRpc2FibGUtb2ZmLXdoZW4tbWluYDtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZChldikge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkICYmIHRoaXMudmFsdWUgPT09IGV2LnRhcmdldC52YWx1ZSkge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBldi50YXJnZXQudmFsdWU7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnaGEtdGhlbWVkLXNsaWRlcicsIEhhVGhlbWVkU2xpZGVyKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZHluYW1pY0NvbnRlbnRVcGRhdGVyIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vZHluYW1pY19jb250ZW50X3VwZGF0ZXIuanMnO1xuaW1wb3J0IHN0YXRlQ2FyZFR5cGUgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMnO1xuXG5pbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGgtc2xpZGVyLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyLmpzJztcblxuY29uc3QgU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMgPSBbJ2NvbmZpZ3VyYXRvciddO1xuY29uc3QgRE9NQUlOX1RPX1NMSURFUl9TVVBQT1JUID0ge1xuICBsaWdodDogMSwgLy8gU1VQUE9SVF9CUklHSFRORVNTXG4gIGNvdmVyOiA0LCAvLyBTVVBQT1JUX1NFVF9QT1NJVElPTlxuICBjbGltYXRlOiAxLCAvLyBTVVBQT1JUX1RBUkdFVF9URU1QRVJBVFVSRVxufTtcbmNvbnN0IFRZUEVfVE9fQ09OVFJPTCA9IHtcbiAgdG9nZ2xlOiAnaGEtZW50aXR5LXRvZ2dsZScsXG4gIGRpc3BsYXk6ICcnLFxuICBjb3ZlcjogJ2hhLWNvdmVyLWNvbnRyb2xzJyxcbn07XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkQ3VzdG9tVWkgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcblxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcblxuICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKScsXG4gICAgXTtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKGNvbnRhaW5lci50YWdOYW1lID09PSAnRElWJyAmJlxuICAgICAgICAoY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSB8fCBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdjaGlsZC1jYXJkJykpKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICAgIC8vIFNpbmNlIHRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIGJhY2tncm91bmQgLSBubyBuZWVkIHRvIGNsZWFyIGl0LlxuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1wYXBlci1jYXJkLWJhY2tncm91bmQtY29sb3IsIGluaGVyaXQpJyk7XG5cbiAgICAgIC8vIFBvbHlmaWxsICd1cGRhdGVTdHlsZXMnLlxuICAgICAgaWYgKCFjb250YWluZXIudXBkYXRlU3R5bGVzKSB7XG4gICAgICAgIGNvbnRhaW5lci51cGRhdGVTdHlsZXMgPSAoc3R5bGVzKSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHN0eWxlc1trZXldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pbnB1dENoYW5nZWQodGhpcy5oYXNzLCB0aGlzLmluRGlhbG9nLCB0aGlzLnN0YXRlT2JqKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycsIHBhZGRpbmc6ICcnIH0pO1xuICAgICAgYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LCAnZGVmYXVsdCcpO1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIGJhZGdlTW9kZShoYXNzLCBzdGF0ZU9iaiwgZG9tYWluKSB7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgaWYgKGRvbWFpbiA9PT0gJ2dyb3VwJykge1xuICAgICAgc3RhdGVPYmouYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBoYXNzLnN0YXRlc1tpZF07XG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIElEICR7aWR9IGluIGdyb3VwICR7c3RhdGVPYmouZW50aXR5X2lkfWApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QgfHxcbiAgICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QuaW5jbHVkZXMoc3RhdGUuZW50aXR5X2lkKSkge1xuICAgICAgICAgIHN0YXRlcy5wdXNoKHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICAgIHRoaXMsIHN0YXRlLCBmYWxzZSAvKiBpbkRpYWxvZyAqLywgZmFsc2UgLyogYWxsb3dIaWRkZW4gKi8pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlcy5wdXNoKHN0YXRlT2JqKTtcbiAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9O1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSkge1xuICAgICAgICAgIHBhcmFtcy5tYXJnaW4gPSAndmFyKC0taGEtYmFkZ2VzLWNhcmQtbWFyZ2luLCAwKSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZHluYW1pY0NvbnRlbnRVcGRhdGVyKFxuICAgICAgdGhpcyxcbiAgICAgICdIQS1CQURHRVMtQ0FSRCcsXG4gICAgICB7IGhhc3MsIHN0YXRlcyB9KTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHtcbiAgICAgICAgd2lkdGg6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC13aWR0aCwgaW5pdGlhbCknLFxuICAgICAgICAndGV4dC1hbGlnbic6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC10ZXh0LWFsaWduLCBpbml0aWFsKScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0Q2hpbGQuc3R5bGUuZm9udFNpemUgPSAnODUlJztcblxuICAgIC8vIFNpbmNlIHRoaXMgdmFyaWFibGUgb25seSBhZmZlY3RzIGJhZGdlcyBtb2RlIC0gbm8gbmVlZCB0byBjbGVhbiBpdCB1cC5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLWhhLXN0YXRlLWxhYmVsLWJhZGdlLW1hcmdpbi1ib3R0b20nLCAnMCcpO1xuICB9XG5cbiAgY2xlYW5CYWRnZVN0eWxlKCkge1xuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoe1xuICAgICAgICBkaXNwbGF5OiAnJyxcbiAgICAgICAgd2lkdGg6ICcnLFxuICAgICAgICAndGV4dC1hbGlnbic6ICcnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycgfSk7XG4gIH1cblxuICBhcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaikge1xuICAgIGxldCB0aGVtZVRhcmdldCA9IHRoaXM7XG4gICAgbGV0IHRoZW1lTmFtZSA9ICdkZWZhdWx0JztcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGVtZVRhcmdldCA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWUpIHtcbiAgICAgIHRoZW1lTmFtZSA9IG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWU7XG4gICAgfVxuICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgdGhlbWVUYXJnZXQsIGhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sIHRoZW1lTmFtZSk7XG4gIH1cblxuICBtYXliZUhpZGVFbnRpdHkobW9kaWZpZWRPYmopIHtcbiAgICBpZiAoIW1vZGlmaWVkT2JqKSB7XG4gICAgICBpZiAodGhpcy5sYXN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcwJywgcGFkZGluZzogJzAnIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcnLCBwYWRkaW5nOiAnJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgb2JqLCBpbkRpYWxvZykge1xuICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBET01BSU5fVE9fU0xJREVSX1NVUFBPUlRbZG9tYWluXSAmJlxuICAgICAgKERPTUFJTl9UT19TTElERVJfU1VQUE9SVFtkb21haW5dICYgb2JqLmF0dHJpYnV0ZXMuc3VwcG9ydGVkX2ZlYXR1cmVzKSAmJlxuICAgICAgb2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlICYmIG9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSAhPT0gJ25vLXNsaWRlcic7XG4gIH1cblxuICBpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKSB7XG4gICAgaWYgKCFzdGF0ZU9iaiB8fCAhaGFzcyB8fCAhdGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGRvbWFpbiA9IGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iaik7XG4gICAgY29uc3QgbW9kaWZpZWRPYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3QoXG4gICAgICB0aGlzLCBzdGF0ZU9iaiwgaW5EaWFsb2csIHRydWUgLyogYWxsb3dIaWRkZW4gKi8pO1xuXG4gICAgaWYgKHRoaXMubWF5YmVIaWRlRW50aXR5KG1vZGlmaWVkT2JqKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5hcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaik7XG5cbiAgICBpZiAoIWluRGlhbG9nICYmIG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlID09PSAnYmFkZ2VzJykge1xuICAgICAgdGhpcy5iYWRnZU1vZGUoaGFzcywgbW9kaWZpZWRPYmosIGRvbWFpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVndWxhck1vZGVfKGhhc3MsIGluRGlhbG9nLCBtb2RpZmllZE9iaiwgZG9tYWluKTtcbiAgICB9XG4gIH1cblxuICByZWd1bGFyTW9kZV8oaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqLCBkb21haW4pIHtcbiAgICB0aGlzLmNsZWFuQmFkZ2VTdHlsZSgpO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaGFzcyxcbiAgICAgIHN0YXRlT2JqLFxuICAgICAgaW5EaWFsb2csXG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbFN0YXRlQ2FyZFR5cGUgPSBzdGF0ZUNhcmRUeXBlKGhhc3MsIHN0YXRlT2JqKTtcbiAgICBsZXQgY3VzdG9tU3RhdGVDYXJkVHlwZTtcbiAgICBjb25zdCBzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlID0gc3RhdGVPYmouYXR0cmlidXRlcy5zdGF0ZV9jYXJkX2N1c3RvbV91aV9zZWNvbmRhcnk7XG5cbiAgICBpZiAoZG9tYWluID09PSAnbGlnaHQnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1lbnRpdHktdG9nZ2xlJyxcbiAgICAgICAgc2VydmljZU1pbjogJ3R1cm5fb2ZmJyxcbiAgICAgICAgc2VydmljZU1heDogJ3R1cm5fb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdicmlnaHRuZXNzJyxcbiAgICAgICAgZG9tYWluLFxuICAgICAgfSk7XG4gICAgICBjdXN0b21TdGF0ZUNhcmRUeXBlID0gJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluID09PSAnY292ZXInICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jb3Zlci1jb250cm9scycsXG4gICAgICAgIG1heDogMTAwLFxuICAgICAgICBzZXJ2aWNlTWluOiAnY2xvc2VfY292ZXInLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X2NvdmVyX3Bvc2l0aW9uJyxcbiAgICAgICAgc2V0VmFsdWVOYW1lOiAncG9zaXRpb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdjdXJyZW50X3Bvc2l0aW9uJyxcbiAgICAgICAgbmFtZU9uOiAnb3BlbicsXG4gICAgICAgIGRvbWFpbixcbiAgICAgIH0pO1xuICAgICAgY3VzdG9tU3RhdGVDYXJkVHlwZSA9ICdzdGF0ZS1jYXJkLXdpdGgtc2xpZGVyJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbiA9PT0gJ2NsaW1hdGUnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jbGltYXRlLXN0YXRlJyxcbiAgICAgICAgbWluOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLm1pbl90ZW1wIHx8IC0xMDAsXG4gICAgICAgIG1heDogc3RhdGVPYmouYXR0cmlidXRlcy5tYXhfdGVtcCB8fCAyMDAsXG4gICAgICAgIHNlcnZpY2VNaW46ICdzZXRfdGVtcGVyYXR1cmUnLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X3RlbXBlcmF0dXJlJyxcbiAgICAgICAgdmFsdWVOYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICBuYW1lT246ICcnLFxuICAgICAgICBkb21haW4sXG4gICAgICB9KTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRoLXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSBUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnNob3dfbGFzdF9jaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAhU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMuaW5jbHVkZXMob3JpZ2luYWxTdGF0ZUNhcmRUeXBlKSkge1xuICAgICAgcGFyYW1zLmluRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLnN0YXRlID09PSAndW5hdmFpbGFibGUnKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSAnJztcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5jb250cm9sRWxlbWVudCA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50O1xuICAgIH1cblxuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICAoc2Vjb25kYXJ5U3RhdGVDYXJkVHlwZSB8fCBjdXN0b21TdGF0ZUNhcmRUeXBlIHx8IGBTVEFURS1DQVJELSR7b3JpZ2luYWxTdGF0ZUNhcmRUeXBlfWApLnRvVXBwZXJDYXNlKCksXG4gICAgICBwYXJhbXMpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtY3VzdG9tLXVpJywgU3RhdGVDYXJkQ3VzdG9tVWkpO1xuIiwiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bwb2x5bWVyL3BvbHltZXIvbGliL3V0aWxzL2h0bWwtdGFnLmpzJztcbmltcG9ydCBDdWlCYXNlRWxlbWVudCBmcm9tICcuL2N1aS1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0ICcuL2R5bmFtaWMtd2l0aC1leHRyYS5qcyc7XG5pbXBvcnQgJy4vaGEtdGhlbWVkLXNsaWRlci5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkV2l0aFNsaWRlciBleHRlbmRzIEN1aUJhc2VFbGVtZW50IHtcbiAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICA8c3R5bGUgaXM9XCJjdXN0b20tc3R5bGVcIiBpbmNsdWRlPVwiaXJvbi1mbGV4IGlyb24tZmxleC1hbGlnbm1lbnQgaXJvbi1mbGV4LWZhY3RvcnNcIj48L3N0eWxlPlxuICAgIDxzdHlsZT5cbiAgICAgICNjb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgICAuc2Vjb25kLWxpbmUsIC5zdGF0ZS1hbmQtdG9nZ2xlLCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5ub3dyYXAgLnN0YXRlLWFuZC10b2dnbGUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBmbGV4LWdyb3c6IDA7XG4gICAgICB9XG4gICAgICAubm93cmFwIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC0xNnB4O1xuICAgICAgfVxuICAgICAgLnN0cmV0Y2ggLnNlY29uZC1saW5lLCAuc3RyZXRjaCBoYS10aGVtZWQtc2xpZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIC0taGEtcGFwZXItc2xpZGVyLXdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgICAgLm5vd3JhcCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1pbi13aWR0aDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICAgIGhhLXRoZW1lZC1zbGlkZXIsIC50b3Atd3JhcHBlciB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC50b3Atd3JhcHBlci5zdHJldGNoIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5oaWRkZW4ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzJD0naG9yaXpvbnRhbCBsYXlvdXQgZmxleCB0b3Atd3JhcHBlciBbW19jb21wdXRlV3JhcENsYXNzKG1vZGUsIHN0cmV0Y2hTbGlkZXIsIGxpbmVUb29Mb25nLCBpbkRpYWxvZyldXSc+XG4gICAgICA8ZGl2IGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQgZmxleC1hdXRvIHN0YXRlLWFuZC10b2dnbGUnPlxuICAgICAgICA8c3RhdGUtaW5mb1xuICAgICAgICAgICAgY2xhc3M9J3N0YXRlLWluZm8gZmxleC1hdXRvJ1xuICAgICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICAgIGluLWRpYWxvZz0nW1tzaG93TGFzdENoYW5nZWQoc3RhdGVPYmosIGluRGlhbG9nLCBleHRyYSldXSdcbiAgICAgICAgICAgIHNlY29uZGFyeS1saW5lJD0nW1toYXNFeHRyYShleHRyYSldXSdcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLXJlcGVhdCcgaXRlbXM9J1tbZXh0cmFdXSc+XG4gICAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9zdGF0ZS1pbmZvPlxuICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbYnJlYWtTbGlkZXJdXScgY2xhc3M9J2hpZGRlbic+XG4gICAgICAgICAgPGR5bmFtaWMtd2l0aC1leHRyYSBoYXNzPSdbW2hhc3NdXScgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nIGNvbnRyb2wtZWxlbWVudD0nW1tjb250cm9sRWxlbWVudF1dJyBpbi1kaWFsb2c9J1tbaW5EaWFsb2ddXSc+PC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tzaG93U2xpZGVyXV0nIHJlc3RhbXA+XG4gICAgICAgIDxkaXYgY2xhc3M9J2hvcml6b250YWwgbGF5b3V0IGZsZXgtYXV0byBlbmQtanVzdGlmaWVkIHNlY29uZC1saW5lJz5cbiAgICAgICAgICA8aGEtdGhlbWVkLXNsaWRlclxuICAgICAgICAgICAgaWQ9J3NsaWRlcidcbiAgICAgICAgICAgIG1heD1bW21heF1dXG4gICAgICAgICAgICBtaW49W1ttaW5dXVxuICAgICAgICAgICAgdGhlbWU9J1tbc3RhdGVPYmouYXR0cmlidXRlcy5zbGlkZXJfdGhlbWVdXSdcbiAgICAgICAgICAgIGlzLW9uPSdbW2lzT24oc3RhdGVPYmosIG5hbWVPbildXSdcbiAgICAgICAgICAgIHZhbHVlPSd7e3NsaWRlclZhbHVlfX0nXG4gICAgICAgICAgICBkaXNhYmxlLW9mZi13aGVuLW1pbj0ne3tkaXNhYmxlT2ZmV2hlbk1pbn19J1xuICAgICAgICAgICAgb24tY2hhbmdlPSdzbGlkZXJDaGFuZ2VkJ1xuICAgICAgICAgICAgb24tY2xpY2s9J3N0b3BQcm9wYWdhdGlvbic+XG4gICAgICAgICAgPC9oYS10aGVtZWQtc2xpZGVyPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1shYnJlYWtTbGlkZXJdXSc+XG4gICAgICAgICAgICA8ZHluYW1pYy13aXRoLWV4dHJhIGhhc3M9J1tbaGFzc11dJyBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXScgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nIGluLWRpYWxvZz0nW1tpbkRpYWxvZ11dJz48L2R5bmFtaWMtd2l0aC1leHRyYT5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWF4OiBTdHJpbmcsXG4gICAgICB2YWx1ZU5hbWU6IFN0cmluZyxcbiAgICAgIHNldFZhbHVlTmFtZTogU3RyaW5nLFxuICAgICAgbmFtZU9uOiB7IHR5cGU6IFN0cmluZywgdmFsdWU6ICdvbicgfSxcbiAgICAgIG1pbjogeyB0eXBlOiBOdW1iZXIsIHZhbHVlOiAwIH0sXG4gICAgICBtYXg6IHsgdHlwZTogTnVtYmVyLCB2YWx1ZTogMjU1IH0sXG5cbiAgICAgIHNsaWRlclZhbHVlOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IEJvb2xlYW4sXG4gICAgICBtb2RlOiBTdHJpbmcsXG4gICAgICBzdHJldGNoU2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBicmVha1NsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaGlkZVNsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbGluZVRvb0xvbmc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG1pbkxpbmVCcmVhazogTnVtYmVyLFxuICAgICAgbWF4TGluZUJyZWFrOiBOdW1iZXIsXG4gICAgICBzaG93U2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJlYWR5KCkge1xuICAgIHN1cGVyLnJlYWR5KCk7XG4gICAgdGhpcy5fb25Jcm9uUmVzaXplID0gdGhpcy5fb25Jcm9uUmVzaXplLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gIH1cblxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3N0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpJyxcbiAgICBdO1xuICB9XG5cbiAgX3dhaXRGb3JMYXlvdXQoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuICAgIHRoaXMuX3NldE1vZGUoKTtcbiAgICBpZiAodGhpcy5fZnJhbWVJZCkgcmV0dXJuO1xuICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZUlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSB0cnVlO1xuICAgICAgdGhpcy5fb25Jcm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBfc2V0TW9kZSgpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBoaWRlU2xpZGVyOiB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicgJiYgdGhpcy5saW5lVG9vTG9uZyxcbiAgICAgIGJyZWFrU2xpZGVyOlxuICAgICAgICAgICAodGhpcy5tb2RlID09PSAnYnJlYWstc2xpZGVyJyB8fCB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicpICYmXG4gICAgICAgICAgIHRoaXMubGluZVRvb0xvbmcsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2hvd1NsaWRlcikge1xuICAgICAgb2JqLmJyZWFrU2xpZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKG9iaik7XG4gIH1cblxuICBfb25Jcm9uUmVzaXplKCkge1xuICAgIGlmICghdGhpcy5yZWFkeVRvQ29tcHV0ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICduby1zbGlkZXInKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMoe1xuICAgICAgICBoaWRlU2xpZGVyOiB0cnVlLFxuICAgICAgICBicmVha1NsaWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2QnJlYWtTbGlkZXIgPSB0aGlzLmJyZWFrU2xpZGVyO1xuICAgIGNvbnN0IHByZXZIaWRlU2xpZGVyID0gdGhpcy5oaWRlU2xpZGVyO1xuICAgIHRoaXMuc2V0UHJvcGVydGllcyh7XG4gICAgICBsaW5lVG9vTG9uZzogZmFsc2UsXG4gICAgICBoaWRlU2xpZGVyOiBmYWxzZSxcbiAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy4kO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA8PSB0aGlzLm1pbkxpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXJXaWR0aCA+PSB0aGlzLm1heExpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldkhpZGVTbGlkZXIgJiYgdGhpcy5tb2RlID09PSAnaGlkZS1zbGlkZXInKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdW5oaWRlIHRoZSBzbGlkZXIgaW4gb3JkZXIgdG8gcmVjYWxjdWxhdGUgaGVpZ2h0LlxuICAgICAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBzdGF0ZUhlaWdodCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcuc3RhdGUtaW5mbycpLmNsaWVudEhlaWdodDtcbiAgICAgIHRoaXMubGluZVRvb0xvbmcgPSBjb250YWluZXJIZWlnaHQgPiBzdGF0ZUhlaWdodCAqIDEuNTtcbiAgICAgIGlmICh0aGlzLmxpbmVUb29Mb25nKSB7XG4gICAgICAgIHRoaXMubWluTGluZUJyZWFrID0gY29udGFpbmVyV2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKCFwcmV2QnJlYWtTbGlkZXIpIHtcbiAgICAgICAgdGhpcy5tYXhMaW5lQnJlYWsgPSBjb250YWluZXJXaWR0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2V0TW9kZSgpO1xuICB9XG5cbiAgX2NvbXB1dGVXcmFwQ2xhc3MobW9kZSwgc3RyZXRjaFNsaWRlciwgbGluZVRvb0xvbmcsIGluRGlhbG9nKSB7XG4gICAgaWYgKGluRGlhbG9nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnc2luZ2xlLWxpbmUnKSB7XG4gICAgICByZXR1cm4gJ25vd3JhcCc7XG4gICAgfVxuICAgIGlmIChzdHJldGNoU2xpZGVyICYmIGxpbmVUb29Mb25nKSB7XG4gICAgICByZXR1cm4gJ3N0cmV0Y2ggd3JhcCc7XG4gICAgfVxuICAgIHJldHVybiAnd3JhcCc7XG4gIH1cblxuICBfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpIHtcbiAgICBpZiAoaW5EaWFsb2cgfHwgaGlkZVNsaWRlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNsaWRlckNoYW5nZWQoZXYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGV2LnRhcmdldC52YWx1ZSwgMTApO1xuICAgIGNvbnN0IHBhcmFtID0geyBlbnRpdHlfaWQ6IHRoaXMuc3RhdGVPYmouZW50aXR5X2lkIH07XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHJldHVybjtcbiAgICBsZXQgdGFyZ2V0ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNzbGlkZXInKTtcbiAgICBpZiAoZXYudGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgIC8vIE5vIFNoYWRvdyBET00gLSB3ZSBoYXZlIGFjY2VzcyB0byBvcmlnaW5hbCB0YXJnZXQuXG4gICAgICAoeyB0YXJnZXQgfSA9IGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LnBhdGgpIHtcbiAgICAgIFt0YXJnZXRdID0gZXYucGF0aDtcbiAgICB9IGVsc2UgaWYgKGV2LmNvbXBvc2VkUGF0aCkge1xuICAgICAgW3RhcmdldF0gPSBldi5jb21wb3NlZFBhdGgoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAwIHx8ICh2YWx1ZSA8PSB0YXJnZXQubWluICYmICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKSkge1xuICAgICAgdGhpcy5oYXNzLmNhbGxTZXJ2aWNlKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2VNaW4sIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1bdGhpcy5zZXRWYWx1ZU5hbWUgfHwgdGhpcy52YWx1ZU5hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmhhc3MuY2FsbFNlcnZpY2UodGhpcy5kb21haW4sIHRoaXMuc2VydmljZU1heCwgcGFyYW0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBzbGlkZXJWYWx1ZTogdGhpcy5pc09uKHN0YXRlT2JqLCBuYW1lT24pID8gc3RhdGVPYmouYXR0cmlidXRlc1t2YWx1ZU5hbWVdIDogMCxcbiAgICB9O1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWluTGluZUJyZWFrOiAwLFxuICAgICAgICBtYXhMaW5lQnJlYWs6IDk5OSxcbiAgICAgICAgaGlkZVNsaWRlcjogZmFsc2UsXG4gICAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICAgICAgbGluZVRvb0xvbmc6IGZhbHNlLFxuICAgICAgICBtb2RlOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSxcbiAgICAgICAgc3RyZXRjaFNsaWRlcjogISFzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0cmV0Y2hfc2xpZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhvYmopO1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgdGhpcy5fd2FpdEZvckxheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzT24oc3RhdGVPYmosIG5hbWVPbikge1xuICAgIHJldHVybiBzdGF0ZU9iaiAmJiAoIW5hbWVPbiB8fCBzdGF0ZU9iai5zdGF0ZSA9PT0gbmFtZU9uKTtcbiAgfVxuXG4gIHN0b3BQcm9wYWdhdGlvbihldikge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInLCBTdGF0ZUNhcmRXaXRoU2xpZGVyKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgQ3VpQmFzZUVsZW1lbnQgZnJvbSAnLi9jdWktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCAnLi9keW5hbWljLXdpdGgtZXh0cmEuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIFN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIgZXh0ZW5kcyBDdWlCYXNlRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50XCI+PC9zdHlsZT5cbiAgICA8c3R5bGU+XG4gICAgICAjY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQnPlxuICAgICAgPHN0YXRlLWluZm9cbiAgICAgICAgICBoYXNzPSdbW2hhc3NdXSdcbiAgICAgICAgICBjbGFzcz0nc3RhdGUtaW5mbydcbiAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICBpbi1kaWFsb2c9J1tbc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpXV0nXG4gICAgICAgICAgc2Vjb25kYXJ5LWxpbmUkPSdbW2hhc0V4dHJhKGV4dHJhKV1dJz5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20tcmVwZWF0JyBpdGVtcz0nW1tleHRyYV1dJz5cbiAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3N0YXRlLWluZm8+XG4gICAgICA8ZHluYW1pYy13aXRoLWV4dHJhXG4gICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nXG4gICAgICAgICAgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nXG4gICAgICAgICAgaW4tZGlhbG9nPSdbW2luRGlhbG9nXV0nPlxuICAgICAgPC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdzdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyJywgU3RhdGVDYXJkV2l0aG91dFNsaWRlcik7XG4iLCIvLyBQb2x5bWVyIGxlZ2FjeSBldmVudCBoZWxwZXJzIHVzZWQgY291cnRlc3kgb2YgdGhlIFBvbHltZXIgcHJvamVjdC5cbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBvcnQgZGVmYXVsdCAoc3VwZXJDbGFzcykgPT4ge1xuICAvKipcbiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAgICovXG4gIGNsYXNzIEV2ZW50c01peGluIGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCB3aXRoIGFuIG9wdGlvbmFsIGRldGFpbCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIE5hbWUgb2YgZXZlbnQgdHlwZS5cbiAgICAgKiBAcGFyYW0geyo9fSBkZXRhaWwgRGV0YWlsIHZhbHVlIGNvbnRhaW5pbmcgZXZlbnQtc3BlY2lmaWNcbiAgICAgKiAgIHBheWxvYWQuXG4gICAgICogQHBhcmFtIHt7IGJ1YmJsZXM6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNvbXBvc2VkOiAoYm9vbGVhbnx1bmRlZmluZWQpIH09fVxuICAgICAqICBvcHRpb25zIE9iamVjdCBzcGVjaWZ5aW5nIG9wdGlvbnMuICBUaGVzZSBtYXkgaW5jbHVkZTpcbiAgICAgKiAgYGJ1YmJsZXNgIChib29sZWFuLCBkZWZhdWx0cyB0byBgdHJ1ZWApLFxuICAgICAqICBgY2FuY2VsYWJsZWAgKGJvb2xlYW4sIGRlZmF1bHRzIHRvIGZhbHNlKSwgYW5kXG4gICAgICogIGBub2RlYCBvbiB3aGljaCB0byBmaXJlIHRoZSBldmVudCAoSFRNTEVsZW1lbnQsIGRlZmF1bHRzIHRvIGB0aGlzYCkuXG4gICAgICogQHJldHVybiB7RXZlbnR9IFRoZSBuZXcgZXZlbnQgdGhhdCB3YXMgZmlyZWQuXG4gICAgICovXG4gICAgZmlyZSh0eXBlLCBkZXRhaWwgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmJsZXM6IG9wdGlvbnMuYnViYmxlcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogQm9vbGVhbihvcHRpb25zLmNhbmNlbGFibGUpLFxuICAgICAgICBjb21wb3NlZDogb3B0aW9ucy5jb21wb3NlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuY29tcG9zZWQsXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LmRldGFpbCA9IGRldGFpbDtcbiAgICAgIGNvbnN0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgdGhpcztcbiAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBFdmVudHNNaXhpbjtcbn07XG4iLCJpbXBvcnQgaGFzc0F0dHJpYnV0ZXNVdGlsIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL3V0aWwvaGFzcy1hdHRyaWJ1dGVzLXV0aWwuanMnO1xuXG53aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgfHwge307XG5jb25zdCBTVVBQT1JURURfU0xJREVSX01PREVTID0gW1xuICAnc2luZ2xlLWxpbmUnLCAnYnJlYWstc2xpZGVyJywgJ2JyZWFrLXNsaWRlci10b2dnbGUnLCAnaGlkZS1zbGlkZXInLCAnbm8tc2xpZGVyJyxcbl07XG5cbmNvbnN0IGN1c3RvbVVpQXR0cmlidXRlcyA9IHtcbiAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgZGV2aWNlOiB1bmRlZmluZWQsXG4gIHRlbXBsYXRlczogdW5kZWZpbmVkLFxuICBzdGF0ZTogdW5kZWZpbmVkLFxuICBfc3RhdGVEaXNwbGF5OiB1bmRlZmluZWQsXG4gIGNvbnRyb2xfZWxlbWVudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBzdGF0ZV9jYXJkX21vZGU6IHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGxpZ2h0OiBTVVBQT1JURURfU0xJREVSX01PREVTLmNvbmNhdCgnYmFkZ2VzJyksXG4gICAgICBjb3ZlcjogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgY2xpbWF0ZTogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgJyonOiBbJ2JhZGdlcyddLFxuICAgIH0sXG4gIH0sXG4gIHN0YXRlX2NhcmRfY3VzdG9tX3VpX3NlY29uZGFyeTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBiYWRnZXNfbGlzdDogeyB0eXBlOiAnanNvbicgfSxcbiAgc2hvd19sYXN0X2NoYW5nZWQ6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfY29udHJvbDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgZXh0cmFfZGF0YV90ZW1wbGF0ZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBleHRyYV9iYWRnZTogeyB0eXBlOiAnanNvbicgfSxcbiAgc3RyZXRjaF9zbGlkZXI6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIHNsaWRlcl90aGVtZTogeyB0eXBlOiAnanNvbicgfSxcbiAgdGhlbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgY29uZmlybV9jb250cm9sczogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgY29uZmlybV9jb250cm9sc19zaG93X2xvY2s6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfaW5fZGVmYXVsdF92aWV3OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBpY29uX2NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG59O1xud2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMgPSBoYXNzQXR0cmlidXRlc1V0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUztcbndpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5VTktOT1dOX1RZUEUgPSBoYXNzQXR0cmlidXRlc1V0aWwuVU5LTk9XTl9UWVBFO1xuT2JqZWN0LmFzc2lnbih3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUywgY3VzdG9tVWlBdHRyaWJ1dGVzKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZ2V0Vmlld0VudGl0aWVzIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvZ2V0X3ZpZXdfZW50aXRpZXMudHMnO1xuXG5pbXBvcnQgJy4uL2VsZW1lbnRzL2hhLWNvbmZpZy1jdXN0b20tdWkuanMnO1xuaW1wb3J0IFZFUlNJT04gZnJvbSAnLi92ZXJzaW9uLmpzJztcbmltcG9ydCAnLi9oYXNzLWF0dHJpYnV0ZS11dGlsLmpzJztcblxud2luZG93LmN1c3RvbVVJID0gd2luZG93LmN1c3RvbVVJIHx8IHtcbiAgU1VQUE9SVEVEX1NMSURFUl9NT0RFUzogW1xuICAgICdzaW5nbGUtbGluZScsICdicmVhay1zbGlkZXInLCAnYnJlYWstc2xpZGVyLXRvZ2dsZScsICdoaWRlLXNsaWRlcicsICduby1zbGlkZXInLFxuICBdLFxuXG4gIGRvbUhvc3QoZWxlbSkge1xuICAgIGlmIChlbGVtID09PSBkb2N1bWVudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW0uZ2V0Um9vdE5vZGUoKTtcbiAgICByZXR1cm4gKHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSA/IC8qKiBAdHlwZSB7U2hhZG93Um9vdH0gKi8gKHJvb3QpLmhvc3QgOiByb290O1xuICB9LFxuXG4gIGxpZ2h0T3JTaGFkb3coZWxlbSwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZWxlbS5zaGFkb3dSb290ID9cbiAgICAgIGVsZW0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6XG4gICAgICBlbGVtLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9LFxuXG4gIGdldEVsZW1lbnRIaWVyYXJjaHkocm9vdCwgaGllcmFyY2h5KSB7XG4gICAgaWYgKHJvb3QgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVsZW0gPSBoaWVyYXJjaHkuc2hpZnQoKTtcbiAgICBpZiAoZWxlbSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhyb290LCBlbGVtKSwgaGllcmFyY2h5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0sXG5cbiAgZ2V0Q29udGV4dChlbGVtKSB7XG4gICAgaWYgKGVsZW0uX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbS5fY29udGV4dCA9IFtdO1xuICAgICAgZm9yIChsZXQgZWxlbWVudCA9IChlbGVtLnRhZ05hbWUgPT09ICdIQS1FTlRJVElFUy1DQVJEJyA/IHdpbmRvdy5jdXN0b21VSS5kb21Ib3N0KGVsZW0pIDogZWxlbSk7XG4gICAgICAgIGVsZW1lbnQ7IGVsZW1lbnQgPSB3aW5kb3cuY3VzdG9tVUkuZG9tSG9zdChlbGVtZW50KSkge1xuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ0hBLUVOVElUSUVTLUNBUkQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuZ3JvdXBFbnRpdHkuZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ncm91cEVudGl0eSA9PT0gZmFsc2UgJiYgZWxlbWVudC5zdGF0ZXMgJiYgZWxlbWVudC5zdGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChgZ3JvdXAuJHtjb21wdXRlU3RhdGVEb21haW4oZWxlbWVudC5zdGF0ZXNbMF0pfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTU9SRS1JTkZPLUdST1VQJzpcbiAgICAgICAgICBjYXNlICdTVEFURS1DQVJELUNPTlRFTlQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuc3RhdGVPYmouZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0hBLUNBUkRTJzpcbiAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWV3JykgfHwgJ2RlZmF1bHRfdmlldycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtLl9jb250ZXh0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW0uX2NvbnRleHQ7XG4gIH0sXG5cbiAgZmluZE1hdGNoKGtleSwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgaWYgKG9wdGlvbnNba2V5XSkgcmV0dXJuIGtleTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob3B0aW9ucykuZmluZChvcHRpb24gPT4ga2V5Lm1hdGNoKGBeJHtvcHRpb259JGApKTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKSB7XG4gICAgY29uc3QgbmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLmZpbmRNYXRjaChuYW1lLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIHN0YXRlT2JqO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZVttYXRjaF0pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHJldHVybiBzdGF0ZU9iajtcbiAgICByZXR1cm4gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgYXR0cmlidXRlcyk7XG4gIH0sXG5cbiAgbWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIHN0YXRlT2JqKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHdpbmRvdy5jdXN0b21VSS5nZXRDb250ZXh0KGVsZW0pO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb250ZXh0LmZvckVhY2goKGMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5maW5kTWF0Y2goYywgc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cCk7XG4gICAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cFttYXRjaF0pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwW21hdGNoXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5hcHBseUF0dHJpYnV0ZXMoc3RhdGVPYmosIGF0dHJpYnV0ZXMpO1xuICB9LFxuXG4gIF9zZXRLZWVwKG9iaiwgdmFsdWUpIHtcbiAgICBpZiAob2JqLl9jdWlfa2VlcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmouX2N1aV9rZWVwID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5fY3VpX2tlZXAgPSBvYmouX2N1aV9rZWVwICYmIHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBtYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKGhhc3MsIHN0YXRlcywgc3RhdGVPYmosIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZXMudGVtcGxhdGVzKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuX3NldEtlZXAoc3RhdGVPYmosIHRydWUpO1xuICAgICAgcmV0dXJuIHN0YXRlT2JqO1xuICAgIH1cbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge307XG4gICAgbGV0IGhhc0dsb2JhbCA9IGZhbHNlO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy50ZW1wbGF0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhdHRyaWJ1dGVzLnRlbXBsYXRlc1trZXldO1xuICAgICAgaWYgKHRlbXBsYXRlLm1hdGNoKC9cXGIoZW50aXRpZXN8aGFzcylcXGIvKSkge1xuICAgICAgICBoYXNHbG9iYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB3aW5kb3cuY3VzdG9tVUkuY29tcHV0ZVRlbXBsYXRlKFxuICAgICAgICB0ZW1wbGF0ZSwgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgYXR0cmlidXRlcyxcbiAgICAgICAgKHN0YXRlT2JqLnVudGVtcGxhdGVkX2F0dHJpYnV0ZXMgJiYgc3RhdGVPYmoudW50ZW1wbGF0ZWRfYXR0cmlidXRlc1trZXldKSB8fFxuICAgICAgICAgICAgYXR0cmlidXRlc1trZXldLFxuICAgICAgICBzdGF0ZU9iai51bnRlbXBsYXRlZF9zdGF0ZSB8fCBzdGF0ZU9iai5zdGF0ZSk7XG4gICAgICAvLyBJbiBjYXNlIG9mIG51bGwgZG9uJ3Qgc2V0IHRoZSB2YWx1ZS5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgbmV3QXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gICAgICBpZiAoa2V5ID09PSAnc3RhdGUnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gc3RhdGVPYmouc3RhdGUpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdfc3RhdGVEaXNwbGF5Jykge1xuICAgICAgICBpZiAodmFsdWUgIT09IHN0YXRlT2JqLl9zdGF0ZURpc3BsYXkpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gYXR0cmlidXRlc1trZXldKSB7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5jdXN0b21VSS5fc2V0S2VlcChzdGF0ZU9iaiwgIWhhc0dsb2JhbCk7XG4gICAgaWYgKCFoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzID09PSBhdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBXZSBhcmUgb3BlcmF0aW5nIG9uIHJlYWwgYXR0cmlidXRlcy4gUmVwbGFjZSB0aGVtLlxuICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgbmV3QXR0cmlidXRlcyk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdzdGF0ZScpKSB7XG4gICAgICAgIGlmIChuZXdBdHRyaWJ1dGVzLnN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnN0YXRlID0gU3RyaW5nKG5ld0F0dHJpYnV0ZXMuc3RhdGUpO1xuICAgICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZSA9IHN0YXRlT2JqLnN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdfc3RhdGVEaXNwbGF5JykpIHtcbiAgICAgICAgcmVzdWx0Ll9zdGF0ZURpc3BsYXkgPSBuZXdBdHRyaWJ1dGVzLl9zdGF0ZURpc3BsYXk7XG4gICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZURpc3BsYXkgPSBzdGF0ZU9iai5fc3RhdGVEaXNwbGF5O1xuICAgICAgfVxuICAgICAgd2luZG93LmN1c3RvbVVJLl9zZXRLZWVwKHJlc3VsdCwgIWhhc0dsb2JhbCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBPcGVyYXRpbmcgb24gY29udGV4dC1hd2FyZSBhdHRyaWJ1dGVzLiBSZXR1cm4gc2hhbGxvdyBjb3B5IG9mIG9iamVjdC5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICB9LFxuXG4gIG1heWJlQXBwbHlUZW1wbGF0ZXMoaGFzcywgc3RhdGVzLCBzdGF0ZU9iaikge1xuICAgIGNvbnN0IG5ld1Jlc3VsdCA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgICAgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgc3RhdGVPYmouYXR0cmlidXRlcyk7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSAobmV3UmVzdWx0ICE9PSBzdGF0ZU9iaik7XG5cbiAgICBmdW5jdGlvbiBjaGVja0F0dHJpYnV0ZXMob2JqKSB7XG4gICAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgICAgT2JqZWN0LnZhbHVlcyhvYmopLmZvckVhY2goKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgaGFzcywgc3RhdGVzLCBuZXdSZXN1bHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBoYXNDaGFuZ2VzIHw9IChyZXN1bHQgIT09IG5ld1Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZGV2aWNlKTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZ3JvdXApO1xuICAgIH1cblxuICAgIGNoZWNrQXR0cmlidXRlcyhzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgY2hlY2tBdHRyaWJ1dGVzKHN0YXRlT2JqLmF0dHJpYnV0ZXMuZ3JvdXApO1xuICAgIGlmIChuZXdSZXN1bHQgIT09IHN0YXRlT2JqKSByZXR1cm4gbmV3UmVzdWx0O1xuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVPYmo7XG4gIH0sXG5cbiAgYXBwbHlBdHRyaWJ1dGVzKHN0YXRlT2JqLCBhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eV9pZDogc3RhdGVPYmouZW50aXR5X2lkLFxuICAgICAgc3RhdGU6IHN0YXRlT2JqLnN0YXRlLFxuICAgICAgYXR0cmlidXRlczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmouYXR0cmlidXRlcywgYXR0cmlidXRlcyksXG4gICAgICB1bnRlbXBsYXRlZF9hdHRyaWJ1dGVzOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLFxuICAgICAgbGFzdF9jaGFuZ2VkOiBzdGF0ZU9iai5sYXN0X2NoYW5nZWQsXG4gICAgfTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdChlbGVtLCBzdGF0ZU9iaiwgaW5EaWFsb2csIGFsbG93SGlkZGVuKSB7XG4gICAgaWYgKGluRGlhbG9nKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgbGV0IG9iaiA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKTtcbiAgICBvYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIG9iaik7XG4gICAgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICBlbGVtLmhhc3MsIGVsZW0uaGFzcy5zdGF0ZXMsIG9iaiwgb2JqLmF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKG9iaiAhPT0gc3RhdGVPYmogJiYgb2JqLmF0dHJpYnV0ZXMuaGlkZGVuICYmIGFsbG93SGlkZGVuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBmaXhHcm91cFRpdGxlcygpIHtcbiAgICBjb25zdCBob21lQXNzaXN0YW50TWFpbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nXSk7XG4gICAgaWYgKGhvbWVBc3Npc3RhbnRNYWluID09PSBudWxsKSB7XG4gICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEgc2Vjb25kLlxuICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzLCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYUNhcmRzID0gd2luZG93LmN1c3RvbVVJLmdldEVsZW1lbnRIaWVyYXJjaHkoaG9tZUFzc2lzdGFudE1haW4sIFtcbiAgICAgICdwYXJ0aWFsLWNhcmRzJyxcbiAgICAgICdoYS1jYXJkc1t2aWV3LXZpc2libGVdJ10pO1xuICAgIGlmIChoYUNhcmRzID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhQ2FyZHMsICcubWFpbicpIHx8IGhhQ2FyZHMuJC5tYWluO1xuICAgIGNvbnN0IGNhcmRzID0gbWFpbi5xdWVyeVNlbGVjdG9yQWxsKCdoYS1lbnRpdGllcy1jYXJkJyk7XG4gICAgY2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4ge1xuICAgICAgaWYgKGNhcmQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0KFxuICAgICAgICAgIGNhcmQsXG4gICAgICAgICAgY2FyZC5ncm91cEVudGl0eSxcbiAgICAgICAgICBmYWxzZSAvKiBpbkRpYWxvZyAqLyxcbiAgICAgICAgICBmYWxzZSAvKiBhbGxvd0hpZGRlbiAqLyk7XG4gICAgICAgIGlmIChvYmogIT09IGNhcmQuZ3JvdXBFbnRpdHkgJiYgb2JqLmF0dHJpYnV0ZXMuZnJpZW5kbHlfbmFtZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVFbGVtID0gd2luZG93LmN1c3RvbVVJLmxpZ2h0T3JTaGFkb3coY2FyZCwgJy5uYW1lJyk7XG4gICAgICAgICAgbmFtZUVsZW0udGV4dENvbnRlbnQgPSBvYmouYXR0cmlidXRlcy5mcmllbmRseV9uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgY29udHJvbENvbHVtbnMoY29sdW1ucykge1xuICAgIGNvbnN0IHBhcnRpYWxDYXJkcyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtY2FyZHMnXSk7XG4gICAgaWYgKHBhcnRpYWxDYXJkcyA9PT0gbnVsbCkge1xuICAgICAgLy8gRE9NIG5vdCByZWFkeS4gV2FpdCAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMuYmluZChudWxsLCBjb2x1bW5zKSxcbiAgICAgICAgMTAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZ1bmN0aW9uIHJlbmFtZWQgZnJvbSBoYW5kbGVXaW5kb3dDaGFuZ2UgdG8gX3VwZGF0ZUNvbHVtbnMgb24gMy43LjE4XG4gICAgY29uc3QgZiA9IHBhcnRpYWxDYXJkcy5oYW5kbGVXaW5kb3dDaGFuZ2UgfHwgcGFydGlhbENhcmRzLl91cGRhdGVDb2x1bW5zO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzLmZvckVhY2goKG1xbCkgPT4ge1xuICAgICAgbXFsLnJlbW92ZUxpc3RlbmVyKGYpO1xuICAgIH0pO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzID0gY29sdW1ucy5tYXAoKHdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBtcWwgPSB3aW5kb3cubWF0Y2hNZWRpYShgKG1pbi13aWR0aDogJHt3aWR0aH1weClgKTtcbiAgICAgIG1xbC5hZGRMaXN0ZW5lcihmKTtcbiAgICAgIHJldHVybiBtcWw7XG4gICAgfSk7XG4gICAgZigpO1xuICB9LFxuXG4gIHVzZUN1c3RvbWl6ZXIoKSB7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBjb25zdCBjdXN0b21pemVyID0gbWFpbi5oYXNzLnN0YXRlc1snY3VzdG9taXplci5jdXN0b21pemVyJ107XG4gICAgaWYgKCFjdXN0b21pemVyKSByZXR1cm47XG4gICAgaWYgKGN1c3RvbWl6ZXIuYXR0cmlidXRlcy5jb2x1bW5zKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMoY3VzdG9taXplci5hdHRyaWJ1dGVzLmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAoY3VzdG9taXplci5hdHRyaWJ1dGVzLmhpZGVfYXR0cmlidXRlcykge1xuICAgICAgaWYgKHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbCAmJiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUykge1xuICAgICAgICBjdXN0b21pemVyLmF0dHJpYnV0ZXMuaGlkZV9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTLCBhdHRyKSkge1xuICAgICAgICAgICAgd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlQ29uZmlnUGFuZWwoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY29uc3QgaGFQYW5lbENvbmZpZyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtcGFuZWwtcmVzb2x2ZXInLFxuICAgICAgJ2hhLXBhbmVsLWNvbmZpZyddKTtcbiAgICBpZiAoIWhhUGFuZWxDb25maWcpIHtcbiAgICAgIC8vIERPTSBub3QgcmVhZHkuIFdhaXQgMTAwbXMuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkudXBkYXRlQ29uZmlnUGFuZWwsIDEwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhQ29uZmlnTmF2aWdhdGlvbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGhhUGFuZWxDb25maWcsIFtcbiAgICAgICdoYS1jb25maWctZGFzaGJvYXJkJyxcbiAgICAgICdoYS1jb25maWctbmF2aWdhdGlvbiddKTtcbiAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uKSB7XG4gICAgICAvLyBIYUNvbmZpZ05hdmlnYXRpb24gc3RhcnRlZCB1c2luZyBsb2NhbGl6ZSBvbiAyMS4wMS4yMDE4XG4gICAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplICYmICFoYUNvbmZpZ05hdmlnYXRpb24uY3VpUGF0Y2gpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLmN1aVBhdGNoID0gdHJ1ZTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVMb2FkZWQgPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVMb2FkZWQ7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlQ2FwdGlvbiA9IGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZUNhcHRpb247XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlRGVzY3JpcHRpb24gPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVEZXNjcmlwdGlvbjtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlTG9hZGVkID0gKGhhc3MsIHBhZ2UpID0+XG4gICAgICAgICAgcGFnZSA9PT0gJ2N1c3RvbXVpJyB8fCBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZUxvYWRlZChoYXNzLCBwYWdlKTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlQ2FwdGlvbiA9IChwYWdlLCBsb2NhbGl6ZSkgPT5cbiAgICAgICAgICAocGFnZSA9PT0gJ2N1c3RvbXVpJyA/ICdDdXN0b20gVUknIDogaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVDYXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZURlc2NyaXB0aW9uID0gKHBhZ2UsIGxvY2FsaXplKSA9PlxuICAgICAgICAgIChwYWdlID09PSAnY3VzdG9tdWknID8gJ1NldFVJIHR3ZWFrcycgOiBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWhhQ29uZmlnTmF2aWdhdGlvbi5wYWdlcy5zb21lKGNvbmYgPT4gY29uZiA9PT0gJ2N1c3RvbXVpJyB8fCBjb25mLmRvbWFpbiA9PT0gJ2N1c3RvbXVpJykpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLnB1c2goJ3BhZ2VzJywgaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplID8gJ2N1c3RvbXVpJyA6IHtcbiAgICAgICAgICBkb21haW46ICdjdXN0b211aScsXG4gICAgICAgICAgY2FwdGlvbjogJ0N1c3RvbSBVSScsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTZXQgVUkgdHdlYWtzLicsXG4gICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZ2V0SGFDb25maWdDdXN0b21VaSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhhQ29uZmlnQ3VzdG9tVWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoYS1jb25maWctY3VzdG9tLXVpJyk7XG4gICAgICBoYUNvbmZpZ0N1c3RvbVVpLmlzV2lkZSA9IGhhUGFuZWxDb25maWcuaXNXaWRlO1xuICAgICAgaGFDb25maWdDdXN0b21VaS5zZXRBdHRyaWJ1dGUoJ3BhZ2UtbmFtZScsICdjdXN0b211aScpO1xuICAgICAgcmV0dXJuIGhhQ29uZmlnQ3VzdG9tVWk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlyb25QYWdlcyA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhUGFuZWxDb25maWcsICdpcm9uLXBhZ2VzJyk7XG4gICAgaWYgKGlyb25QYWdlcykge1xuICAgICAgaWYgKGlyb25QYWdlcy5sYXN0RWxlbWVudENoaWxkLnRhZ05hbWUgIT09ICdIQS1DT05GSUctQ1VTVE9NLVVJJykge1xuICAgICAgICBjb25zdCBoYUNvbmZpZ0N1c3RvbVVpID0gZ2V0SGFDb25maWdDdXN0b21VaSgpO1xuICAgICAgICBpcm9uUGFnZXMuYXBwZW5kQ2hpbGQoaGFDb25maWdDdXN0b21VaSk7XG4gICAgICAgIGlyb25QYWdlcy5hZGRFdmVudExpc3RlbmVyKCdpcm9uLWl0ZW1zLWNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnL2N1c3RvbXVpJykpIHtcbiAgICAgICAgICAgIGlyb25QYWdlcy5zZWxlY3QoJ2N1c3RvbXVpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhUGFuZWxDb25maWcuc2hhZG93Um9vdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IGhhUGFuZWxDb25maWcuc2hhZG93Um9vdCB8fCBoYVBhbmVsQ29uZmlnO1xuICAgICAgaWYgKHJvb3QubGFzdEVsZW1lbnRDaGlsZC50YWdOYW1lICE9PSAnSEEtQ09ORklHLUNVU1RPTS1VSScpIHtcbiAgICAgICAgY29uc3QgaGFDb25maWdDdXN0b21VaSA9IGdldEhhQ29uZmlnQ3VzdG9tVWkoKTtcbiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChoYUNvbmZpZ0N1c3RvbVVpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpc2libGUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZy9jdXN0b211aScpO1xuICAgICAgcm9vdC5sYXN0RWxlbWVudENoaWxkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJycgOiAnbm9uZSc7XG4gICAgfSBlbHNlIGlmIChoYVBhbmVsQ29uZmlnLnJvdXRlck9wdGlvbnMgJiYgaGFQYW5lbENvbmZpZy5yb3V0ZXJPcHRpb25zLnJvdXRlcykge1xuICAgICAgaWYgKCFoYVBhbmVsQ29uZmlnLnJvdXRlck9wdGlvbnMucm91dGVzLmN1c3RvbXVpKSB7XG4gICAgICAgIGhhUGFuZWxDb25maWcucm91dGVyT3B0aW9ucy5yb3V0ZXMuY3VzdG9tdWkgPSB7XG4gICAgICAgICAgdGFnOiAnaGEtY29uZmlnLWN1c3RvbS11aScsXG4gICAgICAgICAgbG9hZDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIH07XG4gICAgICAgIC8vIEN1c3RvbVVJIHBhbmVsIGlzIHRoZSBlbnRyeXBvaW50LCBzbyB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgcGFnZS5cbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnL2N1c3RvbXVpJykpIHtcbiAgICAgICAgICBoYVBhbmVsQ29uZmlnLnVwZGF0ZShuZXcgTWFwKFtbJ3JvdXRlJywgdW5kZWZpbmVkXV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBpbnN0YWxsU3RhdGVzSG9vaygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaG9tZS1hc3Npc3RhbnQnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbWVBc3Npc3RhbnQgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAoIWhvbWVBc3Npc3RhbnQgfHwgIWhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzO1xuICAgICAgaG9tZUFzc2lzdGFudC5wcm90b3R5cGUuX3VwZGF0ZUhhc3MgPSBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGNvbnN0IHsgaGFzcyB9ID0gdGhpcztcbiAgICAgICAgaWYgKG9iai5zdGF0ZXMpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhvYmouc3RhdGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9iai5zdGF0ZXNba2V5XTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuX2N1aV9rZWVwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdFbnRpdHkgPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVBcHBseVRlbXBsYXRlcyhoYXNzLCBvYmouc3RhdGVzLCBlbnRpdHkpO1xuICAgICAgICAgICAgaWYgKGhhc3Muc3RhdGVzICYmIGVudGl0eSAhPT0gaGFzcy5zdGF0ZXNba2V5XSkge1xuICAgICAgICAgICAgICAvLyBOZXcgc3RhdGUgYXJyaXZlZC4gUHV0IG1vZGlmaWVkIHN0YXRlIGluLlxuICAgICAgICAgICAgICBvYmouc3RhdGVzW2tleV0gPSBuZXdFbnRpdHk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSAhPT0gbmV3RW50aXR5KSB7XG4gICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHNhbWUgc3RhdGUgYnV0IGNvbnRlbnRzIGNoYW5nZWQgZHVlIHRvIG90aGVyIHN0YXRlIGNoYW5nZXMuXG4gICAgICAgICAgICAgIG9iai5zdGF0ZXNba2V5XSA9IG5ld0VudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbFVwZGF0ZS5jYWxsKHRoaXMsIG9iaik7XG4gICAgICAgIGlmIChvYmoudGhlbWVzICYmIGhhc3MuX3RoZW1lV2FpdGVycykge1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycy5mb3JFYWNoKHdhaXRlciA9PiB3YWl0ZXIuc3RhdGVDaGFuZ2VkKHdhaXRlci5zdGF0ZSkpO1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1haW4gPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhkb2N1bWVudCwgJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAobWFpbi5oYXNzICYmIG1haW4uaGFzcy5zdGF0ZXMpIHtcbiAgICAgICAgbWFpbi5fdXBkYXRlSGFzcyh7IHN0YXRlczogbWFpbi5oYXNzLnN0YXRlcyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsUGFydGlhbENhcmRzKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdwYXJ0aWFsLWNhcmRzJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0aWFsQ2FyZHMgPSBjdXN0b21FbGVtZW50cy5nZXQoJ3BhcnRpYWwtY2FyZHMnKTtcbiAgICAgIGlmICghcGFydGlhbENhcmRzIHx8ICFwYXJ0aWFsQ2FyZHMucHJvdG90eXBlLl9kZWZhdWx0Vmlld0ZpbHRlcikgcmV0dXJuO1xuICAgICAgcGFydGlhbENhcmRzLnByb3RvdHlwZS5fZGVmYXVsdFZpZXdGaWx0ZXIgPSAoaGFzcywgZW50aXR5SWQpID0+IHtcbiAgICAgICAgaWYgKGhhc3Muc3RhdGVzW2VudGl0eUlkXS5hdHRyaWJ1dGVzLmhpZGRlbikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBleGNsdWRlcyA9IHt9O1xuICAgICAgICBPYmplY3QudmFsdWVzKGhhc3Muc3RhdGVzKS5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgICBpZiAoZW50aXR5LmF0dHJpYnV0ZXMgJiYgZW50aXR5LmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVFbnRpdHlJZCA9IGVudGl0eS5lbnRpdHlfaWQ7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSkgcmV0dXJuO1xuICAgICAgICAgICAgZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSA9IGVudGl0eTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuYXR0cmlidXRlcy52aWV3KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZXdFbnRpdGllcyA9IGdldFZpZXdFbnRpdGllcyhoYXNzLnN0YXRlcywgZW50aXR5KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModmlld0VudGl0aWVzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBpZCA9PiB2aWV3RW50aXRpZXNbaWRdLmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXhjbHVkZXNbaWRdID0gdmlld0VudGl0aWVzW2lkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gIWV4Y2x1ZGVzW2VudGl0eUlkXTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgLy8gQWxsb3dzIGNoYW5naW5nIHRoZSAnRXhlY3V0ZScgLyAnQWN0aXZhdGUnIHRleHQgb24gc2NyaXB0L3NjZW5lIGNhcmRzLlxuICBpbnN0YWxsQWN0aW9uTmFtZShlbGVtZW50TmFtZSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKGVsZW1lbnROYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGtsYXNzID0gY3VzdG9tRWxlbWVudHMuZ2V0KGVsZW1lbnROYW1lKTtcbiAgICAgIGlmICgha2xhc3MgfHwgIWtsYXNzLnByb3RvdHlwZSkgcmV0dXJuO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtsYXNzLnByb3RvdHlwZSwgJ2xvY2FsaXplJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tTG9jYWxpemUodikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVPYmogJiYgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzLmFjdGlvbl9uYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlT2JqLmF0dHJpYnV0ZXMuYWN0aW9uX25hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGEubG9jYWxpemUodik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXN0b21Mb2NhbGl6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KCkge30sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBBbGxvd3MgdGhlbWluZyBcInJlZ3VsYXJcIiB0b3AgYmFkZ2VzLlxuICBpbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UoKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLXN0YXRlLWxhYmVsLWJhZGdlJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYVN0YXRlTGFiZWxCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnaGEtc3RhdGUtbGFiZWwtYmFkZ2UnKTtcbiAgICAgIGlmICghaGFTdGF0ZUxhYmVsQmFkZ2UgfHwgIWhhU3RhdGVMYWJlbEJhZGdlLnByb3RvdHlwZS5zdGF0ZUNoYW5nZWQpIHJldHVybjtcbiAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICBoYVN0YXRlTGFiZWxCYWRnZS5wcm90b3R5cGUuc3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24gdXBkYXRlKHN0YXRlT2JqKSB7XG4gICAgICAgIC8vIFRPRE86IENhbGwgd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0XG4gICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzcy50aGVtZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzcy5fdGhlbWVXYWl0ZXJzID0gdGhpcy5oYXNzLl90aGVtZVdhaXRlcnMgfHwgW107XG4gICAgICAgICAgICB0aGlzLmhhc3MuX3RoZW1lV2FpdGVycy5wdXNoKHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LFxuICAgICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lIHx8ICdkZWZhdWx0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKCk7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAvLyBBZGRlZCBvbiAxOS4xLjIwMThcbiAgICAgICAgICB0aGlzLnN0YXJ0SW50ZXJ2YWwoc3RhdGVPYmopO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxTdGF0ZUJhZGdlKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdzdGF0ZS1iYWRnZScpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnc3RhdGUtYmFkZ2UnKTtcbiAgICAgIGlmICghc3RhdGVCYWRnZSkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXRlQmFkZ2UucHJvdG90eXBlLl91cGRhdGVJY29uQXBwZWFyYW5jZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZUljb25BcHBlYXJhbmNlID0gc3RhdGVCYWRnZS5wcm90b3R5cGUuX3VwZGF0ZUljb25BcHBlYXJhbmNlO1xuICAgICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgICBzdGF0ZUJhZGdlLnByb3RvdHlwZS5fdXBkYXRlSWNvbkFwcGVhcmFuY2UgPSBmdW5jdGlvbiBjdXN0b21VcGRhdGVJY29uQXBwZWFyYW5jZShzdGF0ZU9iaikge1xuICAgICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IgJiYgIXN0YXRlT2JqLmF0dHJpYnV0ZXMuZW50aXR5X3BpY3R1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJyc7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuJC5pY29uLnN0eWxlLCB7XG4gICAgICAgICAgICAgIGNvbG9yOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IsXG4gICAgICAgICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZ2luYWxVcGRhdGVJY29uQXBwZWFyYW5jZS5jYWxsKHRoaXMsIHN0YXRlT2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlQmFkZ2UucHJvdG90eXBlLnVwZGF0ZWQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVcGRhdGVkID0gc3RhdGVCYWRnZS5wcm90b3R5cGUudXBkYXRlZDtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgc3RhdGVCYWRnZS5wcm90b3R5cGUudXBkYXRlZCA9IGZ1bmN0aW9uIGN1c3RvbVVwZGF0ZWQoY2hhbmdlZFByb3BzKSB7XG4gICAgICAgICAgaWYgKCFjaGFuZ2VkUHJvcHMuaGFzKCdzdGF0ZU9iaicpKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgeyBzdGF0ZU9iaiB9ID0gdGhpcztcbiAgICAgICAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5pY29uX2NvbG9yICYmICFzdGF0ZU9iai5hdHRyaWJ1dGVzLmVudGl0eV9waWN0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9pY29uLnN0eWxlLCB7XG4gICAgICAgICAgICAgIGNvbG9yOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IsXG4gICAgICAgICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZ2luYWxVcGRhdGVkLmNhbGwodGhpcywgY2hhbmdlZFByb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgaW5zdGFsbEhhQXR0cmlidXRlcygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaGEtYXR0cmlidXRlcycpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFBdHRyaWJ1dGVzID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdoYS1hdHRyaWJ1dGVzJyk7XG4gICAgICBpZiAoIWhhQXR0cmlidXRlcyB8fCAhaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5IHx8XG4gICAgICAgICAhd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsKSByZXR1cm47XG4gICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5ID1cbiAgICAgICAgZnVuY3Rpb24gY3VzdG9tQ29tcHV0ZUZpbHRlcnNBcnJheShleHRyYUZpbHRlcnMpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMpLmNvbmNhdChcbiAgICAgICAgICAgIGV4dHJhRmlsdGVycyA/IGV4dHJhRmlsdGVycy5zcGxpdCgnLCcpIDogW10pO1xuICAgICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxIYUZvcm1DdXN0b21pemUoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLWZvcm0tY3VzdG9taXplJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYUZvcm1DdXN0b21pemUgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hhLWZvcm0tY3VzdG9taXplJyk7XG4gICAgICBpZiAoIWhhRm9ybUN1c3RvbWl6ZSkge1xuICAgICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEwMG1zLlxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSwgMTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHdpbmRvdy5jdXN0b21VSS5oYUZvcm1DdXN0b21pemVJbml0RG9uZSkgcmV0dXJuO1xuICAgICAgd2luZG93LmN1c3RvbVVJLmhhRm9ybUN1c3RvbWl6ZUluaXREb25lID0gdHJ1ZTtcblxuICAgICAgaWYgKCF3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwpIHJldHVybjtcbiAgICAgIGlmIChoYUZvcm1DdXN0b21pemUucHJvdG90eXBlLl9jb21wdXRlU2luZ2xlQXR0cmlidXRlKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUgPVxuICAgICAgICAgIGZ1bmN0aW9uIGN1c3RvbUNvbXB1dGVTaW5nbGVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFU1trZXldXG4gICAgICAgICAgICAgICAgfHwgeyB0eXBlOiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuVU5LTk9XTl9UWVBFIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdE9wZW5PYmplY3Qoa2V5LCBjb25maWcudHlwZSA9PT0gJ2pzb24nID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogdmFsdWUsIHNlY29uZGFyeSwgY29uZmlnKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMpIHtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgaGFGb3JtQ3VzdG9taXplLnByb3RvdHlwZS5nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyA9XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMoXG4gICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZXMsIGdsb2JhbEF0dHJpYnV0ZXMsIGV4aXN0aW5nQXR0cmlidXRlcywgbmV3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga25vd25LZXlzID1cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25mID0gd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmYgJiYgKCFjb25mLmRvbWFpbnMgfHwgIXRoaXMuZW50aXR5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYuZG9tYWlucy5pbmNsdWRlcyhjb21wdXRlU3RhdGVEb21haW4odGhpcy5lbnRpdHkpKSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcih0aGlzLmZpbHRlckZyb21BdHRyaWJ1dGVzKGxvY2FsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZ2xvYmFsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZXhpc3RpbmdBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJGcm9tQXR0cmlidXRlcyhuZXdBdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICByZXR1cm4ga25vd25LZXlzLnNvcnQoKS5jb25jYXQoJ090aGVyJyk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsQ2xhc3NIb29rcygpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmNsYXNzSW5pdERvbmUpIHJldHVybjtcbiAgICB3aW5kb3cuY3VzdG9tVUkuY2xhc3NJbml0RG9uZSA9IHRydWU7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxQYXJ0aWFsQ2FyZHMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbFN0YXRlc0hvb2soKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhU3RhdGVMYWJlbEJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxTdGF0ZUJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUF0dHJpYnV0ZXMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NlbmUnKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NyaXB0Jyk7XG4gIH0sXG5cbiAgaW5pdCgpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmluaXREb25lKSByZXR1cm47XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxDbGFzc0hvb2tzKCk7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBpZiAoIW1haW4uaGFzcyB8fCAhbWFpbi5oYXNzLnN0YXRlcykge1xuICAgICAgLy8gQ29ubmVjdGlvbiB3YXNuJ3QgbWFkZSB5ZXQuIFRyeSBpbiAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHdpbmRvdy5jdXN0b21VSS5pbml0LCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LmN1c3RvbVVJLmluaXREb25lID0gdHJ1ZTtcblxuICAgIHdpbmRvdy5jdXN0b21VSS51c2VDdXN0b21pemVyKCk7XG5cbiAgICB3aW5kb3cuY3VzdG9tVUkucnVuSG9va3MoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9jYXRpb24tY2hhbmdlZCcsIHdpbmRvdy5zZXRUaW1lb3V0LmJpbmQobnVsbCwgd2luZG93LmN1c3RvbVVJLnJ1bkhvb2tzLCAxMDApKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5sb2coYExvYWRlZCBDdXN0b21VSSAke1ZFUlNJT059YCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKCF3aW5kb3cuQ1VTVE9NX1VJX0xJU1QpIHtcbiAgICAgIHdpbmRvdy5DVVNUT01fVUlfTElTVCA9IFtdO1xuICAgIH1cbiAgICB3aW5kb3cuQ1VTVE9NX1VJX0xJU1QucHVzaCh7XG4gICAgICBuYW1lOiAnQ3VzdG9tVUknLFxuICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgIHVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXktZ2l0L2hvbWUtYXNzaXN0YW50LWN1c3RvbS11aScsXG4gICAgfSk7XG4gIH0sXG5cbiAgcnVuSG9va3MoKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLnVwZGF0ZUNvbmZpZ1BhbmVsKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUZvcm1DdXN0b21pemUoKTtcbiAgfSxcblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hhLWRldmljZS1uYW1lJykgfHwgJyc7XG4gIH0sXG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoYS1kZXZpY2UtbmFtZScsIG5hbWUgfHwgJycpO1xuICB9LFxuXG4gIGNvbXB1dGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgaGFzcywgZW50aXRpZXMsIGVudGl0eSwgYXR0cmlidXRlcywgYXR0cmlidXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9ICh0ZW1wbGF0ZS5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSA/IHRlbXBsYXRlIDogYHJldHVybiBcXGAke3RlbXBsYXRlfVxcYDtgO1xuICAgIHRyeSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYyAqL1xuICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcbiAgICAgICAgJ2hhc3MnLCAnZW50aXRpZXMnLCAnZW50aXR5JywgJ2F0dHJpYnV0ZXMnLCAnYXR0cmlidXRlJywgJ3N0YXRlJywgZnVuY3Rpb25Cb2R5KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3LWZ1bmMgKi9cbiAgICAgIHJldHVybiBmdW5jKGhhc3MsIGVudGl0aWVzLCBlbnRpdHksIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgc3RhdGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIGlmICgoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB8fCBlIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2UubmFtZX06ICR7ZS5tZXNzYWdlfSBpbiB0ZW1wbGF0ZSAke2Z1bmN0aW9uQm9keX1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9LFxufTtcbndpbmRvdy5jdXN0b21VSS5pbml0KCk7XG4iLCJleHBvcnQgZGVmYXVsdCAnMjAxOTAzMjQnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/scripts-dbg.js b/scripts-dbg.js index f981666..5da2e6b 100644 --- a/scripts-dbg.js +++ b/scripts-dbg.js @@ -1099,7 +1099,7 @@ class HaConfigCustomUi extends Object(_mixins_events_mixin_js__WEBPACK_IMPORTED_
Custom UI settings
@@ -2534,7 +2534,7 @@ window.customUI = window.customUI || { } }); } - } else { + } else if (haPanelConfig.shadowRoot) { const root = haPanelConfig.shadowRoot || haPanelConfig; if (root.lastElementChild.tagName !== 'HA-CONFIG-CUSTOM-UI') { @@ -2544,6 +2544,17 @@ window.customUI = window.customUI || { const visible = window.location.pathname.startsWith('/config/customui'); root.lastElementChild.style.display = visible ? '' : 'none'; + } else if (haPanelConfig.routerOptions && haPanelConfig.routerOptions.routes) { + if (!haPanelConfig.routerOptions.routes.customui) { + haPanelConfig.routerOptions.routes.customui = { + tag: 'ha-config-custom-ui', + load: () => Promise.resolve() + }; // CustomUI panel is the entrypoint, so we need to reload the page. + + if (window.location.pathname.startsWith('/config/customui')) { + haPanelConfig.update(new Map([['route', undefined]])); + } + } } }, @@ -2679,20 +2690,42 @@ window.customUI = window.customUI || { installStateBadge() { customElements.whenDefined('state-badge').then(() => { const stateBadge = customElements.get('state-badge'); - if (!stateBadge || !stateBadge.prototype._updateIconAppearance) return; - const originalUpdateIconAppearance = stateBadge.prototype._updateIconAppearance; // Use named function to preserve 'this'. - - stateBadge.prototype._updateIconAppearance = function customUpdateIconAppearance(stateObj) { - if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { - this.style.backgroundImage = ''; - Object.assign(this.$.icon.style, { - color: stateObj.attributes.icon_color, - filter: '' - }); - } else { - originalUpdateIconAppearance.call(this, stateObj); - } - }; + if (!stateBadge) return; + + if (stateBadge.prototype._updateIconAppearance) { + const originalUpdateIconAppearance = stateBadge.prototype._updateIconAppearance; // Use named function to preserve 'this'. + + stateBadge.prototype._updateIconAppearance = function customUpdateIconAppearance(stateObj) { + if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { + this.style.backgroundImage = ''; + Object.assign(this.$.icon.style, { + color: stateObj.attributes.icon_color, + filter: '' + }); + } else { + originalUpdateIconAppearance.call(this, stateObj); + } + }; + } else if (stateBadge.prototype.updated) { + const originalUpdated = stateBadge.prototype.updated; // Use named function to preserve 'this'. + + stateBadge.prototype.updated = function customUpdated(changedProps) { + if (!changedProps.has('stateObj')) return; + const { + stateObj + } = this; + + if (stateObj.attributes.icon_color && !stateObj.attributes.entity_picture) { + this.style.backgroundImage = ''; + Object.assign(this._icon.style, { + color: stateObj.attributes.icon_color, + filter: '' + }); + } else { + originalUpdated.call(this, changedProps); + } + }; + } }); }, @@ -2838,9 +2871,9 @@ window.customUI.init(); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ('20190113'); +/* harmony default export */ __webpack_exports__["default"] = ('20190324'); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9keW5hbWljX2NvbnRlbnRfdXBkYXRlci5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX2RvbWFpbi50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX3N0YXRlLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfc3RhdGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2dldF9ncm91cF9lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9nZXRfdmlld19lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvc3VwcG9ydHMtZmVhdHVyZS50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvdXRpbC9oYXNzLWF0dHJpYnV0ZXMtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvYm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2N1aS1iYXNlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2R5bmFtaWMtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvZHluYW1pYy13aXRoLWV4dHJhLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS1jb25maWctY3VzdG9tLXVpLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS10aGVtZWQtc2xpZGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9zdGF0ZS1jYXJkLWN1c3RvbS11aS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRoLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWl4aW5zL2V2ZW50cy1taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaGFzcy1hdHRyaWJ1dGUtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiREVGQVVMVF9ET01BSU5fSUNPTiIsIkRFRkFVTFRfUEFORUwiLCJET01BSU5TX1dJVEhfQ0FSRCIsIkRPTUFJTlNfV0lUSF9NT1JFX0lORk8iLCJET01BSU5TX0hJREVfTU9SRV9JTkZPIiwiRE9NQUlOU19NT1JFX0lORk9fTk9fSElTVE9SWSIsIlNUQVRFU19PRkYiLCJET01BSU5TX1RPR0dMRSIsIlNldCIsIlVOSVRfQyIsIlVOSVRfRiIsIkRFRkFVTFRfVklFV19FTlRJVFlfSUQiLCJhcHBseVRoZW1lc09uRWxlbWVudCIsImVsZW1lbnQiLCJ0aGVtZXMiLCJsb2NhbFRoZW1lIiwidXBkYXRlTWV0YSIsIl90aGVtZXMiLCJ0aGVtZU5hbWUiLCJkZWZhdWx0X3RoZW1lIiwic3R5bGVzIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbWUiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByZWZpeGVkS2V5IiwidXBkYXRlU3R5bGVzIiwid2luZG93IiwiU2hhZHlDU1MiLCJzdHlsZVN1YnRyZWUiLCJtZXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiaGFzQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwidGhlbWVDb2xvciIsImR5bmFtaWNDb250ZW50VXBkYXRlciIsInJvb3QiLCJuZXdFbGVtZW50VGFnIiwiYXR0cmlidXRlcyIsInJvb3RFbCIsImN1c3RvbUVsIiwibGFzdENoaWxkIiwidGFnTmFtZSIsInJlbW92ZUNoaWxkIiwiY3JlYXRlRWxlbWVudCIsInRvTG93ZXJDYXNlIiwic2V0UHJvcGVydGllcyIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsImNhblRvZ2dsZURvbWFpbiIsImhhc3MiLCJkb21haW4iLCJzZXJ2aWNlcyIsImNhblRvZ2dsZVN0YXRlIiwic3RhdGVPYmoiLCJzdGF0ZSIsImNvbXB1dGVEb21haW4iLCJlbnRpdHlJZCIsInN1YnN0ciIsImluZGV4T2YiLCJjb21wdXRlU3RhdGVEb21haW4iLCJlbnRpdHlfaWQiLCJnZXRHcm91cEVudGl0aWVzIiwiZW50aXRpZXMiLCJncm91cCIsInJlc3VsdCIsImVudGl0eSIsImdldFZpZXdFbnRpdGllcyIsInZpZXciLCJ2aWV3RW50aXRpZXMiLCJoaWRkZW4iLCJncm91cEVudGl0aWVzIiwiZ3JFbnRpdHlJZCIsImdyRW50aXR5Iiwic3RhdGVDYXJkVHlwZSIsImluY2x1ZGVzIiwiY29udHJvbCIsInN1cHBvcnRzRmVhdHVyZSIsImZlYXR1cmUiLCJzdXBwb3J0ZWRfZmVhdHVyZXMiLCJoYXNzQXR0cmlidXRlVXRpbCIsIkRPTUFJTl9ERVZJQ0VfQ0xBU1MiLCJiaW5hcnlfc2Vuc29yIiwiY292ZXIiLCJzZW5zb3IiLCJVTktOT1dOX1RZUEUiLCJBRERfVFlQRSIsIlRZUEVfVE9fVEFHIiwic3RyaW5nIiwianNvbiIsImljb24iLCJib29sZWFuIiwiYXJyYXkiLCJMT0dJQ19TVEFURV9BVFRSSUJVVEVTIiwiZW50aXR5X3BpY3R1cmUiLCJ1bmRlZmluZWQiLCJmcmllbmRseV9uYW1lIiwidHlwZSIsImRlc2NyaXB0aW9uIiwiZW11bGF0ZWRfaHVlIiwiZG9tYWlucyIsImVtdWxhdGVkX2h1ZV9uYW1lIiwiaGFhc2thX2hpZGRlbiIsImhhYXNrYV9uYW1lIiwiaG9tZWJyaWRnZV9oaWRkZW4iLCJob21lYnJpZGdlX25hbWUiLCJhdHRyaWJ1dGlvbiIsImN1c3RvbV91aV9tb3JlX2luZm8iLCJjdXN0b21fdWlfc3RhdGVfY2FyZCIsImRldmljZV9jbGFzcyIsIm9wdGlvbnMiLCJhc3N1bWVkX3N0YXRlIiwiaW5pdGlhbF9zdGF0ZSIsInVuaXRfb2ZfbWVhc3VyZW1lbnQiLCJKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5IiwicHJvcCIsIkxpdGVyYWxTdHJpbmciLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwidG9TdHJpbmciLCJsaXRlcmFsVmFsdWUiLCJFcnJvciIsImh0bWxWYWx1ZSIsIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJodG1sIiwic3RyaW5ncyIsInZhbHVlcyIsInRlbXBsYXRlIiwicmVkdWNlIiwiYWNjIiwidiIsImlkeCIsImh0bWxMaXRlcmFsIiwiQ3VpQmFzZUVsZW1lbnQiLCJQb2x5bWVyIiwiRWxlbWVudCIsInByb3BlcnRpZXMiLCJpbkRpYWxvZyIsIkJvb2xlYW4iLCJjb250cm9sRWxlbWVudCIsIlN0cmluZyIsImV4dHJhIiwiQXJyYXkiLCJjb21wdXRlZCIsImNvbXB1dGVFeHRyYSIsImV4dHJhcyIsImV4dHJhX2RhdGFfdGVtcGxhdGUiLCJpc0FycmF5IiwibWFwIiwiY3VzdG9tVUkiLCJjb21wdXRlVGVtcGxhdGUiLCJzdGF0ZXMiLCJmaWx0ZXIiLCJzaG93TGFzdENoYW5nZWQiLCJsZW5ndGgiLCJzaG93X2xhc3RfY2hhbmdlZCIsImhhc0V4dHJhIiwiRHluYW1pY0VsZW1lbnQiLCJlbGVtZW50TmFtZSIsIm9ic2VydmVycyIsIm9ic2VydmVyRnVuYyIsInRvVXBwZXJDYXNlIiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLCJ3aGVuRGVmaW5lZCIsInRoZW4iLCJEeW5hbWljV2l0aEV4dHJhIiwiZ2V0IiwiZXh0cmFPYmoiLCJfYXR0YWNoZWQiLCJleHRyYU9ialZpc2libGUiLCJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiX2lzQXR0YWNoZWQiLCJhdHRhY2hlZCIsImV4dHJhX2JhZGdlIiwiZXh0cmFCYWRnZXMiLCJleHRyYUJhZGdlIiwibWF5YmVDaGFuZ2VPYmplY3QiLCJhdHRyaWJ1dGUiLCJ1bml0IiwiYmxhY2tsaXN0IiwiYmxhY2tsaXN0X3N0YXRlcyIsInNvbWUiLCJSZWdFeHAiLCJ0ZXN0IiwiX2VudGl0eURpc3BsYXkiLCJjb21wdXRlRXh0cmFWaXNpYmxlIiwiZXh0cmFDbGFzcyIsIl9zaG93Q29udHJvbCIsImhpZGVfY29udHJvbCIsImNvbXB1dGVTdGF0ZURpc3BsYXkiLCJoYUxvY2FsaXplIiwibG9jYWxpemUiLCJpc0NvbmZpcm1Db250cm9scyIsImNvbmZpcm1fY29udHJvbHMiLCJjb25maXJtX2NvbnRyb2xzX3Nob3dfbG9jayIsImNsaWNrSGFuZGxlciIsImUiLCJzdHlsZSIsInBvaW50ZXJFdmVudHMiLCJsb2NrIiwib3BhY2l0eSIsInNldFRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJhcHBseVRoZW1lcyIsImV4dHJhRG9tQ2hhbmdlZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtIiwiSGFDb25maWdDdXN0b21VaSIsImlzV2lkZSIsIm5hbWUiLCJvYnNlcnZlciIsInJlYWR5IiwiZ2V0TmFtZSIsIm5hbWVDaGFuZ2VkIiwic2V0TmFtZSIsIl9iYWNrSGFuZGxlciIsImhpc3RvcnkiLCJiYWNrIiwiZmlyZSIsIkhhVGhlbWVkU2xpZGVyIiwiZGlzYWJsZU9mZldoZW5NaW4iLCJfY29tcHV0ZUF0dHJpYnV0ZSIsImNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJtaW4iLCJOdW1iZXIiLCJtYXgiLCJwaW4iLCJpc09uIiwibm90aWZ5IiwiX3RoZW1lZE1pbiIsIl9lbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJhdHRyIiwiZGVmIiwiY29tcHV0ZUNsYXNzIiwidGhlbWVkTWluIiwidmFsdWVDaGFuZ2VkIiwiZXYiLCJ0YXJnZXQiLCJTSE9XX0xBU1RfQ0hBTkdFRF9CTEFDS0xJU1RFRF9DQVJEUyIsIkRPTUFJTl9UT19TTElERVJfU1VQUE9SVCIsImxpZ2h0IiwiY2xpbWF0ZSIsIlRZUEVfVE9fQ09OVFJPTCIsInRvZ2dsZSIsImRpc3BsYXkiLCJTdGF0ZUNhcmRDdXN0b21VaSIsImNvbnRhaW5lciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiX2NvbnRhaW5lciIsInNldFByb3BlcnR5IiwiaW5wdXRDaGFuZ2VkIiwibWFyZ2luIiwicGFkZGluZyIsImJhZGdlTW9kZSIsImlkIiwiY29uc29sZSIsIndhcm4iLCJiYWRnZXNfbGlzdCIsInB1c2giLCJwYXJhbXMiLCJ3aWR0aCIsImZvbnRTaXplIiwiY2xlYW5CYWRnZVN0eWxlIiwibW9kaWZpZWRPYmoiLCJ0aGVtZVRhcmdldCIsIm1heWJlSGlkZUVudGl0eSIsInNsaWRlckVsaWdpYmxlXyIsIm9iaiIsInN0YXRlX2NhcmRfbW9kZSIsInJlZ3VsYXJNb2RlXyIsIm9yaWdpbmFsU3RhdGVDYXJkVHlwZSIsImN1c3RvbVN0YXRlQ2FyZFR5cGUiLCJzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlIiwic3RhdGVfY2FyZF9jdXN0b21fdWlfc2Vjb25kYXJ5Iiwic2VydmljZU1pbiIsInNlcnZpY2VNYXgiLCJ2YWx1ZU5hbWUiLCJzZXRWYWx1ZU5hbWUiLCJuYW1lT24iLCJtaW5fdGVtcCIsIm1heF90ZW1wIiwiY29udHJvbF9lbGVtZW50IiwiU3RhdGVDYXJkV2l0aFNsaWRlciIsInNsaWRlclZhbHVlIiwibW9kZSIsInN0cmV0Y2hTbGlkZXIiLCJicmVha1NsaWRlciIsImhpZGVTbGlkZXIiLCJsaW5lVG9vTG9uZyIsIm1pbkxpbmVCcmVhayIsIm1heExpbmVCcmVhayIsInNob3dTbGlkZXIiLCJfb25Jcm9uUmVzaXplIiwiYmluZCIsIl9pc0Nvbm5lY3RlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfd2FpdEZvckxheW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfc2V0TW9kZSIsIl9mcmFtZUlkIiwicmVhZHlUb0NvbXB1dGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwcmV2QnJlYWtTbGlkZXIiLCJwcmV2SGlkZVNsaWRlciIsIiQiLCJjb250YWluZXJXaWR0aCIsImNsaWVudFdpZHRoIiwiY29udGFpbmVySGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwic3RhdGVIZWlnaHQiLCJfY29tcHV0ZVdyYXBDbGFzcyIsIl9zaG93U2xpZGVyIiwic2xpZGVyQ2hhbmdlZCIsInBhcnNlSW50IiwicGFyYW0iLCJpc05hTiIsInBhdGgiLCJjb21wb3NlZFBhdGgiLCJjYWxsU2VydmljZSIsInN0YXRlT2JqQ2hhbmdlZCIsInN0cmV0Y2hfc2xpZGVyIiwiU3RhdGVDYXJkV2l0aG91dFNsaWRlciIsInN1cGVyQ2xhc3MiLCJFdmVudHNNaXhpbiIsImRldGFpbCIsImV2ZW50IiwiRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNvbXBvc2VkIiwibm9kZSIsImRpc3BhdGNoRXZlbnQiLCJTVVBQT1JURURfU0xJREVSX01PREVTIiwiY3VzdG9tVWlBdHRyaWJ1dGVzIiwiZGV2aWNlIiwidGVtcGxhdGVzIiwiX3N0YXRlRGlzcGxheSIsImNvbmNhdCIsInNsaWRlcl90aGVtZSIsImhpZGVfaW5fZGVmYXVsdF92aWV3IiwiaWNvbl9jb2xvciIsImRvbUhvc3QiLCJnZXRSb290Tm9kZSIsIkRvY3VtZW50RnJhZ21lbnQiLCJob3N0IiwibGlnaHRPclNoYWRvdyIsInNlbGVjdG9yIiwic2hhZG93Um9vdCIsImdldEVsZW1lbnRIaWVyYXJjaHkiLCJoaWVyYXJjaHkiLCJzaGlmdCIsImdldENvbnRleHQiLCJfY29udGV4dCIsImdyb3VwRW50aXR5IiwicmV2ZXJzZSIsImZpbmRNYXRjaCIsImZpbmQiLCJvcHRpb24iLCJtYXRjaCIsIm1heWJlQ2hhbmdlT2JqZWN0QnlEZXZpY2UiLCJhcHBseUF0dHJpYnV0ZXMiLCJtYXliZUNoYW5nZU9iamVjdEJ5R3JvdXAiLCJjb250ZXh0IiwiYyIsIl9zZXRLZWVwIiwiX2N1aV9rZWVwIiwibWF5YmVBcHBseVRlbXBsYXRlQXR0cmlidXRlcyIsIm5ld0F0dHJpYnV0ZXMiLCJoYXNHbG9iYWwiLCJoYXNDaGFuZ2VzIiwidW50ZW1wbGF0ZWRfYXR0cmlidXRlcyIsInVudGVtcGxhdGVkX3N0YXRlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW50ZW1wbGF0ZWRfc3RhdGVEaXNwbGF5IiwibWF5YmVBcHBseVRlbXBsYXRlcyIsIm5ld1Jlc3VsdCIsImNoZWNrQXR0cmlidXRlcyIsImxhc3RfY2hhbmdlZCIsImFsbG93SGlkZGVuIiwiZml4R3JvdXBUaXRsZXMiLCJob21lQXNzaXN0YW50TWFpbiIsImhhQ2FyZHMiLCJtYWluIiwiY2FyZHMiLCJjYXJkIiwibmFtZUVsZW0iLCJ0ZXh0Q29udGVudCIsImNvbnRyb2xDb2x1bW5zIiwiY29sdW1ucyIsInBhcnRpYWxDYXJkcyIsImYiLCJoYW5kbGVXaW5kb3dDaGFuZ2UiLCJfdXBkYXRlQ29sdW1ucyIsIm1xbHMiLCJtcWwiLCJyZW1vdmVMaXN0ZW5lciIsIm1hdGNoTWVkaWEiLCJhZGRMaXN0ZW5lciIsInVzZUN1c3RvbWl6ZXIiLCJjdXN0b21pemVyIiwiaGlkZV9hdHRyaWJ1dGVzIiwidXBkYXRlQ29uZmlnUGFuZWwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwic3RhcnRzV2l0aCIsImhhUGFuZWxDb25maWciLCJoYUNvbmZpZ05hdmlnYXRpb24iLCJjdWlQYXRjaCIsIl9vcmlnaW5hbENvbXB1dGVMb2FkZWQiLCJfY29tcHV0ZUxvYWRlZCIsIl9vcmlnaW5hbENvbXB1dGVDYXB0aW9uIiwiX2NvbXB1dGVDYXB0aW9uIiwiX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uIiwiX2NvbXB1dGVEZXNjcmlwdGlvbiIsInBhZ2UiLCJwYWdlcyIsImNvbmYiLCJjYXB0aW9uIiwibG9hZGVkIiwiZ2V0SGFDb25maWdDdXN0b21VaSIsImhhQ29uZmlnQ3VzdG9tVWkiLCJpcm9uUGFnZXMiLCJsYXN0RWxlbWVudENoaWxkIiwic2VsZWN0IiwidmlzaWJsZSIsImluc3RhbGxTdGF0ZXNIb29rIiwiaG9tZUFzc2lzdGFudCIsIl91cGRhdGVIYXNzIiwib3JpZ2luYWxVcGRhdGUiLCJ1cGRhdGUiLCJuZXdFbnRpdHkiLCJfdGhlbWVXYWl0ZXJzIiwid2FpdGVyIiwic3RhdGVDaGFuZ2VkIiwiaW5zdGFsbFBhcnRpYWxDYXJkcyIsIl9kZWZhdWx0Vmlld0ZpbHRlciIsImV4Y2x1ZGVzIiwiZXhjbHVkZUVudGl0eUlkIiwiaW5zdGFsbEFjdGlvbk5hbWUiLCJrbGFzcyIsImRlZmluZVByb3BlcnR5IiwiY3VzdG9tTG9jYWxpemUiLCJhY3Rpb25fbmFtZSIsIl9fZGF0YSIsInNldCIsImluc3RhbGxIYVN0YXRlTGFiZWxCYWRnZSIsImhhU3RhdGVMYWJlbEJhZGdlIiwic3RhcnRJbnRlcnZhbCIsImluc3RhbGxTdGF0ZUJhZGdlIiwic3RhdGVCYWRnZSIsIl91cGRhdGVJY29uQXBwZWFyYW5jZSIsIm9yaWdpbmFsVXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJjdXN0b21VcGRhdGVJY29uQXBwZWFyYW5jZSIsImJhY2tncm91bmRJbWFnZSIsImNvbG9yIiwiaW5zdGFsbEhhQXR0cmlidXRlcyIsImhhQXR0cmlidXRlcyIsImNvbXB1dGVGaWx0ZXJzQXJyYXkiLCJjdXN0b21Db21wdXRlRmlsdGVyc0FycmF5IiwiZXh0cmFGaWx0ZXJzIiwic3BsaXQiLCJpbnN0YWxsSGFGb3JtQ3VzdG9taXplIiwiaGFGb3JtQ3VzdG9taXplIiwiaGFGb3JtQ3VzdG9taXplSW5pdERvbmUiLCJfY29tcHV0ZVNpbmdsZUF0dHJpYnV0ZSIsImN1c3RvbUNvbXB1dGVTaW5nbGVBdHRyaWJ1dGUiLCJzZWNvbmRhcnkiLCJjb25maWciLCJfaW5pdE9wZW5PYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMiLCJjdXN0b21nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyIsImxvY2FsQXR0cmlidXRlcyIsImdsb2JhbEF0dHJpYnV0ZXMiLCJleGlzdGluZ0F0dHJpYnV0ZXMiLCJrbm93bktleXMiLCJmaWx0ZXJGcm9tQXR0cmlidXRlcyIsInNvcnQiLCJpbnN0YWxsQ2xhc3NIb29rcyIsImNsYXNzSW5pdERvbmUiLCJpbml0IiwiaW5pdERvbmUiLCJydW5Ib29rcyIsImxvZyIsIkNVU1RPTV9VSV9MSVNUIiwidmVyc2lvbiIsInVybCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzZXRJdGVtIiwiZnVuY3Rpb25Cb2R5IiwiZnVuYyIsIkZ1bmN0aW9uIiwiU3ludGF4RXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNPLE1BQU1BLG1CQUFtQixHQUFHLGVBQTVCO0FBRVA7O0FBQ08sTUFBTUMsYUFBYSxHQUFHLFFBQXRCO0FBRVA7O0FBQ08sTUFBTUMsaUJBQWlCLEdBQUcsQ0FDL0IsU0FEK0IsRUFFL0IsT0FGK0IsRUFHL0IsY0FIK0IsRUFJL0IsY0FKK0IsRUFLL0IsY0FMK0IsRUFNL0IsWUFOK0IsRUFPL0IsTUFQK0IsRUFRL0IsY0FSK0IsRUFTL0IsT0FUK0IsRUFVL0IsUUFWK0IsRUFXL0IsT0FYK0IsRUFZL0IsUUFaK0IsRUFhL0IsY0FiK0IsRUFjL0IsU0FkK0IsQ0FBMUI7QUFpQlA7O0FBQ08sTUFBTUMsc0JBQXNCLEdBQUcsQ0FDcEMscUJBRG9DLEVBRXBDLFlBRm9DLEVBR3BDLFFBSG9DLEVBSXBDLFNBSm9DLEVBS3BDLGNBTG9DLEVBTXBDLE9BTm9DLEVBT3BDLEtBUG9DLEVBUXBDLE9BUm9DLEVBU3BDLGVBVG9DLEVBVXBDLGdCQVZvQyxFQVdwQyxPQVhvQyxFQVlwQyxNQVpvQyxFQWFwQyxjQWJvQyxFQWNwQyxRQWRvQyxFQWVwQyxLQWZvQyxFQWdCcEMsU0FoQm9DLEVBaUJwQyxRQWpCb0MsRUFrQnBDLGNBbEJvQyxFQW1CcEMsU0FuQm9DLENBQS9CO0FBc0JQOztBQUNPLE1BQU1DLHNCQUFzQixHQUFHLENBQ3BDLGNBRG9DLEVBRXBDLGNBRm9DLEVBR3BDLFlBSG9DLEVBSXBDLE9BSm9DLEVBS3BDLFNBTG9DLENBQS9CO0FBUVA7O0FBQ08sTUFBTUMsNEJBQTRCLEdBQUcsQ0FDMUMsUUFEMEMsRUFFMUMsY0FGMEMsRUFHMUMsZUFIMEMsRUFJMUMsT0FKMEMsQ0FBckM7QUFPUDs7QUFDTyxNQUFNQyxVQUFVLEdBQUcsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixLQUFyQixDQUFuQjtBQUVQOztBQUNPLE1BQU1DLGNBQWMsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FDcEMsS0FEb0MsRUFFcEMsZUFGb0MsRUFHcEMsT0FIb0MsRUFJcEMsUUFKb0MsQ0FBUixDQUF2QjtBQU9QOztBQUNPLE1BQU1DLE1BQU0sR0FBRyxJQUFmO0FBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQWY7QUFFUDs7QUFDTyxNQUFNQyxzQkFBc0IsR0FBRyxvQkFBL0IsQzs7Ozs7Ozs7Ozs7OztBQ3RGUDtBQUFBOzs7Ozs7OztBQVFlLFNBQVNDLG9CQUFULENBQ2JDLE9BRGEsRUFFYkMsTUFGYSxFQUdiQyxVQUhhLEVBSWJDLFVBQVUsR0FBRyxLQUpBLEVBS2I7QUFDQSxNQUFJLENBQUNILE9BQU8sQ0FBQ0ksT0FBYixFQUFzQjtBQUNwQkosV0FBTyxDQUFDSSxPQUFSLEdBQWtCLEVBQWxCO0FBQ0Q7O0FBQ0QsTUFBSUMsU0FBUyxHQUFHSixNQUFNLENBQUNLLGFBQXZCOztBQUNBLE1BQUlKLFVBQVUsS0FBSyxTQUFmLElBQTZCQSxVQUFVLElBQUlELE1BQU0sQ0FBQ0EsTUFBUCxDQUFjQyxVQUFkLENBQS9DLEVBQTJFO0FBQ3pFRyxhQUFTLEdBQUdILFVBQVo7QUFDRDs7QUFDRCxRQUFNSyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JULE9BQU8sQ0FBQ0ksT0FBMUIsQ0FBZjs7QUFDQSxNQUFJQyxTQUFTLEtBQUssU0FBbEIsRUFBNkI7QUFDM0IsUUFBSUssS0FBSyxHQUFHVCxNQUFNLENBQUNBLE1BQVAsQ0FBY0ksU0FBZCxDQUFaO0FBQ0FHLFVBQU0sQ0FBQ0csSUFBUCxDQUFZRCxLQUFaLEVBQW1CRSxPQUFuQixDQUE0QkMsR0FBRCxJQUFTO0FBQ2xDLFVBQUlDLFdBQVcsR0FBRyxPQUFPRCxHQUF6QjtBQUNBYixhQUFPLENBQUNJLE9BQVIsQ0FBZ0JVLFdBQWhCLElBQStCLEVBQS9CO0FBQ0FQLFlBQU0sQ0FBQ08sV0FBRCxDQUFOLEdBQXNCSixLQUFLLENBQUNHLEdBQUQsQ0FBM0I7QUFDRCxLQUpEO0FBS0Q7O0FBQ0QsTUFBSWIsT0FBTyxDQUFDZSxZQUFaLEVBQTBCO0FBQ3hCZixXQUFPLENBQUNlLFlBQVIsQ0FBcUJSLE1BQXJCO0FBQ0QsR0FGRCxNQUVPLElBQUlTLE1BQU0sQ0FBQ0MsUUFBWCxFQUFxQjtBQUMxQjtBQUNBRCxVQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLFlBQWhCO0FBQTZCO0FBQTZCbEIsV0FBMUQsRUFBb0VPLE1BQXBFO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDSixVQUFMLEVBQWlCO0FBRWpCLFFBQU1nQixJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1Qix3QkFBdkIsQ0FBYjs7QUFDQSxNQUFJRixJQUFKLEVBQVU7QUFDUixRQUFJLENBQUNBLElBQUksQ0FBQ0csWUFBTCxDQUFrQixpQkFBbEIsQ0FBTCxFQUEyQztBQUN6Q0gsVUFBSSxDQUFDSSxZQUFMLENBQWtCLGlCQUFsQixFQUFxQ0osSUFBSSxDQUFDSyxZQUFMLENBQWtCLFNBQWxCLENBQXJDO0FBQ0Q7O0FBQ0QsVUFBTUMsVUFBVSxHQUNkbEIsTUFBTSxDQUFDLGlCQUFELENBQU4sSUFBNkJZLElBQUksQ0FBQ0ssWUFBTCxDQUFrQixpQkFBbEIsQ0FEL0I7QUFFQUwsUUFBSSxDQUFDSSxZQUFMLENBQWtCLFNBQWxCLEVBQTZCRSxVQUE3QjtBQUNEO0FBQ0YsQzs7Ozs7Ozs7Ozs7OztBQ2hERDtBQUFBOzs7O0FBSWUsU0FBU0MscUJBQVQsQ0FBK0JDLElBQS9CLEVBQXFDQyxhQUFyQyxFQUFvREMsVUFBcEQsRUFBZ0U7QUFDN0UsUUFBTUMsTUFBTSxHQUFHSCxJQUFmO0FBQ0EsTUFBSUksUUFBSjs7QUFFQSxNQUFJRCxNQUFNLENBQUNFLFNBQVAsSUFBb0JGLE1BQU0sQ0FBQ0UsU0FBUCxDQUFpQkMsT0FBakIsS0FBNkJMLGFBQXJELEVBQW9FO0FBQ2xFRyxZQUFRLEdBQUdELE1BQU0sQ0FBQ0UsU0FBbEI7QUFDRCxHQUZELE1BRU87QUFDTCxRQUFJRixNQUFNLENBQUNFLFNBQVgsRUFBc0I7QUFDcEJGLFlBQU0sQ0FBQ0ksV0FBUCxDQUFtQkosTUFBTSxDQUFDRSxTQUExQjtBQUNELEtBSEksQ0FJTDtBQUNBOzs7QUFDQUQsWUFBUSxHQUFHWCxRQUFRLENBQUNlLGFBQVQsQ0FBdUJQLGFBQWEsQ0FBQ1EsV0FBZCxFQUF2QixDQUFYO0FBQ0Q7O0FBRUQsTUFBSUwsUUFBUSxDQUFDTSxhQUFiLEVBQTRCO0FBQzFCTixZQUFRLENBQUNNLGFBQVQsQ0FBdUJSLFVBQXZCO0FBQ0QsR0FGRCxNQUVPO0FBQ0w7QUFDQTtBQUNBckIsVUFBTSxDQUFDRyxJQUFQLENBQVlrQixVQUFaLEVBQXdCakIsT0FBeEIsQ0FBaUNDLEdBQUQsSUFBUztBQUN2Q2tCLGNBQVEsQ0FBQ2xCLEdBQUQsQ0FBUixHQUFnQmdCLFVBQVUsQ0FBQ2hCLEdBQUQsQ0FBMUI7QUFDRCxLQUZEO0FBR0Q7O0FBRUQsTUFBSWtCLFFBQVEsQ0FBQ08sVUFBVCxLQUF3QixJQUE1QixFQUFrQztBQUNoQ1IsVUFBTSxDQUFDUyxXQUFQLENBQW1CUixRQUFuQjtBQUNEO0FBQ0YsQzs7Ozs7Ozs7Ozs7Ozs7QUM5QmMsU0FBU1MsZUFBVCxDQUF5QkMsSUFBekIsRUFBOENDLE1BQTlDLEVBQThEO0FBQzNFLFFBQU1DLFFBQVEsR0FBR0YsSUFBSSxDQUFDRSxRQUFMLENBQWNELE1BQWQsQ0FBakI7O0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7QUFDYixXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJRCxNQUFNLEtBQUssTUFBZixFQUF1QjtBQUNyQixXQUFPLFVBQVVDLFFBQWpCO0FBQ0Q7O0FBQ0QsTUFBSUQsTUFBTSxLQUFLLE9BQWYsRUFBd0I7QUFDdEIsV0FBTyxnQkFBZ0JDLFFBQXZCO0FBQ0Q7O0FBQ0QsU0FBTyxhQUFhQSxRQUFwQjtBQUNELEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEQ7QUFDQTtBQUVBO0FBRWUsU0FBU0MsY0FBVCxDQUNiSCxJQURhLEVBRWJJLFFBRmEsRUFHYjtBQUNBLFFBQU1ILE1BQU0sR0FBRyxxRUFBa0IsQ0FBQ0csUUFBRCxDQUFqQzs7QUFDQSxNQUFJSCxNQUFNLEtBQUssT0FBZixFQUF3QjtBQUN0QixXQUFPRyxRQUFRLENBQUNDLEtBQVQsS0FBbUIsSUFBbkIsSUFBMkJELFFBQVEsQ0FBQ0MsS0FBVCxLQUFtQixLQUFyRDtBQUNEOztBQUNELE1BQUlKLE1BQU0sS0FBSyxTQUFmLEVBQTBCO0FBQ3hCLFdBQU8seUVBQWUsQ0FBQ0csUUFBRCxFQUFXLElBQVgsQ0FBdEI7QUFDRDs7QUFFRCxTQUFPLGtFQUFlLENBQUNKLElBQUQsRUFBT0MsTUFBUCxDQUF0QjtBQUNELEM7Ozs7Ozs7Ozs7Ozs7O0FDbkJjLFNBQVNLLGFBQVQsQ0FBdUJDLFFBQXZCLEVBQWlEO0FBQzlELFNBQU9BLFFBQVEsQ0FBQ0MsTUFBVCxDQUFnQixDQUFoQixFQUFtQkQsUUFBUSxDQUFDRSxPQUFULENBQWlCLEdBQWpCLENBQW5CLENBQVA7QUFDRCxDOzs7Ozs7Ozs7Ozs7Ozs7QUNERDtBQUVlLFNBQVNDLGtCQUFULENBQTRCTixRQUE1QixFQUFrRDtBQUMvRCxTQUFPLCtEQUFhLENBQUNBLFFBQVEsQ0FBQ08sU0FBVixDQUFwQjtBQUNELEM7Ozs7Ozs7Ozs7Ozs7O0FDRmMsU0FBU0MsZ0JBQVQsQ0FDYkMsUUFEYSxFQUViQyxLQUZhLEVBR2I7QUFDQSxRQUFNQyxNQUFNLEdBQUcsRUFBZjtBQUVBRCxPQUFLLENBQUMxQixVQUFOLENBQWlCdUIsU0FBakIsQ0FBMkJ4QyxPQUEzQixDQUFvQ29DLFFBQUQsSUFBYztBQUMvQyxVQUFNUyxNQUFNLEdBQUdILFFBQVEsQ0FBQ04sUUFBRCxDQUF2Qjs7QUFFQSxRQUFJUyxNQUFKLEVBQVk7QUFDVkQsWUFBTSxDQUFDQyxNQUFNLENBQUNMLFNBQVIsQ0FBTixHQUEyQkssTUFBM0I7QUFDRDtBQUNGLEdBTkQ7QUFRQSxTQUFPRCxNQUFQO0FBQ0QsQzs7Ozs7Ozs7Ozs7Ozs7OztBQ2pCRDtBQUNBO0FBR0E7QUFDQTtBQUNlLFNBQVNFLGVBQVQsQ0FDYkosUUFEYSxFQUViSyxJQUZhLEVBR0M7QUFDZCxRQUFNQyxZQUFZLEdBQUcsRUFBckI7QUFFQUQsTUFBSSxDQUFDOUIsVUFBTCxDQUFnQnVCLFNBQWhCLENBQTBCeEMsT0FBMUIsQ0FBbUNvQyxRQUFELElBQWM7QUFDOUMsVUFBTVMsTUFBTSxHQUFHSCxRQUFRLENBQUNOLFFBQUQsQ0FBdkI7O0FBRUEsUUFBSVMsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQzVCLFVBQVAsQ0FBa0JnQyxNQUFqQyxFQUF5QztBQUN2Q0Qsa0JBQVksQ0FBQ0gsTUFBTSxDQUFDTCxTQUFSLENBQVosR0FBaUNLLE1BQWpDOztBQUVBLFVBQUksK0RBQWEsQ0FBQ0EsTUFBTSxDQUFDTCxTQUFSLENBQWIsS0FBb0MsT0FBeEMsRUFBaUQ7QUFDL0MsY0FBTVUsYUFBYSxHQUFHLG1FQUFnQixDQUFDUixRQUFELEVBQVdHLE1BQVgsQ0FBdEM7QUFFQWpELGNBQU0sQ0FBQ0csSUFBUCxDQUFZbUQsYUFBWixFQUEyQmxELE9BQTNCLENBQW9DbUQsVUFBRCxJQUFnQjtBQUNqRCxnQkFBTUMsUUFBUSxHQUFHRixhQUFhLENBQUNDLFVBQUQsQ0FBOUI7O0FBRUEsY0FBSSxDQUFDQyxRQUFRLENBQUNuQyxVQUFULENBQW9CZ0MsTUFBekIsRUFBaUM7QUFDL0JELHdCQUFZLENBQUNHLFVBQUQsQ0FBWixHQUEyQkMsUUFBM0I7QUFDRDtBQUNGLFNBTkQ7QUFPRDtBQUNGO0FBQ0YsR0FsQkQ7QUFvQkEsU0FBT0osWUFBUDtBQUNELEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakNEO0FBQ0E7QUFDQTtBQUdlLFNBQVNLLGFBQVQsQ0FDYnhCLElBRGEsRUFFYkksUUFGYSxFQUdiO0FBQ0EsTUFBSUEsUUFBUSxDQUFDQyxLQUFULEtBQW1CLGFBQXZCLEVBQXNDO0FBQ3BDLFdBQU8sU0FBUDtBQUNEOztBQUVELFFBQU1KLE1BQU0sR0FBRyxxRUFBa0IsQ0FBQ0csUUFBRCxDQUFqQzs7QUFFQSxNQUFJLHdEQUFpQixDQUFDcUIsUUFBbEIsQ0FBMkJ4QixNQUEzQixDQUFKLEVBQXdDO0FBQ3RDLFdBQU9BLE1BQVA7QUFDRDs7QUFDRCxNQUNFLGlFQUFjLENBQUNELElBQUQsRUFBT0ksUUFBUCxDQUFkLElBQ0FBLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0JzQyxPQUFwQixLQUFnQyxRQUZsQyxFQUdFO0FBQ0EsV0FBTyxRQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxTQUFQO0FBQ0QsQzs7Ozs7Ozs7Ozs7Ozs7QUN4Qk0sTUFBTUMsZUFBZSxHQUFHLENBQzdCdkIsUUFENkIsRUFFN0J3QixPQUY2QixLQUdqQjtBQUNaO0FBQ0EsU0FBTyxDQUFDeEIsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQnlDLGtCQUFwQixHQUEwQ0QsT0FBM0MsTUFBd0QsQ0FBL0Q7QUFDRCxDQU5NLEM7Ozs7Ozs7Ozs7OztBQ0ZQO0FBQUEsTUFBTUUsaUJBQWlCLEdBQUcsRUFBMUI7QUFFQUEsaUJBQWlCLENBQUNDLG1CQUFsQixHQUF3QztBQUN0Q0MsZUFBYSxFQUFFLENBQ2IsU0FEYSxFQUViLE1BRmEsRUFHYixjQUhhLEVBSWIsTUFKYSxFQUtiLGFBTGEsRUFNYixLQU5hLEVBT2IsTUFQYSxFQVFiLE9BUmEsRUFTYixNQVRhLEVBVWIsVUFWYSxFQVdiLFFBWGEsRUFZYixRQVphLEVBYWIsV0FiYSxFQWNiLFNBZGEsRUFlYixNQWZhLEVBZ0JiLE9BaEJhLEVBaUJiLFVBakJhLEVBa0JiLFNBbEJhLEVBbUJiLFFBbkJhLEVBb0JiLE9BcEJhLEVBcUJiLE9BckJhLEVBc0JiLFdBdEJhLEVBdUJiLFFBdkJhLENBRHVCO0FBMEJ0Q0MsT0FBSyxFQUFFLENBQUMsUUFBRCxDQTFCK0I7QUEyQnRDQyxRQUFNLEVBQUUsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixhQUF4QixFQUF1QyxhQUF2QyxFQUFzRCxVQUF0RDtBQTNCOEIsQ0FBeEM7QUE4QkFKLGlCQUFpQixDQUFDSyxZQUFsQixHQUFpQyxNQUFqQztBQUNBTCxpQkFBaUIsQ0FBQ00sUUFBbEIsR0FBNkIsV0FBN0I7QUFFQU4saUJBQWlCLENBQUNPLFdBQWxCLEdBQWdDO0FBQzlCQyxRQUFNLEVBQUUscUJBRHNCO0FBRTlCQyxNQUFJLEVBQUUscUJBRndCO0FBRzlCQyxNQUFJLEVBQUUsbUJBSHdCO0FBSTlCQyxTQUFPLEVBQUUsc0JBSnFCO0FBSzlCQyxPQUFLLEVBQUUsb0JBTHVCO0FBTTlCLGVBQWE7QUFOaUIsQ0FBaEMsQyxDQVNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBWixpQkFBaUIsQ0FBQ2Esc0JBQWxCLEdBQTJDYixpQkFBaUIsQ0FBQ2Esc0JBQWxCLElBQTRDO0FBQ3JGQyxnQkFBYyxFQUFFQyxTQURxRTtBQUVyRkMsZUFBYSxFQUFFO0FBQUVDLFFBQUksRUFBRSxRQUFSO0FBQWtCQyxlQUFXLEVBQUU7QUFBL0IsR0FGc0U7QUFHckZSLE1BQUksRUFBRTtBQUFFTyxRQUFJLEVBQUU7QUFBUixHQUgrRTtBQUlyRkUsY0FBWSxFQUFFO0FBQ1pGLFFBQUksRUFBRSxTQURNO0FBRVpHLFdBQU8sRUFBRSxDQUFDLGNBQUQ7QUFGRyxHQUp1RTtBQVFyRkMsbUJBQWlCLEVBQUU7QUFDakJKLFFBQUksRUFBRSxRQURXO0FBRWpCRyxXQUFPLEVBQUUsQ0FBQyxjQUFEO0FBRlEsR0FSa0U7QUFZckZFLGVBQWEsRUFBRVAsU0Fac0U7QUFhckZRLGFBQVcsRUFBRVIsU0Fid0U7QUFjckZTLG1CQUFpQixFQUFFO0FBQUVQLFFBQUksRUFBRTtBQUFSLEdBZGtFO0FBZXJGUSxpQkFBZSxFQUFFO0FBQUVSLFFBQUksRUFBRTtBQUFSLEdBZm9FO0FBZ0JyRmxCLG9CQUFrQixFQUFFZ0IsU0FoQmlFO0FBaUJyRlcsYUFBVyxFQUFFWCxTQWpCd0U7QUFrQnJGWSxxQkFBbUIsRUFBRTtBQUFFVixRQUFJLEVBQUU7QUFBUixHQWxCZ0U7QUFtQnJGVyxzQkFBb0IsRUFBRTtBQUFFWCxRQUFJLEVBQUU7QUFBUixHQW5CK0Q7QUFvQnJGWSxjQUFZLEVBQUU7QUFDWlosUUFBSSxFQUFFLE9BRE07QUFFWmEsV0FBTyxFQUFFOUIsaUJBQWlCLENBQUNDLG1CQUZmO0FBR1ppQixlQUFXLEVBQUUsY0FIRDtBQUlaRSxXQUFPLEVBQUUsQ0FBQyxlQUFELEVBQWtCLE9BQWxCLEVBQTJCLFFBQTNCO0FBSkcsR0FwQnVFO0FBMEJyRjlCLFFBQU0sRUFBRTtBQUFFMkIsUUFBSSxFQUFFLFNBQVI7QUFBbUJDLGVBQVcsRUFBRTtBQUFoQyxHQTFCNkU7QUEyQnJGYSxlQUFhLEVBQUU7QUFDYmQsUUFBSSxFQUFFLFNBRE87QUFFYkcsV0FBTyxFQUFFLENBQ1AsUUFETyxFQUVQLE9BRk8sRUFHUCxPQUhPLEVBSVAsU0FKTyxFQUtQLEtBTE8sRUFNUCxPQU5PLEVBT1AsY0FQTztBQUZJLEdBM0JzRTtBQXVDckZZLGVBQWEsRUFBRTtBQUNiZixRQUFJLEVBQUUsUUFETztBQUViRyxXQUFPLEVBQUUsQ0FBQyxZQUFEO0FBRkksR0F2Q3NFO0FBMkNyRmEscUJBQW1CLEVBQUU7QUFBRWhCLFFBQUksRUFBRTtBQUFSO0FBM0NnRSxDQUF2RjtBQThDQSwrREFBZWpCLGlCQUFmLEU7Ozs7Ozs7Ozs7O0FDOUZBOzs7Ozs7Ozs7QUFVQXZELE1BQU0sQ0FBQ3lGLHlCQUFQLEdBQW1DLFVBQVNDLElBQVQsRUFBZTtBQUFFLFNBQU9BLElBQVA7QUFBYyxDQUFsRSxDOzs7Ozs7Ozs7Ozs7Ozs7QUNWQTtBQUFBO0FBQUE7Ozs7Ozs7OztBQVNBO0FBRUE7Ozs7OztBQUtBLE1BQU1DLGFBQU4sQ0FBb0I7QUFDbEJDLGFBQVcsQ0FBQzdCLE1BQUQsRUFBUztBQUNsQjtBQUNBLFNBQUs4QixLQUFMLEdBQWE5QixNQUFNLENBQUMrQixRQUFQLEVBQWI7QUFDRDtBQUNEOzs7OztBQUdBQSxVQUFRLEdBQUc7QUFDVCxXQUFPLEtBQUtELEtBQVo7QUFDRDs7QUFWaUI7QUFhcEI7Ozs7OztBQUlBLFNBQVNFLFlBQVQsQ0FBc0JGLEtBQXRCLEVBQTZCO0FBQzNCLE1BQUlBLEtBQUssWUFBWUYsYUFBckIsRUFBb0M7QUFDbEM7QUFBTztBQUE4QkUsV0FBRCxDQUFRQTtBQUE1QztBQUNELEdBRkQsTUFFTztBQUNMLFVBQU0sSUFBSUcsS0FBSixDQUNELCtEQUE4REgsS0FBTSxFQURuRSxDQUFOO0FBR0Q7QUFDRjtBQUVEOzs7Ozs7QUFJQSxTQUFTSSxTQUFULENBQW1CSixLQUFuQixFQUEwQjtBQUN4QixNQUFJQSxLQUFLLFlBQVlLLG1CQUFyQixFQUEwQztBQUN4QztBQUFPO0FBQXFDTCxXQUFELENBQVFNO0FBQW5EO0FBQ0QsR0FGRCxNQUVPLElBQUlOLEtBQUssWUFBWUYsYUFBckIsRUFBb0M7QUFDekMsV0FBT0ksWUFBWSxDQUFDRixLQUFELENBQW5CO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsVUFBTSxJQUFJRyxLQUFKLENBQ0QseURBQXdESCxLQUFNLEVBRDdELENBQU47QUFFRDtBQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDTyxNQUFNTyxJQUFJLEdBQUcsU0FBU0EsSUFBVCxDQUFjQyxPQUFkLEVBQXVCLEdBQUdDLE1BQTFCLEVBQWtDO0FBQ3BELFFBQU1DLFFBQVE7QUFBRztBQUFvQ25HLFVBQVEsQ0FBQ2UsYUFBVCxDQUF1QixVQUF2QixDQUFyRDtBQUNBb0YsVUFBUSxDQUFDSixTQUFULEdBQXFCRyxNQUFNLENBQUNFLE1BQVAsQ0FBYyxDQUFDQyxHQUFELEVBQU1DLENBQU4sRUFBU0MsR0FBVCxLQUMvQkYsR0FBRyxHQUFHUixTQUFTLENBQUNTLENBQUQsQ0FBZixHQUFxQkwsT0FBTyxDQUFDTSxHQUFHLEdBQUcsQ0FBUCxDQURYLEVBQ3NCTixPQUFPLENBQUMsQ0FBRCxDQUQ3QixDQUFyQjtBQUVBLFNBQU9FLFFBQVA7QUFDRCxDQUxNO0FBT1A7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3Qk8sTUFBTUssV0FBVyxHQUFHLFVBQVNQLE9BQVQsRUFBa0IsR0FBR0MsTUFBckIsRUFBNkI7QUFDdEQsU0FBTyxJQUFJWCxhQUFKLENBQWtCVyxNQUFNLENBQUNFLE1BQVAsQ0FBYyxDQUFDQyxHQUFELEVBQU1DLENBQU4sRUFBU0MsR0FBVCxLQUNuQ0YsR0FBRyxHQUFHVixZQUFZLENBQUNXLENBQUQsQ0FBbEIsR0FBd0JMLE9BQU8sQ0FBQ00sR0FBRyxHQUFHLENBQVAsQ0FEVixFQUNxQk4sT0FBTyxDQUFDLENBQUQsQ0FENUIsQ0FBbEIsQ0FBUDtBQUVELENBSE0sQzs7Ozs7Ozs7Ozs7Ozs7QUMzSFA7QUFFQTs7OztBQUdBLE1BQU1RLGNBQU4sU0FBNkJDLE9BQU8sQ0FBQ0MsT0FBckMsQ0FBNkM7QUFDM0MsYUFBV0MsVUFBWCxHQUF3QjtBQUN0QixXQUFPO0FBQ0x2RixVQUFJLEVBQUVqQyxNQUREO0FBRUx5SCxjQUFRLEVBQUU7QUFDUnpDLFlBQUksRUFBRTBDLE9BREU7QUFFUnJCLGFBQUssRUFBRTtBQUZDLE9BRkw7QUFNTGhFLGNBQVEsRUFBRXJDLE1BTkw7QUFPTDJILG9CQUFjLEVBQUVDLE1BUFg7QUFRTEMsV0FBSyxFQUFFO0FBQ0w3QyxZQUFJLEVBQUU4QyxLQUREO0FBRUxDLGdCQUFRLEVBQUU7QUFGTDtBQVJGLEtBQVA7QUFhRDs7QUFFREMsY0FBWSxDQUFDL0YsSUFBRCxFQUFPSSxRQUFQLEVBQWlCO0FBQzNCLFFBQUk0RixNQUFNLEdBQUc1RixRQUFRLENBQUNoQixVQUFULENBQW9CNkcsbUJBQWpDOztBQUNBLFFBQUlELE1BQUosRUFBWTtBQUNWLFVBQUksQ0FBQ0gsS0FBSyxDQUFDSyxPQUFOLENBQWNGLE1BQWQsQ0FBTCxFQUE0QjtBQUMxQkEsY0FBTSxHQUFHLENBQUNBLE1BQUQsQ0FBVDtBQUNEOztBQUNELGFBQU9BLE1BQU0sQ0FBQ0csR0FBUCxDQUFXUCxLQUFLLElBQUlySCxNQUFNLENBQUM2SCxRQUFQLENBQWdCQyxlQUFoQixDQUN6QlQsS0FEeUIsRUFFekI1RixJQUZ5QixFQUd6QkEsSUFBSSxDQUFDc0csTUFIb0IsRUFJekJsRyxRQUp5QixFQUt6QkEsUUFBUSxDQUFDaEIsVUFMZ0I7QUFNekI7QUFBaUJ5RCxlQU5RLEVBT3pCekMsUUFBUSxDQUFDQyxLQVBnQixDQUFwQixFQVFKa0csTUFSSSxDQVFHeEYsTUFBTSxJQUFJQSxNQUFNLEtBQUssSUFSeEIsQ0FBUDtBQVNEOztBQUNELFdBQU8sRUFBUDtBQUNEOztBQUVEeUYsaUJBQWUsQ0FBQ3BHLFFBQUQsRUFBV29GLFFBQVgsRUFBcUJJLEtBQXJCLEVBQTRCO0FBQ3pDLFFBQUlKLFFBQUosRUFBYyxPQUFPLElBQVA7QUFDZCxRQUFJSSxLQUFLLENBQUNhLE1BQVYsRUFBa0IsT0FBTyxLQUFQO0FBQ2xCLFdBQU8sQ0FBQyxDQUFDckcsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQnNILGlCQUE3QjtBQUNEOztBQUVEQyxVQUFRLENBQUNmLEtBQUQsRUFBUTtBQUNkLFdBQU9BLEtBQUssQ0FBQ2EsTUFBTixHQUFlLENBQXRCO0FBQ0Q7O0FBNUMwQzs7QUE4QzdDLCtEQUFlckIsY0FBZixFOzs7Ozs7Ozs7Ozs7OztBQ25EQTtBQUVBOzs7O0FBR0EsTUFBTXdCLGNBQU4sU0FBNkJ2QixPQUFPLENBQUNDLE9BQXJDLENBQTZDO0FBQzNDLGFBQVdDLFVBQVgsR0FBd0I7QUFDdEIsV0FBTztBQUNMdkYsVUFBSSxFQUFFakMsTUFERDtBQUVMcUMsY0FBUSxFQUFFckMsTUFGTDtBQUdMOEksaUJBQVcsRUFBRWxCLE1BSFI7QUFLTEgsY0FBUSxFQUFFO0FBQ1J6QyxZQUFJLEVBQUUwQyxPQURFO0FBRVJyQixhQUFLLEVBQUU7QUFGQztBQUxMLEtBQVA7QUFVRDs7QUFFRCxhQUFXMEMsU0FBWCxHQUF1QjtBQUNyQixXQUFPLENBQ0wscURBREssQ0FBUDtBQUdEOztBQUVEQyxjQUFZLENBQUMvRyxJQUFELEVBQU9JLFFBQVAsRUFBaUJ5RyxXQUFqQixFQUE4QnJCLFFBQTlCLEVBQXdDO0FBQ2xEdkcsSUFBQSxpSEFBcUIsQ0FDbkIsSUFEbUIsRUFFbkI0SCxXQUFXLEdBQUdBLFdBQVcsQ0FBQ0csV0FBWixFQUFILEdBQStCLEtBRnZCLEVBR25CO0FBQUVoSCxVQUFGO0FBQVFJLGNBQVI7QUFBa0JvRjtBQUFsQixLQUhtQixDQUFyQjtBQUlEOztBQXpCMEM7O0FBMkI3Q3lCLGNBQWMsQ0FBQ0MsTUFBZixDQUFzQixpQkFBdEIsRUFBeUNOLGNBQXpDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaENBO0FBQ0E7QUFFQTtBQUNBO0FBRUFLLGNBQWMsQ0FBQ0UsV0FBZixDQUEyQixvQkFBM0IsRUFBaURDLElBQWpELENBQXNELE1BQU07QUFDMUQ7OztBQUdBLFFBQU1DLGdCQUFOLFNBQStCSixjQUFjLENBQUNLLEdBQWYsQ0FBbUIsb0JBQW5CLENBQS9CLENBQXdFO0FBQ3RFLGVBQVd4QyxRQUFYLEdBQXNCO0FBQ3BCLGFBQU8sMkVBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FBWjtBQWdGRDs7QUFFRCxlQUFXUyxVQUFYLEdBQXdCO0FBQ3RCLGFBQU87QUFDTHZGLFlBQUksRUFBRWpDLE1BREQ7QUFFTHlILGdCQUFRLEVBQUU7QUFDUnpDLGNBQUksRUFBRTBDLE9BREU7QUFFUnJCLGVBQUssRUFBRTtBQUZDLFNBRkw7QUFNTGhFLGdCQUFRLEVBQUVyQyxNQU5MO0FBT0wySCxzQkFBYyxFQUFFQyxNQVBYO0FBUUw0QixnQkFBUSxFQUFFO0FBQ1J4RSxjQUFJLEVBQUU4QyxLQURFO0FBRVJDLGtCQUFRLEVBQUU7QUFGRixTQVJMO0FBWUwwQixpQkFBUyxFQUFFL0IsT0FaTjtBQWFMZ0MsdUJBQWUsRUFBRTtBQUNmMUUsY0FBSSxFQUFFMEMsT0FEUztBQUVmSyxrQkFBUSxFQUFFO0FBRks7QUFiWixPQUFQO0FBa0JEOztBQUVENEIscUJBQWlCLEdBQUc7QUFDbEIsWUFBTUEsaUJBQU47QUFDQSxXQUFLRixTQUFMLEdBQWlCLElBQWpCO0FBQ0Q7O0FBRURHLHdCQUFvQixHQUFHO0FBQ3JCLFdBQUtDLFdBQUwsR0FBbUIsS0FBbkI7QUFDQSxZQUFNRCxvQkFBTjtBQUNEOztBQUVENUIsZ0JBQVksQ0FBQy9GLElBQUQsRUFBT0ksUUFBUCxFQUFpQnlILFFBQWpCLEVBQTJCO0FBQ3JDLFVBQUksQ0FBQ3pILFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0IwSSxXQUFyQixJQUFvQyxDQUFDRCxRQUF6QyxFQUFtRCxPQUFPLEVBQVA7QUFDbkQsVUFBSUUsV0FBVyxHQUFHM0gsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQjBJLFdBQXRDOztBQUNBLFVBQUksQ0FBQ2pDLEtBQUssQ0FBQ0ssT0FBTixDQUFjNkIsV0FBZCxDQUFMLEVBQWlDO0FBQy9CQSxtQkFBVyxHQUFHLENBQUNBLFdBQUQsQ0FBZDtBQUNEOztBQUNELGFBQU9BLFdBQVcsQ0FBQzVCLEdBQVosQ0FBaUI2QixVQUFELElBQWdCO0FBQ3JDLFlBQUlqSCxNQUFNLEdBQUcsSUFBYjs7QUFDQSxZQUFJaUgsVUFBVSxDQUFDckgsU0FBWCxJQUF3QlgsSUFBSSxDQUFDc0csTUFBTCxDQUFZMEIsVUFBVSxDQUFDckgsU0FBdkIsQ0FBNUIsRUFBK0Q7QUFDN0RJLGdCQUFNLEdBQUdoRCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCTyxNQUFNLENBQUM2SCxRQUFQLENBQWdCNkIsaUJBQWhCLENBQ3pCLElBRHlCLEVBQ25CakksSUFBSSxDQUFDc0csTUFBTCxDQUFZMEIsVUFBVSxDQUFDckgsU0FBdkIsQ0FEbUIsRUFDZ0IsS0FBSzZFLFFBRHJCO0FBRXpCO0FBQWtCLGVBRk8sQ0FBbEIsQ0FBVDtBQUdELFNBSkQsTUFJTyxJQUFJd0MsVUFBVSxDQUFDRSxTQUFYLElBQ0E5SCxRQUFRLENBQUNoQixVQUFULENBQW9CNEksVUFBVSxDQUFDRSxTQUEvQixNQUE4Q3JGLFNBRGxELEVBQzZEO0FBQ2xFOUIsZ0JBQU0sR0FBRztBQUNQVixpQkFBSyxFQUFFc0YsTUFBTSxDQUFDdkYsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQjRJLFVBQVUsQ0FBQ0UsU0FBL0IsQ0FBRCxDQUROO0FBRVB2SCxxQkFBUyxFQUFFLFdBRko7QUFHUHZCLHNCQUFVLEVBQUU7QUFBRTJFLGlDQUFtQixFQUFFaUUsVUFBVSxDQUFDRztBQUFsQztBQUhMLFdBQVQ7QUFLRDs7QUFDRCxZQUFJLENBQUNwSCxNQUFMLEVBQWEsT0FBTyxJQUFQO0FBQ2IsWUFBSXFILFNBQVMsR0FBR0osVUFBVSxDQUFDSyxnQkFBM0I7O0FBQ0EsWUFBSUQsU0FBUyxLQUFLdkYsU0FBbEIsRUFBNkI7QUFDM0IsY0FBSSxDQUFDZ0QsS0FBSyxDQUFDSyxPQUFOLENBQWNrQyxTQUFkLENBQUwsRUFBK0I7QUFDN0JBLHFCQUFTLEdBQUcsQ0FBQ0EsU0FBRCxDQUFaO0FBQ0Q7O0FBQ0QsY0FBSUEsU0FBUyxDQUFDRSxJQUFWLENBQWVyRCxDQUFDLElBQUlzRCxNQUFNLENBQUN0RCxDQUFELENBQU4sQ0FBVXVELElBQVYsQ0FBZXpILE1BQU0sQ0FBQ1YsS0FBUCxDQUFhZ0UsUUFBYixFQUFmLENBQXBCLENBQUosRUFBa0U7QUFDaEUsbUJBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0R0RCxjQUFNLENBQUMwSCxjQUFQLEdBQXdCLEVBQXhCO0FBQ0ExSCxjQUFNLENBQUMzQixVQUFQLEdBQW9CckIsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQjtBQUFFOEUsdUJBQWEsRUFBRTtBQUFqQixTQUFsQixDQUFwQjtBQUNBLGVBQU8vQixNQUFQO0FBQ0QsT0EzQk0sRUEyQkp3RixNQTNCSSxDQTJCR3lCLFVBQVUsSUFBSUEsVUFBVSxJQUFJLElBM0IvQixDQUFQO0FBNEJEOztBQUVEVSx1QkFBbUIsQ0FBQ25CLFFBQUQsRUFBVy9CLFFBQVgsRUFBcUI7QUFDdEMsVUFBSUEsUUFBUSxJQUFJLENBQUMrQixRQUFqQixFQUEyQixPQUFPLEtBQVA7QUFDM0IsYUFBT0EsUUFBUSxDQUFDZCxNQUFULEtBQW9CLENBQTNCO0FBQ0Q7O0FBRURrQyxjQUFVLENBQUNsQixlQUFELEVBQWtCO0FBQzFCLGFBQU9BLGVBQWUsR0FBRyxPQUFILEdBQWEsRUFBbkM7QUFDRDs7QUFFRG1CLGdCQUFZLENBQUNwRCxRQUFELEVBQVdwRixRQUFYLEVBQXFCO0FBQy9CLFVBQUlvRixRQUFKLEVBQWMsT0FBTyxJQUFQO0FBQ2QsYUFBTyxDQUFDcEYsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQnlKLFlBQTVCO0FBQ0Q7O0FBRURDLHVCQUFtQixDQUFDMUksUUFBRCxFQUFXO0FBQzVCO0FBQ0EsYUFBTyxNQUFNMEksbUJBQU4sQ0FBMEIsS0FBS0MsVUFBTCxJQUFtQixLQUFLQyxRQUFsRCxFQUE0RDVJLFFBQTVELENBQVA7QUFDRDs7QUFFRDZJLHFCQUFpQixDQUFDN0ksUUFBRCxFQUFXO0FBQzFCLGFBQU9BLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0I4SixnQkFBcEIsSUFDSDlJLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0IrSiwwQkFEeEI7QUFFRDs7QUFFREMsZ0JBQVksQ0FBQ0MsQ0FBRCxFQUFJO0FBQ2QsV0FBS25LLElBQUwsQ0FBVU4sYUFBVixDQUF3QixVQUF4QixFQUFvQzBLLEtBQXBDLENBQTBDQyxhQUExQyxHQUEwRCxNQUExRDtBQUNBLFlBQU1DLElBQUksR0FBRyxLQUFLdEssSUFBTCxDQUFVTixhQUFWLENBQXdCLE9BQXhCLENBQWI7O0FBQ0EsVUFBSTRLLElBQUosRUFBVTtBQUNSQSxZQUFJLENBQUNoSCxJQUFMLEdBQVksdUJBQVo7QUFDQWdILFlBQUksQ0FBQ0YsS0FBTCxDQUFXRyxPQUFYLEdBQXFCLEtBQXJCO0FBQ0Q7O0FBQ0RsTCxZQUFNLENBQUNtTCxVQUFQLENBQWtCLE1BQU07QUFDdEIsYUFBS3hLLElBQUwsQ0FBVU4sYUFBVixDQUF3QixVQUF4QixFQUFvQzBLLEtBQXBDLENBQTBDQyxhQUExQyxHQUEwRCxFQUExRDs7QUFDQSxZQUFJQyxJQUFKLEVBQVU7QUFDUkEsY0FBSSxDQUFDaEgsSUFBTCxHQUFZLGtCQUFaO0FBQ0FnSCxjQUFJLENBQUNGLEtBQUwsQ0FBV0csT0FBWCxHQUFxQixFQUFyQjtBQUNEO0FBQ0YsT0FORCxFQU1HLElBTkg7QUFPQUosT0FBQyxDQUFDTSxlQUFGO0FBQ0Q7O0FBRURDLGVBQVcsQ0FBQzVKLElBQUQsRUFBT3pDLE9BQVAsRUFBZ0I2QyxRQUFoQixFQUEwQjtBQUNuQyxZQUFNeEMsU0FBUyxHQUFHd0MsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQm5CLEtBQXBCLElBQTZCLFNBQS9DO0FBQ0FYLE1BQUEsaUhBQW9CLENBQ2xCQyxPQURrQixFQUNUeUMsSUFBSSxDQUFDeEMsTUFBTCxJQUFlO0FBQUVLLHFCQUFhLEVBQUUsU0FBakI7QUFBNEJMLGNBQU0sRUFBRTtBQUFwQyxPQUROLEVBQ2dESSxTQURoRCxDQUFwQjtBQUVEOztBQUVEaU0sbUJBQWUsR0FBRztBQUNoQixXQUFLM0ssSUFBTCxDQUFVNEssZ0JBQVYsQ0FBMkIsc0JBQTNCLEVBQ0czTCxPQURILENBQ1k0TCxJQUFELElBQVU7QUFDakIsYUFBS0gsV0FBTCxDQUFpQixLQUFLNUosSUFBdEIsRUFBNEIrSixJQUE1QixFQUFrQ0EsSUFBSSxDQUFDMUosS0FBdkM7QUFDRCxPQUhIO0FBSUQ7O0FBM01xRTs7QUE2TXhFNEcsZ0JBQWMsQ0FBQ0MsTUFBZixDQUFzQixvQkFBdEIsRUFBNENHLGdCQUE1QztBQUNELENBbE5ELEU7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBLE1BQU0yQyxnQkFBTixTQUErQix1RUFBVyxDQUFDM0UsT0FBTyxDQUFDQyxPQUFULENBQTFDLENBQTREO0FBQzFELGFBQVdSLFFBQVgsR0FBc0I7QUFDcEIsV0FBTywyRUFBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQUFaO0FBMEJEOztBQUVELGFBQVdTLFVBQVgsR0FBd0I7QUFDdEIsV0FBTztBQUNMMEUsWUFBTSxFQUFFeEUsT0FESDtBQUdMeUUsVUFBSSxFQUFFO0FBQ0puSCxZQUFJLEVBQUU0QyxNQURGO0FBRUp3RSxnQkFBUSxFQUFFO0FBRk47QUFIRCxLQUFQO0FBUUQ7O0FBRURDLE9BQUssR0FBRztBQUNOLFVBQU1BLEtBQU47QUFDQSxTQUFLRixJQUFMLEdBQVkzTCxNQUFNLENBQUM2SCxRQUFQLENBQWdCaUUsT0FBaEIsRUFBWjtBQUNEOztBQUVEQyxhQUFXLENBQUNKLElBQUQsRUFBTztBQUNoQjNMLFVBQU0sQ0FBQzZILFFBQVAsQ0FBZ0JtRSxPQUFoQixDQUF3QkwsSUFBeEI7QUFDRDs7QUFFRE0sY0FBWSxHQUFHO0FBQ2JqTSxVQUFNLENBQUNrTSxPQUFQLENBQWVDLElBQWY7QUFDQSxTQUFLQyxJQUFMLENBQVUsa0JBQVY7QUFDRDs7QUFyRHlEOztBQXVENUQxRCxjQUFjLENBQUNDLE1BQWYsQ0FBc0IscUJBQXRCLEVBQTZDOEMsZ0JBQTdDLEU7Ozs7Ozs7Ozs7Ozs7O0FDOURBO0FBRUE7Ozs7QUFHQSxNQUFNWSxjQUFOLFNBQTZCdkYsT0FBTyxDQUFDQyxPQUFyQyxDQUE2QztBQUMzQyxhQUFXUixRQUFYLEdBQXNCO0FBQ3BCLFdBQU8sMkVBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FBWjtBQTZCRDs7QUFFRHNGLE9BQUssR0FBRztBQUNOLFVBQU1BLEtBQU47QUFDQSxTQUFLUyxpQkFBTCxHQUF5QixDQUFDLEtBQUtDLGlCQUFMLENBQXVCLEtBQUs3TSxLQUE1QixFQUFtQyxjQUFuQyxFQUFtRCxDQUFDLEtBQUs0TSxpQkFBekQsQ0FBMUI7QUFDQSxTQUFLRSx3Q0FBTCxDQUE4QyxLQUFLOU0sS0FBbkQsRUFBMEQsS0FBSytNLDJCQUEvRDtBQUNEOztBQUVELGFBQVd6RixVQUFYLEdBQXdCO0FBQ3RCLFdBQU87QUFDTDBGLFNBQUcsRUFBRTtBQUNIbEksWUFBSSxFQUFFbUksTUFESDtBQUVIOUcsYUFBSyxFQUFFO0FBRkosT0FEQTtBQUtMK0csU0FBRyxFQUFFO0FBQ0hwSSxZQUFJLEVBQUVtSSxNQURIO0FBRUg5RyxhQUFLLEVBQUU7QUFGSixPQUxBO0FBU0xnSCxTQUFHLEVBQUU7QUFDSHJJLFlBQUksRUFBRTBDLE9BREg7QUFFSHJCLGFBQUssRUFBRTtBQUZKLE9BVEE7QUFhTGlILFVBQUksRUFBRTtBQUNKdEksWUFBSSxFQUFFMEMsT0FERjtBQUVKckIsYUFBSyxFQUFFO0FBRkgsT0FiRDtBQWlCTHlHLHVCQUFpQixFQUFFO0FBQ2pCOUgsWUFBSSxFQUFFMEMsT0FEVztBQUVqQnJCLGFBQUssRUFBRSxLQUZVO0FBR2pCa0gsY0FBTSxFQUFFO0FBSFMsT0FqQmQ7QUFzQkxOLGlDQUEyQixFQUFFO0FBQzNCakksWUFBSSxFQUFFMEMsT0FEcUI7QUFFM0JyQixhQUFLLEVBQUU7QUFGb0IsT0F0QnhCO0FBMkJMbkcsV0FBSyxFQUFFRixNQTNCRjtBQTRCTHFHLFdBQUssRUFBRTtBQUNMckIsWUFBSSxFQUFFbUksTUFERDtBQUVMSSxjQUFNLEVBQUU7QUFGSCxPQTVCRjtBQWdDTEMsZ0JBQVUsRUFBRTtBQUNWeEksWUFBSSxFQUFFbUksTUFESTtBQUVWcEYsZ0JBQVEsRUFBRTtBQUZBO0FBaENQLEtBQVA7QUFxQ0Q7O0FBRUQsYUFBV2dCLFNBQVgsR0FBdUI7QUFDckIsV0FBTyxDQUNMLDhFQURLLENBQVA7QUFHRDs7QUFFRGlFLDBDQUF3QyxDQUFDOU0sS0FBRCxFQUFRK00sMkJBQVIsRUFBcUM7QUFDM0UsU0FBS1Esa0NBQUwsR0FBMEMsS0FBS1YsaUJBQUwsQ0FDeEM3TSxLQUR3QyxFQUNqQyx5QkFEaUMsRUFDTixDQUFDK00sMkJBREssQ0FBMUM7QUFFRDs7QUFFREYsbUJBQWlCLENBQUM3TSxLQUFELEVBQVF3TixJQUFSLEVBQWNDLEdBQWQsRUFBbUI7QUFDbEMsUUFBSXpOLEtBQUosRUFBVztBQUNULFVBQUl3TixJQUFJLElBQUl4TixLQUFaLEVBQW1CO0FBQ2pCLGVBQU9BLEtBQUssQ0FBQ3dOLElBQUQsQ0FBWjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT0MsR0FBUDtBQUNEOztBQUVEQyxjQUFZLENBQUMxTixLQUFELEVBQVFvTixJQUFSLEVBQWNPLFNBQWQsRUFBeUI7QUFDbkMsUUFBSTdLLE1BQU0sR0FBRyxFQUFiOztBQUNBLFFBQUlzSyxJQUFKLEVBQVU7QUFDUnRLLFlBQU0sSUFBSSxRQUFWO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLK0osaUJBQUwsQ0FBdUI3TSxLQUF2QixFQUE4QixjQUE5QixFQUE4QyxDQUFDLEtBQUs0TSxpQkFBcEQsS0FBMEVlLFNBQVMsS0FBSyxDQUE1RixFQUErRjtBQUM3RjtBQUNBLGFBQU8sRUFBUDtBQUNEOztBQUNELFdBQVEsR0FBRTdLLE1BQU8sc0JBQWpCO0FBQ0Q7O0FBRUQ4SyxjQUFZLENBQUNDLEVBQUQsRUFBSztBQUNmLFFBQUksQ0FBQyxLQUFLTixrQ0FBTixJQUE0QyxLQUFLcEgsS0FBTCxLQUFlMEgsRUFBRSxDQUFDQyxNQUFILENBQVUzSCxLQUF6RSxFQUFnRjtBQUM5RTBILFFBQUUsQ0FBQ25DLGVBQUg7QUFDQTtBQUNEOztBQUNELFNBQUt2RixLQUFMLEdBQWEwSCxFQUFFLENBQUNDLE1BQUgsQ0FBVTNILEtBQXZCO0FBQ0Q7O0FBckgwQzs7QUF1SDdDNkMsY0FBYyxDQUFDQyxNQUFmLENBQXNCLGtCQUF0QixFQUEwQzBELGNBQTFDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUEsTUFBTW9CLG1DQUFtQyxHQUFHLENBQUMsY0FBRCxDQUE1QztBQUNBLE1BQU1DLHdCQUF3QixHQUFHO0FBQy9CQyxPQUFLLEVBQUUsQ0FEd0I7QUFDckI7QUFDVmpLLE9BQUssRUFBRSxDQUZ3QjtBQUVyQjtBQUNWa0ssU0FBTyxFQUFFLENBSHNCLENBR25COztBQUhtQixDQUFqQztBQUtBLE1BQU1DLGVBQWUsR0FBRztBQUN0QkMsUUFBTSxFQUFFLGtCQURjO0FBRXRCQyxTQUFPLEVBQUUsRUFGYTtBQUd0QnJLLE9BQUssRUFBRTtBQUhlLENBQXhCO0FBTUE7Ozs7QUFHQSxNQUFNc0ssaUJBQU4sU0FBZ0NsSCxPQUFPLENBQUNDLE9BQXhDLENBQWdEO0FBQzlDLGFBQVdDLFVBQVgsR0FBd0I7QUFDdEIsV0FBTztBQUNMdkYsVUFBSSxFQUFFakMsTUFERDtBQUdMeUgsY0FBUSxFQUFFO0FBQ1J6QyxZQUFJLEVBQUUwQyxPQURFO0FBRVJyQixhQUFLLEVBQUU7QUFGQyxPQUhMO0FBUUxoRSxjQUFRLEVBQUVyQztBQVJMLEtBQVA7QUFVRDs7QUFFRCxhQUFXK0ksU0FBWCxHQUF1QjtBQUNyQixXQUFPLENBQ0wsd0NBREssQ0FBUDtBQUdEOztBQUVEWSxtQkFBaUIsR0FBRztBQUNsQixVQUFNQSxpQkFBTjtBQUNBLFVBQU04RSxTQUFTLEdBQUcsS0FBSzNNLFVBQUwsQ0FBZ0JBLFVBQWxDOztBQUNBLFFBQUkyTSxTQUFTLENBQUNoTixPQUFWLEtBQXNCLEtBQXRCLEtBQ0NnTixTQUFTLENBQUNDLFNBQVYsQ0FBb0JDLFFBQXBCLENBQTZCLE9BQTdCLEtBQXlDRixTQUFTLENBQUNDLFNBQVYsQ0FBb0JDLFFBQXBCLENBQTZCLFlBQTdCLENBRDFDLENBQUosRUFDMkY7QUFDekYsV0FBS0MsVUFBTCxHQUFrQkgsU0FBbEIsQ0FEeUYsQ0FHekY7O0FBQ0FBLGVBQVMsQ0FBQ2xELEtBQVYsQ0FBZ0JzRCxXQUFoQixDQUNFLGtCQURGLEVBQ3NCLDZDQUR0QixFQUp5RixDQU96Rjs7QUFDQSxVQUFJLENBQUNKLFNBQVMsQ0FBQ2xPLFlBQWYsRUFBNkI7QUFDM0JrTyxpQkFBUyxDQUFDbE8sWUFBVixHQUEwQlIsTUFBRCxJQUFZO0FBQ25DQyxnQkFBTSxDQUFDRyxJQUFQLENBQVlKLE1BQVosRUFBb0JLLE9BQXBCLENBQTZCQyxHQUFELElBQVM7QUFDbkNvTyxxQkFBUyxDQUFDbEQsS0FBVixDQUFnQnNELFdBQWhCLENBQTRCeE8sR0FBNUIsRUFBaUNOLE1BQU0sQ0FBQ00sR0FBRCxDQUF2QztBQUNELFdBRkQ7QUFHRCxTQUpEO0FBS0Q7QUFDRjs7QUFDRCxTQUFLd0osV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUtpRixZQUFMLENBQWtCLEtBQUs3TSxJQUF2QixFQUE2QixLQUFLd0YsUUFBbEMsRUFBNEMsS0FBS3BGLFFBQWpEO0FBQ0Q7O0FBRUR1SCxzQkFBb0IsR0FBRztBQUNyQixTQUFLQyxXQUFMLEdBQW1CLEtBQW5COztBQUNBLFFBQUksS0FBSytFLFVBQVQsRUFBcUI7QUFDbkIsV0FBS0EsVUFBTCxDQUFnQnJPLFlBQWhCLENBQTZCO0FBQUVnTyxlQUFPLEVBQUUsRUFBWDtBQUFlUSxjQUFNLEVBQUUsRUFBdkI7QUFBMkJDLGVBQU8sRUFBRTtBQUFwQyxPQUE3Qjs7QUFDQXpQLE1BQUEsaUhBQW9CLENBQ2xCLEtBQUtxUCxVQURhLEVBQ0QsS0FBSzNNLElBQUwsQ0FBVXhDLE1BQVYsSUFBb0I7QUFBRUsscUJBQWEsRUFBRSxTQUFqQjtBQUE0QkwsY0FBTSxFQUFFO0FBQXBDLE9BRG5CLEVBQzZELFNBRDdELENBQXBCO0FBRUEsV0FBS21QLFVBQUwsR0FBa0IsSUFBbEI7QUFDRDs7QUFDRCxVQUFNaEYsb0JBQU47QUFDRDs7QUFFRHFGLFdBQVMsQ0FBQ2hOLElBQUQsRUFBT0ksUUFBUCxFQUFpQkgsTUFBakIsRUFBeUI7QUFDaEMsVUFBTXFHLE1BQU0sR0FBRyxFQUFmOztBQUNBLFFBQUlyRyxNQUFNLEtBQUssT0FBZixFQUF3QjtBQUN0QkcsY0FBUSxDQUFDaEIsVUFBVCxDQUFvQnVCLFNBQXBCLENBQThCeEMsT0FBOUIsQ0FBdUM4TyxFQUFELElBQVE7QUFDNUMsY0FBTTVNLEtBQUssR0FBR0wsSUFBSSxDQUFDc0csTUFBTCxDQUFZMkcsRUFBWixDQUFkOztBQUNBLFlBQUksQ0FBQzVNLEtBQUwsRUFBWTtBQUNWO0FBQ0E2TSxpQkFBTyxDQUFDQyxJQUFSLENBQWMsY0FBYUYsRUFBRyxhQUFZN00sUUFBUSxDQUFDTyxTQUFVLEVBQTdEO0FBQ0E7O0FBQ0E7QUFDRDs7QUFDRCxZQUFJLENBQUNQLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0JnTyxXQUFyQixJQUNBaE4sUUFBUSxDQUFDaEIsVUFBVCxDQUFvQmdPLFdBQXBCLENBQWdDM0wsUUFBaEMsQ0FBeUNwQixLQUFLLENBQUNNLFNBQS9DLENBREosRUFDK0Q7QUFDN0QyRixnQkFBTSxDQUFDK0csSUFBUCxDQUFZOU8sTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjZCLGlCQUFoQixDQUNWLElBRFUsRUFDSjVILEtBREksRUFDRztBQUFNO0FBRFQsWUFDeUI7QUFBTTtBQUQvQixXQUFaO0FBRUQ7QUFDRixPQWJEO0FBY0QsS0FmRCxNQWVPO0FBQ0xpRyxZQUFNLENBQUMrRyxJQUFQLENBQVlqTixRQUFaOztBQUNBLFVBQUksS0FBS3VNLFVBQVQsRUFBcUI7QUFDbkIsYUFBS0EsVUFBTCxDQUFnQnJELEtBQWhCLENBQXNCZ0QsT0FBdEIsR0FBZ0MsY0FBaEM7QUFDQSxjQUFNZ0IsTUFBTSxHQUFHO0FBQUVoQixpQkFBTyxFQUFFO0FBQVgsU0FBZjs7QUFDQSxZQUFJLEtBQUtLLFVBQUwsQ0FBZ0JGLFNBQWhCLENBQTBCQyxRQUExQixDQUFtQyxPQUFuQyxDQUFKLEVBQWlEO0FBQy9DWSxnQkFBTSxDQUFDUixNQUFQLEdBQWdCLGlDQUFoQjtBQUNEOztBQUNELGFBQUt4TyxZQUFMLENBQWtCZ1AsTUFBbEI7QUFDRDtBQUNGOztBQUNEck8sSUFBQSxpSEFBcUIsQ0FDbkIsSUFEbUIsRUFFbkIsZ0JBRm1CLEVBR25CO0FBQUVlLFVBQUY7QUFBUXNHO0FBQVIsS0FIbUIsQ0FBckI7O0FBSUEsUUFBSSxLQUFLcUcsVUFBVCxFQUFxQjtBQUNuQixXQUFLQSxVQUFMLENBQWdCck8sWUFBaEIsQ0FBNkI7QUFDM0JpUCxhQUFLLEVBQUUsc0NBRG9CO0FBRTNCLHNCQUFjO0FBRmEsT0FBN0I7QUFJRDs7QUFDRCxTQUFLaE8sU0FBTCxDQUFlK0osS0FBZixDQUFxQmtFLFFBQXJCLEdBQWdDLEtBQWhDLENBdENnQyxDQXdDaEM7O0FBQ0EsU0FBS2xFLEtBQUwsQ0FBV3NELFdBQVgsQ0FBdUIsc0NBQXZCLEVBQStELEdBQS9EO0FBQ0Q7O0FBRURhLGlCQUFlLEdBQUc7QUFDaEIsUUFBSSxLQUFLZCxVQUFULEVBQXFCO0FBQ25CLFdBQUtBLFVBQUwsQ0FBZ0JyTyxZQUFoQixDQUE2QjtBQUMzQmdPLGVBQU8sRUFBRSxFQURrQjtBQUUzQmlCLGFBQUssRUFBRSxFQUZvQjtBQUczQixzQkFBYztBQUhhLE9BQTdCO0FBS0Q7O0FBQ0QsU0FBS2pQLFlBQUwsQ0FBa0I7QUFBRWdPLGFBQU8sRUFBRSxFQUFYO0FBQWVRLFlBQU0sRUFBRTtBQUF2QixLQUFsQjtBQUNEOztBQUVEbEQsYUFBVyxDQUFDNUosSUFBRCxFQUFPME4sV0FBUCxFQUFvQjtBQUM3QixRQUFJQyxXQUFXLEdBQUcsSUFBbEI7QUFDQSxRQUFJL1AsU0FBUyxHQUFHLFNBQWhCOztBQUNBLFFBQUksS0FBSytPLFVBQVQsRUFBcUI7QUFDbkJnQixpQkFBVyxHQUFHLEtBQUtoQixVQUFuQjtBQUNEOztBQUNELFFBQUllLFdBQVcsQ0FBQ3RPLFVBQVosQ0FBdUJuQixLQUEzQixFQUFrQztBQUNoQ0wsZUFBUyxHQUFHOFAsV0FBVyxDQUFDdE8sVUFBWixDQUF1Qm5CLEtBQW5DO0FBQ0Q7O0FBQ0RYLElBQUEsaUhBQW9CLENBQ2xCcVEsV0FEa0IsRUFDTDNOLElBQUksQ0FBQ3hDLE1BQUwsSUFBZTtBQUFFSyxtQkFBYSxFQUFFLFNBQWpCO0FBQTRCTCxZQUFNLEVBQUU7QUFBcEMsS0FEVixFQUNvREksU0FEcEQsQ0FBcEI7QUFFRDs7QUFFRGdRLGlCQUFlLENBQUNGLFdBQUQsRUFBYztBQUMzQixRQUFJLENBQUNBLFdBQUwsRUFBa0I7QUFDaEIsVUFBSSxLQUFLbk8sU0FBVCxFQUFvQjtBQUNsQixhQUFLRSxXQUFMLENBQWlCLEtBQUtGLFNBQXRCO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLb04sVUFBVCxFQUFxQjtBQUNuQixhQUFLQSxVQUFMLENBQWdCck8sWUFBaEIsQ0FBNkI7QUFBRXdPLGdCQUFNLEVBQUUsR0FBVjtBQUFlQyxpQkFBTyxFQUFFO0FBQXhCLFNBQTdCO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLSixVQUFULEVBQXFCO0FBQ25CLFdBQUtBLFVBQUwsQ0FBZ0JyTyxZQUFoQixDQUE2QjtBQUFFd08sY0FBTSxFQUFFLEVBQVY7QUFBY0MsZUFBTyxFQUFFO0FBQXZCLE9BQTdCO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBRURjLGlCQUFlLENBQUM1TixNQUFELEVBQVM2TixHQUFULEVBQWN0SSxRQUFkLEVBQXdCO0FBQ3JDLFFBQUlBLFFBQUosRUFBYyxPQUFPLEtBQVA7QUFDZCxXQUFPeUcsd0JBQXdCLENBQUNoTSxNQUFELENBQXhCLElBQ0pnTSx3QkFBd0IsQ0FBQ2hNLE1BQUQsQ0FBeEIsR0FBbUM2TixHQUFHLENBQUMxTyxVQUFKLENBQWV5QyxrQkFEOUMsSUFFTGlNLEdBQUcsQ0FBQzFPLFVBQUosQ0FBZTJPLGVBRlYsSUFFNkJELEdBQUcsQ0FBQzFPLFVBQUosQ0FBZTJPLGVBQWYsS0FBbUMsV0FGdkU7QUFHRDs7QUFFRGxCLGNBQVksQ0FBQzdNLElBQUQsRUFBT3dGLFFBQVAsRUFBaUJwRixRQUFqQixFQUEyQjtBQUNyQyxRQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDSixJQUFkLElBQXNCLENBQUMsS0FBSzRILFdBQWhDLEVBQTZDO0FBQzdDLFVBQU0zSCxNQUFNLEdBQUcsaUhBQWtCLENBQUNHLFFBQUQsQ0FBakM7QUFDQSxVQUFNc04sV0FBVyxHQUFHblAsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjZCLGlCQUFoQixDQUNsQixJQURrQixFQUNaN0gsUUFEWSxFQUNGb0YsUUFERSxFQUNRO0FBQUs7QUFEYixLQUFwQjtBQUdBLFFBQUksS0FBS29JLGVBQUwsQ0FBcUJGLFdBQXJCLENBQUosRUFBdUM7QUFFdkMsU0FBSzlELFdBQUwsQ0FBaUI1SixJQUFqQixFQUF1QjBOLFdBQXZCOztBQUVBLFFBQUksQ0FBQ2xJLFFBQUQsSUFBYWtJLFdBQVcsQ0FBQ3RPLFVBQVosQ0FBdUIyTyxlQUF2QixLQUEyQyxRQUE1RCxFQUFzRTtBQUNwRSxXQUFLZixTQUFMLENBQWVoTixJQUFmLEVBQXFCME4sV0FBckIsRUFBa0N6TixNQUFsQztBQUNELEtBRkQsTUFFTztBQUNMLFdBQUsrTixZQUFMLENBQWtCaE8sSUFBbEIsRUFBd0J3RixRQUF4QixFQUFrQ2tJLFdBQWxDLEVBQStDek4sTUFBL0M7QUFDRDtBQUNGOztBQUVEK04sY0FBWSxDQUFDaE8sSUFBRCxFQUFPd0YsUUFBUCxFQUFpQnBGLFFBQWpCLEVBQTJCSCxNQUEzQixFQUFtQztBQUM3QyxTQUFLd04sZUFBTDtBQUVBLFVBQU1ILE1BQU0sR0FBRztBQUNidE4sVUFEYTtBQUViSSxjQUZhO0FBR2JvRjtBQUhhLEtBQWY7QUFLQSxVQUFNeUkscUJBQXFCLEdBQUcsNEdBQWEsQ0FBQ2pPLElBQUQsRUFBT0ksUUFBUCxDQUEzQztBQUNBLFFBQUk4TixtQkFBSjtBQUNBLFVBQU1DLHNCQUFzQixHQUFHL04sUUFBUSxDQUFDaEIsVUFBVCxDQUFvQmdQLDhCQUFuRDs7QUFFQSxRQUFJbk8sTUFBTSxLQUFLLE9BQVgsSUFBc0IsS0FBSzROLGVBQUwsQ0FBcUI1TixNQUFyQixFQUE2QkcsUUFBN0IsRUFBdUNvRixRQUF2QyxDQUExQixFQUE0RTtBQUMxRXpILFlBQU0sQ0FBQ0MsTUFBUCxDQUFjc1AsTUFBZCxFQUFzQjtBQUNwQjVILHNCQUFjLEVBQUUsa0JBREk7QUFFcEIySSxrQkFBVSxFQUFFLFVBRlE7QUFHcEJDLGtCQUFVLEVBQUUsU0FIUTtBQUlwQkMsaUJBQVMsRUFBRSxZQUpTO0FBS3BCdE87QUFMb0IsT0FBdEI7QUFPQWlPLHlCQUFtQixHQUFHLHdCQUF0QjtBQUNELEtBVEQsTUFTTyxJQUFJak8sTUFBTSxLQUFLLE9BQVgsSUFBc0IsS0FBSzROLGVBQUwsQ0FBcUI1TixNQUFyQixFQUE2QkcsUUFBN0IsRUFBdUNvRixRQUF2QyxDQUExQixFQUE0RTtBQUNqRnpILFlBQU0sQ0FBQ0MsTUFBUCxDQUFjc1AsTUFBZCxFQUFzQjtBQUNwQjVILHNCQUFjLEVBQUUsbUJBREk7QUFFcEJ5RixXQUFHLEVBQUUsR0FGZTtBQUdwQmtELGtCQUFVLEVBQUUsYUFIUTtBQUlwQkMsa0JBQVUsRUFBRSxvQkFKUTtBQUtwQkUsb0JBQVksRUFBRSxVQUxNO0FBTXBCRCxpQkFBUyxFQUFFLGtCQU5TO0FBT3BCRSxjQUFNLEVBQUUsTUFQWTtBQVFwQnhPO0FBUm9CLE9BQXRCO0FBVUFpTyx5QkFBbUIsR0FBRyx3QkFBdEI7QUFDRCxLQVpNLE1BWUEsSUFBSWpPLE1BQU0sS0FBSyxTQUFYLElBQXdCLEtBQUs0TixlQUFMLENBQXFCNU4sTUFBckIsRUFBNkJHLFFBQTdCLEVBQXVDb0YsUUFBdkMsQ0FBNUIsRUFBOEU7QUFDbkZ6SCxZQUFNLENBQUNDLE1BQVAsQ0FBY3NQLE1BQWQsRUFBc0I7QUFDcEI1SCxzQkFBYyxFQUFFLGtCQURJO0FBRXBCdUYsV0FBRyxFQUFFN0ssUUFBUSxDQUFDaEIsVUFBVCxDQUFvQnNQLFFBQXBCLElBQWdDLENBQUMsR0FGbEI7QUFHcEJ2RCxXQUFHLEVBQUUvSyxRQUFRLENBQUNoQixVQUFULENBQW9CdVAsUUFBcEIsSUFBZ0MsR0FIakI7QUFJcEJOLGtCQUFVLEVBQUUsaUJBSlE7QUFLcEJDLGtCQUFVLEVBQUUsaUJBTFE7QUFNcEJDLGlCQUFTLEVBQUUsYUFOUztBQU9wQkUsY0FBTSxFQUFFLEVBUFk7QUFRcEJ4TztBQVJvQixPQUF0QjtBQVVBaU8seUJBQW1CLEdBQUcsd0JBQXRCO0FBQ0QsS0FaTSxNQVlBLElBQUk5QixlQUFlLENBQUM2QixxQkFBRCxDQUFmLEtBQTJDcEwsU0FBL0MsRUFBMEQ7QUFDL0R5SyxZQUFNLENBQUM1SCxjQUFQLEdBQXdCMEcsZUFBZSxDQUFDNkIscUJBQUQsQ0FBdkM7QUFDQUMseUJBQW1CLEdBQUcsMkJBQXRCO0FBQ0QsS0FITSxNQUdBLElBQUk5TixRQUFRLENBQUNoQixVQUFULENBQW9Cc0gsaUJBQXBCLElBQ0EsQ0FBQ3NGLG1DQUFtQyxDQUFDdkssUUFBcEMsQ0FBNkN3TSxxQkFBN0MsQ0FETCxFQUMwRTtBQUMvRVgsWUFBTSxDQUFDOUgsUUFBUCxHQUFrQixJQUFsQjtBQUNEOztBQUNELFFBQUlwRixRQUFRLENBQUNDLEtBQVQsS0FBbUIsYUFBdkIsRUFBc0M7QUFDcENpTixZQUFNLENBQUM1SCxjQUFQLEdBQXdCLEVBQXhCO0FBQ0Q7O0FBQ0QsUUFBSXRGLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0J3UCxlQUFwQixLQUF3Qy9MLFNBQTVDLEVBQXVEO0FBQ3JEeUssWUFBTSxDQUFDNUgsY0FBUCxHQUF3QnRGLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0J3UCxlQUE1QztBQUNEOztBQUVEM1AsSUFBQSxpSEFBcUIsQ0FDbkIsSUFEbUIsRUFFbkIsQ0FBQ2tQLHNCQUFzQixJQUFJRCxtQkFBMUIsSUFBa0QsY0FBYUQscUJBQXNCLEVBQXRGLEVBQXlGakgsV0FBekYsRUFGbUIsRUFHbkJzRyxNQUhtQixDQUFyQjtBQUlEOztBQWxPNkM7O0FBb09oRHJHLGNBQWMsQ0FBQ0MsTUFBZixDQUFzQixzQkFBdEIsRUFBOENxRixpQkFBOUMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBLE1BQU1zQyxtQkFBTixTQUFrQyw0REFBbEMsQ0FBaUQ7QUFDL0MsYUFBVy9KLFFBQVgsR0FBc0I7QUFDcEIsV0FBTywyRUFBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQUFaO0FBZ0ZEOztBQUVELGFBQVdTLFVBQVgsR0FBd0I7QUFDdEIsV0FBTztBQUNMdEYsWUFBTSxFQUFFMEYsTUFESDtBQUVMMEksZ0JBQVUsRUFBRTFJLE1BRlA7QUFHTDJJLGdCQUFVLEVBQUUzSSxNQUhQO0FBSUw0SSxlQUFTLEVBQUU1SSxNQUpOO0FBS0w2SSxrQkFBWSxFQUFFN0ksTUFMVDtBQU1MOEksWUFBTSxFQUFFO0FBQUUxTCxZQUFJLEVBQUU0QyxNQUFSO0FBQWdCdkIsYUFBSyxFQUFFO0FBQXZCLE9BTkg7QUFPTDZHLFNBQUcsRUFBRTtBQUFFbEksWUFBSSxFQUFFbUksTUFBUjtBQUFnQjlHLGFBQUssRUFBRTtBQUF2QixPQVBBO0FBUUwrRyxTQUFHLEVBQUU7QUFBRXBJLFlBQUksRUFBRW1JLE1BQVI7QUFBZ0I5RyxhQUFLLEVBQUU7QUFBdkIsT0FSQTtBQVVMMEssaUJBQVcsRUFBRTtBQUNYL0wsWUFBSSxFQUFFbUksTUFESztBQUVYOUcsYUFBSyxFQUFFO0FBRkksT0FWUjtBQWNMeUcsdUJBQWlCLEVBQUVwRixPQWRkO0FBZUxzSixVQUFJLEVBQUVwSixNQWZEO0FBZ0JMcUosbUJBQWEsRUFBRTtBQUNiak0sWUFBSSxFQUFFMEMsT0FETztBQUVickIsYUFBSyxFQUFFO0FBRk0sT0FoQlY7QUFvQkw2SyxpQkFBVyxFQUFFO0FBQ1hsTSxZQUFJLEVBQUUwQyxPQURLO0FBRVhyQixhQUFLLEVBQUU7QUFGSSxPQXBCUjtBQXdCTDhLLGdCQUFVLEVBQUU7QUFDVm5NLFlBQUksRUFBRTBDLE9BREk7QUFFVnJCLGFBQUssRUFBRTtBQUZHLE9BeEJQO0FBNEJMK0ssaUJBQVcsRUFBRTtBQUNYcE0sWUFBSSxFQUFFMEMsT0FESztBQUVYckIsYUFBSyxFQUFFO0FBRkksT0E1QlI7QUFnQ0xnTCxrQkFBWSxFQUFFbEUsTUFoQ1Q7QUFpQ0xtRSxrQkFBWSxFQUFFbkUsTUFqQ1Q7QUFrQ0xvRSxnQkFBVSxFQUFFO0FBQ1Z2TSxZQUFJLEVBQUVtSSxNQURJO0FBRVZwRixnQkFBUSxFQUFFO0FBRkE7QUFsQ1AsS0FBUDtBQXVDRDs7QUFFRHNFLE9BQUssR0FBRztBQUNOLFVBQU1BLEtBQU47QUFDQSxTQUFLbUYsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CQyxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNEOztBQUVEOUgsbUJBQWlCLEdBQUc7QUFDbEIsVUFBTUEsaUJBQU47QUFDQSxTQUFLK0gsWUFBTCxHQUFvQixJQUFwQjtBQUNBbFIsVUFBTSxDQUFDbVIsZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsS0FBS0gsYUFBdkM7O0FBQ0EsU0FBS0ksY0FBTDtBQUNEOztBQUVEaEksc0JBQW9CLEdBQUc7QUFDckJwSixVQUFNLENBQUNxUixtQkFBUCxDQUEyQixRQUEzQixFQUFxQyxLQUFLTCxhQUExQztBQUNBLFNBQUtFLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxVQUFNOUgsb0JBQU47QUFDRDs7QUFFRCxhQUFXYixTQUFYLEdBQXVCO0FBQ3JCLFdBQU8sQ0FDTCw4Q0FESyxDQUFQO0FBR0Q7O0FBRUQ2SSxnQkFBYyxHQUFHO0FBQ2YsUUFBSSxDQUFDLEtBQUtGLFlBQVYsRUFBd0I7O0FBQ3hCLFNBQUtJLFFBQUw7O0FBQ0EsUUFBSSxLQUFLQyxRQUFULEVBQW1CO0FBQ25CLFNBQUtDLGNBQUwsR0FBc0IsS0FBdEI7QUFDQSxTQUFLRCxRQUFMLEdBQWdCdlIsTUFBTSxDQUFDeVIscUJBQVAsQ0FBNkIsTUFBTTtBQUNqRCxXQUFLRixRQUFMLEdBQWdCLElBQWhCO0FBQ0EsV0FBS0MsY0FBTCxHQUFzQixJQUF0Qjs7QUFDQSxXQUFLUixhQUFMO0FBQ0QsS0FKZSxDQUFoQjtBQUtEOztBQUVETSxVQUFRLEdBQUc7QUFDVCxVQUFNL0IsR0FBRyxHQUFHO0FBQ1ZvQixnQkFBVSxFQUFFLEtBQUtILElBQUwsS0FBYyxhQUFkLElBQStCLEtBQUtJLFdBRHRDO0FBRVZGLGlCQUFXLEVBQ04sQ0FBQyxLQUFLRixJQUFMLEtBQWMsY0FBZCxJQUFnQyxLQUFLQSxJQUFMLEtBQWMsYUFBL0MsS0FDQSxLQUFLSTtBQUpBLEtBQVo7O0FBTUEsUUFBSSxDQUFDLEtBQUtHLFVBQVYsRUFBc0I7QUFDcEJ4QixTQUFHLENBQUNtQixXQUFKLEdBQWtCLElBQWxCO0FBQ0Q7O0FBQ0QsU0FBS3JQLGFBQUwsQ0FBbUJrTyxHQUFuQjtBQUNEOztBQUVEeUIsZUFBYSxHQUFHO0FBQ2QsUUFBSSxDQUFDLEtBQUtRLGNBQVYsRUFBMEI7O0FBQzFCLFFBQUksS0FBS2hCLElBQUwsS0FBYyxXQUFsQixFQUErQjtBQUM3QixXQUFLblAsYUFBTCxDQUFtQjtBQUNqQnNQLGtCQUFVLEVBQUUsSUFESztBQUVqQkQsbUJBQVcsRUFBRTtBQUZJLE9BQW5CO0FBSUE7QUFDRDs7QUFDRCxVQUFNZ0IsZUFBZSxHQUFHLEtBQUtoQixXQUE3QjtBQUNBLFVBQU1pQixjQUFjLEdBQUcsS0FBS2hCLFVBQTVCO0FBQ0EsU0FBS3RQLGFBQUwsQ0FBbUI7QUFDakJ1UCxpQkFBVyxFQUFFLEtBREk7QUFFakJELGdCQUFVLEVBQUUsS0FGSztBQUdqQkQsaUJBQVcsRUFBRTtBQUhJLEtBQW5CO0FBS0EsVUFBTTtBQUFFekM7QUFBRixRQUFnQixLQUFLMkQsQ0FBM0I7QUFDQSxVQUFNQyxjQUFjLEdBQUc1RCxTQUFTLENBQUM2RCxXQUFqQztBQUNBLFFBQUlELGNBQWMsS0FBSyxDQUF2QixFQUEwQjs7QUFDMUIsUUFBSUEsY0FBYyxJQUFJLEtBQUtoQixZQUEzQixFQUF5QztBQUN2QyxXQUFLRCxXQUFMLEdBQW1CLElBQW5CO0FBQ0QsS0FGRCxNQUVPLElBQUlpQixjQUFjLElBQUksS0FBS2YsWUFBM0IsRUFBeUM7QUFDOUMsV0FBS0YsV0FBTCxHQUFtQixLQUFuQjtBQUNELEtBRk0sTUFFQTtBQUNMLFVBQUllLGNBQWMsSUFBSSxLQUFLbkIsSUFBTCxLQUFjLGFBQXBDLEVBQW1EO0FBQ2pEO0FBQ0EsYUFBS1ksY0FBTDs7QUFDQTtBQUNEOztBQUNELFlBQU1XLGVBQWUsR0FBRzlELFNBQVMsQ0FBQytELFlBQWxDO0FBQ0EsWUFBTUMsV0FBVyxHQUFHLEtBQUt0UixJQUFMLENBQVVOLGFBQVYsQ0FBd0IsYUFBeEIsRUFBdUMyUixZQUEzRDtBQUNBLFdBQUtwQixXQUFMLEdBQW1CbUIsZUFBZSxHQUFHRSxXQUFXLEdBQUcsR0FBbkQ7O0FBQ0EsVUFBSSxLQUFLckIsV0FBVCxFQUFzQjtBQUNwQixhQUFLQyxZQUFMLEdBQW9CZ0IsY0FBcEI7QUFDRCxPQUZELE1BRU8sSUFBSSxDQUFDSCxlQUFMLEVBQXNCO0FBQzNCLGFBQUtaLFlBQUwsR0FBb0JlLGNBQXBCO0FBQ0Q7QUFDRjs7QUFDRCxTQUFLUCxRQUFMO0FBQ0Q7O0FBRURZLG1CQUFpQixDQUFDMUIsSUFBRCxFQUFPQyxhQUFQLEVBQXNCRyxXQUF0QixFQUFtQzNKLFFBQW5DLEVBQTZDO0FBQzVELFFBQUlBLFFBQUosRUFBYztBQUNaLGFBQU8sRUFBUDtBQUNEOztBQUNELFFBQUl1SixJQUFJLEtBQUssYUFBYixFQUE0QjtBQUMxQixhQUFPLFFBQVA7QUFDRDs7QUFDRCxRQUFJQyxhQUFhLElBQUlHLFdBQXJCLEVBQWtDO0FBQ2hDLGFBQU8sY0FBUDtBQUNEOztBQUNELFdBQU8sTUFBUDtBQUNEOztBQUVEdUIsYUFBVyxDQUFDbEwsUUFBRCxFQUFXcEYsUUFBWCxFQUFxQjhPLFVBQXJCLEVBQWlDO0FBQzFDLFFBQUkxSixRQUFRLElBQUkwSixVQUFoQixFQUE0QjtBQUMxQixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRDs7QUFFRHlCLGVBQWEsQ0FBQzdFLEVBQUQsRUFBSztBQUNoQixVQUFNMUgsS0FBSyxHQUFHd00sUUFBUSxDQUFDOUUsRUFBRSxDQUFDQyxNQUFILENBQVUzSCxLQUFYLEVBQWtCLEVBQWxCLENBQXRCO0FBQ0EsVUFBTXlNLEtBQUssR0FBRztBQUFFbFEsZUFBUyxFQUFFLEtBQUtQLFFBQUwsQ0FBY087QUFBM0IsS0FBZDtBQUNBLFFBQUl1SyxNQUFNLENBQUM0RixLQUFQLENBQWExTSxLQUFiLENBQUosRUFBeUI7QUFDekIsUUFBSTJILE1BQU0sR0FBRyxLQUFLN00sSUFBTCxDQUFVTixhQUFWLENBQXdCLFNBQXhCLENBQWI7O0FBQ0EsUUFBSWtOLEVBQUUsQ0FBQ0MsTUFBSCxLQUFjQSxNQUFsQixFQUEwQjtBQUN4QjtBQUNBLE9BQUM7QUFBRUE7QUFBRixVQUFhRCxFQUFkO0FBQ0QsS0FIRCxNQUdPLElBQUlBLEVBQUUsQ0FBQ2lGLElBQVAsRUFBYTtBQUNsQixPQUFDaEYsTUFBRCxJQUFXRCxFQUFFLENBQUNpRixJQUFkO0FBQ0QsS0FGTSxNQUVBLElBQUlqRixFQUFFLENBQUNrRixZQUFQLEVBQXFCO0FBQzFCLE9BQUNqRixNQUFELElBQVdELEVBQUUsQ0FBQ2tGLFlBQUgsRUFBWDtBQUNEOztBQUNELFFBQUk1TSxLQUFLLEtBQUssQ0FBVixJQUFnQkEsS0FBSyxJQUFJMkgsTUFBTSxDQUFDZCxHQUFoQixJQUF1QixDQUFDLEtBQUtKLGlCQUFqRCxFQUFxRTtBQUNuRSxXQUFLN0ssSUFBTCxDQUFVaVIsV0FBVixDQUFzQixLQUFLaFIsTUFBM0IsRUFBbUMsS0FBS29PLFVBQXhDLEVBQW9Ed0MsS0FBcEQ7QUFDRCxLQUZELE1BRU87QUFDTEEsV0FBSyxDQUFDLEtBQUtyQyxZQUFMLElBQXFCLEtBQUtELFNBQTNCLENBQUwsR0FBNkNuSyxLQUE3QztBQUNBLFdBQUtwRSxJQUFMLENBQVVpUixXQUFWLENBQXNCLEtBQUtoUixNQUEzQixFQUFtQyxLQUFLcU8sVUFBeEMsRUFBb0R1QyxLQUFwRDtBQUNEO0FBQ0Y7O0FBRURLLGlCQUFlLENBQUM5USxRQUFELEVBQVdxTyxNQUFYLEVBQW1CRixTQUFuQixFQUE4QjtBQUMzQyxVQUFNVCxHQUFHLEdBQUc7QUFDVmdCLGlCQUFXLEVBQUUsS0FBS3pELElBQUwsQ0FBVWpMLFFBQVYsRUFBb0JxTyxNQUFwQixJQUE4QnJPLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0JtUCxTQUFwQixDQUE5QixHQUErRDtBQURsRSxLQUFaOztBQUdBLFFBQUluTyxRQUFKLEVBQWM7QUFDWnJDLFlBQU0sQ0FBQ0MsTUFBUCxDQUFjOFAsR0FBZCxFQUFtQjtBQUNqQnNCLG9CQUFZLEVBQUUsQ0FERztBQUVqQkMsb0JBQVksRUFBRSxHQUZHO0FBR2pCSCxrQkFBVSxFQUFFLEtBSEs7QUFJakJELG1CQUFXLEVBQUUsS0FKSTtBQUtqQkUsbUJBQVcsRUFBRSxLQUxJO0FBTWpCSixZQUFJLEVBQUUzTyxRQUFRLENBQUNoQixVQUFULENBQW9CMk8sZUFOVDtBQU9qQmlCLHFCQUFhLEVBQUUsQ0FBQyxDQUFDNU8sUUFBUSxDQUFDaEIsVUFBVCxDQUFvQitSO0FBUHBCLE9BQW5CO0FBU0Q7O0FBQ0QsU0FBS3ZSLGFBQUwsQ0FBbUJrTyxHQUFuQjs7QUFDQSxRQUFJMU4sUUFBSixFQUFjO0FBQ1osV0FBS3VQLGNBQUw7QUFDRDtBQUNGOztBQUVEdEUsTUFBSSxDQUFDakwsUUFBRCxFQUFXcU8sTUFBWCxFQUFtQjtBQUNyQixXQUFPck8sUUFBUSxLQUFLLENBQUNxTyxNQUFELElBQVdyTyxRQUFRLENBQUNDLEtBQVQsS0FBbUJvTyxNQUFuQyxDQUFmO0FBQ0Q7O0FBRUQ5RSxpQkFBZSxDQUFDbUMsRUFBRCxFQUFLO0FBQ2xCQSxNQUFFLENBQUNuQyxlQUFIO0FBQ0Q7O0FBNVI4Qzs7QUE4UmpEMUMsY0FBYyxDQUFDQyxNQUFmLENBQXNCLHdCQUF0QixFQUFnRDJILG1CQUFoRCxFOzs7Ozs7Ozs7Ozs7Ozs7O0FDdFNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0EsTUFBTXVDLHNCQUFOLFNBQXFDLDREQUFyQyxDQUFvRDtBQUNsRCxhQUFXdE0sUUFBWCxHQUFzQjtBQUNwQixXQUFPLDJFQUFLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQUFaO0FBMkJEOztBQTdCaUQ7O0FBK0JwRG1DLGNBQWMsQ0FBQ0MsTUFBZixDQUFzQiwyQkFBdEIsRUFBbURrSyxzQkFBbkQsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0Q0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsK0RBQWdCQyxVQUFELElBQWdCO0FBQzdCOzs7QUFHQSxRQUFNQyxXQUFOLFNBQTBCRCxVQUExQixDQUFxQztBQUNuQzs7Ozs7Ozs7Ozs7Ozs7O0FBZUExRyxRQUFJLENBQUM1SCxJQUFELEVBQU93TyxNQUFNLEdBQUcsRUFBaEIsRUFBb0IzTixPQUFPLEdBQUcsRUFBOUIsRUFBa0M7QUFDcEMsWUFBTTROLEtBQUssR0FBRyxJQUFJQyxLQUFKLENBQVUxTyxJQUFWLEVBQWdCO0FBQzVCMk8sZUFBTyxFQUFFOU4sT0FBTyxDQUFDOE4sT0FBUixLQUFvQjdPLFNBQXBCLEdBQWdDLElBQWhDLEdBQXVDZSxPQUFPLENBQUM4TixPQUQ1QjtBQUU1QkMsa0JBQVUsRUFBRWxNLE9BQU8sQ0FBQzdCLE9BQU8sQ0FBQytOLFVBQVQsQ0FGUztBQUc1QkMsZ0JBQVEsRUFBRWhPLE9BQU8sQ0FBQ2dPLFFBQVIsS0FBcUIvTyxTQUFyQixHQUFpQyxJQUFqQyxHQUF3Q2UsT0FBTyxDQUFDZ087QUFIOUIsT0FBaEIsQ0FBZDtBQUtBSixXQUFLLENBQUNELE1BQU4sR0FBZUEsTUFBZjtBQUNBLFlBQU1NLElBQUksR0FBR2pPLE9BQU8sQ0FBQ2lPLElBQVIsSUFBZ0IsSUFBN0I7QUFDQUEsVUFBSSxDQUFDQyxhQUFMLENBQW1CTixLQUFuQjtBQUNBLGFBQU9BLEtBQVA7QUFDRDs7QUExQmtDOztBQTRCckMsU0FBT0YsV0FBUDtBQUNELENBakNELEU7Ozs7Ozs7Ozs7Ozs7O0FDOUJBO0FBRUEvUyxNQUFNLENBQUN1RCxpQkFBUCxHQUEyQnZELE1BQU0sQ0FBQ3VELGlCQUFQLElBQTRCLEVBQXZEO0FBQ0EsTUFBTWlRLHNCQUFzQixHQUFHLENBQzdCLGFBRDZCLEVBQ2QsY0FEYyxFQUNFLHFCQURGLEVBQ3lCLGFBRHpCLEVBQ3dDLFdBRHhDLENBQS9CO0FBSUEsTUFBTUMsa0JBQWtCLEdBQUc7QUFDekJsUixPQUFLLEVBQUUrQixTQURrQjtBQUV6Qm9QLFFBQU0sRUFBRXBQLFNBRmlCO0FBR3pCcVAsV0FBUyxFQUFFclAsU0FIYztBQUl6QnhDLE9BQUssRUFBRXdDLFNBSmtCO0FBS3pCc1AsZUFBYSxFQUFFdFAsU0FMVTtBQU16QitMLGlCQUFlLEVBQUU7QUFBRTdMLFFBQUksRUFBRTtBQUFSLEdBTlE7QUFPekJnTCxpQkFBZSxFQUFFO0FBQ2ZoTCxRQUFJLEVBQUUsT0FEUztBQUVmYSxXQUFPLEVBQUU7QUFDUHNJLFdBQUssRUFBRTZGLHNCQUFzQixDQUFDSyxNQUF2QixDQUE4QixRQUE5QixDQURBO0FBRVBuUSxXQUFLLEVBQUU4UCxzQkFBc0IsQ0FBQ0ssTUFBdkIsQ0FBOEIsUUFBOUIsQ0FGQTtBQUdQakcsYUFBTyxFQUFFNEYsc0JBQXNCLENBQUNLLE1BQXZCLENBQThCLFFBQTlCLENBSEY7QUFJUCxXQUFLLENBQUMsUUFBRDtBQUpFO0FBRk0sR0FQUTtBQWdCekJoRSxnQ0FBOEIsRUFBRTtBQUFFckwsUUFBSSxFQUFFO0FBQVIsR0FoQlA7QUFpQnpCcUssYUFBVyxFQUFFO0FBQUVySyxRQUFJLEVBQUU7QUFBUixHQWpCWTtBQWtCekIyRCxtQkFBaUIsRUFBRTtBQUFFM0QsUUFBSSxFQUFFO0FBQVIsR0FsQk07QUFtQnpCOEYsY0FBWSxFQUFFO0FBQUU5RixRQUFJLEVBQUU7QUFBUixHQW5CVztBQW9CekJrRCxxQkFBbUIsRUFBRTtBQUFFbEQsUUFBSSxFQUFFO0FBQVIsR0FwQkk7QUFxQnpCK0UsYUFBVyxFQUFFO0FBQUUvRSxRQUFJLEVBQUU7QUFBUixHQXJCWTtBQXNCekJvTyxnQkFBYyxFQUFFO0FBQUVwTyxRQUFJLEVBQUU7QUFBUixHQXRCUztBQXVCekJzUCxjQUFZLEVBQUU7QUFBRXRQLFFBQUksRUFBRTtBQUFSLEdBdkJXO0FBd0J6QjlFLE9BQUssRUFBRTtBQUFFOEUsUUFBSSxFQUFFO0FBQVIsR0F4QmtCO0FBeUJ6Qm1HLGtCQUFnQixFQUFFO0FBQUVuRyxRQUFJLEVBQUU7QUFBUixHQXpCTztBQTBCekJvRyw0QkFBMEIsRUFBRTtBQUFFcEcsUUFBSSxFQUFFO0FBQVIsR0ExQkg7QUEyQnpCdVAsc0JBQW9CLEVBQUU7QUFBRXZQLFFBQUksRUFBRTtBQUFSLEdBM0JHO0FBNEJ6QndQLFlBQVUsRUFBRTtBQUFFeFAsUUFBSSxFQUFFO0FBQVI7QUE1QmEsQ0FBM0I7QUE4QkF4RSxNQUFNLENBQUN1RCxpQkFBUCxDQUF5QmEsc0JBQXpCLEdBQWtELGdHQUFrQixDQUFDQSxzQkFBckU7QUFDQXBFLE1BQU0sQ0FBQ3VELGlCQUFQLENBQXlCSyxZQUF6QixHQUF3QyxnR0FBa0IsQ0FBQ0EsWUFBM0Q7QUFDQXBFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjTyxNQUFNLENBQUN1RCxpQkFBUCxDQUF5QmEsc0JBQXZDLEVBQStEcVAsa0JBQS9ELEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Q0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUF6VCxNQUFNLENBQUM2SCxRQUFQLEdBQWtCN0gsTUFBTSxDQUFDNkgsUUFBUCxJQUFtQjtBQUNuQzJMLHdCQUFzQixFQUFFLENBQ3RCLGFBRHNCLEVBQ1AsY0FETyxFQUNTLHFCQURULEVBQ2dDLGFBRGhDLEVBQytDLFdBRC9DLENBRFc7O0FBS25DUyxTQUFPLENBQUN6SSxJQUFELEVBQU87QUFDWixRQUFJQSxJQUFJLEtBQUtwTCxRQUFiLEVBQXVCLE9BQU8sSUFBUDtBQUN2QixVQUFNTyxJQUFJLEdBQUc2SyxJQUFJLENBQUMwSSxXQUFMLEVBQWI7QUFDQSxXQUFRdlQsSUFBSSxZQUFZd1QsZ0JBQWpCO0FBQXFDO0FBQTJCeFQsUUFBRCxDQUFPeVQsSUFBdEUsR0FBNkV6VCxJQUFwRjtBQUNELEdBVGtDOztBQVduQzBULGVBQWEsQ0FBQzdJLElBQUQsRUFBTzhJLFFBQVAsRUFBaUI7QUFDNUIsV0FBTzlJLElBQUksQ0FBQytJLFVBQUwsR0FDTC9JLElBQUksQ0FBQytJLFVBQUwsQ0FBZ0JsVSxhQUFoQixDQUE4QmlVLFFBQTlCLENBREssR0FFTDlJLElBQUksQ0FBQ25MLGFBQUwsQ0FBbUJpVSxRQUFuQixDQUZGO0FBR0QsR0Fma0M7O0FBaUJuQ0UscUJBQW1CLENBQUM3VCxJQUFELEVBQU84VCxTQUFQLEVBQWtCO0FBQ25DLFFBQUk5VCxJQUFJLEtBQUssSUFBYixFQUFtQixPQUFPLElBQVA7QUFDbkIsVUFBTTZLLElBQUksR0FBR2lKLFNBQVMsQ0FBQ0MsS0FBVixFQUFiOztBQUNBLFFBQUlsSixJQUFKLEVBQVU7QUFDUixhQUFPeEwsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjJNLG1CQUFoQixDQUNMeFUsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQndNLGFBQWhCLENBQThCMVQsSUFBOUIsRUFBb0M2SyxJQUFwQyxDQURLLEVBQ3NDaUosU0FEdEMsQ0FBUDtBQUVEOztBQUNELFdBQU85VCxJQUFQO0FBQ0QsR0F6QmtDOztBQTJCbkNnVSxZQUFVLENBQUNuSixJQUFELEVBQU87QUFDZixRQUFJQSxJQUFJLENBQUNvSixRQUFMLEtBQWtCdFEsU0FBdEIsRUFBaUM7QUFDL0JrSCxVQUFJLENBQUNvSixRQUFMLEdBQWdCLEVBQWhCOztBQUNBLFdBQUssSUFBSTVWLE9BQU8sR0FBSXdNLElBQUksQ0FBQ3ZLLE9BQUwsS0FBaUIsa0JBQWpCLEdBQXNDakIsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQm9NLE9BQWhCLENBQXdCekksSUFBeEIsQ0FBdEMsR0FBc0VBLElBQTFGLEVBQ0V4TSxPQURGLEVBQ1dBLE9BQU8sR0FBR2dCLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0JvTSxPQUFoQixDQUF3QmpWLE9BQXhCLENBRHJCLEVBQ3VEO0FBQ3JELGdCQUFRQSxPQUFPLENBQUNpQyxPQUFoQjtBQUNFLGVBQUssa0JBQUw7QUFDRSxnQkFBSWpDLE9BQU8sQ0FBQzZWLFdBQVosRUFBeUI7QUFDdkJySixrQkFBSSxDQUFDb0osUUFBTCxDQUFjOUYsSUFBZCxDQUFtQjlQLE9BQU8sQ0FBQzZWLFdBQVIsQ0FBb0J6UyxTQUF2QztBQUNELGFBRkQsTUFFTyxJQUFJcEQsT0FBTyxDQUFDNlYsV0FBUixLQUF3QixLQUF4QixJQUFpQzdWLE9BQU8sQ0FBQytJLE1BQXpDLElBQW1EL0ksT0FBTyxDQUFDK0ksTUFBUixDQUFlRyxNQUF0RSxFQUE4RTtBQUNuRnNELGtCQUFJLENBQUNvSixRQUFMLENBQWM5RixJQUFkLENBQW9CLFNBQVEsaUhBQWtCLENBQUM5UCxPQUFPLENBQUMrSSxNQUFSLENBQWUsQ0FBZixDQUFELENBQW9CLEVBQWxFO0FBQ0Q7O0FBQ0Q7O0FBQ0YsZUFBSyxpQkFBTDtBQUNBLGVBQUssb0JBQUw7QUFDRSxnQkFBSS9JLE9BQU8sQ0FBQzZDLFFBQVosRUFBc0I7QUFDcEIySixrQkFBSSxDQUFDb0osUUFBTCxDQUFjOUYsSUFBZCxDQUFtQjlQLE9BQU8sQ0FBQzZDLFFBQVIsQ0FBaUJPLFNBQXBDO0FBQ0Q7O0FBQ0Q7O0FBQ0YsZUFBSyxVQUFMO0FBQ0VvSixnQkFBSSxDQUFDb0osUUFBTCxDQUFjOUYsSUFBZCxDQUFtQjlQLE9BQU8sQ0FBQ3dCLFlBQVIsQ0FBcUIsV0FBckIsS0FBcUMsY0FBeEQ7O0FBQ0E7QUFDRjtBQWpCRjtBQW1CRDs7QUFDRGdMLFVBQUksQ0FBQ29KLFFBQUwsQ0FBY0UsT0FBZDtBQUNEOztBQUNELFdBQU90SixJQUFJLENBQUNvSixRQUFaO0FBQ0QsR0F2RGtDOztBQXlEbkNHLFdBQVMsQ0FBQ2xWLEdBQUQsRUFBTXdGLE9BQU4sRUFBZTtBQUN0QixRQUFJLENBQUNBLE9BQUwsRUFBYyxPQUFPLElBQVA7QUFDZCxRQUFJQSxPQUFPLENBQUN4RixHQUFELENBQVgsRUFBa0IsT0FBT0EsR0FBUDtBQUNsQixXQUFPTCxNQUFNLENBQUNHLElBQVAsQ0FBWTBGLE9BQVosRUFBcUIyUCxJQUFyQixDQUEwQkMsTUFBTSxJQUFJcFYsR0FBRyxDQUFDcVYsS0FBSixDQUFXLElBQUdELE1BQU8sR0FBckIsQ0FBcEMsQ0FBUDtBQUNELEdBN0RrQzs7QUErRG5DRSwyQkFBeUIsQ0FBQ3RULFFBQUQsRUFBVztBQUNsQyxVQUFNOEosSUFBSSxHQUFHM0wsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQmlFLE9BQWhCLEVBQWI7QUFDQSxRQUFJLENBQUNILElBQUwsRUFBVyxPQUFPOUosUUFBUDtBQUNYLFVBQU1xVCxLQUFLLEdBQUcsS0FBS0gsU0FBTCxDQUFlcEosSUFBZixFQUFxQjlKLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0I2UyxNQUF6QyxDQUFkO0FBQ0EsUUFBSSxDQUFDd0IsS0FBTCxFQUFZLE9BQU9yVCxRQUFQO0FBQ1osVUFBTWhCLFVBQVUsR0FBR3JCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JvQyxRQUFRLENBQUNoQixVQUFULENBQW9CNlMsTUFBcEIsQ0FBMkJ3QixLQUEzQixDQUFsQixDQUFuQjtBQUVBLFFBQUksQ0FBQzFWLE1BQU0sQ0FBQ0csSUFBUCxDQUFZa0IsVUFBWixFQUF3QnFILE1BQTdCLEVBQXFDLE9BQU9yRyxRQUFQO0FBQ3JDLFdBQU83QixNQUFNLENBQUM2SCxRQUFQLENBQWdCdU4sZUFBaEIsQ0FBZ0N2VCxRQUFoQyxFQUEwQ2hCLFVBQTFDLENBQVA7QUFDRCxHQXhFa0M7O0FBMEVuQ3dVLDBCQUF3QixDQUFDN0osSUFBRCxFQUFPM0osUUFBUCxFQUFpQjtBQUN2QyxVQUFNeVQsT0FBTyxHQUFHdFYsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjhNLFVBQWhCLENBQTJCbkosSUFBM0IsQ0FBaEI7QUFDQSxRQUFJLENBQUM4SixPQUFMLEVBQWMsT0FBT3pULFFBQVA7O0FBRWQsUUFBSSxDQUFDQSxRQUFRLENBQUNoQixVQUFULENBQW9CMEIsS0FBekIsRUFBZ0M7QUFDOUIsYUFBT1YsUUFBUDtBQUNEOztBQUNELFVBQU1oQixVQUFVLEdBQUcsRUFBbkI7QUFDQXlVLFdBQU8sQ0FBQzFWLE9BQVIsQ0FBaUIyVixDQUFELElBQU87QUFDckIsWUFBTUwsS0FBSyxHQUFHLEtBQUtILFNBQUwsQ0FBZVEsQ0FBZixFQUFrQjFULFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0IwQixLQUF0QyxDQUFkOztBQUNBLFVBQUlWLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0IwQixLQUFwQixDQUEwQjJTLEtBQTFCLENBQUosRUFBc0M7QUFDcEMxVixjQUFNLENBQUNDLE1BQVAsQ0FBY29CLFVBQWQsRUFBMEJnQixRQUFRLENBQUNoQixVQUFULENBQW9CMEIsS0FBcEIsQ0FBMEIyUyxLQUExQixDQUExQjtBQUNEO0FBQ0YsS0FMRDtBQU9BLFFBQUksQ0FBQzFWLE1BQU0sQ0FBQ0csSUFBUCxDQUFZa0IsVUFBWixFQUF3QnFILE1BQTdCLEVBQXFDLE9BQU9yRyxRQUFQO0FBRXJDLFdBQU83QixNQUFNLENBQUM2SCxRQUFQLENBQWdCdU4sZUFBaEIsQ0FBZ0N2VCxRQUFoQyxFQUEwQ2hCLFVBQTFDLENBQVA7QUFDRCxHQTVGa0M7O0FBOEZuQzJVLFVBQVEsQ0FBQ2pHLEdBQUQsRUFBTTFKLEtBQU4sRUFBYTtBQUNuQixRQUFJMEosR0FBRyxDQUFDa0csU0FBSixLQUFrQm5SLFNBQXRCLEVBQWlDO0FBQy9CaUwsU0FBRyxDQUFDa0csU0FBSixHQUFnQjVQLEtBQWhCO0FBQ0QsS0FGRCxNQUVPO0FBQ0wwSixTQUFHLENBQUNrRyxTQUFKLEdBQWdCbEcsR0FBRyxDQUFDa0csU0FBSixJQUFpQjVQLEtBQWpDO0FBQ0Q7QUFDRixHQXBHa0M7O0FBc0duQzZQLDhCQUE0QixDQUFDalUsSUFBRCxFQUFPc0csTUFBUCxFQUFlbEcsUUFBZixFQUF5QmhCLFVBQXpCLEVBQXFDO0FBQy9ELFFBQUksQ0FBQ0EsVUFBVSxDQUFDOFMsU0FBaEIsRUFBMkI7QUFDekIzVCxZQUFNLENBQUM2SCxRQUFQLENBQWdCMk4sUUFBaEIsQ0FBeUIzVCxRQUF6QixFQUFtQyxJQUFuQzs7QUFDQSxhQUFPQSxRQUFQO0FBQ0Q7O0FBQ0QsVUFBTThULGFBQWEsR0FBRyxFQUF0QjtBQUNBLFFBQUlDLFNBQVMsR0FBRyxLQUFoQjtBQUNBLFFBQUlDLFVBQVUsR0FBRyxLQUFqQjtBQUNBclcsVUFBTSxDQUFDRyxJQUFQLENBQVlrQixVQUFVLENBQUM4UyxTQUF2QixFQUFrQy9ULE9BQWxDLENBQTJDQyxHQUFELElBQVM7QUFDakQsWUFBTTBHLFFBQVEsR0FBRzFGLFVBQVUsQ0FBQzhTLFNBQVgsQ0FBcUI5VCxHQUFyQixDQUFqQjs7QUFDQSxVQUFJMEcsUUFBUSxDQUFDMk8sS0FBVCxDQUFlLHFCQUFmLENBQUosRUFBMkM7QUFDekNVLGlCQUFTLEdBQUcsSUFBWjtBQUNEOztBQUNELFlBQU0vUCxLQUFLLEdBQUc3RixNQUFNLENBQUM2SCxRQUFQLENBQWdCQyxlQUFoQixDQUNadkIsUUFEWSxFQUNGOUUsSUFERSxFQUNJc0csTUFESixFQUNZbEcsUUFEWixFQUNzQmhCLFVBRHRCLEVBRVhnQixRQUFRLENBQUNpVSxzQkFBVCxJQUFtQ2pVLFFBQVEsQ0FBQ2lVLHNCQUFULENBQWdDalcsR0FBaEMsQ0FBcEMsSUFDSWdCLFVBQVUsQ0FBQ2hCLEdBQUQsQ0FIRixFQUlaZ0MsUUFBUSxDQUFDa1UsaUJBQVQsSUFBOEJsVSxRQUFRLENBQUNDLEtBSjNCLENBQWQsQ0FMaUQsQ0FVakQ7O0FBQ0EsVUFBSStELEtBQUssS0FBSyxJQUFkLEVBQW9CO0FBQ3BCOFAsbUJBQWEsQ0FBQzlWLEdBQUQsQ0FBYixHQUFxQmdHLEtBQXJCOztBQUNBLFVBQUloRyxHQUFHLEtBQUssT0FBWixFQUFxQjtBQUNuQixZQUFJZ0csS0FBSyxLQUFLaEUsUUFBUSxDQUFDQyxLQUF2QixFQUE4QjtBQUM1QitULG9CQUFVLEdBQUcsSUFBYjtBQUNEO0FBQ0YsT0FKRCxNQUlPLElBQUloVyxHQUFHLEtBQUssZUFBWixFQUE2QjtBQUNsQyxZQUFJZ0csS0FBSyxLQUFLaEUsUUFBUSxDQUFDK1IsYUFBdkIsRUFBc0M7QUFDcENpQyxvQkFBVSxHQUFHLElBQWI7QUFDRDtBQUNGLE9BSk0sTUFJQSxJQUFJaFEsS0FBSyxLQUFLaEYsVUFBVSxDQUFDaEIsR0FBRCxDQUF4QixFQUErQjtBQUNwQ2dXLGtCQUFVLEdBQUcsSUFBYjtBQUNEO0FBQ0YsS0F4QkQ7O0FBeUJBN1YsVUFBTSxDQUFDNkgsUUFBUCxDQUFnQjJOLFFBQWhCLENBQXlCM1QsUUFBekIsRUFBbUMsQ0FBQytULFNBQXBDOztBQUNBLFFBQUksQ0FBQ0MsVUFBTCxFQUFpQjtBQUNmLGFBQU9oVSxRQUFQO0FBQ0Q7O0FBQ0QsUUFBSUEsUUFBUSxDQUFDaEIsVUFBVCxLQUF3QkEsVUFBNUIsRUFBd0M7QUFDdEM7QUFDQSxZQUFNMkIsTUFBTSxHQUFHeEMsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQnVOLGVBQWhCLENBQWdDdlQsUUFBaEMsRUFBMEM4VCxhQUExQyxDQUFmOztBQUNBLFVBQUluVyxNQUFNLENBQUN3VyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNQLGFBQXJDLEVBQW9ELE9BQXBELENBQUosRUFBa0U7QUFDaEUsWUFBSUEsYUFBYSxDQUFDN1QsS0FBZCxLQUF3QixJQUE1QixFQUFrQztBQUNoQ1UsZ0JBQU0sQ0FBQ1YsS0FBUCxHQUFlc0YsTUFBTSxDQUFDdU8sYUFBYSxDQUFDN1QsS0FBZixDQUFyQjtBQUNBVSxnQkFBTSxDQUFDdVQsaUJBQVAsR0FBMkJsVSxRQUFRLENBQUNDLEtBQXBDO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJdEMsTUFBTSxDQUFDd1csU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDUCxhQUFyQyxFQUFvRCxlQUFwRCxDQUFKLEVBQTBFO0FBQ3hFblQsY0FBTSxDQUFDb1IsYUFBUCxHQUF1QitCLGFBQWEsQ0FBQy9CLGFBQXJDO0FBQ0FwUixjQUFNLENBQUMyVCx3QkFBUCxHQUFrQ3RVLFFBQVEsQ0FBQytSLGFBQTNDO0FBQ0Q7O0FBQ0Q1VCxZQUFNLENBQUM2SCxRQUFQLENBQWdCMk4sUUFBaEIsQ0FBeUJoVCxNQUF6QixFQUFpQyxDQUFDb1QsU0FBbEM7O0FBQ0EsYUFBT3BULE1BQVA7QUFDRCxLQXBEOEQsQ0FxRC9EOzs7QUFDQSxXQUFPaEQsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQm9DLFFBQWxCLENBQVA7QUFDRCxHQTdKa0M7O0FBK0puQ3VVLHFCQUFtQixDQUFDM1UsSUFBRCxFQUFPc0csTUFBUCxFQUFlbEcsUUFBZixFQUF5QjtBQUMxQyxVQUFNd1UsU0FBUyxHQUFHclcsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjZOLDRCQUFoQixDQUNoQmpVLElBRGdCLEVBQ1ZzRyxNQURVLEVBQ0ZsRyxRQURFLEVBQ1FBLFFBQVEsQ0FBQ2hCLFVBRGpCLENBQWxCO0FBRUEsUUFBSWdWLFVBQVUsR0FBSVEsU0FBUyxLQUFLeFUsUUFBaEM7O0FBRUEsYUFBU3lVLGVBQVQsQ0FBeUIvRyxHQUF6QixFQUE4QjtBQUM1QixVQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNWL1AsWUFBTSxDQUFDOEcsTUFBUCxDQUFjaUosR0FBZCxFQUFtQjNQLE9BQW5CLENBQTRCaUIsVUFBRCxJQUFnQjtBQUN6QyxjQUFNMkIsTUFBTSxHQUFHeEMsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjZOLDRCQUFoQixDQUNialUsSUFEYSxFQUNQc0csTUFETyxFQUNDc08sU0FERCxFQUNZeFYsVUFEWixDQUFmO0FBRUFnVixrQkFBVSxJQUFLclQsTUFBTSxLQUFLNlQsU0FBMUI7QUFDRCxPQUpEO0FBS0FDLHFCQUFlLENBQUMvRyxHQUFHLENBQUNtRSxNQUFMLENBQWY7QUFDQTRDLHFCQUFlLENBQUMvRyxHQUFHLENBQUNoTixLQUFMLENBQWY7QUFDRDs7QUFFRCtULG1CQUFlLENBQUN6VSxRQUFRLENBQUNoQixVQUFULENBQW9CNlMsTUFBckIsQ0FBZjtBQUNBNEMsbUJBQWUsQ0FBQ3pVLFFBQVEsQ0FBQ2hCLFVBQVQsQ0FBb0IwQixLQUFyQixDQUFmO0FBQ0EsUUFBSThULFNBQVMsS0FBS3hVLFFBQWxCLEVBQTRCLE9BQU93VSxTQUFQOztBQUM1QixRQUFJUixVQUFKLEVBQWdCO0FBQ2QsYUFBT3JXLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JvQyxRQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsV0FBT0EsUUFBUDtBQUNELEdBdExrQzs7QUF3TG5DdVQsaUJBQWUsQ0FBQ3ZULFFBQUQsRUFBV2hCLFVBQVgsRUFBdUI7QUFDcEMsV0FBTztBQUNMdUIsZUFBUyxFQUFFUCxRQUFRLENBQUNPLFNBRGY7QUFFTE4sV0FBSyxFQUFFRCxRQUFRLENBQUNDLEtBRlg7QUFHTGpCLGdCQUFVLEVBQUVyQixNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCb0MsUUFBUSxDQUFDaEIsVUFBM0IsRUFBdUNBLFVBQXZDLENBSFA7QUFJTGlWLDRCQUFzQixFQUFFalUsUUFBUSxDQUFDaEIsVUFKNUI7QUFLTDBWLGtCQUFZLEVBQUUxVSxRQUFRLENBQUMwVTtBQUxsQixLQUFQO0FBT0QsR0FoTWtDOztBQWtNbkM3TSxtQkFBaUIsQ0FBQzhCLElBQUQsRUFBTzNKLFFBQVAsRUFBaUJvRixRQUFqQixFQUEyQnVQLFdBQTNCLEVBQXdDO0FBQ3ZELFFBQUl2UCxRQUFKLEVBQWMsT0FBT3BGLFFBQVA7QUFDZCxRQUFJME4sR0FBRyxHQUFHdlAsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQnNOLHlCQUFoQixDQUEwQ3RULFFBQTFDLENBQVY7QUFDQTBOLE9BQUcsR0FBR3ZQLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0J3Tix3QkFBaEIsQ0FBeUM3SixJQUF6QyxFQUErQytELEdBQS9DLENBQU47QUFDQUEsT0FBRyxHQUFHdlAsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjZOLDRCQUFoQixDQUNKbEssSUFBSSxDQUFDL0osSUFERCxFQUNPK0osSUFBSSxDQUFDL0osSUFBTCxDQUFVc0csTUFEakIsRUFDeUJ3SCxHQUR6QixFQUM4QkEsR0FBRyxDQUFDMU8sVUFEbEMsQ0FBTjs7QUFHQSxRQUFJME8sR0FBRyxLQUFLMU4sUUFBUixJQUFvQjBOLEdBQUcsQ0FBQzFPLFVBQUosQ0FBZWdDLE1BQW5DLElBQTZDMlQsV0FBakQsRUFBOEQ7QUFDNUQsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT2pILEdBQVA7QUFDRCxHQTdNa0M7O0FBK01uQ2tILGdCQUFjLEdBQUc7QUFDZixVQUFNQyxpQkFBaUIsR0FBRzFXLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0IyTSxtQkFBaEIsQ0FBb0NwVSxRQUFwQyxFQUE4QyxDQUN0RSxnQkFEc0UsRUFFdEUscUJBRnNFLENBQTlDLENBQTFCOztBQUdBLFFBQUlzVyxpQkFBaUIsS0FBSyxJQUExQixFQUFnQztBQUM5QjtBQUNBMVcsWUFBTSxDQUFDbUwsVUFBUCxDQUFrQm5MLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0I0TyxjQUFsQyxFQUFrRCxJQUFsRDtBQUNBO0FBQ0Q7O0FBRUQsVUFBTUUsT0FBTyxHQUFHM1csTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjJNLG1CQUFoQixDQUFvQ2tDLGlCQUFwQyxFQUF1RCxDQUNyRSxlQURxRSxFQUVyRSx3QkFGcUUsQ0FBdkQsQ0FBaEI7QUFHQSxRQUFJQyxPQUFPLEtBQUssSUFBaEIsRUFBc0I7QUFDdEIsVUFBTUMsSUFBSSxHQUFHNVcsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQndNLGFBQWhCLENBQThCc0MsT0FBOUIsRUFBdUMsT0FBdkMsS0FBbURBLE9BQU8sQ0FBQy9FLENBQVIsQ0FBVWdGLElBQTFFO0FBQ0EsVUFBTUMsS0FBSyxHQUFHRCxJQUFJLENBQUNyTCxnQkFBTCxDQUFzQixrQkFBdEIsQ0FBZDtBQUNBc0wsU0FBSyxDQUFDalgsT0FBTixDQUFla1gsSUFBRCxJQUFVO0FBQ3RCLFVBQUlBLElBQUksQ0FBQ2pDLFdBQVQsRUFBc0I7QUFDcEIsY0FBTXRGLEdBQUcsR0FBR3ZQLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0I2QixpQkFBaEIsQ0FDVm9OLElBRFUsRUFFVkEsSUFBSSxDQUFDakMsV0FGSyxFQUdWO0FBQU07QUFISSxVQUlWO0FBQU07QUFKSSxTQUFaOztBQUtBLFlBQUl0RixHQUFHLEtBQUt1SCxJQUFJLENBQUNqQyxXQUFiLElBQTRCdEYsR0FBRyxDQUFDMU8sVUFBSixDQUFlMEQsYUFBL0MsRUFBOEQ7QUFDNUQsZ0JBQU13UyxRQUFRLEdBQUcvVyxNQUFNLENBQUM2SCxRQUFQLENBQWdCd00sYUFBaEIsQ0FBOEJ5QyxJQUE5QixFQUFvQyxPQUFwQyxDQUFqQjtBQUNBQyxrQkFBUSxDQUFDQyxXQUFULEdBQXVCekgsR0FBRyxDQUFDMU8sVUFBSixDQUFlMEQsYUFBdEM7QUFDRDtBQUNGO0FBQ0YsS0FaRDtBQWFELEdBNU9rQzs7QUE4T25DMFMsZ0JBQWMsQ0FBQ0MsT0FBRCxFQUFVO0FBQ3RCLFVBQU1DLFlBQVksR0FBR25YLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0IyTSxtQkFBaEIsQ0FBb0NwVSxRQUFwQyxFQUE4QyxDQUNqRSxnQkFEaUUsRUFFakUscUJBRmlFLEVBR2pFLGVBSGlFLENBQTlDLENBQXJCOztBQUlBLFFBQUkrVyxZQUFZLEtBQUssSUFBckIsRUFBMkI7QUFDekI7QUFDQW5YLFlBQU0sQ0FBQ21MLFVBQVAsQ0FDRW5MLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0JvUCxjQUFoQixDQUErQmhHLElBQS9CLENBQW9DLElBQXBDLEVBQTBDaUcsT0FBMUMsQ0FERixFQUVFLElBRkY7QUFHQTtBQUNELEtBWHFCLENBWXRCOzs7QUFDQSxVQUFNRSxDQUFDLEdBQUdELFlBQVksQ0FBQ0Usa0JBQWIsSUFBbUNGLFlBQVksQ0FBQ0csY0FBMUQ7QUFDQUgsZ0JBQVksQ0FBQ0ksSUFBYixDQUFrQjNYLE9BQWxCLENBQTJCNFgsR0FBRCxJQUFTO0FBQ2pDQSxTQUFHLENBQUNDLGNBQUosQ0FBbUJMLENBQW5CO0FBQ0QsS0FGRDtBQUdBRCxnQkFBWSxDQUFDSSxJQUFiLEdBQW9CTCxPQUFPLENBQUN0UCxHQUFSLENBQWFvSCxLQUFELElBQVc7QUFDekMsWUFBTXdJLEdBQUcsR0FBR3hYLE1BQU0sQ0FBQzBYLFVBQVAsQ0FBbUIsZUFBYzFJLEtBQU0sS0FBdkMsQ0FBWjtBQUNBd0ksU0FBRyxDQUFDRyxXQUFKLENBQWdCUCxDQUFoQjtBQUNBLGFBQU9JLEdBQVA7QUFDRCxLQUptQixDQUFwQjtBQUtBSixLQUFDO0FBQ0YsR0FyUWtDOztBQXVRbkNRLGVBQWEsR0FBRztBQUNkLFVBQU1oQixJQUFJLEdBQUc1VyxNQUFNLENBQUM2SCxRQUFQLENBQWdCd00sYUFBaEIsQ0FBOEJqVSxRQUE5QixFQUF3QyxnQkFBeEMsQ0FBYjtBQUNBLFVBQU15WCxVQUFVLEdBQUdqQixJQUFJLENBQUNuVixJQUFMLENBQVVzRyxNQUFWLENBQWlCLHVCQUFqQixDQUFuQjtBQUNBLFFBQUksQ0FBQzhQLFVBQUwsRUFBaUI7O0FBQ2pCLFFBQUlBLFVBQVUsQ0FBQ2hYLFVBQVgsQ0FBc0JxVyxPQUExQixFQUFtQztBQUNqQ2xYLFlBQU0sQ0FBQzZILFFBQVAsQ0FBZ0JvUCxjQUFoQixDQUErQlksVUFBVSxDQUFDaFgsVUFBWCxDQUFzQnFXLE9BQXJEO0FBQ0Q7O0FBQ0QsUUFBSVcsVUFBVSxDQUFDaFgsVUFBWCxDQUFzQmlYLGVBQTFCLEVBQTJDO0FBQ3pDLFVBQUk5WCxNQUFNLENBQUN1RCxpQkFBUCxJQUE0QnZELE1BQU0sQ0FBQ3VELGlCQUFQLENBQXlCYSxzQkFBekQsRUFBaUY7QUFDL0V5VCxrQkFBVSxDQUFDaFgsVUFBWCxDQUFzQmlYLGVBQXRCLENBQXNDbFksT0FBdEMsQ0FBK0NzTixJQUFELElBQVU7QUFDdEQsY0FBSSxDQUFDMU4sTUFBTSxDQUFDd1csU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQ0hsVyxNQUFNLENBQUN1RCxpQkFBUCxDQUF5QmEsc0JBRHRCLEVBQzhDOEksSUFEOUMsQ0FBTCxFQUMwRDtBQUN4RGxOLGtCQUFNLENBQUN1RCxpQkFBUCxDQUF5QmEsc0JBQXpCLENBQWdEOEksSUFBaEQsSUFBd0Q1SSxTQUF4RDtBQUNEO0FBQ0YsU0FMRDtBQU1EO0FBQ0Y7QUFDRixHQXhSa0M7O0FBMFJuQ3lULG1CQUFpQixHQUFHO0FBQ2xCLFFBQUksQ0FBQy9YLE1BQU0sQ0FBQ2dZLFFBQVAsQ0FBZ0JDLFFBQWhCLENBQXlCQyxVQUF6QixDQUFvQyxTQUFwQyxDQUFMLEVBQXFEO0FBQ3JELFVBQU1DLGFBQWEsR0FBR25ZLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0IyTSxtQkFBaEIsQ0FBb0NwVSxRQUFwQyxFQUE4QyxDQUNsRSxnQkFEa0UsRUFFbEUscUJBRmtFLEVBR2xFLHdCQUhrRSxFQUlsRSxpQkFKa0UsQ0FBOUMsQ0FBdEI7O0FBS0EsUUFBSSxDQUFDK1gsYUFBTCxFQUFvQjtBQUNsQjtBQUNBblksWUFBTSxDQUFDbUwsVUFBUCxDQUFrQm5MLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0JrUSxpQkFBbEMsRUFBcUQsR0FBckQ7QUFDQTtBQUNEOztBQUNELFVBQU1LLGtCQUFrQixHQUFHcFksTUFBTSxDQUFDNkgsUUFBUCxDQUFnQjJNLG1CQUFoQixDQUFvQzJELGFBQXBDLEVBQW1ELENBQzVFLHFCQUQ0RSxFQUU1RSxzQkFGNEUsQ0FBbkQsQ0FBM0I7O0FBR0EsUUFBSUMsa0JBQUosRUFBd0I7QUFDdEI7QUFDQSxVQUFJQSxrQkFBa0IsQ0FBQzNOLFFBQW5CLElBQStCLENBQUMyTixrQkFBa0IsQ0FBQ0MsUUFBdkQsRUFBaUU7QUFDL0RELDBCQUFrQixDQUFDQyxRQUFuQixHQUE4QixJQUE5QjtBQUNBRCwwQkFBa0IsQ0FBQ0Usc0JBQW5CLEdBQTRDRixrQkFBa0IsQ0FBQ0csY0FBL0Q7QUFDQUgsMEJBQWtCLENBQUNJLHVCQUFuQixHQUE2Q0osa0JBQWtCLENBQUNLLGVBQWhFO0FBQ0FMLDBCQUFrQixDQUFDTSwyQkFBbkIsR0FBaUROLGtCQUFrQixDQUFDTyxtQkFBcEU7O0FBQ0FQLDBCQUFrQixDQUFDRyxjQUFuQixHQUFvQyxDQUFDOVcsSUFBRCxFQUFPbVgsSUFBUCxLQUNsQ0EsSUFBSSxLQUFLLFVBQVQsSUFBdUJSLGtCQUFrQixDQUFDRSxzQkFBbkIsQ0FBMEM3VyxJQUExQyxFQUFnRG1YLElBQWhELENBRHpCOztBQUVBUiwwQkFBa0IsQ0FBQ0ssZUFBbkIsR0FBcUMsQ0FBQ0csSUFBRCxFQUFPbk8sUUFBUCxLQUNsQ21PLElBQUksS0FBSyxVQUFULEdBQXNCLFdBQXRCLEdBQW9DUixrQkFBa0IsQ0FBQ0ksdUJBQW5CLENBQTJDSSxJQUEzQyxFQUFpRG5PLFFBQWpELENBRHZDOztBQUVBMk4sMEJBQWtCLENBQUNPLG1CQUFuQixHQUF5QyxDQUFDQyxJQUFELEVBQU9uTyxRQUFQLEtBQ3RDbU8sSUFBSSxLQUFLLFVBQVQsR0FBc0IsY0FBdEIsR0FBdUNSLGtCQUFrQixDQUFDTSwyQkFBbkIsQ0FBK0NFLElBQS9DLEVBQXFEbk8sUUFBckQsQ0FEMUM7QUFFRDs7QUFDRCxVQUFJLENBQUMyTixrQkFBa0IsQ0FBQ1MsS0FBbkIsQ0FBeUI5TyxJQUF6QixDQUE4QitPLElBQUksSUFBSUEsSUFBSSxLQUFLLFVBQVQsSUFBdUJBLElBQUksQ0FBQ3BYLE1BQUwsS0FBZ0IsVUFBN0UsQ0FBTCxFQUErRjtBQUM3RjBXLDBCQUFrQixDQUFDdEosSUFBbkIsQ0FBd0IsT0FBeEIsRUFBaUNzSixrQkFBa0IsQ0FBQzNOLFFBQW5CLEdBQThCLFVBQTlCLEdBQTJDO0FBQzFFL0ksZ0JBQU0sRUFBRSxVQURrRTtBQUUxRXFYLGlCQUFPLEVBQUUsV0FGaUU7QUFHMUV0VSxxQkFBVyxFQUFFLGdCQUg2RDtBQUkxRXVVLGdCQUFNLEVBQUU7QUFKa0UsU0FBNUU7QUFNRDtBQUNGOztBQUNELFVBQU1DLG1CQUFtQixHQUFHLE1BQU07QUFDaEMsWUFBTUMsZ0JBQWdCLEdBQUc5WSxRQUFRLENBQUNlLGFBQVQsQ0FBdUIscUJBQXZCLENBQXpCO0FBQ0ErWCxzQkFBZ0IsQ0FBQ3hOLE1BQWpCLEdBQTBCeU0sYUFBYSxDQUFDek0sTUFBeEM7QUFDQXdOLHNCQUFnQixDQUFDM1ksWUFBakIsQ0FBOEIsV0FBOUIsRUFBMkMsVUFBM0M7QUFDQSxhQUFPMlksZ0JBQVA7QUFDRCxLQUxEOztBQU9BLFVBQU1DLFNBQVMsR0FBR25aLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0J3TSxhQUFoQixDQUE4QjhELGFBQTlCLEVBQTZDLFlBQTdDLENBQWxCOztBQUNBLFFBQUlnQixTQUFKLEVBQWU7QUFDYixVQUFJQSxTQUFTLENBQUNDLGdCQUFWLENBQTJCblksT0FBM0IsS0FBdUMscUJBQTNDLEVBQWtFO0FBQ2hFLGNBQU1pWSxnQkFBZ0IsR0FBR0QsbUJBQW1CLEVBQTVDO0FBQ0FFLGlCQUFTLENBQUM1WCxXQUFWLENBQXNCMlgsZ0JBQXRCO0FBQ0FDLGlCQUFTLENBQUNoSSxnQkFBVixDQUEyQixvQkFBM0IsRUFBaUQsTUFBTTtBQUNyRCxjQUFJblIsTUFBTSxDQUFDZ1ksUUFBUCxDQUFnQkMsUUFBaEIsQ0FBeUJDLFVBQXpCLENBQW9DLGtCQUFwQyxDQUFKLEVBQTZEO0FBQzNEaUIscUJBQVMsQ0FBQ0UsTUFBVixDQUFpQixVQUFqQjtBQUNEO0FBQ0YsU0FKRDtBQUtEO0FBQ0YsS0FWRCxNQVVPO0FBQ0wsWUFBTTFZLElBQUksR0FBR3dYLGFBQWEsQ0FBQzVELFVBQWQsSUFBNEI0RCxhQUF6Qzs7QUFDQSxVQUFJeFgsSUFBSSxDQUFDeVksZ0JBQUwsQ0FBc0JuWSxPQUF0QixLQUFrQyxxQkFBdEMsRUFBNkQ7QUFDM0QsY0FBTWlZLGdCQUFnQixHQUFHRCxtQkFBbUIsRUFBNUM7QUFDQXRZLFlBQUksQ0FBQ1ksV0FBTCxDQUFpQjJYLGdCQUFqQjtBQUNEOztBQUNELFlBQU1JLE9BQU8sR0FBR3RaLE1BQU0sQ0FBQ2dZLFFBQVAsQ0FBZ0JDLFFBQWhCLENBQXlCQyxVQUF6QixDQUFvQyxrQkFBcEMsQ0FBaEI7QUFDQXZYLFVBQUksQ0FBQ3lZLGdCQUFMLENBQXNCck8sS0FBdEIsQ0FBNEJnRCxPQUE1QixHQUFzQ3VMLE9BQU8sR0FBRyxFQUFILEdBQVEsTUFBckQ7QUFDRDtBQUNGLEdBM1ZrQzs7QUE2Vm5DQyxtQkFBaUIsR0FBRztBQUNsQjdRLGtCQUFjLENBQUNFLFdBQWYsQ0FBMkIsZ0JBQTNCLEVBQTZDQyxJQUE3QyxDQUFrRCxNQUFNO0FBQ3RELFlBQU0yUSxhQUFhLEdBQUc5USxjQUFjLENBQUNLLEdBQWYsQ0FBbUIsZ0JBQW5CLENBQXRCO0FBQ0EsVUFBSSxDQUFDeVEsYUFBRCxJQUFrQixDQUFDQSxhQUFhLENBQUN4RCxTQUFkLENBQXdCeUQsV0FBL0MsRUFBNEQ7QUFDNUQsWUFBTUMsY0FBYyxHQUFHRixhQUFhLENBQUN4RCxTQUFkLENBQXdCeUQsV0FBL0M7O0FBQ0FELG1CQUFhLENBQUN4RCxTQUFkLENBQXdCeUQsV0FBeEIsR0FBc0MsU0FBU0UsTUFBVCxDQUFnQnBLLEdBQWhCLEVBQXFCO0FBQ3pEO0FBQ0EsY0FBTTtBQUFFOU47QUFBRixZQUFXLElBQWpCOztBQUNBLFlBQUk4TixHQUFHLENBQUN4SCxNQUFSLEVBQWdCO0FBQ2R2SSxnQkFBTSxDQUFDRyxJQUFQLENBQVk0UCxHQUFHLENBQUN4SCxNQUFoQixFQUF3Qm5JLE9BQXhCLENBQWlDQyxHQUFELElBQVM7QUFDdkMsa0JBQU00QyxNQUFNLEdBQUc4TSxHQUFHLENBQUN4SCxNQUFKLENBQVdsSSxHQUFYLENBQWY7QUFDQSxnQkFBSTRDLE1BQU0sQ0FBQ2dULFNBQVgsRUFBc0I7QUFDdEIsa0JBQU1tRSxTQUFTLEdBQUc1WixNQUFNLENBQUM2SCxRQUFQLENBQWdCdU8sbUJBQWhCLENBQW9DM1UsSUFBcEMsRUFBMEM4TixHQUFHLENBQUN4SCxNQUE5QyxFQUFzRHRGLE1BQXRELENBQWxCOztBQUNBLGdCQUFJaEIsSUFBSSxDQUFDc0csTUFBTCxJQUFldEYsTUFBTSxLQUFLaEIsSUFBSSxDQUFDc0csTUFBTCxDQUFZbEksR0FBWixDQUE5QixFQUFnRDtBQUM5QztBQUNBMFAsaUJBQUcsQ0FBQ3hILE1BQUosQ0FBV2xJLEdBQVgsSUFBa0IrWixTQUFsQjtBQUNELGFBSEQsTUFHTyxJQUFJblgsTUFBTSxLQUFLbVgsU0FBZixFQUEwQjtBQUMvQjtBQUNBckssaUJBQUcsQ0FBQ3hILE1BQUosQ0FBV2xJLEdBQVgsSUFBa0IrWixTQUFsQjtBQUNEO0FBQ0YsV0FYRDtBQVlEOztBQUNERixzQkFBYyxDQUFDeEQsSUFBZixDQUFvQixJQUFwQixFQUEwQjNHLEdBQTFCOztBQUNBLFlBQUlBLEdBQUcsQ0FBQ3RRLE1BQUosSUFBY3dDLElBQUksQ0FBQ29ZLGFBQXZCLEVBQXNDO0FBQ3BDcFksY0FBSSxDQUFDb1ksYUFBTCxDQUFtQmphLE9BQW5CLENBQTJCa2EsTUFBTSxJQUFJQSxNQUFNLENBQUNDLFlBQVAsQ0FBb0JELE1BQU0sQ0FBQ2hZLEtBQTNCLENBQXJDOztBQUNBTCxjQUFJLENBQUNvWSxhQUFMLEdBQXFCdlYsU0FBckI7QUFDRDtBQUNGLE9BdEJEOztBQXVCQSxZQUFNc1MsSUFBSSxHQUFHNVcsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQndNLGFBQWhCLENBQThCalUsUUFBOUIsRUFBd0MsZ0JBQXhDLENBQWI7O0FBQ0EsVUFBSXdXLElBQUksQ0FBQ25WLElBQUwsSUFBYW1WLElBQUksQ0FBQ25WLElBQUwsQ0FBVXNHLE1BQTNCLEVBQW1DO0FBQ2pDNk8sWUFBSSxDQUFDNkMsV0FBTCxDQUFpQjtBQUFFMVIsZ0JBQU0sRUFBRTZPLElBQUksQ0FBQ25WLElBQUwsQ0FBVXNHO0FBQXBCLFNBQWpCO0FBQ0Q7QUFDRixLQS9CRDtBQWdDRCxHQTlYa0M7O0FBZ1luQ2lTLHFCQUFtQixHQUFHO0FBQ3BCdFIsa0JBQWMsQ0FBQ0UsV0FBZixDQUEyQixlQUEzQixFQUE0Q0MsSUFBNUMsQ0FBaUQsTUFBTTtBQUNyRCxZQUFNc08sWUFBWSxHQUFHek8sY0FBYyxDQUFDSyxHQUFmLENBQW1CLGVBQW5CLENBQXJCO0FBQ0EsVUFBSSxDQUFDb08sWUFBRCxJQUFpQixDQUFDQSxZQUFZLENBQUNuQixTQUFiLENBQXVCaUUsa0JBQTdDLEVBQWlFOztBQUNqRTlDLGtCQUFZLENBQUNuQixTQUFiLENBQXVCaUUsa0JBQXZCLEdBQTRDLENBQUN4WSxJQUFELEVBQU9PLFFBQVAsS0FBb0I7QUFDOUQsWUFBSVAsSUFBSSxDQUFDc0csTUFBTCxDQUFZL0YsUUFBWixFQUFzQm5CLFVBQXRCLENBQWlDZ0MsTUFBckMsRUFBNkMsT0FBTyxLQUFQO0FBQzdDLGNBQU1xWCxRQUFRLEdBQUcsRUFBakI7QUFDQTFhLGNBQU0sQ0FBQzhHLE1BQVAsQ0FBYzdFLElBQUksQ0FBQ3NHLE1BQW5CLEVBQTJCbkksT0FBM0IsQ0FBb0M2QyxNQUFELElBQVk7QUFDN0MsY0FBSUEsTUFBTSxDQUFDNUIsVUFBUCxJQUFxQjRCLE1BQU0sQ0FBQzVCLFVBQVAsQ0FBa0JrVCxvQkFBM0MsRUFBaUU7QUFDL0Qsa0JBQU1vRyxlQUFlLEdBQUcxWCxNQUFNLENBQUNMLFNBQS9CO0FBQ0EsZ0JBQUk4WCxRQUFRLENBQUNDLGVBQUQsQ0FBWixFQUErQjtBQUMvQkQsb0JBQVEsQ0FBQ0MsZUFBRCxDQUFSLEdBQTRCMVgsTUFBNUI7O0FBQ0EsZ0JBQUlBLE1BQU0sQ0FBQzVCLFVBQVAsQ0FBa0I4QixJQUF0QixFQUE0QjtBQUMxQixvQkFBTUMsWUFBWSxHQUFHLDhHQUFlLENBQUNuQixJQUFJLENBQUNzRyxNQUFOLEVBQWN0RixNQUFkLENBQXBDO0FBQ0FqRCxvQkFBTSxDQUFDRyxJQUFQLENBQVlpRCxZQUFaLEVBQ0dvRixNQURILENBRUkwRyxFQUFFLElBQUk5TCxZQUFZLENBQUM4TCxFQUFELENBQVosQ0FBaUI3TixVQUFqQixDQUE0QmtULG9CQUE1QixLQUFxRCxLQUYvRCxFQUdHblUsT0FISCxDQUdZOE8sRUFBRCxJQUFRO0FBQ2Z3TCx3QkFBUSxDQUFDeEwsRUFBRCxDQUFSLEdBQWU5TCxZQUFZLENBQUM4TCxFQUFELENBQTNCO0FBQ0QsZUFMSDtBQU1EO0FBQ0Y7QUFDRixTQWZEO0FBZ0JBLGVBQU8sQ0FBQ3dMLFFBQVEsQ0FBQ2xZLFFBQUQsQ0FBaEI7QUFDRCxPQXBCRDtBQXFCRCxLQXhCRDtBQXlCRCxHQTFaa0M7O0FBNFpuQztBQUNBb1ksbUJBQWlCLENBQUM5UixXQUFELEVBQWM7QUFDN0JJLGtCQUFjLENBQUNFLFdBQWYsQ0FBMkJOLFdBQTNCLEVBQXdDTyxJQUF4QyxDQUE2QyxNQUFNO0FBQ2pELFlBQU13UixLQUFLLEdBQUczUixjQUFjLENBQUNLLEdBQWYsQ0FBbUJULFdBQW5CLENBQWQ7QUFDQSxVQUFJLENBQUMrUixLQUFELElBQVUsQ0FBQ0EsS0FBSyxDQUFDckUsU0FBckIsRUFBZ0M7QUFDaEN4VyxZQUFNLENBQUM4YSxjQUFQLENBQXNCRCxLQUFLLENBQUNyRSxTQUE1QixFQUF1QyxVQUF2QyxFQUFtRDtBQUNqRGpOLFdBQUcsR0FBRztBQUNKLG1CQUFTd1IsY0FBVCxDQUF3QjdULENBQXhCLEVBQTJCO0FBQ3pCLGdCQUFJLEtBQUs3RSxRQUFMLElBQWlCLEtBQUtBLFFBQUwsQ0FBY2hCLFVBQS9CLElBQ0EsS0FBS2dCLFFBQUwsQ0FBY2hCLFVBQWQsQ0FBeUIyWixXQUQ3QixFQUMwQztBQUN4QyxxQkFBTyxLQUFLM1ksUUFBTCxDQUFjaEIsVUFBZCxDQUF5QjJaLFdBQWhDO0FBQ0Q7O0FBQ0QsbUJBQU8sS0FBS0MsTUFBTCxDQUFZaFEsUUFBWixDQUFxQi9ELENBQXJCLENBQVA7QUFDRDs7QUFDRCxpQkFBTzZULGNBQVA7QUFDRCxTQVZnRDs7QUFXakRHLFdBQUcsR0FBRyxDQUFFOztBQVh5QyxPQUFuRDtBQWFELEtBaEJEO0FBaUJELEdBL2FrQzs7QUFpYm5DO0FBQ0FDLDBCQUF3QixHQUFHO0FBQ3pCalMsa0JBQWMsQ0FBQ0UsV0FBZixDQUEyQixzQkFBM0IsRUFBbURDLElBQW5ELENBQXdELE1BQU07QUFDNUQsWUFBTStSLGlCQUFpQixHQUFHbFMsY0FBYyxDQUFDSyxHQUFmLENBQW1CLHNCQUFuQixDQUExQjtBQUNBLFVBQUksQ0FBQzZSLGlCQUFELElBQXNCLENBQUNBLGlCQUFpQixDQUFDNUUsU0FBbEIsQ0FBNEIrRCxZQUF2RCxFQUFxRSxPQUZULENBRzVEOztBQUNBYSx1QkFBaUIsQ0FBQzVFLFNBQWxCLENBQTRCK0QsWUFBNUIsR0FBMkMsU0FBU0osTUFBVCxDQUFnQjlYLFFBQWhCLEVBQTBCO0FBQ25FO0FBQ0EsWUFBSUEsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQm5CLEtBQXhCLEVBQStCO0FBQzdCLGNBQUksS0FBSytCLElBQUwsQ0FBVXhDLE1BQVYsS0FBcUIsSUFBekIsRUFBK0I7QUFDN0IsaUJBQUt3QyxJQUFMLENBQVVvWSxhQUFWLEdBQTBCLEtBQUtwWSxJQUFMLENBQVVvWSxhQUFWLElBQTJCLEVBQXJEOztBQUNBLGlCQUFLcFksSUFBTCxDQUFVb1ksYUFBVixDQUF3Qi9LLElBQXhCLENBQTZCLElBQTdCO0FBQ0QsV0FIRCxNQUdPO0FBQ0wvUCxZQUFBLGlIQUFvQixDQUNsQixJQURrQixFQUVsQixLQUFLMEMsSUFBTCxDQUFVeEMsTUFBVixJQUFvQjtBQUFFSywyQkFBYSxFQUFFLFNBQWpCO0FBQTRCTCxvQkFBTSxFQUFFO0FBQXBDLGFBRkYsRUFHbEI0QyxRQUFRLENBQUNoQixVQUFULENBQW9CbkIsS0FBcEIsSUFBNkIsU0FIWCxDQUFwQjtBQUlEO0FBQ0Y7O0FBQ0QsYUFBS0ssWUFBTDs7QUFDQSxZQUFJLEtBQUs4YSxhQUFULEVBQXdCO0FBQ3RCO0FBQ0EsZUFBS0EsYUFBTCxDQUFtQmhaLFFBQW5CO0FBQ0Q7QUFDRixPQWxCRDtBQW1CRCxLQXZCRDtBQXdCRCxHQTNja0M7O0FBNmNuQ2laLG1CQUFpQixHQUFHO0FBQ2xCcFMsa0JBQWMsQ0FBQ0UsV0FBZixDQUEyQixhQUEzQixFQUEwQ0MsSUFBMUMsQ0FBK0MsTUFBTTtBQUNuRCxZQUFNa1MsVUFBVSxHQUFHclMsY0FBYyxDQUFDSyxHQUFmLENBQW1CLGFBQW5CLENBQW5CO0FBQ0EsVUFBSSxDQUFDZ1MsVUFBRCxJQUFlLENBQUNBLFVBQVUsQ0FBQy9FLFNBQVgsQ0FBcUJnRixxQkFBekMsRUFBZ0U7QUFDaEUsWUFBTUMsNEJBQTRCLEdBQUdGLFVBQVUsQ0FBQy9FLFNBQVgsQ0FBcUJnRixxQkFBMUQsQ0FIbUQsQ0FJbkQ7O0FBQ0FELGdCQUFVLENBQUMvRSxTQUFYLENBQXFCZ0YscUJBQXJCLEdBQTZDLFNBQVNFLDBCQUFULENBQW9DclosUUFBcEMsRUFBOEM7QUFDekYsWUFBSUEsUUFBUSxDQUFDaEIsVUFBVCxDQUFvQm1ULFVBQXBCLElBQWtDLENBQUNuUyxRQUFRLENBQUNoQixVQUFULENBQW9Cd0QsY0FBM0QsRUFBMkU7QUFDekUsZUFBSzBHLEtBQUwsQ0FBV29RLGVBQVgsR0FBNkIsRUFBN0I7QUFDQTNiLGdCQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLbVMsQ0FBTCxDQUFPM04sSUFBUCxDQUFZOEcsS0FBMUIsRUFBaUM7QUFDL0JxUSxpQkFBSyxFQUFFdlosUUFBUSxDQUFDaEIsVUFBVCxDQUFvQm1ULFVBREk7QUFFL0JoTSxrQkFBTSxFQUFFO0FBRnVCLFdBQWpDO0FBSUQsU0FORCxNQU1PO0FBQ0xpVCxzQ0FBNEIsQ0FBQy9FLElBQTdCLENBQWtDLElBQWxDLEVBQXdDclUsUUFBeEM7QUFDRDtBQUNGLE9BVkQ7QUFXRCxLQWhCRDtBQWlCRCxHQS9ka0M7O0FBaWVuQ3daLHFCQUFtQixHQUFHO0FBQ3BCM1Msa0JBQWMsQ0FBQ0UsV0FBZixDQUEyQixlQUEzQixFQUE0Q0MsSUFBNUMsQ0FBaUQsTUFBTTtBQUNyRCxZQUFNeVMsWUFBWSxHQUFHNVMsY0FBYyxDQUFDSyxHQUFmLENBQW1CLGVBQW5CLENBQXJCO0FBQ0EsVUFBSSxDQUFDdVMsWUFBRCxJQUFpQixDQUFDQSxZQUFZLENBQUN0RixTQUFiLENBQXVCdUYsbUJBQXpDLElBQ0QsQ0FBQ3ZiLE1BQU0sQ0FBQ3VELGlCQURYLEVBQzhCLE9BSHVCLENBSXJEOztBQUNBK1gsa0JBQVksQ0FBQ3RGLFNBQWIsQ0FBdUJ1RixtQkFBdkIsR0FDRSxTQUFTQyx5QkFBVCxDQUFtQ0MsWUFBbkMsRUFBaUQ7QUFDL0MsZUFBT2pjLE1BQU0sQ0FBQ0csSUFBUCxDQUFZSyxNQUFNLENBQUN1RCxpQkFBUCxDQUF5QmEsc0JBQXJDLEVBQTZEeVAsTUFBN0QsQ0FDTDRILFlBQVksR0FBR0EsWUFBWSxDQUFDQyxLQUFiLENBQW1CLEdBQW5CLENBQUgsR0FBNkIsRUFEcEMsQ0FBUDtBQUVELE9BSkg7QUFLRCxLQVZEO0FBV0QsR0E3ZWtDOztBQStlbkNDLHdCQUFzQixHQUFHO0FBQ3ZCLFFBQUksQ0FBQzNiLE1BQU0sQ0FBQ2dZLFFBQVAsQ0FBZ0JDLFFBQWhCLENBQXlCQyxVQUF6QixDQUFvQyxTQUFwQyxDQUFMLEVBQXFEO0FBQ3JEeFAsa0JBQWMsQ0FBQ0UsV0FBZixDQUEyQixtQkFBM0IsRUFBZ0RDLElBQWhELENBQXFELE1BQU07QUFDekQsWUFBTStTLGVBQWUsR0FBR2xULGNBQWMsQ0FBQ0ssR0FBZixDQUFtQixtQkFBbkIsQ0FBeEI7O0FBQ0EsVUFBSSxDQUFDNlMsZUFBTCxFQUFzQjtBQUNwQjtBQUNBNWIsY0FBTSxDQUFDbUwsVUFBUCxDQUFrQm5MLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0I4VCxzQkFBbEMsRUFBMEQsR0FBMUQ7QUFDQTtBQUNEOztBQUNELFVBQUkzYixNQUFNLENBQUM2SCxRQUFQLENBQWdCZ1UsdUJBQXBCLEVBQTZDO0FBQzdDN2IsWUFBTSxDQUFDNkgsUUFBUCxDQUFnQmdVLHVCQUFoQixHQUEwQyxJQUExQztBQUVBLFVBQUksQ0FBQzdiLE1BQU0sQ0FBQ3VELGlCQUFaLEVBQStCOztBQUMvQixVQUFJcVksZUFBZSxDQUFDNUYsU0FBaEIsQ0FBMEI4Rix1QkFBOUIsRUFBdUQ7QUFDckQ7QUFDQUYsdUJBQWUsQ0FBQzVGLFNBQWhCLENBQTBCOEYsdUJBQTFCLEdBQ0UsU0FBU0MsNEJBQVQsQ0FBc0NsYyxHQUF0QyxFQUEyQ2dHLEtBQTNDLEVBQWtEbVcsU0FBbEQsRUFBNkQ7QUFDM0QsZ0JBQU1DLE1BQU0sR0FBR2pjLE1BQU0sQ0FBQ3VELGlCQUFQLENBQXlCYSxzQkFBekIsQ0FBZ0R2RSxHQUFoRCxLQUNSO0FBQUUyRSxnQkFBSSxFQUFFeEUsTUFBTSxDQUFDdUQsaUJBQVAsQ0FBeUJLO0FBQWpDLFdBRFA7QUFFQSxpQkFBTyxLQUFLc1ksZUFBTCxDQUFxQnJjLEdBQXJCLEVBQTBCb2MsTUFBTSxDQUFDelgsSUFBUCxLQUFnQixNQUFoQixHQUF5QjJYLElBQUksQ0FBQ0MsU0FBTCxDQUFldlcsS0FBZixDQUF6QixHQUFpREEsS0FBM0UsRUFBa0ZtVyxTQUFsRixFQUE2RkMsTUFBN0YsQ0FBUDtBQUNELFNBTEg7QUFNRDs7QUFDRCxVQUFJTCxlQUFlLENBQUM1RixTQUFoQixDQUEwQnFHLHVCQUE5QixFQUF1RDtBQUNyRDtBQUNBVCx1QkFBZSxDQUFDNUYsU0FBaEIsQ0FBMEJxRyx1QkFBMUIsR0FDRSxTQUFTQyw2QkFBVCxDQUNFQyxlQURGLEVBQ21CQyxnQkFEbkIsRUFDcUNDLGtCQURyQyxFQUN5RDlHLGFBRHpELEVBQ3dFO0FBQ3RFLGdCQUFNK0csU0FBUyxHQUNYbGQsTUFBTSxDQUFDRyxJQUFQLENBQVlLLE1BQU0sQ0FBQ3VELGlCQUFQLENBQXlCYSxzQkFBckMsRUFDRzRELE1BREgsQ0FDV25JLEdBQUQsSUFBUztBQUNmLGtCQUFNaVosSUFBSSxHQUFHOVksTUFBTSxDQUFDdUQsaUJBQVAsQ0FBeUJhLHNCQUF6QixDQUFnRHZFLEdBQWhELENBQWI7QUFDQSxtQkFBT2laLElBQUksS0FBSyxDQUFDQSxJQUFJLENBQUNuVSxPQUFOLElBQWlCLENBQUMsS0FBS2xDLE1BQXZCLElBQ0VxVyxJQUFJLENBQUNuVSxPQUFMLENBQWF6QixRQUFiLENBQXNCLGlIQUFrQixDQUFDLEtBQUtULE1BQU4sQ0FBeEMsQ0FEUCxDQUFYO0FBRUQsV0FMSCxFQU1HdUYsTUFOSCxDQU1VLEtBQUsyVSxvQkFBTCxDQUEwQkosZUFBMUIsQ0FOVixFQU9HdlUsTUFQSCxDQU9VLEtBQUsyVSxvQkFBTCxDQUEwQkgsZ0JBQTFCLENBUFYsRUFRR3hVLE1BUkgsQ0FRVSxLQUFLMlUsb0JBQUwsQ0FBMEJGLGtCQUExQixDQVJWLEVBU0d6VSxNQVRILENBU1UsS0FBSzJVLG9CQUFMLENBQTBCaEgsYUFBMUIsQ0FUVixDQURKO0FBV0EsaUJBQU8rRyxTQUFTLENBQUNFLElBQVYsR0FBaUIvSSxNQUFqQixDQUF3QixPQUF4QixDQUFQO0FBQ0QsU0FmSDtBQWdCRDtBQUNGLEtBdkNEO0FBd0NELEdBemhCa0M7O0FBMmhCbkNnSixtQkFBaUIsR0FBRztBQUNsQixRQUFJN2MsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQmlWLGFBQXBCLEVBQW1DO0FBQ25DOWMsVUFBTSxDQUFDNkgsUUFBUCxDQUFnQmlWLGFBQWhCLEdBQWdDLElBQWhDO0FBQ0E5YyxVQUFNLENBQUM2SCxRQUFQLENBQWdCbVMsbUJBQWhCO0FBQ0FoYSxVQUFNLENBQUM2SCxRQUFQLENBQWdCMFIsaUJBQWhCO0FBQ0F2WixVQUFNLENBQUM2SCxRQUFQLENBQWdCOFMsd0JBQWhCO0FBQ0EzYSxVQUFNLENBQUM2SCxRQUFQLENBQWdCaVQsaUJBQWhCO0FBQ0E5YSxVQUFNLENBQUM2SCxRQUFQLENBQWdCd1QsbUJBQWhCO0FBQ0FyYixVQUFNLENBQUM2SCxRQUFQLENBQWdCdVMsaUJBQWhCLENBQWtDLGtCQUFsQztBQUNBcGEsVUFBTSxDQUFDNkgsUUFBUCxDQUFnQnVTLGlCQUFoQixDQUFrQyxtQkFBbEM7QUFDRCxHQXJpQmtDOztBQXVpQm5DMkMsTUFBSSxHQUFHO0FBQ0wsUUFBSS9jLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0JtVixRQUFwQixFQUE4QjtBQUM5QmhkLFVBQU0sQ0FBQzZILFFBQVAsQ0FBZ0JnVixpQkFBaEI7QUFDQSxVQUFNakcsSUFBSSxHQUFHNVcsTUFBTSxDQUFDNkgsUUFBUCxDQUFnQndNLGFBQWhCLENBQThCalUsUUFBOUIsRUFBd0MsZ0JBQXhDLENBQWI7O0FBQ0EsUUFBSSxDQUFDd1csSUFBSSxDQUFDblYsSUFBTixJQUFjLENBQUNtVixJQUFJLENBQUNuVixJQUFMLENBQVVzRyxNQUE3QixFQUFxQztBQUNuQztBQUNBL0gsWUFBTSxDQUFDbUwsVUFBUCxDQUFrQm5MLE1BQU0sQ0FBQzZILFFBQVAsQ0FBZ0JrVixJQUFsQyxFQUF3QyxJQUF4QztBQUNBO0FBQ0Q7O0FBQ0QvYyxVQUFNLENBQUM2SCxRQUFQLENBQWdCbVYsUUFBaEIsR0FBMkIsSUFBM0I7QUFFQWhkLFVBQU0sQ0FBQzZILFFBQVAsQ0FBZ0IrUCxhQUFoQjtBQUVBNVgsVUFBTSxDQUFDNkgsUUFBUCxDQUFnQm9WLFFBQWhCO0FBQ0FqZCxVQUFNLENBQUNtUixnQkFBUCxDQUF3QixrQkFBeEIsRUFBNENuUixNQUFNLENBQUNtTCxVQUFQLENBQWtCOEYsSUFBbEIsQ0FBdUIsSUFBdkIsRUFBNkJqUixNQUFNLENBQUM2SCxRQUFQLENBQWdCb1YsUUFBN0MsRUFBdUQsR0FBdkQsQ0FBNUM7QUFDQTs7QUFDQXRPLFdBQU8sQ0FBQ3VPLEdBQVIsQ0FBYSxtQkFBa0IsbURBQVEsRUFBdkM7QUFDQTs7QUFDQSxRQUFJLENBQUNsZCxNQUFNLENBQUNtZCxjQUFaLEVBQTRCO0FBQzFCbmQsWUFBTSxDQUFDbWQsY0FBUCxHQUF3QixFQUF4QjtBQUNEOztBQUNEbmQsVUFBTSxDQUFDbWQsY0FBUCxDQUFzQnJPLElBQXRCLENBQTJCO0FBQ3pCbkQsVUFBSSxFQUFFLFVBRG1CO0FBRXpCeVIsYUFBTyxFQUFFLG1EQUZnQjtBQUd6QkMsU0FBRyxFQUFFO0FBSG9CLEtBQTNCO0FBS0QsR0Fqa0JrQzs7QUFta0JuQ0osVUFBUSxHQUFHO0FBQ1RqZCxVQUFNLENBQUM2SCxRQUFQLENBQWdCNE8sY0FBaEI7QUFDQXpXLFVBQU0sQ0FBQzZILFFBQVAsQ0FBZ0JrUSxpQkFBaEI7QUFDQS9YLFVBQU0sQ0FBQzZILFFBQVAsQ0FBZ0I4VCxzQkFBaEI7QUFDRCxHQXZrQmtDOztBQXlrQm5DN1AsU0FBTyxHQUFHO0FBQ1IsV0FBTzlMLE1BQU0sQ0FBQ3NkLFlBQVAsQ0FBb0JDLE9BQXBCLENBQTRCLGdCQUE1QixLQUFpRCxFQUF4RDtBQUNELEdBM2tCa0M7O0FBNmtCbkN2UixTQUFPLENBQUNMLElBQUQsRUFBTztBQUNaM0wsVUFBTSxDQUFDc2QsWUFBUCxDQUFvQkUsT0FBcEIsQ0FBNEIsZ0JBQTVCLEVBQThDN1IsSUFBSSxJQUFJLEVBQXREO0FBQ0QsR0Eva0JrQzs7QUFpbEJuQzdELGlCQUFlLENBQUN2QixRQUFELEVBQVc5RSxJQUFYLEVBQWlCYSxRQUFqQixFQUEyQkcsTUFBM0IsRUFBbUM1QixVQUFuQyxFQUErQzhJLFNBQS9DLEVBQTBEN0gsS0FBMUQsRUFBaUU7QUFDOUUsVUFBTTJiLFlBQVksR0FBSWxYLFFBQVEsQ0FBQ3JFLE9BQVQsQ0FBaUIsUUFBakIsS0FBOEIsQ0FBL0IsR0FBb0NxRSxRQUFwQyxHQUFnRCxZQUFXQSxRQUFTLEtBQXpGOztBQUNBLFFBQUk7QUFDRjtBQUNBLFlBQU1tWCxJQUFJLEdBQUcsSUFBSUMsUUFBSixDQUNYLE1BRFcsRUFDSCxVQURHLEVBQ1MsUUFEVCxFQUNtQixZQURuQixFQUNpQyxXQURqQyxFQUM4QyxPQUQ5QyxFQUN1REYsWUFEdkQsQ0FBYjtBQUVBOztBQUNBLGFBQU9DLElBQUksQ0FBQ2pjLElBQUQsRUFBT2EsUUFBUCxFQUFpQkcsTUFBakIsRUFBeUI1QixVQUF6QixFQUFxQzhJLFNBQXJDLEVBQWdEN0gsS0FBaEQsQ0FBWDtBQUNELEtBTkQsQ0FNRSxPQUFPZ0osQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxVQUFLQSxDQUFDLFlBQVk4UyxXQUFkLElBQThCOVMsQ0FBQyxZQUFZK1MsY0FBL0MsRUFBK0Q7QUFDN0RsUCxlQUFPLENBQUNDLElBQVIsQ0FBYyxHQUFFOUQsQ0FBQyxDQUFDYSxJQUFLLEtBQUliLENBQUMsQ0FBQ2dULE9BQVEsZ0JBQWVMLFlBQWEsRUFBakU7QUFDQSxlQUFPLElBQVA7QUFDRDtBQUNEOzs7QUFDQSxZQUFNM1MsQ0FBTjtBQUNEO0FBQ0Y7O0FBbG1Ca0MsQ0FBckM7QUFvbUJBOUssTUFBTSxDQUFDNkgsUUFBUCxDQUFnQmtWLElBQWhCLEc7Ozs7Ozs7Ozs7Ozs7QUM1bUJBLCtEQUFlLFVBQWYsRSIsImZpbGUiOiJzY3JpcHRzLWRiZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyeXBvaW50cy9zY3JpcHRzLmpzXCIpO1xuIiwiLyoqIENvbnN0YW50cyB0byBiZSB1c2VkIGluIHRoZSBmcm9udGVuZC4gKi9cblxuLy8gQ29uc3RhbnRzIHNob3VsZCBiZSBhbHBoYWJldGljYWxseSBzb3J0ZWQgYnkgbmFtZS5cbi8vIEFycmF5cyB3aXRoIHZhbHVlcyBzaG91bGQgYmUgYWxwaGFiZXRpY2FsbHkgc29ydGVkIGlmIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLlxuLy8gRWFjaCBjb25zdGFudCBzaG91bGQgaGF2ZSBhIGRlc2NyaXB0aW9uIHdoYXQgaXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBmb3IuXG5cbi8qKiBJY29uIHRvIHVzZSB3aGVuIG5vIGljb24gc3BlY2lmaWVkIGZvciBkb21haW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9ET01BSU5fSUNPTiA9IFwiaGFzczpib29rbWFya1wiO1xuXG4vKiogUGFuZWwgdG8gc2hvdyB3aGVuIG5vIHBhbmVsIGlzIHBpY2tlZC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBTkVMID0gXCJzdGF0ZXNcIjtcblxuLyoqIERvbWFpbnMgdGhhdCBoYXZlIGEgc3RhdGUgY2FyZC4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX1dJVEhfQ0FSRCA9IFtcbiAgXCJjbGltYXRlXCIsXG4gIFwiY292ZXJcIixcbiAgXCJjb25maWd1cmF0b3JcIixcbiAgXCJpbnB1dF9zZWxlY3RcIixcbiAgXCJpbnB1dF9udW1iZXJcIixcbiAgXCJpbnB1dF90ZXh0XCIsXG4gIFwibG9ja1wiLFxuICBcIm1lZGlhX3BsYXllclwiLFxuICBcInNjZW5lXCIsXG4gIFwic2NyaXB0XCIsXG4gIFwidGltZXJcIixcbiAgXCJ2YWN1dW1cIixcbiAgXCJ3YXRlcl9oZWF0ZXJcIixcbiAgXCJ3ZWJsaW5rXCIsXG5dO1xuXG4vKiogRG9tYWlucyB3aXRoIHNlcGFyYXRlIG1vcmUgaW5mbyBkaWFsb2cuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19XSVRIX01PUkVfSU5GTyA9IFtcbiAgXCJhbGFybV9jb250cm9sX3BhbmVsXCIsXG4gIFwiYXV0b21hdGlvblwiLFxuICBcImNhbWVyYVwiLFxuICBcImNsaW1hdGVcIixcbiAgXCJjb25maWd1cmF0b3JcIixcbiAgXCJjb3ZlclwiLFxuICBcImZhblwiLFxuICBcImdyb3VwXCIsXG4gIFwiaGlzdG9yeV9ncmFwaFwiLFxuICBcImlucHV0X2RhdGV0aW1lXCIsXG4gIFwibGlnaHRcIixcbiAgXCJsb2NrXCIsXG4gIFwibWVkaWFfcGxheWVyXCIsXG4gIFwic2NyaXB0XCIsXG4gIFwic3VuXCIsXG4gIFwidXBkYXRlclwiLFxuICBcInZhY3V1bVwiLFxuICBcIndhdGVyX2hlYXRlclwiLFxuICBcIndlYXRoZXJcIixcbl07XG5cbi8qKiBEb21haW5zIHRoYXQgc2hvdyBubyBtb3JlIGluZm8gZGlhbG9nLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfSElERV9NT1JFX0lORk8gPSBbXG4gIFwiaW5wdXRfbnVtYmVyXCIsXG4gIFwiaW5wdXRfc2VsZWN0XCIsXG4gIFwiaW5wdXRfdGV4dFwiLFxuICBcInNjZW5lXCIsXG4gIFwid2VibGlua1wiLFxuXTtcblxuLyoqIERvbWFpbnMgdGhhdCBzaG91bGQgaGF2ZSB0aGUgaGlzdG9yeSBoaWRkZW4gaW4gdGhlIG1vcmUgaW5mbyBkaWFsb2cuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19NT1JFX0lORk9fTk9fSElTVE9SWSA9IFtcbiAgXCJjYW1lcmFcIixcbiAgXCJjb25maWd1cmF0b3JcIixcbiAgXCJoaXN0b3J5X2dyYXBoXCIsXG4gIFwic2NlbmVcIixcbl07XG5cbi8qKiBTdGF0ZXMgdGhhdCB3ZSBjb25zaWRlciBcIm9mZlwiLiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFU19PRkYgPSBbXCJjbG9zZWRcIiwgXCJsb2NrZWRcIiwgXCJvZmZcIl07XG5cbi8qKiBEb21haW5zIHdoZXJlIHdlIGFsbG93IHRvZ2dsZSBpbiBMb3ZlbGFjZS4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX1RPR0dMRSA9IG5ldyBTZXQoW1xuICBcImZhblwiLFxuICBcImlucHV0X2Jvb2xlYW5cIixcbiAgXCJsaWdodFwiLFxuICBcInN3aXRjaFwiLFxuXSk7XG5cbi8qKiBUZW1wZXJhdHVyZSB1bml0cy4gKi9cbmV4cG9ydCBjb25zdCBVTklUX0MgPSBcIsKwQ1wiO1xuZXhwb3J0IGNvbnN0IFVOSVRfRiA9IFwiwrBGXCI7XG5cbi8qKiBFbnRpdHkgSUQgb2YgdGhlIGRlZmF1bHQgdmlldy4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZJRVdfRU5USVRZX0lEID0gXCJncm91cC5kZWZhdWx0X3ZpZXdcIjtcbiIsIi8qKlxuICogQXBwbHkgYSB0aGVtZSB0byBhbiBlbGVtZW50IGJ5IHNldHRpbmcgdGhlIENTUyB2YXJpYWJsZXMgb24gaXQuXG4gKlxuICogZWxlbWVudDogRWxlbWVudCB0byBhcHBseSB0aGVtZSBvbi5cbiAqIHRoZW1lczogSEFTUyBUaGVtZSBpbmZvcm1hdGlvblxuICogbG9jYWxUaGVtZTogc2VsZWN0ZWQgdGhlbWUuXG4gKiB1cGRhdGVNZXRhOiBib29sZWFuIGlmIHdlIHNob3VsZCB1cGRhdGUgdGhlIHRoZW1lLWNvbG9yIG1ldGEgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gIGVsZW1lbnQsXG4gIHRoZW1lcyxcbiAgbG9jYWxUaGVtZSxcbiAgdXBkYXRlTWV0YSA9IGZhbHNlXG4pIHtcbiAgaWYgKCFlbGVtZW50Ll90aGVtZXMpIHtcbiAgICBlbGVtZW50Ll90aGVtZXMgPSB7fTtcbiAgfVxuICBsZXQgdGhlbWVOYW1lID0gdGhlbWVzLmRlZmF1bHRfdGhlbWU7XG4gIGlmIChsb2NhbFRoZW1lID09PSBcImRlZmF1bHRcIiB8fCAobG9jYWxUaGVtZSAmJiB0aGVtZXMudGhlbWVzW2xvY2FsVGhlbWVdKSkge1xuICAgIHRoZW1lTmFtZSA9IGxvY2FsVGhlbWU7XG4gIH1cbiAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgZWxlbWVudC5fdGhlbWVzKTtcbiAgaWYgKHRoZW1lTmFtZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICB2YXIgdGhlbWUgPSB0aGVtZXMudGhlbWVzW3RoZW1lTmFtZV07XG4gICAgT2JqZWN0LmtleXModGhlbWUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdmFyIHByZWZpeGVkS2V5ID0gXCItLVwiICsga2V5O1xuICAgICAgZWxlbWVudC5fdGhlbWVzW3ByZWZpeGVkS2V5XSA9IFwiXCI7XG4gICAgICBzdHlsZXNbcHJlZml4ZWRLZXldID0gdGhlbWVba2V5XTtcbiAgICB9KTtcbiAgfVxuICBpZiAoZWxlbWVudC51cGRhdGVTdHlsZXMpIHtcbiAgICBlbGVtZW50LnVwZGF0ZVN0eWxlcyhzdHlsZXMpO1xuICB9IGVsc2UgaWYgKHdpbmRvdy5TaGFkeUNTUykge1xuICAgIC8vIGltcGxlbWVudCB1cGRhdGVTdHlsZXMoKSBtZXRob2Qgb2YgUG9sZW1lciBlbGVtZW50c1xuICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovIChlbGVtZW50KSwgc3R5bGVzKTtcbiAgfVxuXG4gIGlmICghdXBkYXRlTWV0YSkgcmV0dXJuO1xuXG4gIGNvbnN0IG1ldGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPXRoZW1lLWNvbG9yXVwiKTtcbiAgaWYgKG1ldGEpIHtcbiAgICBpZiAoIW1ldGEuaGFzQXR0cmlidXRlKFwiZGVmYXVsdC1jb250ZW50XCIpKSB7XG4gICAgICBtZXRhLnNldEF0dHJpYnV0ZShcImRlZmF1bHQtY29udGVudFwiLCBtZXRhLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIikpO1xuICAgIH1cbiAgICBjb25zdCB0aGVtZUNvbG9yID1cbiAgICAgIHN0eWxlc1tcIi0tcHJpbWFyeS1jb2xvclwiXSB8fCBtZXRhLmdldEF0dHJpYnV0ZShcImRlZmF1bHQtY29udGVudFwiKTtcbiAgICBtZXRhLnNldEF0dHJpYnV0ZShcImNvbnRlbnRcIiwgdGhlbWVDb2xvcik7XG4gIH1cbn1cbiIsIi8qKlxuICogVXBkYXRlIHJvb3QncyBjaGlsZCBlbGVtZW50IHRvIGJlIG5ld0VsZW1lbnRUYWcgcmVwbGFjaW5nIGFub3RoZXIgZXhpc3RpbmcgY2hpbGQgaWYgYW55LlxuICogQ29weSBhdHRyaWJ1dGVzIGludG8gdGhlIGNoaWxkIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGR5bmFtaWNDb250ZW50VXBkYXRlcihyb290LCBuZXdFbGVtZW50VGFnLCBhdHRyaWJ1dGVzKSB7XG4gIGNvbnN0IHJvb3RFbCA9IHJvb3Q7XG4gIGxldCBjdXN0b21FbDtcblxuICBpZiAocm9vdEVsLmxhc3RDaGlsZCAmJiByb290RWwubGFzdENoaWxkLnRhZ05hbWUgPT09IG5ld0VsZW1lbnRUYWcpIHtcbiAgICBjdXN0b21FbCA9IHJvb3RFbC5sYXN0Q2hpbGQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJvb3RFbC5sYXN0Q2hpbGQpIHtcbiAgICAgIHJvb3RFbC5yZW1vdmVDaGlsZChyb290RWwubGFzdENoaWxkKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRpbmcgYW4gZWxlbWVudCB3aXRoIHVwcGVyIGNhc2Ugd29ya3MgZmluZSBpbiBDaHJvbWUsIGJ1dCBpbiBGRiBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5XG4gICAgLy8gYmVjb21lIGEgZGVmaW5lZCBDdXN0b20gRWxlbWVudC4gUG9seW1lciBkb2VzIHRoYXQgaW4gc29tZSBsYXRlciBwYXNzLlxuICAgIGN1c3RvbUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuZXdFbGVtZW50VGFnLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgaWYgKGN1c3RvbUVsLnNldFByb3BlcnRpZXMpIHtcbiAgICBjdXN0b21FbC5zZXRQcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gd2Fzbid0IGxvYWRlZCB5ZXQgLSBzZXRQcm9wZXJ0aWVzIHdvdWxkIGJlXG4gICAgLy8gbWlzc2luZywgYnV0IG5vIGhhcm0gaW4gc2V0dGluZyBhdHRyaWJ1dGVzIG9uZS1ieS1vbmUgdGhlbi5cbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGN1c3RvbUVsW2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY3VzdG9tRWwucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJvb3RFbC5hcHBlbmRDaGlsZChjdXN0b21FbCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEhvbWVBc3Npc3RhbnQgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2FuVG9nZ2xlRG9tYWluKGhhc3M6IEhvbWVBc3Npc3RhbnQsIGRvbWFpbjogc3RyaW5nKSB7XG4gIGNvbnN0IHNlcnZpY2VzID0gaGFzcy5zZXJ2aWNlc1tkb21haW5dO1xuICBpZiAoIXNlcnZpY2VzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGRvbWFpbiA9PT0gXCJsb2NrXCIpIHtcbiAgICByZXR1cm4gXCJsb2NrXCIgaW4gc2VydmljZXM7XG4gIH1cbiAgaWYgKGRvbWFpbiA9PT0gXCJjb3ZlclwiKSB7XG4gICAgcmV0dXJuIFwib3Blbl9jb3ZlclwiIGluIHNlcnZpY2VzO1xuICB9XG4gIHJldHVybiBcInR1cm5fb25cIiBpbiBzZXJ2aWNlcztcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdHkgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5pbXBvcnQgY2FuVG9nZ2xlRG9tYWluIGZyb20gXCIuL2Nhbl90b2dnbGVfZG9tYWluXCI7XG5pbXBvcnQgY29tcHV0ZVN0YXRlRG9tYWluIGZyb20gXCIuL2NvbXB1dGVfc3RhdGVfZG9tYWluXCI7XG5pbXBvcnQgeyBIb21lQXNzaXN0YW50IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBzdXBwb3J0c0ZlYXR1cmUgfSBmcm9tIFwiLi9zdXBwb3J0cy1mZWF0dXJlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhblRvZ2dsZVN0YXRlKFxuICBoYXNzOiBIb21lQXNzaXN0YW50LFxuICBzdGF0ZU9iajogSGFzc0VudGl0eVxuKSB7XG4gIGNvbnN0IGRvbWFpbiA9IGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iaik7XG4gIGlmIChkb21haW4gPT09IFwiZ3JvdXBcIikge1xuICAgIHJldHVybiBzdGF0ZU9iai5zdGF0ZSA9PT0gXCJvblwiIHx8IHN0YXRlT2JqLnN0YXRlID09PSBcIm9mZlwiO1xuICB9XG4gIGlmIChkb21haW4gPT09IFwiY2xpbWF0ZVwiKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRzRmVhdHVyZShzdGF0ZU9iaiwgNDA5Nik7XG4gIH1cblxuICByZXR1cm4gY2FuVG9nZ2xlRG9tYWluKGhhc3MsIGRvbWFpbik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlRG9tYWluKGVudGl0eUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW50aXR5SWQuc3Vic3RyKDAsIGVudGl0eUlkLmluZGV4T2YoXCIuXCIpKTtcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdHkgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5pbXBvcnQgY29tcHV0ZURvbWFpbiBmcm9tIFwiLi9jb21wdXRlX2RvbWFpblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlU3RhdGVEb21haW4oc3RhdGVPYmo6IEhhc3NFbnRpdHkpIHtcbiAgcmV0dXJuIGNvbXB1dGVEb21haW4oc3RhdGVPYmouZW50aXR5X2lkKTtcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdGllcyB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCB7IEdyb3VwRW50aXR5IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdyb3VwRW50aXRpZXMoXG4gIGVudGl0aWVzOiBIYXNzRW50aXRpZXMsXG4gIGdyb3VwOiBHcm91cEVudGl0eVxuKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIGdyb3VwLmF0dHJpYnV0ZXMuZW50aXR5X2lkLmZvckVhY2goKGVudGl0eUlkKSA9PiB7XG4gICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbZW50aXR5SWRdO1xuXG4gICAgaWYgKGVudGl0eSkge1xuICAgICAgcmVzdWx0W2VudGl0eS5lbnRpdHlfaWRdID0gZW50aXR5O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdGllcyB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjb21wdXRlRG9tYWluIGZyb20gXCIuL2NvbXB1dGVfZG9tYWluXCI7XG5pbXBvcnQgZ2V0R3JvdXBFbnRpdGllcyBmcm9tIFwiLi9nZXRfZ3JvdXBfZW50aXRpZXNcIjtcbmltcG9ydCB7IEdyb3VwRW50aXR5IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbi8vIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgZW50aXRpZXMgdGhhdCB0aGUgdmlldyB3aWxsIHNob3dcbi8vIGluY2x1ZGluZyBlbWJlZGRlZCBncm91cHMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3RW50aXRpZXMoXG4gIGVudGl0aWVzOiBIYXNzRW50aXRpZXMsXG4gIHZpZXc6IEdyb3VwRW50aXR5XG4pOiBIYXNzRW50aXRpZXMge1xuICBjb25zdCB2aWV3RW50aXRpZXMgPSB7fTtcblxuICB2aWV3LmF0dHJpYnV0ZXMuZW50aXR5X2lkLmZvckVhY2goKGVudGl0eUlkKSA9PiB7XG4gICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbZW50aXR5SWRdO1xuXG4gICAgaWYgKGVudGl0eSAmJiAhZW50aXR5LmF0dHJpYnV0ZXMuaGlkZGVuKSB7XG4gICAgICB2aWV3RW50aXRpZXNbZW50aXR5LmVudGl0eV9pZF0gPSBlbnRpdHk7XG5cbiAgICAgIGlmIChjb21wdXRlRG9tYWluKGVudGl0eS5lbnRpdHlfaWQpID09PSBcImdyb3VwXCIpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBFbnRpdGllcyA9IGdldEdyb3VwRW50aXRpZXMoZW50aXRpZXMsIGVudGl0eSBhcyBHcm91cEVudGl0eSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBFbnRpdGllcykuZm9yRWFjaCgoZ3JFbnRpdHlJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyRW50aXR5ID0gZ3JvdXBFbnRpdGllc1tnckVudGl0eUlkXTtcblxuICAgICAgICAgIGlmICghZ3JFbnRpdHkuYXR0cmlidXRlcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIHZpZXdFbnRpdGllc1tnckVudGl0eUlkXSA9IGdyRW50aXR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmlld0VudGl0aWVzO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjYW5Ub2dnbGVTdGF0ZSBmcm9tIFwiLi9jYW5fdG9nZ2xlX3N0YXRlXCI7XG5pbXBvcnQgY29tcHV0ZVN0YXRlRG9tYWluIGZyb20gXCIuL2NvbXB1dGVfc3RhdGVfZG9tYWluXCI7XG5pbXBvcnQgeyBET01BSU5TX1dJVEhfQ0FSRCB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IHsgSG9tZUFzc2lzdGFudCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGF0ZUNhcmRUeXBlKFxuICBoYXNzOiBIb21lQXNzaXN0YW50LFxuICBzdGF0ZU9iajogSGFzc0VudGl0eVxuKSB7XG4gIGlmIChzdGF0ZU9iai5zdGF0ZSA9PT0gXCJ1bmF2YWlsYWJsZVwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9XG5cbiAgY29uc3QgZG9tYWluID0gY29tcHV0ZVN0YXRlRG9tYWluKHN0YXRlT2JqKTtcblxuICBpZiAoRE9NQUlOU19XSVRIX0NBUkQuaW5jbHVkZXMoZG9tYWluKSkge1xuICAgIHJldHVybiBkb21haW47XG4gIH1cbiAgaWYgKFxuICAgIGNhblRvZ2dsZVN0YXRlKGhhc3MsIHN0YXRlT2JqKSAmJlxuICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbCAhPT0gXCJoaWRkZW5cIlxuICApIHtcbiAgICByZXR1cm4gXCJ0b2dnbGVcIjtcbiAgfVxuICByZXR1cm4gXCJkaXNwbGF5XCI7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXR5IH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNGZWF0dXJlID0gKFxuICBzdGF0ZU9iajogSGFzc0VudGl0eSxcbiAgZmVhdHVyZTogbnVtYmVyXG4pOiBib29sZWFuID0+IHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgcmV0dXJuIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnN1cHBvcnRlZF9mZWF0dXJlcyEgJiBmZWF0dXJlKSAhPT0gMDtcbn07XG4iLCJjb25zdCBoYXNzQXR0cmlidXRlVXRpbCA9IHt9O1xuXG5oYXNzQXR0cmlidXRlVXRpbC5ET01BSU5fREVWSUNFX0NMQVNTID0ge1xuICBiaW5hcnlfc2Vuc29yOiBbXG4gICAgXCJiYXR0ZXJ5XCIsXG4gICAgXCJjb2xkXCIsXG4gICAgXCJjb25uZWN0aXZpdHlcIixcbiAgICBcImRvb3JcIixcbiAgICBcImdhcmFnZV9kb29yXCIsXG4gICAgXCJnYXNcIixcbiAgICBcImhlYXRcIixcbiAgICBcImxpZ2h0XCIsXG4gICAgXCJsb2NrXCIsXG4gICAgXCJtb2lzdHVyZVwiLFxuICAgIFwibW90aW9uXCIsXG4gICAgXCJtb3ZpbmdcIixcbiAgICBcIm9jY3VwYW5jeVwiLFxuICAgIFwib3BlbmluZ1wiLFxuICAgIFwicGx1Z1wiLFxuICAgIFwicG93ZXJcIixcbiAgICBcInByZXNlbmNlXCIsXG4gICAgXCJwcm9ibGVtXCIsXG4gICAgXCJzYWZldHlcIixcbiAgICBcInNtb2tlXCIsXG4gICAgXCJzb3VuZFwiLFxuICAgIFwidmlicmF0aW9uXCIsXG4gICAgXCJ3aW5kb3dcIixcbiAgXSxcbiAgY292ZXI6IFtcImdhcmFnZVwiXSxcbiAgc2Vuc29yOiBbXCJiYXR0ZXJ5XCIsIFwiaHVtaWRpdHlcIiwgXCJpbGx1bWluYW5jZVwiLCBcInRlbXBlcmF0dXJlXCIsIFwicHJlc3N1cmVcIl0sXG59O1xuXG5oYXNzQXR0cmlidXRlVXRpbC5VTktOT1dOX1RZUEUgPSBcImpzb25cIjtcbmhhc3NBdHRyaWJ1dGVVdGlsLkFERF9UWVBFID0gXCJrZXktdmFsdWVcIjtcblxuaGFzc0F0dHJpYnV0ZVV0aWwuVFlQRV9UT19UQUcgPSB7XG4gIHN0cmluZzogXCJoYS1jdXN0b21pemUtc3RyaW5nXCIsXG4gIGpzb246IFwiaGEtY3VzdG9taXplLXN0cmluZ1wiLFxuICBpY29uOiBcImhhLWN1c3RvbWl6ZS1pY29uXCIsXG4gIGJvb2xlYW46IFwiaGEtY3VzdG9taXplLWJvb2xlYW5cIixcbiAgYXJyYXk6IFwiaGEtY3VzdG9taXplLWFycmF5XCIsXG4gIFwia2V5LXZhbHVlXCI6IFwiaGEtY3VzdG9taXplLWtleS12YWx1ZVwiLFxufTtcblxuLy8gQXR0cmlidXRlcyBoZXJlIHNlcnZlIGR1YWwgcHVycG9zZTpcbi8vIDEpIEFueSBrZXkgb2YgdGhpcyBvYmplY3Qgd29uJ3QgYmUgc2hvd24gaW4gbW9yZS1pbmZvIHdpbmRvdy5cbi8vIDIpIEFueSBrZXkgd2hpY2ggaGFzIHZhbHVlIG90aGVyIHRoYW4gdW5kZWZpbmVkIHdpbGwgYXBwZWFyIGluIGN1c3RvbWl6YXRpb25cbi8vICAgIGNvbmZpZyBhY2NvcmRpbmcgdG8gaXRzIHZhbHVlLlxuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUyA9IGhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMgfHwge1xuICBlbnRpdHlfcGljdHVyZTogdW5kZWZpbmVkLFxuICBmcmllbmRseV9uYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIk5hbWVcIiB9LFxuICBpY29uOiB7IHR5cGU6IFwiaWNvblwiIH0sXG4gIGVtdWxhdGVkX2h1ZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRvbWFpbnM6IFtcImVtdWxhdGVkX2h1ZVwiXSxcbiAgfSxcbiAgZW11bGF0ZWRfaHVlX25hbWU6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRvbWFpbnM6IFtcImVtdWxhdGVkX2h1ZVwiXSxcbiAgfSxcbiAgaGFhc2thX2hpZGRlbjogdW5kZWZpbmVkLFxuICBoYWFza2FfbmFtZTogdW5kZWZpbmVkLFxuICBob21lYnJpZGdlX2hpZGRlbjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICBob21lYnJpZGdlX25hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICBzdXBwb3J0ZWRfZmVhdHVyZXM6IHVuZGVmaW5lZCxcbiAgYXR0cmlidXRpb246IHVuZGVmaW5lZCxcbiAgY3VzdG9tX3VpX21vcmVfaW5mbzogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gIGN1c3RvbV91aV9zdGF0ZV9jYXJkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgZGV2aWNlX2NsYXNzOiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG9wdGlvbnM6IGhhc3NBdHRyaWJ1dGVVdGlsLkRPTUFJTl9ERVZJQ0VfQ0xBU1MsXG4gICAgZGVzY3JpcHRpb246IFwiRGV2aWNlIGNsYXNzXCIsXG4gICAgZG9tYWluczogW1wiYmluYXJ5X3NlbnNvclwiLCBcImNvdmVyXCIsIFwic2Vuc29yXCJdLFxuICB9LFxuICBoaWRkZW46IHsgdHlwZTogXCJib29sZWFuXCIsIGRlc2NyaXB0aW9uOiBcIkhpZGUgZnJvbSBVSVwiIH0sXG4gIGFzc3VtZWRfc3RhdGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkb21haW5zOiBbXG4gICAgICBcInN3aXRjaFwiLFxuICAgICAgXCJsaWdodFwiLFxuICAgICAgXCJjb3ZlclwiLFxuICAgICAgXCJjbGltYXRlXCIsXG4gICAgICBcImZhblwiLFxuICAgICAgXCJncm91cFwiLFxuICAgICAgXCJ3YXRlcl9oZWF0ZXJcIixcbiAgICBdLFxuICB9LFxuICBpbml0aWFsX3N0YXRlOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkb21haW5zOiBbXCJhdXRvbWF0aW9uXCJdLFxuICB9LFxuICB1bml0X29mX21lYXN1cmVtZW50OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhc3NBdHRyaWJ1dGVVdGlsO1xuIiwiLyoqXG5AbGljZW5zZVxuQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cblxud2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkgPSBmdW5jdGlvbihwcm9wKSB7IHJldHVybiBwcm9wOyB9O1xuIiwiLyoqXG5AbGljZW5zZVxuQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbmltcG9ydCAnLi9ib290LmpzJztcblxuLyoqXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYSBzdGF0aWMgc3RyaW5nIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbHRlclxuICogc3RyaW5ncyBieSBhc3NldGluZyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgdmlhIHRoaXMgY2xhc3MuIFRoZVxuICogYHZhbHVlYCBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqL1xuY2xhc3MgTGl0ZXJhbFN0cmluZyB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZykge1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIHRoaXMudmFsdWUgPSBzdHJpbmcudG9TdHJpbmcoKTtcbiAgfVxuICAvKipcbiAgICogQHJldHVybiB7c3RyaW5nfSBMaXRlcmFsU3RyaW5nIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlIE9iamVjdCB0byBzdHJpbmdpZnkgaW50byBIVE1MXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEhUTUwgc3RyaW5naWZpZWQgZm9ybSBvZiBgb2JqYFxuICovXG5mdW5jdGlvbiBsaXRlcmFsVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGl0ZXJhbFN0cmluZykge1xuICAgIHJldHVybiAvKiogQHR5cGUgeyFMaXRlcmFsU3RyaW5nfSAqLyh2YWx1ZSkudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbm9uLWxpdGVyYWwgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sTGl0ZXJhbCBmdW5jdGlvbjogJHt2YWx1ZX1gXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgT2JqZWN0IHRvIHN0cmluZ2lmeSBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ30gSFRNTCBzdHJpbmdpZmllZCBmb3JtIG9mIGBvYmpgXG4gKi9cbmZ1bmN0aW9uIGh0bWxWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnQgfSAqLyh2YWx1ZSkuaW5uZXJIVE1MO1xuICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGl0ZXJhbFN0cmluZykge1xuICAgIHJldHVybiBsaXRlcmFsVmFsdWUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7dmFsdWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRlbXBsYXRlIGxpdGVyYWwgdGFnIHRoYXQgY3JlYXRlcyBhbiBIVE1MIDx0ZW1wbGF0ZT4gZWxlbWVudCBmcm9tIHRoZVxuICogY29udGVudHMgb2YgdGhlIHN0cmluZy5cbiAqXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gd3JpdGUgYSBQb2x5bWVyIFRlbXBsYXRlIGluIEphdmFTY3JpcHQuXG4gKlxuICogVGVtcGxhdGVzIGNhbiBiZSBjb21wb3NlZCBieSBpbnRlcnBvbGF0aW5nIGBIVE1MVGVtcGxhdGVFbGVtZW50YHMgaW5cbiAqIGV4cHJlc3Npb25zIGluIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIGxpdGVyYWwuIFRoZSBuZXN0ZWQgdGVtcGxhdGUnc1xuICogYGlubmVySFRNTGAgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbnRhaW5pbmcgdGVtcGxhdGUuICBUaGUgb25seSBvdGhlclxuICogdmFsdWVzIGFsbG93ZWQgaW4gZXhwcmVzc2lvbnMgYXJlIHRob3NlIHJldHVybmVkIGZyb20gYGh0bWxMaXRlcmFsYFxuICogd2hpY2ggZW5zdXJlcyBvbmx5IGxpdGVyYWwgdmFsdWVzIGZyb20gSlMgc291cmNlIGV2ZXIgcmVhY2ggdGhlIEhUTUwsIHRvXG4gKiBndWFyZCBhZ2FpbnN0IFhTUyByaXNrcy5cbiAqXG4gKiBBbGwgb3RoZXIgdmFsdWVzIGFyZSBkaXNhbGxvd2VkIGluIGV4cHJlc3Npb25zIHRvIGhlbHAgcHJldmVudCBYU1NcbiAqIGF0dGFja3M7IGhvd2V2ZXIsIGBodG1sTGl0ZXJhbGAgY2FuIGJlIHVzZWQgdG8gY29tcG9zZSBzdGF0aWNcbiAqIHN0cmluZyB2YWx1ZXMgaW50byB0ZW1wbGF0ZXMuIFRoaXMgaXMgdXNlZnVsIHRvIGNvbXBvc2Ugc3RyaW5ncyBpbnRvXG4gKiBwbGFjZXMgdGhhdCBkbyBub3QgYWNjZXB0IGh0bWwsIGxpa2UgdGhlIGNzcyB0ZXh0IG9mIGEgYHN0eWxlYFxuICogZWxlbWVudC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICogICAgICAgcmV0dXJuIGh0bWxgXG4gKiAgICAgICAgIDxzdHlsZT46aG9zdHsgY29udGVudDpcIi4uLlwiIH08L3N0eWxlPlxuICogICAgICAgICA8ZGl2IGNsYXNzPVwic2hhZG93ZWRcIj4ke3RoaXMucGFydGlhbFRlbXBsYXRlfTwvZGl2PlxuICogICAgICAgICAke3N1cGVyLnRlbXBsYXRlfVxuICogICAgICAgYDtcbiAqICAgICB9XG4gKiAgICAgc3RhdGljIGdldCBwYXJ0aWFsVGVtcGxhdGUoKSB7IHJldHVybiBodG1sYDxzcGFuPlBhcnRpYWwhPC9zcGFuPmA7IH1cbiAqXG4gKiBAcGFyYW0geyFJVGVtcGxhdGVBcnJheX0gc3RyaW5ncyBDb25zdGFudCBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHBhcmFtIHsuLi4qfSB2YWx1ZXMgVmFyaWFibGUgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEByZXR1cm4geyFIVE1MVGVtcGxhdGVFbGVtZW50fSBDb25zdHJ1Y3RlZCBIVE1MVGVtcGxhdGVFbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sID0gZnVuY3Rpb24gaHRtbChzdHJpbmdzLCAuLi52YWx1ZXMpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2LCBpZHgpID0+XG4gICAgICBhY2MgKyBodG1sVmFsdWUodikgKyBzdHJpbmdzW2lkeCArIDFdLCBzdHJpbmdzWzBdKTtcbiAgcmV0dXJuIHRlbXBsYXRlO1xufTtcblxuLyoqXG4gKiBBbiBodG1sIGxpdGVyYWwgdGFnIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgaHRtbGAgdG8gY29tcG9zZS5cbiAqIGEgbGl0ZXJhbCBzdHJpbmcuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAqICAgICAgIHJldHVybiBodG1sYFxuICogICAgICAgICA8c3R5bGU+XG4gKiAgICAgICAgICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfVxuICogICAgICAgICAgICR7dGhpcy5zdHlsZVRlbXBsYXRlKCl9XG4gKiAgICAgICAgIDwvc3R5bGU+XG4gKiAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3dlZFwiPiR7c3RhdGljVmFsdWV9PC9kaXY+XG4gKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9XG4gKiAgICAgICBgO1xuICogICAgIH1cbiAqICAgICBzdGF0aWMgZ2V0IHN0eWxlVGVtcGxhdGUoKSB7XG4gKiAgICAgICAgcmV0dXJuIGh0bWxMaXRlcmFsYC5zaGFkb3dlZCB7IGJhY2tncm91bmQ6IGdyYXk7IH1gO1xuICogICAgIH1cbiAqXG4gKiBAcGFyYW0geyFJVGVtcGxhdGVBcnJheX0gc3RyaW5ncyBDb25zdGFudCBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHBhcmFtIHsuLi4qfSB2YWx1ZXMgVmFyaWFibGUgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEByZXR1cm4geyFMaXRlcmFsU3RyaW5nfSBDb25zdHJ1Y3RlZCBsaXRlcmFsIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgaHRtbExpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmdzLCAuLi52YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKHZhbHVlcy5yZWR1Y2UoKGFjYywgdiwgaWR4KSA9PlxuICAgICAgYWNjICsgbGl0ZXJhbFZhbHVlKHYpICsgc3RyaW5nc1tpZHggKyAxXSwgc3RyaW5nc1swXSkpO1xufTtcbiIsImltcG9ydCAnLi4vdXRpbHMvaG9va3MuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIEN1aUJhc2VFbGVtZW50IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNzOiBPYmplY3QsXG4gICAgICBpbkRpYWxvZzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICAgIGNvbnRyb2xFbGVtZW50OiBTdHJpbmcsXG4gICAgICBleHRyYToge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgY29tcHV0ZWQ6ICdjb21wdXRlRXh0cmEoaGFzcywgc3RhdGVPYmopJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaikge1xuICAgIGxldCBleHRyYXMgPSBzdGF0ZU9iai5hdHRyaWJ1dGVzLmV4dHJhX2RhdGFfdGVtcGxhdGU7XG4gICAgaWYgKGV4dHJhcykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4dHJhcykpIHtcbiAgICAgICAgZXh0cmFzID0gW2V4dHJhc107XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFzLm1hcChleHRyYSA9PiB3aW5kb3cuY3VzdG9tVUkuY29tcHV0ZVRlbXBsYXRlKFxuICAgICAgICBleHRyYSxcbiAgICAgICAgaGFzcyxcbiAgICAgICAgaGFzcy5zdGF0ZXMsXG4gICAgICAgIHN0YXRlT2JqLFxuICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLFxuICAgICAgICAvKiBhdHRyaWJ1dGU9ICovIHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdGVPYmouc3RhdGUsXG4gICAgICApKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCAhPT0gbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHNob3dMYXN0Q2hhbmdlZChzdGF0ZU9iaiwgaW5EaWFsb2csIGV4dHJhKSB7XG4gICAgaWYgKGluRGlhbG9nKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZXh0cmEubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhc3RhdGVPYmouYXR0cmlidXRlcy5zaG93X2xhc3RfY2hhbmdlZDtcbiAgfVxuXG4gIGhhc0V4dHJhKGV4dHJhKSB7XG4gICAgcmV0dXJuIGV4dHJhLmxlbmd0aCA+IDA7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEN1aUJhc2VFbGVtZW50O1xuIiwiaW1wb3J0IGR5bmFtaWNDb250ZW50VXBkYXRlciBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2R5bmFtaWNfY29udGVudF91cGRhdGVyLmpzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyBIVE1MRWxlbWVudFxuICovXG5jbGFzcyBEeW5hbWljRWxlbWVudCBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzczogT2JqZWN0LFxuICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICAgIGVsZW1lbnROYW1lOiBTdHJpbmcsXG5cbiAgICAgIGluRGlhbG9nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnb2JzZXJ2ZXJGdW5jKGhhc3MsIHN0YXRlT2JqLCBlbGVtZW50TmFtZSwgaW5EaWFsb2cpJyxcbiAgICBdO1xuICB9XG5cbiAgb2JzZXJ2ZXJGdW5jKGhhc3MsIHN0YXRlT2JqLCBlbGVtZW50TmFtZSwgaW5EaWFsb2cpIHtcbiAgICBkeW5hbWljQ29udGVudFVwZGF0ZXIoXG4gICAgICB0aGlzLFxuICAgICAgZWxlbWVudE5hbWUgPyBlbGVtZW50TmFtZS50b1VwcGVyQ2FzZSgpIDogJ0RJVicsXG4gICAgICB7IGhhc3MsIHN0YXRlT2JqLCBpbkRpYWxvZyB9KTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdkeW5hbWljLWVsZW1lbnQnLCBEeW5hbWljRWxlbWVudCk7XG4iLCJpbXBvcnQgeyBodG1sIH0gZnJvbSAnQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMnO1xuaW1wb3J0IGFwcGx5VGhlbWVzT25FbGVtZW50IGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vYXBwbHlfdGhlbWVzX29uX2VsZW1lbnQuanMnO1xuXG5pbXBvcnQgJy4vZHluYW1pYy1lbGVtZW50LmpzJztcbmltcG9ydCAnLi4vdXRpbHMvaG9va3MuanMnO1xuXG5jdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnc3RhdGUtY2FyZC1kaXNwbGF5JykudGhlbigoKSA9PiB7XG4gIC8qKlxuICAgKiBAZXh0ZW5kcyBIVE1MRWxlbWVudFxuICAgKi9cbiAgY2xhc3MgRHluYW1pY1dpdGhFeHRyYSBleHRlbmRzIGN1c3RvbUVsZW1lbnRzLmdldCgnc3RhdGUtY2FyZC1kaXNwbGF5Jykge1xuICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzdHlsZSBpcz1cImN1c3RvbS1zdHlsZVwiIGluY2x1ZGU9XCJpcm9uLWZsZXggaXJvbi1mbGV4LWFsaWdubWVudCBpcm9uLWZsZXgtZmFjdG9yc1wiPjwvc3R5bGU+XG4gICAgICA8c3R5bGU+XG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgLmNvbnRyb2wtd3JhcHBlciB7XG4gICAgICAgICAgbWFyZ2luOiAtNHB4IC0xNnB4IC00cHggMDtcbiAgICAgICAgICBwYWRkaW5nOiA0cHggMTZweDtcbiAgICAgICAgfVxuICAgICAgICBoYS1zdGF0ZS1sYWJlbC1iYWRnZSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBkeW5hbWljLWVsZW1lbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgICNvdmVybGF5IHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgICAgI2xvY2sge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA3cHg7XG4gICAgICAgIH1cbiAgICAgICAgI2xvY2suaGEtY292ZXItY29udHJvbHMge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogNTJweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgfVxuICAgICAgICAuZXh0cmEge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IC0xNnB4O1xuICAgICAgICAgIC0taGEtbGFiZWwtYmFkZ2Utc2l6ZTogMzZweDtcbiAgICAgICAgICAtLWhhLWxhYmVsLWJhZGdlLWZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgIH1cbiAgICAgICAgLnN0YXRlIHtcbiAgICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWJvZHkxO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgICB9XG4gICAgICA8L3N0eWxlPlxuICAgICAgPGRpdiBjbGFzcyQ9J1tbZXh0cmFDbGFzcyhleHRyYU9ialZpc2libGUpXV0gaG9yaXpvbnRhbCBsYXlvdXQnPlxuICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbZXh0cmFPYmpWaXNpYmxlXV0nPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLXJlcGVhdCdcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM9J1tbZXh0cmFPYmpdXSdcbiAgICAgICAgICAgICAgICAgICAgb24tZG9tLWNoYW5nZT0nZXh0cmFEb21DaGFuZ2VkJz5cbiAgICAgICAgICAgIDxoYS1zdGF0ZS1sYWJlbC1iYWRnZSBoYXNzPSdbW2hhc3NdXScgc3RhdGU9J1tbaXRlbV1dJz48L2hhLXN0YXRlLWxhYmVsLWJhZGdlPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tfc2hvd0NvbnRyb2woaW5EaWFsb2csIHN0YXRlT2JqKV1dJz5cbiAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbY29udHJvbEVsZW1lbnRdXSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxkeW5hbWljLWVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSdmbGV4J1xuICAgICAgICAgICAgICAgICAgc3RhdGUtb2JqPVwiW1tzdGF0ZU9ial1dXCJcbiAgICAgICAgICAgICAgICAgIGhhc3M9J1tbaGFzc11dJ1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC1uYW1lPSdbW2NvbnRyb2xFbGVtZW50XV0nPlxuICAgICAgICAgICAgICA8L2R5bmFtaWMtZWxlbWVudD5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW2lzQ29uZmlybUNvbnRyb2xzKHN0YXRlT2JqKV1dJz5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwib3ZlcmxheVwiIG9uLWNsaWNrPSdjbGlja0hhbmRsZXInPlxuICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW3N0YXRlT2JqLmF0dHJpYnV0ZXMuY29uZmlybV9jb250cm9sc19zaG93X2xvY2tdXSc+XG4gICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWQ9XCJsb2NrXCIgY2xhc3MkPVwiW1tjb250cm9sRWxlbWVudF1dXCIgaWNvbj1cIm1kaTpsb2NrLW91dGxpbmVcIj48L2lyb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1shY29udHJvbEVsZW1lbnRdXSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdzdGF0ZSc+W1tjb21wdXRlU3RhdGVEaXNwbGF5KHN0YXRlT2JqKV1dPC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXNzOiBPYmplY3QsXG4gICAgICAgIGluRGlhbG9nOiB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlT2JqOiBPYmplY3QsXG4gICAgICAgIGNvbnRyb2xFbGVtZW50OiBTdHJpbmcsXG4gICAgICAgIGV4dHJhT2JqOiB7XG4gICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgY29tcHV0ZWQ6ICdjb21wdXRlRXh0cmEoaGFzcywgc3RhdGVPYmosIF9hdHRhY2hlZCknLFxuICAgICAgICB9LFxuICAgICAgICBfYXR0YWNoZWQ6IEJvb2xlYW4sXG4gICAgICAgIGV4dHJhT2JqVmlzaWJsZToge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgY29tcHV0ZWQ6ICdjb21wdXRlRXh0cmFWaXNpYmxlKGV4dHJhT2JqLCBpbkRpYWxvZyknLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLl9hdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICB0aGlzLl9pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGNvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaiwgYXR0YWNoZWQpIHtcbiAgICAgIGlmICghc3RhdGVPYmouYXR0cmlidXRlcy5leHRyYV9iYWRnZSB8fCAhYXR0YWNoZWQpIHJldHVybiBbXTtcbiAgICAgIGxldCBleHRyYUJhZGdlcyA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuZXh0cmFfYmFkZ2U7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXh0cmFCYWRnZXMpKSB7XG4gICAgICAgIGV4dHJhQmFkZ2VzID0gW2V4dHJhQmFkZ2VzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYUJhZGdlcy5tYXAoKGV4dHJhQmFkZ2UpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGlmIChleHRyYUJhZGdlLmVudGl0eV9pZCAmJiBoYXNzLnN0YXRlc1tleHRyYUJhZGdlLmVudGl0eV9pZF0pIHtcbiAgICAgICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3QoXG4gICAgICAgICAgICB0aGlzLCBoYXNzLnN0YXRlc1tleHRyYUJhZGdlLmVudGl0eV9pZF0sIHRoaXMuaW5EaWFsb2csXG4gICAgICAgICAgICAvKiBhbGxvd0hpZGRlbj0gKi9mYWxzZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4dHJhQmFkZ2UuYXR0cmlidXRlICYmXG4gICAgICAgICAgICAgICAgICAgc3RhdGVPYmouYXR0cmlidXRlc1tleHRyYUJhZGdlLmF0dHJpYnV0ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHN0YXRlOiBTdHJpbmcoc3RhdGVPYmouYXR0cmlidXRlc1tleHRyYUJhZGdlLmF0dHJpYnV0ZV0pLFxuICAgICAgICAgICAgZW50aXR5X2lkOiAnbm9uZS5ub25lJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdW5pdF9vZl9tZWFzdXJlbWVudDogZXh0cmFCYWRnZS51bml0IH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBibGFja2xpc3QgPSBleHRyYUJhZGdlLmJsYWNrbGlzdF9zdGF0ZXM7XG4gICAgICAgIGlmIChibGFja2xpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShibGFja2xpc3QpKSB7XG4gICAgICAgICAgICBibGFja2xpc3QgPSBbYmxhY2tsaXN0XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJsYWNrbGlzdC5zb21lKHYgPT4gUmVnRXhwKHYpLnRlc3QocmVzdWx0LnN0YXRlLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5fZW50aXR5RGlzcGxheSA9ICcnO1xuICAgICAgICByZXN1bHQuYXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oe30sIHsgZnJpZW5kbHlfbmFtZTogJycgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KS5maWx0ZXIoZXh0cmFCYWRnZSA9PiBleHRyYUJhZGdlICE9IG51bGwpO1xuICAgIH1cblxuICAgIGNvbXB1dGVFeHRyYVZpc2libGUoZXh0cmFPYmosIGluRGlhbG9nKSB7XG4gICAgICBpZiAoaW5EaWFsb2cgfHwgIWV4dHJhT2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gZXh0cmFPYmoubGVuZ3RoICE9PSAwO1xuICAgIH1cblxuICAgIGV4dHJhQ2xhc3MoZXh0cmFPYmpWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gZXh0cmFPYmpWaXNpYmxlID8gJ2V4dHJhJyA6ICcnO1xuICAgIH1cblxuICAgIF9zaG93Q29udHJvbChpbkRpYWxvZywgc3RhdGVPYmopIHtcbiAgICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gIXN0YXRlT2JqLmF0dHJpYnV0ZXMuaGlkZV9jb250cm9sO1xuICAgIH1cblxuICAgIGNvbXB1dGVTdGF0ZURpc3BsYXkoc3RhdGVPYmopIHtcbiAgICAgIC8vIGhhTG9jYWxpemUgcmVtb3ZlZCBpbiAwLjYxXG4gICAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVN0YXRlRGlzcGxheSh0aGlzLmhhTG9jYWxpemUgfHwgdGhpcy5sb2NhbGl6ZSwgc3RhdGVPYmopO1xuICAgIH1cblxuICAgIGlzQ29uZmlybUNvbnRyb2xzKHN0YXRlT2JqKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmouYXR0cmlidXRlcy5jb25maXJtX2NvbnRyb2xzIHx8XG4gICAgICAgICAgc3RhdGVPYmouYXR0cmlidXRlcy5jb25maXJtX2NvbnRyb2xzX3Nob3dfbG9jaztcbiAgICB9XG5cbiAgICBjbGlja0hhbmRsZXIoZSkge1xuICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNvdmVybGF5Jykuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgIGNvbnN0IGxvY2sgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI2xvY2snKTtcbiAgICAgIGlmIChsb2NrKSB7XG4gICAgICAgIGxvY2suaWNvbiA9ICdtZGk6bG9jay1vcGVuLW91dGxpbmUnO1xuICAgICAgICBsb2NrLnN0eWxlLm9wYWNpdHkgPSAnMC4xJztcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNvdmVybGF5Jykuc3R5bGUucG9pbnRlckV2ZW50cyA9ICcnO1xuICAgICAgICBpZiAobG9jaykge1xuICAgICAgICAgIGxvY2suaWNvbiA9ICdtZGk6bG9jay1vdXRsaW5lJztcbiAgICAgICAgICBsb2NrLnN0eWxlLm9wYWNpdHkgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSwgNTAwMCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGFwcGx5VGhlbWVzKGhhc3MsIGVsZW1lbnQsIHN0YXRlT2JqKSB7XG4gICAgICBjb25zdCB0aGVtZU5hbWUgPSBzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lIHx8ICdkZWZhdWx0JztcbiAgICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgICBlbGVtZW50LCBoYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LCB0aGVtZU5hbWUpO1xuICAgIH1cblxuICAgIGV4dHJhRG9tQ2hhbmdlZCgpIHtcbiAgICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdoYS1zdGF0ZS1sYWJlbC1iYWRnZScpXG4gICAgICAgIC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgdGhpcy5hcHBseVRoZW1lcyh0aGlzLmhhc3MsIGVsZW0sIGVsZW0uc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdkeW5hbWljLXdpdGgtZXh0cmEnLCBEeW5hbWljV2l0aEV4dHJhKTtcbn0pO1xuIiwiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bwb2x5bWVyL3BvbHltZXIvbGliL3V0aWxzL2h0bWwtdGFnLmpzJztcbmltcG9ydCBFdmVudHNNaXhpbiBmcm9tICcuLi9taXhpbnMvZXZlbnRzLW1peGluLmpzJztcbmltcG9ydCAnLi4vdXRpbHMvaG9va3MuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIEhhQ29uZmlnQ3VzdG9tVWkgZXh0ZW5kcyBFdmVudHNNaXhpbihQb2x5bWVyLkVsZW1lbnQpIHtcbiAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICA8c3R5bGUgaW5jbHVkZT1cImhhLXN0eWxlXCI+PC9zdHlsZT5cbiAgICA8YXBwLWhlYWRlci1sYXlvdXQgaGFzLXNjcm9sbGluZy1yZWdpb24+XG4gICAgICA8YXBwLWhlYWRlciBzbG90PVwiaGVhZGVyXCIgZml4ZWQ+XG4gICAgICAgIDxhcHAtdG9vbGJhcj5cbiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b25cbiAgICAgICAgICAgIGljb249J21kaTphcnJvdy1sZWZ0J1xuICAgICAgICAgICAgb24tY2xpY2s9J19iYWNrSGFuZGxlcidcbiAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj5cbiAgICAgICAgICA8ZGl2IG1haW4tdGl0bGU+Q3VzdG9tIFVJIHNldHRpbmdzPC9kaXY+XG4gICAgICAgIDwvYXBwLXRvb2xiYXI+XG4gICAgICA8L2FwcC1oZWFkZXI+XG5cbiAgICAgIDxoYS1jb25maWctc2VjdGlvbiBpcy13aWRlPSdbW2lzV2lkZV1dJz5cbiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0nRGV2aWNlIG5hbWUnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9J2NhcmQtY29udGVudCc+XG4gICAgICAgICAgICBTZXQgZGV2aWNlIG5hbWUgc28gdGhhdCB5b3UgY2FuIHJlZmVyZW5jZSBpdCBpbiBwZXItZGV2aWNlIHNldHRpbmdzXG4gICAgICAgICAgICA8cGFwZXItaW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9J05hbWUnXG4gICAgICAgICAgICAgIHZhbHVlPSd7e25hbWV9fSdcbiAgICAgICAgICAgID48L3BhcGVyLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3BhcGVyLWNhcmQ+XG4gICAgICA8L2hhLWNvbmZpZy1zZWN0aW9uPlxuICAgIDwvYXBwLWhlYWRlci1sYXlvdXQ+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNXaWRlOiBCb29sZWFuLFxuXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb2JzZXJ2ZXI6ICduYW1lQ2hhbmdlZCcsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZWFkeSgpIHtcbiAgICBzdXBlci5yZWFkeSgpO1xuICAgIHRoaXMubmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gIH1cblxuICBuYW1lQ2hhbmdlZChuYW1lKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLnNldE5hbWUobmFtZSk7XG4gIH1cblxuICBfYmFja0hhbmRsZXIoKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xuICAgIHRoaXMuZmlyZSgnbG9jYXRpb24tY2hhbmdlZCcpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2hhLWNvbmZpZy1jdXN0b20tdWknLCBIYUNvbmZpZ0N1c3RvbVVpKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgSGFUaGVtZWRTbGlkZXIgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgbWFyZ2luOiB2YXIoLS1oYS10aGVtZWQtc2xpZGVyLW1hcmdpbiwgaW5pdGlhbCk7XG4gICAgICB9XG4gICAgICAuZGlzYWJsZS1vZmYtd2hlbi1taW4ge1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6ICB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLmRpc2FibGUtb2ZmLXdoZW4tbWluLmlzLW9uIHtcbiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgfVxuICAgICAgcGFwZXItc2xpZGVyIHtcbiAgICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICB3aWR0aDogdmFyKC0taGEtcGFwZXItc2xpZGVyLXdpZHRoLCAyMDBweCk7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cblxuICAgIDxwYXBlci1zbGlkZXJcbiAgICAgICAgIG1pbj0nW1tfdGhlbWVkTWluXV0nXG4gICAgICAgICBtYXg9J1tbX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIFwibWF4XCIsIG1heCldXSdcbiAgICAgICAgIHBpbj0nW1tfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJwaW5cIiwgcGluKV1dJ1xuICAgICAgICAgY2xhc3MkPSdbW2NvbXB1dGVDbGFzcyh0aGVtZSwgaXNPbiwgX3RoZW1lZE1pbildXScgdmFsdWU9J1tbdmFsdWVdXSdcbiAgICAgICAgIG9uLWNoYW5nZT0ndmFsdWVDaGFuZ2VkJz5cbiAgICA8L3BhcGVyLXNsaWRlcj5cbiAgICBgO1xuICB9XG5cbiAgcmVhZHkoKSB7XG4gICAgc3VwZXIucmVhZHkoKTtcbiAgICB0aGlzLmRpc2FibGVPZmZXaGVuTWluID0gIXRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhpcy50aGVtZSwgJ29mZl93aGVuX21pbicsICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKTtcbiAgICB0aGlzLmNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhpcy50aGVtZSwgdGhpcy5kaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMCxcbiAgICAgIH0sXG4gICAgICBtYXg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMTAwLFxuICAgICAgfSxcbiAgICAgIHBpbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaXNPbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICBub3RpZnk6IHRydWUsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG5cbiAgICAgIHRoZW1lOiBPYmplY3QsXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIG5vdGlmeTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBfdGhlbWVkTWluOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJtaW5cIiwgbWluKScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2NvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhlbWUsIGRpc2FibGVSZXBvcnRXaGVuTm90Q2hhbmdlZCknLFxuICAgIF07XG4gIH1cblxuICBjb21wdXRlRW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkKHRoZW1lLCBkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpIHtcbiAgICB0aGlzLl9lbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQgPSB0aGlzLl9jb21wdXRlQXR0cmlidXRlKFxuICAgICAgdGhlbWUsICdyZXBvcnRfd2hlbl9ub3RfY2hhbmdlZCcsICFkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIGF0dHIsIGRlZikge1xuICAgIGlmICh0aGVtZSkge1xuICAgICAgaWYgKGF0dHIgaW4gdGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoZW1lW2F0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmO1xuICB9XG5cbiAgY29tcHV0ZUNsYXNzKHRoZW1lLCBpc09uLCB0aGVtZWRNaW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgaWYgKGlzT24pIHtcbiAgICAgIHJlc3VsdCArPSAnaXMtb24gJztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsICdvZmZfd2hlbl9taW4nLCAhdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbikgfHwgdGhlbWVkTWluID09PSAwKSB7XG4gICAgICAvLyBJZiBvZmZXaGVuTWluIGlzIGVuYWJsZWQgZG9uJ3QgY3VzdG9taXplLlxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cmVzdWx0fWRpc2FibGUtb2ZmLXdoZW4tbWluYDtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZChldikge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkICYmIHRoaXMudmFsdWUgPT09IGV2LnRhcmdldC52YWx1ZSkge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBldi50YXJnZXQudmFsdWU7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnaGEtdGhlbWVkLXNsaWRlcicsIEhhVGhlbWVkU2xpZGVyKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZHluYW1pY0NvbnRlbnRVcGRhdGVyIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vZHluYW1pY19jb250ZW50X3VwZGF0ZXIuanMnO1xuaW1wb3J0IHN0YXRlQ2FyZFR5cGUgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMnO1xuXG5pbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGgtc2xpZGVyLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyLmpzJztcblxuY29uc3QgU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMgPSBbJ2NvbmZpZ3VyYXRvciddO1xuY29uc3QgRE9NQUlOX1RPX1NMSURFUl9TVVBQT1JUID0ge1xuICBsaWdodDogMSwgLy8gU1VQUE9SVF9CUklHSFRORVNTXG4gIGNvdmVyOiA0LCAvLyBTVVBQT1JUX1NFVF9QT1NJVElPTlxuICBjbGltYXRlOiAxLCAvLyBTVVBQT1JUX1RBUkdFVF9URU1QRVJBVFVSRVxufTtcbmNvbnN0IFRZUEVfVE9fQ09OVFJPTCA9IHtcbiAgdG9nZ2xlOiAnaGEtZW50aXR5LXRvZ2dsZScsXG4gIGRpc3BsYXk6ICcnLFxuICBjb3ZlcjogJ2hhLWNvdmVyLWNvbnRyb2xzJyxcbn07XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkQ3VzdG9tVWkgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcblxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcblxuICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKScsXG4gICAgXTtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKGNvbnRhaW5lci50YWdOYW1lID09PSAnRElWJyAmJlxuICAgICAgICAoY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSB8fCBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdjaGlsZC1jYXJkJykpKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICAgIC8vIFNpbmNlIHRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIGJhY2tncm91bmQgLSBubyBuZWVkIHRvIGNsZWFyIGl0LlxuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1wYXBlci1jYXJkLWJhY2tncm91bmQtY29sb3IsIGluaGVyaXQpJyk7XG5cbiAgICAgIC8vIFBvbHlmaWxsICd1cGRhdGVTdHlsZXMnLlxuICAgICAgaWYgKCFjb250YWluZXIudXBkYXRlU3R5bGVzKSB7XG4gICAgICAgIGNvbnRhaW5lci51cGRhdGVTdHlsZXMgPSAoc3R5bGVzKSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHN0eWxlc1trZXldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pbnB1dENoYW5nZWQodGhpcy5oYXNzLCB0aGlzLmluRGlhbG9nLCB0aGlzLnN0YXRlT2JqKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycsIHBhZGRpbmc6ICcnIH0pO1xuICAgICAgYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LCAnZGVmYXVsdCcpO1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIGJhZGdlTW9kZShoYXNzLCBzdGF0ZU9iaiwgZG9tYWluKSB7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgaWYgKGRvbWFpbiA9PT0gJ2dyb3VwJykge1xuICAgICAgc3RhdGVPYmouYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBoYXNzLnN0YXRlc1tpZF07XG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIElEICR7aWR9IGluIGdyb3VwICR7c3RhdGVPYmouZW50aXR5X2lkfWApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QgfHxcbiAgICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QuaW5jbHVkZXMoc3RhdGUuZW50aXR5X2lkKSkge1xuICAgICAgICAgIHN0YXRlcy5wdXNoKHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICAgIHRoaXMsIHN0YXRlLCBmYWxzZSAvKiBpbkRpYWxvZyAqLywgZmFsc2UgLyogYWxsb3dIaWRkZW4gKi8pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlcy5wdXNoKHN0YXRlT2JqKTtcbiAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9O1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSkge1xuICAgICAgICAgIHBhcmFtcy5tYXJnaW4gPSAndmFyKC0taGEtYmFkZ2VzLWNhcmQtbWFyZ2luLCAwKSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZHluYW1pY0NvbnRlbnRVcGRhdGVyKFxuICAgICAgdGhpcyxcbiAgICAgICdIQS1CQURHRVMtQ0FSRCcsXG4gICAgICB7IGhhc3MsIHN0YXRlcyB9KTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHtcbiAgICAgICAgd2lkdGg6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC13aWR0aCwgaW5pdGlhbCknLFxuICAgICAgICAndGV4dC1hbGlnbic6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC10ZXh0LWFsaWduLCBpbml0aWFsKScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0Q2hpbGQuc3R5bGUuZm9udFNpemUgPSAnODUlJztcblxuICAgIC8vIFNpbmNlIHRoaXMgdmFyaWFibGUgb25seSBhZmZlY3RzIGJhZGdlcyBtb2RlIC0gbm8gbmVlZCB0byBjbGVhbiBpdCB1cC5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLWhhLXN0YXRlLWxhYmVsLWJhZGdlLW1hcmdpbi1ib3R0b20nLCAnMCcpO1xuICB9XG5cbiAgY2xlYW5CYWRnZVN0eWxlKCkge1xuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoe1xuICAgICAgICBkaXNwbGF5OiAnJyxcbiAgICAgICAgd2lkdGg6ICcnLFxuICAgICAgICAndGV4dC1hbGlnbic6ICcnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycgfSk7XG4gIH1cblxuICBhcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaikge1xuICAgIGxldCB0aGVtZVRhcmdldCA9IHRoaXM7XG4gICAgbGV0IHRoZW1lTmFtZSA9ICdkZWZhdWx0JztcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGVtZVRhcmdldCA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWUpIHtcbiAgICAgIHRoZW1lTmFtZSA9IG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWU7XG4gICAgfVxuICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgdGhlbWVUYXJnZXQsIGhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sIHRoZW1lTmFtZSk7XG4gIH1cblxuICBtYXliZUhpZGVFbnRpdHkobW9kaWZpZWRPYmopIHtcbiAgICBpZiAoIW1vZGlmaWVkT2JqKSB7XG4gICAgICBpZiAodGhpcy5sYXN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcwJywgcGFkZGluZzogJzAnIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcnLCBwYWRkaW5nOiAnJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgb2JqLCBpbkRpYWxvZykge1xuICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBET01BSU5fVE9fU0xJREVSX1NVUFBPUlRbZG9tYWluXSAmJlxuICAgICAgKERPTUFJTl9UT19TTElERVJfU1VQUE9SVFtkb21haW5dICYgb2JqLmF0dHJpYnV0ZXMuc3VwcG9ydGVkX2ZlYXR1cmVzKSAmJlxuICAgICAgb2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlICYmIG9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSAhPT0gJ25vLXNsaWRlcic7XG4gIH1cblxuICBpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKSB7XG4gICAgaWYgKCFzdGF0ZU9iaiB8fCAhaGFzcyB8fCAhdGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGRvbWFpbiA9IGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iaik7XG4gICAgY29uc3QgbW9kaWZpZWRPYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3QoXG4gICAgICB0aGlzLCBzdGF0ZU9iaiwgaW5EaWFsb2csIHRydWUgLyogYWxsb3dIaWRkZW4gKi8pO1xuXG4gICAgaWYgKHRoaXMubWF5YmVIaWRlRW50aXR5KG1vZGlmaWVkT2JqKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5hcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaik7XG5cbiAgICBpZiAoIWluRGlhbG9nICYmIG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlID09PSAnYmFkZ2VzJykge1xuICAgICAgdGhpcy5iYWRnZU1vZGUoaGFzcywgbW9kaWZpZWRPYmosIGRvbWFpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVndWxhck1vZGVfKGhhc3MsIGluRGlhbG9nLCBtb2RpZmllZE9iaiwgZG9tYWluKTtcbiAgICB9XG4gIH1cblxuICByZWd1bGFyTW9kZV8oaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqLCBkb21haW4pIHtcbiAgICB0aGlzLmNsZWFuQmFkZ2VTdHlsZSgpO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaGFzcyxcbiAgICAgIHN0YXRlT2JqLFxuICAgICAgaW5EaWFsb2csXG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbFN0YXRlQ2FyZFR5cGUgPSBzdGF0ZUNhcmRUeXBlKGhhc3MsIHN0YXRlT2JqKTtcbiAgICBsZXQgY3VzdG9tU3RhdGVDYXJkVHlwZTtcbiAgICBjb25zdCBzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlID0gc3RhdGVPYmouYXR0cmlidXRlcy5zdGF0ZV9jYXJkX2N1c3RvbV91aV9zZWNvbmRhcnk7XG5cbiAgICBpZiAoZG9tYWluID09PSAnbGlnaHQnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1lbnRpdHktdG9nZ2xlJyxcbiAgICAgICAgc2VydmljZU1pbjogJ3R1cm5fb2ZmJyxcbiAgICAgICAgc2VydmljZU1heDogJ3R1cm5fb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdicmlnaHRuZXNzJyxcbiAgICAgICAgZG9tYWluLFxuICAgICAgfSk7XG4gICAgICBjdXN0b21TdGF0ZUNhcmRUeXBlID0gJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluID09PSAnY292ZXInICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jb3Zlci1jb250cm9scycsXG4gICAgICAgIG1heDogMTAwLFxuICAgICAgICBzZXJ2aWNlTWluOiAnY2xvc2VfY292ZXInLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X2NvdmVyX3Bvc2l0aW9uJyxcbiAgICAgICAgc2V0VmFsdWVOYW1lOiAncG9zaXRpb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdjdXJyZW50X3Bvc2l0aW9uJyxcbiAgICAgICAgbmFtZU9uOiAnb3BlbicsXG4gICAgICAgIGRvbWFpbixcbiAgICAgIH0pO1xuICAgICAgY3VzdG9tU3RhdGVDYXJkVHlwZSA9ICdzdGF0ZS1jYXJkLXdpdGgtc2xpZGVyJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbiA9PT0gJ2NsaW1hdGUnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jbGltYXRlLXN0YXRlJyxcbiAgICAgICAgbWluOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLm1pbl90ZW1wIHx8IC0xMDAsXG4gICAgICAgIG1heDogc3RhdGVPYmouYXR0cmlidXRlcy5tYXhfdGVtcCB8fCAyMDAsXG4gICAgICAgIHNlcnZpY2VNaW46ICdzZXRfdGVtcGVyYXR1cmUnLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X3RlbXBlcmF0dXJlJyxcbiAgICAgICAgdmFsdWVOYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICBuYW1lT246ICcnLFxuICAgICAgICBkb21haW4sXG4gICAgICB9KTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRoLXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSBUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnNob3dfbGFzdF9jaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAhU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMuaW5jbHVkZXMob3JpZ2luYWxTdGF0ZUNhcmRUeXBlKSkge1xuICAgICAgcGFyYW1zLmluRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLnN0YXRlID09PSAndW5hdmFpbGFibGUnKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSAnJztcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5jb250cm9sRWxlbWVudCA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50O1xuICAgIH1cblxuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICAoc2Vjb25kYXJ5U3RhdGVDYXJkVHlwZSB8fCBjdXN0b21TdGF0ZUNhcmRUeXBlIHx8IGBTVEFURS1DQVJELSR7b3JpZ2luYWxTdGF0ZUNhcmRUeXBlfWApLnRvVXBwZXJDYXNlKCksXG4gICAgICBwYXJhbXMpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtY3VzdG9tLXVpJywgU3RhdGVDYXJkQ3VzdG9tVWkpO1xuIiwiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bwb2x5bWVyL3BvbHltZXIvbGliL3V0aWxzL2h0bWwtdGFnLmpzJztcbmltcG9ydCBDdWlCYXNlRWxlbWVudCBmcm9tICcuL2N1aS1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0ICcuL2R5bmFtaWMtd2l0aC1leHRyYS5qcyc7XG5pbXBvcnQgJy4vaGEtdGhlbWVkLXNsaWRlci5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkV2l0aFNsaWRlciBleHRlbmRzIEN1aUJhc2VFbGVtZW50IHtcbiAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICA8c3R5bGUgaXM9XCJjdXN0b20tc3R5bGVcIiBpbmNsdWRlPVwiaXJvbi1mbGV4IGlyb24tZmxleC1hbGlnbm1lbnQgaXJvbi1mbGV4LWZhY3RvcnNcIj48L3N0eWxlPlxuICAgIDxzdHlsZT5cbiAgICAgICNjb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgICAuc2Vjb25kLWxpbmUsIC5zdGF0ZS1hbmQtdG9nZ2xlLCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5ub3dyYXAgLnN0YXRlLWFuZC10b2dnbGUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBmbGV4LWdyb3c6IDA7XG4gICAgICB9XG4gICAgICAubm93cmFwIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC0xNnB4O1xuICAgICAgfVxuICAgICAgLnN0cmV0Y2ggLnNlY29uZC1saW5lLCAuc3RyZXRjaCBoYS10aGVtZWQtc2xpZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIC0taGEtcGFwZXItc2xpZGVyLXdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgICAgLm5vd3JhcCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1pbi13aWR0aDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICAgIGhhLXRoZW1lZC1zbGlkZXIsIC50b3Atd3JhcHBlciB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC50b3Atd3JhcHBlci5zdHJldGNoIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5oaWRkZW4ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzJD0naG9yaXpvbnRhbCBsYXlvdXQgZmxleCB0b3Atd3JhcHBlciBbW19jb21wdXRlV3JhcENsYXNzKG1vZGUsIHN0cmV0Y2hTbGlkZXIsIGxpbmVUb29Mb25nLCBpbkRpYWxvZyldXSc+XG4gICAgICA8ZGl2IGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQgZmxleC1hdXRvIHN0YXRlLWFuZC10b2dnbGUnPlxuICAgICAgICA8c3RhdGUtaW5mb1xuICAgICAgICAgICAgY2xhc3M9J3N0YXRlLWluZm8gZmxleC1hdXRvJ1xuICAgICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICAgIGluLWRpYWxvZz0nW1tzaG93TGFzdENoYW5nZWQoc3RhdGVPYmosIGluRGlhbG9nLCBleHRyYSldXSdcbiAgICAgICAgICAgIHNlY29uZGFyeS1saW5lJD0nW1toYXNFeHRyYShleHRyYSldXSdcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLXJlcGVhdCcgaXRlbXM9J1tbZXh0cmFdXSc+XG4gICAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9zdGF0ZS1pbmZvPlxuICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbYnJlYWtTbGlkZXJdXScgY2xhc3M9J2hpZGRlbic+XG4gICAgICAgICAgPGR5bmFtaWMtd2l0aC1leHRyYSBoYXNzPSdbW2hhc3NdXScgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nIGNvbnRyb2wtZWxlbWVudD0nW1tjb250cm9sRWxlbWVudF1dJyBpbi1kaWFsb2c9J1tbaW5EaWFsb2ddXSc+PC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tzaG93U2xpZGVyXV0nIHJlc3RhbXA+XG4gICAgICAgIDxkaXYgY2xhc3M9J2hvcml6b250YWwgbGF5b3V0IGZsZXgtYXV0byBlbmQtanVzdGlmaWVkIHNlY29uZC1saW5lJz5cbiAgICAgICAgICA8aGEtdGhlbWVkLXNsaWRlclxuICAgICAgICAgICAgaWQ9J3NsaWRlcidcbiAgICAgICAgICAgIG1heD1bW21heF1dXG4gICAgICAgICAgICBtaW49W1ttaW5dXVxuICAgICAgICAgICAgdGhlbWU9J1tbc3RhdGVPYmouYXR0cmlidXRlcy5zbGlkZXJfdGhlbWVdXSdcbiAgICAgICAgICAgIGlzLW9uPSdbW2lzT24oc3RhdGVPYmosIG5hbWVPbildXSdcbiAgICAgICAgICAgIHZhbHVlPSd7e3NsaWRlclZhbHVlfX0nXG4gICAgICAgICAgICBkaXNhYmxlLW9mZi13aGVuLW1pbj0ne3tkaXNhYmxlT2ZmV2hlbk1pbn19J1xuICAgICAgICAgICAgb24tY2hhbmdlPSdzbGlkZXJDaGFuZ2VkJ1xuICAgICAgICAgICAgb24tY2xpY2s9J3N0b3BQcm9wYWdhdGlvbic+XG4gICAgICAgICAgPC9oYS10aGVtZWQtc2xpZGVyPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1shYnJlYWtTbGlkZXJdXSc+XG4gICAgICAgICAgICA8ZHluYW1pYy13aXRoLWV4dHJhIGhhc3M9J1tbaGFzc11dJyBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXScgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nIGluLWRpYWxvZz0nW1tpbkRpYWxvZ11dJz48L2R5bmFtaWMtd2l0aC1leHRyYT5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWF4OiBTdHJpbmcsXG4gICAgICB2YWx1ZU5hbWU6IFN0cmluZyxcbiAgICAgIHNldFZhbHVlTmFtZTogU3RyaW5nLFxuICAgICAgbmFtZU9uOiB7IHR5cGU6IFN0cmluZywgdmFsdWU6ICdvbicgfSxcbiAgICAgIG1pbjogeyB0eXBlOiBOdW1iZXIsIHZhbHVlOiAwIH0sXG4gICAgICBtYXg6IHsgdHlwZTogTnVtYmVyLCB2YWx1ZTogMjU1IH0sXG5cbiAgICAgIHNsaWRlclZhbHVlOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IEJvb2xlYW4sXG4gICAgICBtb2RlOiBTdHJpbmcsXG4gICAgICBzdHJldGNoU2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBicmVha1NsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaGlkZVNsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbGluZVRvb0xvbmc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG1pbkxpbmVCcmVhazogTnVtYmVyLFxuICAgICAgbWF4TGluZUJyZWFrOiBOdW1iZXIsXG4gICAgICBzaG93U2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJlYWR5KCkge1xuICAgIHN1cGVyLnJlYWR5KCk7XG4gICAgdGhpcy5fb25Jcm9uUmVzaXplID0gdGhpcy5fb25Jcm9uUmVzaXplLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gIH1cblxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3N0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpJyxcbiAgICBdO1xuICB9XG5cbiAgX3dhaXRGb3JMYXlvdXQoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuICAgIHRoaXMuX3NldE1vZGUoKTtcbiAgICBpZiAodGhpcy5fZnJhbWVJZCkgcmV0dXJuO1xuICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZUlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSB0cnVlO1xuICAgICAgdGhpcy5fb25Jcm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBfc2V0TW9kZSgpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBoaWRlU2xpZGVyOiB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicgJiYgdGhpcy5saW5lVG9vTG9uZyxcbiAgICAgIGJyZWFrU2xpZGVyOlxuICAgICAgICAgICAodGhpcy5tb2RlID09PSAnYnJlYWstc2xpZGVyJyB8fCB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicpICYmXG4gICAgICAgICAgIHRoaXMubGluZVRvb0xvbmcsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2hvd1NsaWRlcikge1xuICAgICAgb2JqLmJyZWFrU2xpZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKG9iaik7XG4gIH1cblxuICBfb25Jcm9uUmVzaXplKCkge1xuICAgIGlmICghdGhpcy5yZWFkeVRvQ29tcHV0ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICduby1zbGlkZXInKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMoe1xuICAgICAgICBoaWRlU2xpZGVyOiB0cnVlLFxuICAgICAgICBicmVha1NsaWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2QnJlYWtTbGlkZXIgPSB0aGlzLmJyZWFrU2xpZGVyO1xuICAgIGNvbnN0IHByZXZIaWRlU2xpZGVyID0gdGhpcy5oaWRlU2xpZGVyO1xuICAgIHRoaXMuc2V0UHJvcGVydGllcyh7XG4gICAgICBsaW5lVG9vTG9uZzogZmFsc2UsXG4gICAgICBoaWRlU2xpZGVyOiBmYWxzZSxcbiAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy4kO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA8PSB0aGlzLm1pbkxpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXJXaWR0aCA+PSB0aGlzLm1heExpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldkhpZGVTbGlkZXIgJiYgdGhpcy5tb2RlID09PSAnaGlkZS1zbGlkZXInKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdW5oaWRlIHRoZSBzbGlkZXIgaW4gb3JkZXIgdG8gcmVjYWxjdWxhdGUgaGVpZ2h0LlxuICAgICAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBzdGF0ZUhlaWdodCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcuc3RhdGUtaW5mbycpLmNsaWVudEhlaWdodDtcbiAgICAgIHRoaXMubGluZVRvb0xvbmcgPSBjb250YWluZXJIZWlnaHQgPiBzdGF0ZUhlaWdodCAqIDEuNTtcbiAgICAgIGlmICh0aGlzLmxpbmVUb29Mb25nKSB7XG4gICAgICAgIHRoaXMubWluTGluZUJyZWFrID0gY29udGFpbmVyV2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKCFwcmV2QnJlYWtTbGlkZXIpIHtcbiAgICAgICAgdGhpcy5tYXhMaW5lQnJlYWsgPSBjb250YWluZXJXaWR0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2V0TW9kZSgpO1xuICB9XG5cbiAgX2NvbXB1dGVXcmFwQ2xhc3MobW9kZSwgc3RyZXRjaFNsaWRlciwgbGluZVRvb0xvbmcsIGluRGlhbG9nKSB7XG4gICAgaWYgKGluRGlhbG9nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnc2luZ2xlLWxpbmUnKSB7XG4gICAgICByZXR1cm4gJ25vd3JhcCc7XG4gICAgfVxuICAgIGlmIChzdHJldGNoU2xpZGVyICYmIGxpbmVUb29Mb25nKSB7XG4gICAgICByZXR1cm4gJ3N0cmV0Y2ggd3JhcCc7XG4gICAgfVxuICAgIHJldHVybiAnd3JhcCc7XG4gIH1cblxuICBfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpIHtcbiAgICBpZiAoaW5EaWFsb2cgfHwgaGlkZVNsaWRlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNsaWRlckNoYW5nZWQoZXYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGV2LnRhcmdldC52YWx1ZSwgMTApO1xuICAgIGNvbnN0IHBhcmFtID0geyBlbnRpdHlfaWQ6IHRoaXMuc3RhdGVPYmouZW50aXR5X2lkIH07XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHJldHVybjtcbiAgICBsZXQgdGFyZ2V0ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNzbGlkZXInKTtcbiAgICBpZiAoZXYudGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgIC8vIE5vIFNoYWRvdyBET00gLSB3ZSBoYXZlIGFjY2VzcyB0byBvcmlnaW5hbCB0YXJnZXQuXG4gICAgICAoeyB0YXJnZXQgfSA9IGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LnBhdGgpIHtcbiAgICAgIFt0YXJnZXRdID0gZXYucGF0aDtcbiAgICB9IGVsc2UgaWYgKGV2LmNvbXBvc2VkUGF0aCkge1xuICAgICAgW3RhcmdldF0gPSBldi5jb21wb3NlZFBhdGgoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAwIHx8ICh2YWx1ZSA8PSB0YXJnZXQubWluICYmICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKSkge1xuICAgICAgdGhpcy5oYXNzLmNhbGxTZXJ2aWNlKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2VNaW4sIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1bdGhpcy5zZXRWYWx1ZU5hbWUgfHwgdGhpcy52YWx1ZU5hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmhhc3MuY2FsbFNlcnZpY2UodGhpcy5kb21haW4sIHRoaXMuc2VydmljZU1heCwgcGFyYW0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBzbGlkZXJWYWx1ZTogdGhpcy5pc09uKHN0YXRlT2JqLCBuYW1lT24pID8gc3RhdGVPYmouYXR0cmlidXRlc1t2YWx1ZU5hbWVdIDogMCxcbiAgICB9O1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWluTGluZUJyZWFrOiAwLFxuICAgICAgICBtYXhMaW5lQnJlYWs6IDk5OSxcbiAgICAgICAgaGlkZVNsaWRlcjogZmFsc2UsXG4gICAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICAgICAgbGluZVRvb0xvbmc6IGZhbHNlLFxuICAgICAgICBtb2RlOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSxcbiAgICAgICAgc3RyZXRjaFNsaWRlcjogISFzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0cmV0Y2hfc2xpZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhvYmopO1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgdGhpcy5fd2FpdEZvckxheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzT24oc3RhdGVPYmosIG5hbWVPbikge1xuICAgIHJldHVybiBzdGF0ZU9iaiAmJiAoIW5hbWVPbiB8fCBzdGF0ZU9iai5zdGF0ZSA9PT0gbmFtZU9uKTtcbiAgfVxuXG4gIHN0b3BQcm9wYWdhdGlvbihldikge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInLCBTdGF0ZUNhcmRXaXRoU2xpZGVyKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgQ3VpQmFzZUVsZW1lbnQgZnJvbSAnLi9jdWktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCAnLi9keW5hbWljLXdpdGgtZXh0cmEuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIFN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIgZXh0ZW5kcyBDdWlCYXNlRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50XCI+PC9zdHlsZT5cbiAgICA8c3R5bGU+XG4gICAgICAjY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQnPlxuICAgICAgPHN0YXRlLWluZm9cbiAgICAgICAgICBoYXNzPSdbW2hhc3NdXSdcbiAgICAgICAgICBjbGFzcz0nc3RhdGUtaW5mbydcbiAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICBpbi1kaWFsb2c9J1tbc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpXV0nXG4gICAgICAgICAgc2Vjb25kYXJ5LWxpbmUkPSdbW2hhc0V4dHJhKGV4dHJhKV1dJz5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20tcmVwZWF0JyBpdGVtcz0nW1tleHRyYV1dJz5cbiAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3N0YXRlLWluZm8+XG4gICAgICA8ZHluYW1pYy13aXRoLWV4dHJhXG4gICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nXG4gICAgICAgICAgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nXG4gICAgICAgICAgaW4tZGlhbG9nPSdbW2luRGlhbG9nXV0nPlxuICAgICAgPC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdzdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyJywgU3RhdGVDYXJkV2l0aG91dFNsaWRlcik7XG4iLCIvLyBQb2x5bWVyIGxlZ2FjeSBldmVudCBoZWxwZXJzIHVzZWQgY291cnRlc3kgb2YgdGhlIFBvbHltZXIgcHJvamVjdC5cbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBvcnQgZGVmYXVsdCAoc3VwZXJDbGFzcykgPT4ge1xuICAvKipcbiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAgICovXG4gIGNsYXNzIEV2ZW50c01peGluIGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCB3aXRoIGFuIG9wdGlvbmFsIGRldGFpbCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIE5hbWUgb2YgZXZlbnQgdHlwZS5cbiAgICAgKiBAcGFyYW0geyo9fSBkZXRhaWwgRGV0YWlsIHZhbHVlIGNvbnRhaW5pbmcgZXZlbnQtc3BlY2lmaWNcbiAgICAgKiAgIHBheWxvYWQuXG4gICAgICogQHBhcmFtIHt7IGJ1YmJsZXM6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNvbXBvc2VkOiAoYm9vbGVhbnx1bmRlZmluZWQpIH09fVxuICAgICAqICBvcHRpb25zIE9iamVjdCBzcGVjaWZ5aW5nIG9wdGlvbnMuICBUaGVzZSBtYXkgaW5jbHVkZTpcbiAgICAgKiAgYGJ1YmJsZXNgIChib29sZWFuLCBkZWZhdWx0cyB0byBgdHJ1ZWApLFxuICAgICAqICBgY2FuY2VsYWJsZWAgKGJvb2xlYW4sIGRlZmF1bHRzIHRvIGZhbHNlKSwgYW5kXG4gICAgICogIGBub2RlYCBvbiB3aGljaCB0byBmaXJlIHRoZSBldmVudCAoSFRNTEVsZW1lbnQsIGRlZmF1bHRzIHRvIGB0aGlzYCkuXG4gICAgICogQHJldHVybiB7RXZlbnR9IFRoZSBuZXcgZXZlbnQgdGhhdCB3YXMgZmlyZWQuXG4gICAgICovXG4gICAgZmlyZSh0eXBlLCBkZXRhaWwgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmJsZXM6IG9wdGlvbnMuYnViYmxlcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogQm9vbGVhbihvcHRpb25zLmNhbmNlbGFibGUpLFxuICAgICAgICBjb21wb3NlZDogb3B0aW9ucy5jb21wb3NlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuY29tcG9zZWQsXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LmRldGFpbCA9IGRldGFpbDtcbiAgICAgIGNvbnN0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgdGhpcztcbiAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBFdmVudHNNaXhpbjtcbn07XG4iLCJpbXBvcnQgaGFzc0F0dHJpYnV0ZXNVdGlsIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL3V0aWwvaGFzcy1hdHRyaWJ1dGVzLXV0aWwuanMnO1xuXG53aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgfHwge307XG5jb25zdCBTVVBQT1JURURfU0xJREVSX01PREVTID0gW1xuICAnc2luZ2xlLWxpbmUnLCAnYnJlYWstc2xpZGVyJywgJ2JyZWFrLXNsaWRlci10b2dnbGUnLCAnaGlkZS1zbGlkZXInLCAnbm8tc2xpZGVyJyxcbl07XG5cbmNvbnN0IGN1c3RvbVVpQXR0cmlidXRlcyA9IHtcbiAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgZGV2aWNlOiB1bmRlZmluZWQsXG4gIHRlbXBsYXRlczogdW5kZWZpbmVkLFxuICBzdGF0ZTogdW5kZWZpbmVkLFxuICBfc3RhdGVEaXNwbGF5OiB1bmRlZmluZWQsXG4gIGNvbnRyb2xfZWxlbWVudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBzdGF0ZV9jYXJkX21vZGU6IHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGxpZ2h0OiBTVVBQT1JURURfU0xJREVSX01PREVTLmNvbmNhdCgnYmFkZ2VzJyksXG4gICAgICBjb3ZlcjogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgY2xpbWF0ZTogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgJyonOiBbJ2JhZGdlcyddLFxuICAgIH0sXG4gIH0sXG4gIHN0YXRlX2NhcmRfY3VzdG9tX3VpX3NlY29uZGFyeTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBiYWRnZXNfbGlzdDogeyB0eXBlOiAnanNvbicgfSxcbiAgc2hvd19sYXN0X2NoYW5nZWQ6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfY29udHJvbDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgZXh0cmFfZGF0YV90ZW1wbGF0ZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBleHRyYV9iYWRnZTogeyB0eXBlOiAnanNvbicgfSxcbiAgc3RyZXRjaF9zbGlkZXI6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIHNsaWRlcl90aGVtZTogeyB0eXBlOiAnanNvbicgfSxcbiAgdGhlbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgY29uZmlybV9jb250cm9sczogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgY29uZmlybV9jb250cm9sc19zaG93X2xvY2s6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfaW5fZGVmYXVsdF92aWV3OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBpY29uX2NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG59O1xud2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMgPSBoYXNzQXR0cmlidXRlc1V0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUztcbndpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5VTktOT1dOX1RZUEUgPSBoYXNzQXR0cmlidXRlc1V0aWwuVU5LTk9XTl9UWVBFO1xuT2JqZWN0LmFzc2lnbih3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUywgY3VzdG9tVWlBdHRyaWJ1dGVzKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZ2V0Vmlld0VudGl0aWVzIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvZ2V0X3ZpZXdfZW50aXRpZXMudHMnO1xuXG5pbXBvcnQgJy4uL2VsZW1lbnRzL2hhLWNvbmZpZy1jdXN0b20tdWkuanMnO1xuaW1wb3J0IFZFUlNJT04gZnJvbSAnLi92ZXJzaW9uLmpzJztcbmltcG9ydCAnLi9oYXNzLWF0dHJpYnV0ZS11dGlsLmpzJztcblxud2luZG93LmN1c3RvbVVJID0gd2luZG93LmN1c3RvbVVJIHx8IHtcbiAgU1VQUE9SVEVEX1NMSURFUl9NT0RFUzogW1xuICAgICdzaW5nbGUtbGluZScsICdicmVhay1zbGlkZXInLCAnYnJlYWstc2xpZGVyLXRvZ2dsZScsICdoaWRlLXNsaWRlcicsICduby1zbGlkZXInLFxuICBdLFxuXG4gIGRvbUhvc3QoZWxlbSkge1xuICAgIGlmIChlbGVtID09PSBkb2N1bWVudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW0uZ2V0Um9vdE5vZGUoKTtcbiAgICByZXR1cm4gKHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSA/IC8qKiBAdHlwZSB7U2hhZG93Um9vdH0gKi8gKHJvb3QpLmhvc3QgOiByb290O1xuICB9LFxuXG4gIGxpZ2h0T3JTaGFkb3coZWxlbSwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZWxlbS5zaGFkb3dSb290ID9cbiAgICAgIGVsZW0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6XG4gICAgICBlbGVtLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9LFxuXG4gIGdldEVsZW1lbnRIaWVyYXJjaHkocm9vdCwgaGllcmFyY2h5KSB7XG4gICAgaWYgKHJvb3QgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVsZW0gPSBoaWVyYXJjaHkuc2hpZnQoKTtcbiAgICBpZiAoZWxlbSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhyb290LCBlbGVtKSwgaGllcmFyY2h5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0sXG5cbiAgZ2V0Q29udGV4dChlbGVtKSB7XG4gICAgaWYgKGVsZW0uX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbS5fY29udGV4dCA9IFtdO1xuICAgICAgZm9yIChsZXQgZWxlbWVudCA9IChlbGVtLnRhZ05hbWUgPT09ICdIQS1FTlRJVElFUy1DQVJEJyA/IHdpbmRvdy5jdXN0b21VSS5kb21Ib3N0KGVsZW0pIDogZWxlbSk7XG4gICAgICAgIGVsZW1lbnQ7IGVsZW1lbnQgPSB3aW5kb3cuY3VzdG9tVUkuZG9tSG9zdChlbGVtZW50KSkge1xuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ0hBLUVOVElUSUVTLUNBUkQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuZ3JvdXBFbnRpdHkuZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ncm91cEVudGl0eSA9PT0gZmFsc2UgJiYgZWxlbWVudC5zdGF0ZXMgJiYgZWxlbWVudC5zdGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChgZ3JvdXAuJHtjb21wdXRlU3RhdGVEb21haW4oZWxlbWVudC5zdGF0ZXNbMF0pfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTU9SRS1JTkZPLUdST1VQJzpcbiAgICAgICAgICBjYXNlICdTVEFURS1DQVJELUNPTlRFTlQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuc3RhdGVPYmouZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0hBLUNBUkRTJzpcbiAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWV3JykgfHwgJ2RlZmF1bHRfdmlldycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtLl9jb250ZXh0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW0uX2NvbnRleHQ7XG4gIH0sXG5cbiAgZmluZE1hdGNoKGtleSwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgaWYgKG9wdGlvbnNba2V5XSkgcmV0dXJuIGtleTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob3B0aW9ucykuZmluZChvcHRpb24gPT4ga2V5Lm1hdGNoKGBeJHtvcHRpb259JGApKTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKSB7XG4gICAgY29uc3QgbmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLmZpbmRNYXRjaChuYW1lLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIHN0YXRlT2JqO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZVttYXRjaF0pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHJldHVybiBzdGF0ZU9iajtcbiAgICByZXR1cm4gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgYXR0cmlidXRlcyk7XG4gIH0sXG5cbiAgbWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIHN0YXRlT2JqKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHdpbmRvdy5jdXN0b21VSS5nZXRDb250ZXh0KGVsZW0pO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb250ZXh0LmZvckVhY2goKGMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5maW5kTWF0Y2goYywgc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cCk7XG4gICAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cFttYXRjaF0pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwW21hdGNoXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5hcHBseUF0dHJpYnV0ZXMoc3RhdGVPYmosIGF0dHJpYnV0ZXMpO1xuICB9LFxuXG4gIF9zZXRLZWVwKG9iaiwgdmFsdWUpIHtcbiAgICBpZiAob2JqLl9jdWlfa2VlcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmouX2N1aV9rZWVwID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5fY3VpX2tlZXAgPSBvYmouX2N1aV9rZWVwICYmIHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBtYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKGhhc3MsIHN0YXRlcywgc3RhdGVPYmosIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZXMudGVtcGxhdGVzKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuX3NldEtlZXAoc3RhdGVPYmosIHRydWUpO1xuICAgICAgcmV0dXJuIHN0YXRlT2JqO1xuICAgIH1cbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge307XG4gICAgbGV0IGhhc0dsb2JhbCA9IGZhbHNlO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy50ZW1wbGF0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhdHRyaWJ1dGVzLnRlbXBsYXRlc1trZXldO1xuICAgICAgaWYgKHRlbXBsYXRlLm1hdGNoKC9cXGIoZW50aXRpZXN8aGFzcylcXGIvKSkge1xuICAgICAgICBoYXNHbG9iYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB3aW5kb3cuY3VzdG9tVUkuY29tcHV0ZVRlbXBsYXRlKFxuICAgICAgICB0ZW1wbGF0ZSwgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgYXR0cmlidXRlcyxcbiAgICAgICAgKHN0YXRlT2JqLnVudGVtcGxhdGVkX2F0dHJpYnV0ZXMgJiYgc3RhdGVPYmoudW50ZW1wbGF0ZWRfYXR0cmlidXRlc1trZXldKSB8fFxuICAgICAgICAgICAgYXR0cmlidXRlc1trZXldLFxuICAgICAgICBzdGF0ZU9iai51bnRlbXBsYXRlZF9zdGF0ZSB8fCBzdGF0ZU9iai5zdGF0ZSk7XG4gICAgICAvLyBJbiBjYXNlIG9mIG51bGwgZG9uJ3Qgc2V0IHRoZSB2YWx1ZS5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgbmV3QXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gICAgICBpZiAoa2V5ID09PSAnc3RhdGUnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gc3RhdGVPYmouc3RhdGUpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdfc3RhdGVEaXNwbGF5Jykge1xuICAgICAgICBpZiAodmFsdWUgIT09IHN0YXRlT2JqLl9zdGF0ZURpc3BsYXkpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gYXR0cmlidXRlc1trZXldKSB7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5jdXN0b21VSS5fc2V0S2VlcChzdGF0ZU9iaiwgIWhhc0dsb2JhbCk7XG4gICAgaWYgKCFoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzID09PSBhdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBXZSBhcmUgb3BlcmF0aW5nIG9uIHJlYWwgYXR0cmlidXRlcy4gUmVwbGFjZSB0aGVtLlxuICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgbmV3QXR0cmlidXRlcyk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdzdGF0ZScpKSB7XG4gICAgICAgIGlmIChuZXdBdHRyaWJ1dGVzLnN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnN0YXRlID0gU3RyaW5nKG5ld0F0dHJpYnV0ZXMuc3RhdGUpO1xuICAgICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZSA9IHN0YXRlT2JqLnN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdfc3RhdGVEaXNwbGF5JykpIHtcbiAgICAgICAgcmVzdWx0Ll9zdGF0ZURpc3BsYXkgPSBuZXdBdHRyaWJ1dGVzLl9zdGF0ZURpc3BsYXk7XG4gICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZURpc3BsYXkgPSBzdGF0ZU9iai5fc3RhdGVEaXNwbGF5O1xuICAgICAgfVxuICAgICAgd2luZG93LmN1c3RvbVVJLl9zZXRLZWVwKHJlc3VsdCwgIWhhc0dsb2JhbCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBPcGVyYXRpbmcgb24gY29udGV4dC1hd2FyZSBhdHRyaWJ1dGVzLiBSZXR1cm4gc2hhbGxvdyBjb3B5IG9mIG9iamVjdC5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICB9LFxuXG4gIG1heWJlQXBwbHlUZW1wbGF0ZXMoaGFzcywgc3RhdGVzLCBzdGF0ZU9iaikge1xuICAgIGNvbnN0IG5ld1Jlc3VsdCA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgICAgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgc3RhdGVPYmouYXR0cmlidXRlcyk7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSAobmV3UmVzdWx0ICE9PSBzdGF0ZU9iaik7XG5cbiAgICBmdW5jdGlvbiBjaGVja0F0dHJpYnV0ZXMob2JqKSB7XG4gICAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgICAgT2JqZWN0LnZhbHVlcyhvYmopLmZvckVhY2goKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgaGFzcywgc3RhdGVzLCBuZXdSZXN1bHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBoYXNDaGFuZ2VzIHw9IChyZXN1bHQgIT09IG5ld1Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZGV2aWNlKTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZ3JvdXApO1xuICAgIH1cblxuICAgIGNoZWNrQXR0cmlidXRlcyhzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgY2hlY2tBdHRyaWJ1dGVzKHN0YXRlT2JqLmF0dHJpYnV0ZXMuZ3JvdXApO1xuICAgIGlmIChuZXdSZXN1bHQgIT09IHN0YXRlT2JqKSByZXR1cm4gbmV3UmVzdWx0O1xuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVPYmo7XG4gIH0sXG5cbiAgYXBwbHlBdHRyaWJ1dGVzKHN0YXRlT2JqLCBhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eV9pZDogc3RhdGVPYmouZW50aXR5X2lkLFxuICAgICAgc3RhdGU6IHN0YXRlT2JqLnN0YXRlLFxuICAgICAgYXR0cmlidXRlczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmouYXR0cmlidXRlcywgYXR0cmlidXRlcyksXG4gICAgICB1bnRlbXBsYXRlZF9hdHRyaWJ1dGVzOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLFxuICAgICAgbGFzdF9jaGFuZ2VkOiBzdGF0ZU9iai5sYXN0X2NoYW5nZWQsXG4gICAgfTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdChlbGVtLCBzdGF0ZU9iaiwgaW5EaWFsb2csIGFsbG93SGlkZGVuKSB7XG4gICAgaWYgKGluRGlhbG9nKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgbGV0IG9iaiA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKTtcbiAgICBvYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIG9iaik7XG4gICAgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICBlbGVtLmhhc3MsIGVsZW0uaGFzcy5zdGF0ZXMsIG9iaiwgb2JqLmF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKG9iaiAhPT0gc3RhdGVPYmogJiYgb2JqLmF0dHJpYnV0ZXMuaGlkZGVuICYmIGFsbG93SGlkZGVuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBmaXhHcm91cFRpdGxlcygpIHtcbiAgICBjb25zdCBob21lQXNzaXN0YW50TWFpbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nXSk7XG4gICAgaWYgKGhvbWVBc3Npc3RhbnRNYWluID09PSBudWxsKSB7XG4gICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEgc2Vjb25kLlxuICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzLCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYUNhcmRzID0gd2luZG93LmN1c3RvbVVJLmdldEVsZW1lbnRIaWVyYXJjaHkoaG9tZUFzc2lzdGFudE1haW4sIFtcbiAgICAgICdwYXJ0aWFsLWNhcmRzJyxcbiAgICAgICdoYS1jYXJkc1t2aWV3LXZpc2libGVdJ10pO1xuICAgIGlmIChoYUNhcmRzID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhQ2FyZHMsICcubWFpbicpIHx8IGhhQ2FyZHMuJC5tYWluO1xuICAgIGNvbnN0IGNhcmRzID0gbWFpbi5xdWVyeVNlbGVjdG9yQWxsKCdoYS1lbnRpdGllcy1jYXJkJyk7XG4gICAgY2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4ge1xuICAgICAgaWYgKGNhcmQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0KFxuICAgICAgICAgIGNhcmQsXG4gICAgICAgICAgY2FyZC5ncm91cEVudGl0eSxcbiAgICAgICAgICBmYWxzZSAvKiBpbkRpYWxvZyAqLyxcbiAgICAgICAgICBmYWxzZSAvKiBhbGxvd0hpZGRlbiAqLyk7XG4gICAgICAgIGlmIChvYmogIT09IGNhcmQuZ3JvdXBFbnRpdHkgJiYgb2JqLmF0dHJpYnV0ZXMuZnJpZW5kbHlfbmFtZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVFbGVtID0gd2luZG93LmN1c3RvbVVJLmxpZ2h0T3JTaGFkb3coY2FyZCwgJy5uYW1lJyk7XG4gICAgICAgICAgbmFtZUVsZW0udGV4dENvbnRlbnQgPSBvYmouYXR0cmlidXRlcy5mcmllbmRseV9uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgY29udHJvbENvbHVtbnMoY29sdW1ucykge1xuICAgIGNvbnN0IHBhcnRpYWxDYXJkcyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtY2FyZHMnXSk7XG4gICAgaWYgKHBhcnRpYWxDYXJkcyA9PT0gbnVsbCkge1xuICAgICAgLy8gRE9NIG5vdCByZWFkeS4gV2FpdCAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMuYmluZChudWxsLCBjb2x1bW5zKSxcbiAgICAgICAgMTAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZ1bmN0aW9uIHJlbmFtZWQgZnJvbSBoYW5kbGVXaW5kb3dDaGFuZ2UgdG8gX3VwZGF0ZUNvbHVtbnMgb24gMy43LjE4XG4gICAgY29uc3QgZiA9IHBhcnRpYWxDYXJkcy5oYW5kbGVXaW5kb3dDaGFuZ2UgfHwgcGFydGlhbENhcmRzLl91cGRhdGVDb2x1bW5zO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzLmZvckVhY2goKG1xbCkgPT4ge1xuICAgICAgbXFsLnJlbW92ZUxpc3RlbmVyKGYpO1xuICAgIH0pO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzID0gY29sdW1ucy5tYXAoKHdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBtcWwgPSB3aW5kb3cubWF0Y2hNZWRpYShgKG1pbi13aWR0aDogJHt3aWR0aH1weClgKTtcbiAgICAgIG1xbC5hZGRMaXN0ZW5lcihmKTtcbiAgICAgIHJldHVybiBtcWw7XG4gICAgfSk7XG4gICAgZigpO1xuICB9LFxuXG4gIHVzZUN1c3RvbWl6ZXIoKSB7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBjb25zdCBjdXN0b21pemVyID0gbWFpbi5oYXNzLnN0YXRlc1snY3VzdG9taXplci5jdXN0b21pemVyJ107XG4gICAgaWYgKCFjdXN0b21pemVyKSByZXR1cm47XG4gICAgaWYgKGN1c3RvbWl6ZXIuYXR0cmlidXRlcy5jb2x1bW5zKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMoY3VzdG9taXplci5hdHRyaWJ1dGVzLmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAoY3VzdG9taXplci5hdHRyaWJ1dGVzLmhpZGVfYXR0cmlidXRlcykge1xuICAgICAgaWYgKHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbCAmJiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUykge1xuICAgICAgICBjdXN0b21pemVyLmF0dHJpYnV0ZXMuaGlkZV9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTLCBhdHRyKSkge1xuICAgICAgICAgICAgd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlQ29uZmlnUGFuZWwoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY29uc3QgaGFQYW5lbENvbmZpZyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtcGFuZWwtcmVzb2x2ZXInLFxuICAgICAgJ2hhLXBhbmVsLWNvbmZpZyddKTtcbiAgICBpZiAoIWhhUGFuZWxDb25maWcpIHtcbiAgICAgIC8vIERPTSBub3QgcmVhZHkuIFdhaXQgMTAwbXMuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkudXBkYXRlQ29uZmlnUGFuZWwsIDEwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhQ29uZmlnTmF2aWdhdGlvbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGhhUGFuZWxDb25maWcsIFtcbiAgICAgICdoYS1jb25maWctZGFzaGJvYXJkJyxcbiAgICAgICdoYS1jb25maWctbmF2aWdhdGlvbiddKTtcbiAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uKSB7XG4gICAgICAvLyBIYUNvbmZpZ05hdmlnYXRpb24gc3RhcnRlZCB1c2luZyBsb2NhbGl6ZSBvbiAyMS4wMS4yMDE4XG4gICAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplICYmICFoYUNvbmZpZ05hdmlnYXRpb24uY3VpUGF0Y2gpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLmN1aVBhdGNoID0gdHJ1ZTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVMb2FkZWQgPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVMb2FkZWQ7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlQ2FwdGlvbiA9IGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZUNhcHRpb247XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlRGVzY3JpcHRpb24gPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVEZXNjcmlwdGlvbjtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlTG9hZGVkID0gKGhhc3MsIHBhZ2UpID0+XG4gICAgICAgICAgcGFnZSA9PT0gJ2N1c3RvbXVpJyB8fCBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZUxvYWRlZChoYXNzLCBwYWdlKTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlQ2FwdGlvbiA9IChwYWdlLCBsb2NhbGl6ZSkgPT5cbiAgICAgICAgICAocGFnZSA9PT0gJ2N1c3RvbXVpJyA/ICdDdXN0b20gVUknIDogaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVDYXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZURlc2NyaXB0aW9uID0gKHBhZ2UsIGxvY2FsaXplKSA9PlxuICAgICAgICAgIChwYWdlID09PSAnY3VzdG9tdWknID8gJ1NldFVJIHR3ZWFrcycgOiBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWhhQ29uZmlnTmF2aWdhdGlvbi5wYWdlcy5zb21lKGNvbmYgPT4gY29uZiA9PT0gJ2N1c3RvbXVpJyB8fCBjb25mLmRvbWFpbiA9PT0gJ2N1c3RvbXVpJykpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLnB1c2goJ3BhZ2VzJywgaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplID8gJ2N1c3RvbXVpJyA6IHtcbiAgICAgICAgICBkb21haW46ICdjdXN0b211aScsXG4gICAgICAgICAgY2FwdGlvbjogJ0N1c3RvbSBVSScsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTZXQgVUkgdHdlYWtzLicsXG4gICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZ2V0SGFDb25maWdDdXN0b21VaSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhhQ29uZmlnQ3VzdG9tVWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoYS1jb25maWctY3VzdG9tLXVpJyk7XG4gICAgICBoYUNvbmZpZ0N1c3RvbVVpLmlzV2lkZSA9IGhhUGFuZWxDb25maWcuaXNXaWRlO1xuICAgICAgaGFDb25maWdDdXN0b21VaS5zZXRBdHRyaWJ1dGUoJ3BhZ2UtbmFtZScsICdjdXN0b211aScpO1xuICAgICAgcmV0dXJuIGhhQ29uZmlnQ3VzdG9tVWk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlyb25QYWdlcyA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhUGFuZWxDb25maWcsICdpcm9uLXBhZ2VzJyk7XG4gICAgaWYgKGlyb25QYWdlcykge1xuICAgICAgaWYgKGlyb25QYWdlcy5sYXN0RWxlbWVudENoaWxkLnRhZ05hbWUgIT09ICdIQS1DT05GSUctQ1VTVE9NLVVJJykge1xuICAgICAgICBjb25zdCBoYUNvbmZpZ0N1c3RvbVVpID0gZ2V0SGFDb25maWdDdXN0b21VaSgpO1xuICAgICAgICBpcm9uUGFnZXMuYXBwZW5kQ2hpbGQoaGFDb25maWdDdXN0b21VaSk7XG4gICAgICAgIGlyb25QYWdlcy5hZGRFdmVudExpc3RlbmVyKCdpcm9uLWl0ZW1zLWNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnL2N1c3RvbXVpJykpIHtcbiAgICAgICAgICAgIGlyb25QYWdlcy5zZWxlY3QoJ2N1c3RvbXVpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9vdCA9IGhhUGFuZWxDb25maWcuc2hhZG93Um9vdCB8fCBoYVBhbmVsQ29uZmlnO1xuICAgICAgaWYgKHJvb3QubGFzdEVsZW1lbnRDaGlsZC50YWdOYW1lICE9PSAnSEEtQ09ORklHLUNVU1RPTS1VSScpIHtcbiAgICAgICAgY29uc3QgaGFDb25maWdDdXN0b21VaSA9IGdldEhhQ29uZmlnQ3VzdG9tVWkoKTtcbiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChoYUNvbmZpZ0N1c3RvbVVpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpc2libGUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZy9jdXN0b211aScpO1xuICAgICAgcm9vdC5sYXN0RWxlbWVudENoaWxkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJycgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIGluc3RhbGxTdGF0ZXNIb29rKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdob21lLWFzc2lzdGFudCcpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaG9tZUFzc2lzdGFudCA9IGN1c3RvbUVsZW1lbnRzLmdldCgnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICAgIGlmICghaG9tZUFzc2lzdGFudCB8fCAhaG9tZUFzc2lzdGFudC5wcm90b3R5cGUuX3VwZGF0ZUhhc3MpIHJldHVybjtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVXBkYXRlID0gaG9tZUFzc2lzdGFudC5wcm90b3R5cGUuX3VwZGF0ZUhhc3M7XG4gICAgICBob21lQXNzaXN0YW50LnByb3RvdHlwZS5fdXBkYXRlSGFzcyA9IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgY29uc3QgeyBoYXNzIH0gPSB0aGlzO1xuICAgICAgICBpZiAob2JqLnN0YXRlcykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKG9iai5zdGF0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb2JqLnN0YXRlc1trZXldO1xuICAgICAgICAgICAgaWYgKGVudGl0eS5fY3VpX2tlZXApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0VudGl0eSA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVzKGhhc3MsIG9iai5zdGF0ZXMsIGVudGl0eSk7XG4gICAgICAgICAgICBpZiAoaGFzcy5zdGF0ZXMgJiYgZW50aXR5ICE9PSBoYXNzLnN0YXRlc1trZXldKSB7XG4gICAgICAgICAgICAgIC8vIE5ldyBzdGF0ZSBhcnJpdmVkLiBQdXQgbW9kaWZpZWQgc3RhdGUgaW4uXG4gICAgICAgICAgICAgIG9iai5zdGF0ZXNba2V5XSA9IG5ld0VudGl0eTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50aXR5ICE9PSBuZXdFbnRpdHkpIHtcbiAgICAgICAgICAgICAgLy8gSXQncyB0aGUgc2FtZSBzdGF0ZSBidXQgY29udGVudHMgY2hhbmdlZCBkdWUgdG8gb3RoZXIgc3RhdGUgY2hhbmdlcy5cbiAgICAgICAgICAgICAgb2JqLnN0YXRlc1trZXldID0gbmV3RW50aXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsVXBkYXRlLmNhbGwodGhpcywgb2JqKTtcbiAgICAgICAgaWYgKG9iai50aGVtZXMgJiYgaGFzcy5fdGhlbWVXYWl0ZXJzKSB7XG4gICAgICAgICAgaGFzcy5fdGhlbWVXYWl0ZXJzLmZvckVhY2god2FpdGVyID0+IHdhaXRlci5zdGF0ZUNoYW5nZWQod2FpdGVyLnN0YXRlKSk7XG4gICAgICAgICAgaGFzcy5fdGhlbWVXYWl0ZXJzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICAgIGlmIChtYWluLmhhc3MgJiYgbWFpbi5oYXNzLnN0YXRlcykge1xuICAgICAgICBtYWluLl91cGRhdGVIYXNzKHsgc3RhdGVzOiBtYWluLmhhc3Muc3RhdGVzIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxQYXJ0aWFsQ2FyZHMoKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ3BhcnRpYWwtY2FyZHMnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxDYXJkcyA9IGN1c3RvbUVsZW1lbnRzLmdldCgncGFydGlhbC1jYXJkcycpO1xuICAgICAgaWYgKCFwYXJ0aWFsQ2FyZHMgfHwgIXBhcnRpYWxDYXJkcy5wcm90b3R5cGUuX2RlZmF1bHRWaWV3RmlsdGVyKSByZXR1cm47XG4gICAgICBwYXJ0aWFsQ2FyZHMucHJvdG90eXBlLl9kZWZhdWx0Vmlld0ZpbHRlciA9IChoYXNzLCBlbnRpdHlJZCkgPT4ge1xuICAgICAgICBpZiAoaGFzcy5zdGF0ZXNbZW50aXR5SWRdLmF0dHJpYnV0ZXMuaGlkZGVuKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVzID0ge307XG4gICAgICAgIE9iamVjdC52YWx1ZXMoaGFzcy5zdGF0ZXMpLmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgICAgIGlmIChlbnRpdHkuYXR0cmlidXRlcyAmJiBlbnRpdHkuYXR0cmlidXRlcy5oaWRlX2luX2RlZmF1bHRfdmlldykge1xuICAgICAgICAgICAgY29uc3QgZXhjbHVkZUVudGl0eUlkID0gZW50aXR5LmVudGl0eV9pZDtcbiAgICAgICAgICAgIGlmIChleGNsdWRlc1tleGNsdWRlRW50aXR5SWRdKSByZXR1cm47XG4gICAgICAgICAgICBleGNsdWRlc1tleGNsdWRlRW50aXR5SWRdID0gZW50aXR5O1xuICAgICAgICAgICAgaWYgKGVudGl0eS5hdHRyaWJ1dGVzLnZpZXcpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdmlld0VudGl0aWVzID0gZ2V0Vmlld0VudGl0aWVzKGhhc3Muc3RhdGVzLCBlbnRpdHkpO1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2aWV3RW50aXRpZXMpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGlkID0+IHZpZXdFbnRpdGllc1tpZF0uYXR0cmlidXRlcy5oaWRlX2luX2RlZmF1bHRfdmlldyAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBleGNsdWRlc1tpZF0gPSB2aWV3RW50aXRpZXNbaWRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAhZXhjbHVkZXNbZW50aXR5SWRdO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBBbGxvd3MgY2hhbmdpbmcgdGhlICdFeGVjdXRlJyAvICdBY3RpdmF0ZScgdGV4dCBvbiBzY3JpcHQvc2NlbmUgY2FyZHMuXG4gIGluc3RhbGxBY3Rpb25OYW1lKGVsZW1lbnROYW1lKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoZWxlbWVudE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qga2xhc3MgPSBjdXN0b21FbGVtZW50cy5nZXQoZWxlbWVudE5hbWUpO1xuICAgICAgaWYgKCFrbGFzcyB8fCAha2xhc3MucHJvdG90eXBlKSByZXR1cm47XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2xhc3MucHJvdG90eXBlLCAnbG9jYWxpemUnLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBmdW5jdGlvbiBjdXN0b21Mb2NhbGl6ZSh2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZU9iaiAmJiB0aGlzLnN0YXRlT2JqLmF0dHJpYnV0ZXMgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlT2JqLmF0dHJpYnV0ZXMuYWN0aW9uX25hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVPYmouYXR0cmlidXRlcy5hY3Rpb25fbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZGF0YS5sb2NhbGl6ZSh2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGN1c3RvbUxvY2FsaXplO1xuICAgICAgICB9LFxuICAgICAgICBzZXQoKSB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuXG4gIC8vIEFsbG93cyB0aGVtaW5nIFwicmVndWxhclwiIHRvcCBiYWRnZXMuXG4gIGluc3RhbGxIYVN0YXRlTGFiZWxCYWRnZSgpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaGEtc3RhdGUtbGFiZWwtYmFkZ2UnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhU3RhdGVMYWJlbEJhZGdlID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdoYS1zdGF0ZS1sYWJlbC1iYWRnZScpO1xuICAgICAgaWYgKCFoYVN0YXRlTGFiZWxCYWRnZSB8fCAhaGFTdGF0ZUxhYmVsQmFkZ2UucHJvdG90eXBlLnN0YXRlQ2hhbmdlZCkgcmV0dXJuO1xuICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgIGhhU3RhdGVMYWJlbEJhZGdlLnByb3RvdHlwZS5zdGF0ZUNoYW5nZWQgPSBmdW5jdGlvbiB1cGRhdGUoc3RhdGVPYmopIHtcbiAgICAgICAgLy8gVE9ETzogQ2FsbCB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3RcbiAgICAgICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMudGhlbWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5oYXNzLnRoZW1lcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5oYXNzLl90aGVtZVdhaXRlcnMgPSB0aGlzLmhhc3MuX3RoZW1lV2FpdGVycyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuaGFzcy5fdGhlbWVXYWl0ZXJzLnB1c2godGhpcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLmhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sXG4gICAgICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMudGhlbWUgfHwgJ2RlZmF1bHQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRJbnRlcnZhbCkge1xuICAgICAgICAgIC8vIEFkZGVkIG9uIDE5LjEuMjAxOFxuICAgICAgICAgIHRoaXMuc3RhcnRJbnRlcnZhbChzdGF0ZU9iaik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgaW5zdGFsbFN0YXRlQmFkZ2UoKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ3N0YXRlLWJhZGdlJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZUJhZGdlID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdzdGF0ZS1iYWRnZScpO1xuICAgICAgaWYgKCFzdGF0ZUJhZGdlIHx8ICFzdGF0ZUJhZGdlLnByb3RvdHlwZS5fdXBkYXRlSWNvbkFwcGVhcmFuY2UpIHJldHVybjtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVXBkYXRlSWNvbkFwcGVhcmFuY2UgPSBzdGF0ZUJhZGdlLnByb3RvdHlwZS5fdXBkYXRlSWNvbkFwcGVhcmFuY2U7XG4gICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgc3RhdGVCYWRnZS5wcm90b3R5cGUuX3VwZGF0ZUljb25BcHBlYXJhbmNlID0gZnVuY3Rpb24gY3VzdG9tVXBkYXRlSWNvbkFwcGVhcmFuY2Uoc3RhdGVPYmopIHtcbiAgICAgICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMuaWNvbl9jb2xvciAmJiAhc3RhdGVPYmouYXR0cmlidXRlcy5lbnRpdHlfcGljdHVyZSkge1xuICAgICAgICAgIHRoaXMuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJyc7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiQuaWNvbi5zdHlsZSwge1xuICAgICAgICAgICAgY29sb3I6IHN0YXRlT2JqLmF0dHJpYnV0ZXMuaWNvbl9jb2xvcixcbiAgICAgICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3JpZ2luYWxVcGRhdGVJY29uQXBwZWFyYW5jZS5jYWxsKHRoaXMsIHN0YXRlT2JqKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsSGFBdHRyaWJ1dGVzKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdoYS1hdHRyaWJ1dGVzJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYUF0dHJpYnV0ZXMgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hhLWF0dHJpYnV0ZXMnKTtcbiAgICAgIGlmICghaGFBdHRyaWJ1dGVzIHx8ICFoYUF0dHJpYnV0ZXMucHJvdG90eXBlLmNvbXB1dGVGaWx0ZXJzQXJyYXkgfHxcbiAgICAgICAgICF3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwpIHJldHVybjtcbiAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICBoYUF0dHJpYnV0ZXMucHJvdG90eXBlLmNvbXB1dGVGaWx0ZXJzQXJyYXkgPVxuICAgICAgICBmdW5jdGlvbiBjdXN0b21Db21wdXRlRmlsdGVyc0FycmF5KGV4dHJhRmlsdGVycykge1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUykuY29uY2F0KFxuICAgICAgICAgICAgZXh0cmFGaWx0ZXJzID8gZXh0cmFGaWx0ZXJzLnNwbGl0KCcsJykgOiBbXSk7XG4gICAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSgpIHtcbiAgICBpZiAoIXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnJykpIHJldHVybjtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaGEtZm9ybS1jdXN0b21pemUnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhRm9ybUN1c3RvbWl6ZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnaGEtZm9ybS1jdXN0b21pemUnKTtcbiAgICAgIGlmICghaGFGb3JtQ3VzdG9taXplKSB7XG4gICAgICAgIC8vIERPTSBub3QgcmVhZHkuIFdhaXQgMTAwbXMuXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHdpbmRvdy5jdXN0b21VSS5pbnN0YWxsSGFGb3JtQ3VzdG9taXplLCAxMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAod2luZG93LmN1c3RvbVVJLmhhRm9ybUN1c3RvbWl6ZUluaXREb25lKSByZXR1cm47XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuaGFGb3JtQ3VzdG9taXplSW5pdERvbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoIXdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbCkgcmV0dXJuO1xuICAgICAgaWYgKGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgaGFGb3JtQ3VzdG9taXplLnByb3RvdHlwZS5fY29tcHV0ZVNpbmdsZUF0dHJpYnV0ZSA9XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tQ29tcHV0ZVNpbmdsZUF0dHJpYnV0ZShrZXksIHZhbHVlLCBzZWNvbmRhcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTW2tleV1cbiAgICAgICAgICAgICAgICB8fCB7IHR5cGU6IHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5VTktOT1dOX1RZUEUgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0T3Blbk9iamVjdChrZXksIGNvbmZpZy50eXBlID09PSAnanNvbicgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiB2YWx1ZSwgc2Vjb25kYXJ5LCBjb25maWcpO1xuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoaGFGb3JtQ3VzdG9taXplLnByb3RvdHlwZS5nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucykge1xuICAgICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgICBoYUZvcm1DdXN0b21pemUucHJvdG90eXBlLmdldE5ld0F0dHJpYnV0ZXNPcHRpb25zID1cbiAgICAgICAgICBmdW5jdGlvbiBjdXN0b21nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyhcbiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlcywgZ2xvYmFsQXR0cmlidXRlcywgZXhpc3RpbmdBdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBjb25zdCBrbm93bktleXMgPVxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmYgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFU1trZXldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZiAmJiAoIWNvbmYuZG9tYWlucyB8fCAhdGhpcy5lbnRpdHkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi5kb21haW5zLmluY2x1ZGVzKGNvbXB1dGVTdGF0ZURvbWFpbih0aGlzLmVudGl0eSkpKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMobG9jYWxBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJGcm9tQXR0cmlidXRlcyhnbG9iYWxBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJGcm9tQXR0cmlidXRlcyhleGlzdGluZ0F0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcih0aGlzLmZpbHRlckZyb21BdHRyaWJ1dGVzKG5ld0F0dHJpYnV0ZXMpKTtcbiAgICAgICAgICAgIHJldHVybiBrbm93bktleXMuc29ydCgpLmNvbmNhdCgnT3RoZXInKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxDbGFzc0hvb2tzKCkge1xuICAgIGlmICh3aW5kb3cuY3VzdG9tVUkuY2xhc3NJbml0RG9uZSkgcmV0dXJuO1xuICAgIHdpbmRvdy5jdXN0b21VSS5jbGFzc0luaXREb25lID0gdHJ1ZTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbFBhcnRpYWxDYXJkcygpO1xuICAgIHdpbmRvdy5jdXN0b21VSS5pbnN0YWxsU3RhdGVzSG9vaygpO1xuICAgIHdpbmRvdy5jdXN0b21VSS5pbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbFN0YXRlQmFkZ2UoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhQXR0cmlidXRlcygpO1xuICAgIHdpbmRvdy5jdXN0b21VSS5pbnN0YWxsQWN0aW9uTmFtZSgnc3RhdGUtY2FyZC1zY2VuZScpO1xuICAgIHdpbmRvdy5jdXN0b21VSS5pbnN0YWxsQWN0aW9uTmFtZSgnc3RhdGUtY2FyZC1zY3JpcHQnKTtcbiAgfSxcblxuICBpbml0KCkge1xuICAgIGlmICh3aW5kb3cuY3VzdG9tVUkuaW5pdERvbmUpIHJldHVybjtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbENsYXNzSG9va3MoKTtcbiAgICBjb25zdCBtYWluID0gd2luZG93LmN1c3RvbVVJLmxpZ2h0T3JTaGFkb3coZG9jdW1lbnQsICdob21lLWFzc2lzdGFudCcpO1xuICAgIGlmICghbWFpbi5oYXNzIHx8ICFtYWluLmhhc3Muc3RhdGVzKSB7XG4gICAgICAvLyBDb25uZWN0aW9uIHdhc24ndCBtYWRlIHlldC4gVHJ5IGluIDEgc2Vjb25kLlxuICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93LmN1c3RvbVVJLmluaXQsIDEwMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5pdERvbmUgPSB0cnVlO1xuXG4gICAgd2luZG93LmN1c3RvbVVJLnVzZUN1c3RvbWl6ZXIoKTtcblxuICAgIHdpbmRvdy5jdXN0b21VSS5ydW5Ib29rcygpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2NhdGlvbi1jaGFuZ2VkJywgd2luZG93LnNldFRpbWVvdXQuYmluZChudWxsLCB3aW5kb3cuY3VzdG9tVUkucnVuSG9va3MsIDEwMCkpO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBjb25zb2xlLmxvZyhgTG9hZGVkIEN1c3RvbVVJICR7VkVSU0lPTn1gKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBpZiAoIXdpbmRvdy5DVVNUT01fVUlfTElTVCkge1xuICAgICAgd2luZG93LkNVU1RPTV9VSV9MSVNUID0gW107XG4gICAgfVxuICAgIHdpbmRvdy5DVVNUT01fVUlfTElTVC5wdXNoKHtcbiAgICAgIG5hbWU6ICdDdXN0b21VSScsXG4gICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgICAgdXJsOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZHJleS1naXQvaG9tZS1hc3Npc3RhbnQtY3VzdG9tLXVpJyxcbiAgICB9KTtcbiAgfSxcblxuICBydW5Ib29rcygpIHtcbiAgICB3aW5kb3cuY3VzdG9tVUkuZml4R3JvdXBUaXRsZXMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkudXBkYXRlQ29uZmlnUGFuZWwoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSgpO1xuICB9LFxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGEtZGV2aWNlLW5hbWUnKSB8fCAnJztcbiAgfSxcblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hhLWRldmljZS1uYW1lJywgbmFtZSB8fCAnJyk7XG4gIH0sXG5cbiAgY29tcHV0ZVRlbXBsYXRlKHRlbXBsYXRlLCBoYXNzLCBlbnRpdGllcywgZW50aXR5LCBhdHRyaWJ1dGVzLCBhdHRyaWJ1dGUsIHN0YXRlKSB7XG4gICAgY29uc3QgZnVuY3Rpb25Cb2R5ID0gKHRlbXBsYXRlLmluZGV4T2YoJ3JldHVybicpID49IDApID8gdGVtcGxhdGUgOiBgcmV0dXJuIFxcYCR7dGVtcGxhdGV9XFxgO2A7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jICovXG4gICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAnaGFzcycsICdlbnRpdGllcycsICdlbnRpdHknLCAnYXR0cmlidXRlcycsICdhdHRyaWJ1dGUnLCAnc3RhdGUnLCBmdW5jdGlvbkJvZHkpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXctZnVuYyAqL1xuICAgICAgcmV0dXJuIGZ1bmMoaGFzcywgZW50aXRpZXMsIGVudGl0eSwgYXR0cmlidXRlcywgYXR0cmlidXRlLCBzdGF0ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgICAgaWYgKChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHx8IGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7ZS5uYW1lfTogJHtlLm1lc3NhZ2V9IGluIHRlbXBsYXRlICR7ZnVuY3Rpb25Cb2R5fWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH0sXG59O1xud2luZG93LmN1c3RvbVVJLmluaXQoKTtcbiIsImV4cG9ydCBkZWZhdWx0ICcyMDE5MDExMyc7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9keW5hbWljX2NvbnRlbnRfdXBkYXRlci5qcyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX2RvbWFpbi50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jYW5fdG9nZ2xlX3N0YXRlLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2NvbXB1dGVfc3RhdGVfZG9tYWluLnRzIiwid2VicGFjazovLy8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZW50aXR5L2dldF9ncm91cF9lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9nZXRfdmlld19lbnRpdGllcy50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvc3VwcG9ydHMtZmVhdHVyZS50cyIsIndlYnBhY2s6Ly8vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvdXRpbC9oYXNzLWF0dHJpYnV0ZXMtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvYm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2N1aS1iYXNlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VsZW1lbnRzL2R5bmFtaWMtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvZHluYW1pYy13aXRoLWV4dHJhLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS1jb25maWctY3VzdG9tLXVpLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9oYS10aGVtZWQtc2xpZGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbGVtZW50cy9zdGF0ZS1jYXJkLWN1c3RvbS11aS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRoLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWxlbWVudHMvc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWl4aW5zL2V2ZW50cy1taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaGFzcy1hdHRyaWJ1dGUtdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiREVGQVVMVF9ET01BSU5fSUNPTiIsIkRFRkFVTFRfUEFORUwiLCJET01BSU5TX1dJVEhfQ0FSRCIsIkRPTUFJTlNfV0lUSF9NT1JFX0lORk8iLCJET01BSU5TX0hJREVfTU9SRV9JTkZPIiwiRE9NQUlOU19NT1JFX0lORk9fTk9fSElTVE9SWSIsIlNUQVRFU19PRkYiLCJET01BSU5TX1RPR0dMRSIsIlNldCIsIlVOSVRfQyIsIlVOSVRfRiIsIkRFRkFVTFRfVklFV19FTlRJVFlfSUQiLCJhcHBseVRoZW1lc09uRWxlbWVudCIsImVsZW1lbnQiLCJ0aGVtZXMiLCJsb2NhbFRoZW1lIiwidXBkYXRlTWV0YSIsIl90aGVtZXMiLCJ0aGVtZU5hbWUiLCJkZWZhdWx0X3RoZW1lIiwic3R5bGVzIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbWUiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByZWZpeGVkS2V5IiwidXBkYXRlU3R5bGVzIiwid2luZG93IiwiU2hhZHlDU1MiLCJzdHlsZVN1YnRyZWUiLCJtZXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiaGFzQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwidGhlbWVDb2xvciIsImR5bmFtaWNDb250ZW50VXBkYXRlciIsInJvb3QiLCJuZXdFbGVtZW50VGFnIiwiYXR0cmlidXRlcyIsInJvb3RFbCIsImN1c3RvbUVsIiwibGFzdENoaWxkIiwidGFnTmFtZSIsInJlbW92ZUNoaWxkIiwiY3JlYXRlRWxlbWVudCIsInRvTG93ZXJDYXNlIiwic2V0UHJvcGVydGllcyIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsImNhblRvZ2dsZURvbWFpbiIsImhhc3MiLCJkb21haW4iLCJzZXJ2aWNlcyIsImNhblRvZ2dsZVN0YXRlIiwic3RhdGVPYmoiLCJzdGF0ZSIsImNvbXB1dGVEb21haW4iLCJlbnRpdHlJZCIsInN1YnN0ciIsImluZGV4T2YiLCJjb21wdXRlU3RhdGVEb21haW4iLCJlbnRpdHlfaWQiLCJnZXRHcm91cEVudGl0aWVzIiwiZW50aXRpZXMiLCJncm91cCIsInJlc3VsdCIsImVudGl0eSIsImdldFZpZXdFbnRpdGllcyIsInZpZXciLCJ2aWV3RW50aXRpZXMiLCJoaWRkZW4iLCJncm91cEVudGl0aWVzIiwiZ3JFbnRpdHlJZCIsImdyRW50aXR5Iiwic3RhdGVDYXJkVHlwZSIsImluY2x1ZGVzIiwiY29udHJvbCIsInN1cHBvcnRzRmVhdHVyZSIsImZlYXR1cmUiLCJzdXBwb3J0ZWRfZmVhdHVyZXMiLCJoYXNzQXR0cmlidXRlVXRpbCIsIkRPTUFJTl9ERVZJQ0VfQ0xBU1MiLCJiaW5hcnlfc2Vuc29yIiwiY292ZXIiLCJzZW5zb3IiLCJVTktOT1dOX1RZUEUiLCJBRERfVFlQRSIsIlRZUEVfVE9fVEFHIiwic3RyaW5nIiwianNvbiIsImljb24iLCJib29sZWFuIiwiYXJyYXkiLCJMT0dJQ19TVEFURV9BVFRSSUJVVEVTIiwiZW50aXR5X3BpY3R1cmUiLCJ1bmRlZmluZWQiLCJmcmllbmRseV9uYW1lIiwidHlwZSIsImRlc2NyaXB0aW9uIiwiZW11bGF0ZWRfaHVlIiwiZG9tYWlucyIsImVtdWxhdGVkX2h1ZV9uYW1lIiwiaGFhc2thX2hpZGRlbiIsImhhYXNrYV9uYW1lIiwiaG9tZWJyaWRnZV9oaWRkZW4iLCJob21lYnJpZGdlX25hbWUiLCJhdHRyaWJ1dGlvbiIsImN1c3RvbV91aV9tb3JlX2luZm8iLCJjdXN0b21fdWlfc3RhdGVfY2FyZCIsImRldmljZV9jbGFzcyIsIm9wdGlvbnMiLCJhc3N1bWVkX3N0YXRlIiwiaW5pdGlhbF9zdGF0ZSIsInVuaXRfb2ZfbWVhc3VyZW1lbnQiLCJKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5IiwicHJvcCIsIkxpdGVyYWxTdHJpbmciLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwidG9TdHJpbmciLCJsaXRlcmFsVmFsdWUiLCJFcnJvciIsImh0bWxWYWx1ZSIsIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJodG1sIiwic3RyaW5ncyIsInZhbHVlcyIsInRlbXBsYXRlIiwicmVkdWNlIiwiYWNjIiwidiIsImlkeCIsImh0bWxMaXRlcmFsIiwiQ3VpQmFzZUVsZW1lbnQiLCJQb2x5bWVyIiwiRWxlbWVudCIsInByb3BlcnRpZXMiLCJpbkRpYWxvZyIsIkJvb2xlYW4iLCJjb250cm9sRWxlbWVudCIsIlN0cmluZyIsImV4dHJhIiwiQXJyYXkiLCJjb21wdXRlZCIsImNvbXB1dGVFeHRyYSIsImV4dHJhcyIsImV4dHJhX2RhdGFfdGVtcGxhdGUiLCJpc0FycmF5IiwibWFwIiwiY3VzdG9tVUkiLCJjb21wdXRlVGVtcGxhdGUiLCJzdGF0ZXMiLCJmaWx0ZXIiLCJzaG93TGFzdENoYW5nZWQiLCJsZW5ndGgiLCJzaG93X2xhc3RfY2hhbmdlZCIsImhhc0V4dHJhIiwiRHluYW1pY0VsZW1lbnQiLCJlbGVtZW50TmFtZSIsIm9ic2VydmVycyIsIm9ic2VydmVyRnVuYyIsInRvVXBwZXJDYXNlIiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLCJ3aGVuRGVmaW5lZCIsInRoZW4iLCJEeW5hbWljV2l0aEV4dHJhIiwiZ2V0IiwiZXh0cmFPYmoiLCJfYXR0YWNoZWQiLCJleHRyYU9ialZpc2libGUiLCJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiX2lzQXR0YWNoZWQiLCJhdHRhY2hlZCIsImV4dHJhX2JhZGdlIiwiZXh0cmFCYWRnZXMiLCJleHRyYUJhZGdlIiwibWF5YmVDaGFuZ2VPYmplY3QiLCJhdHRyaWJ1dGUiLCJ1bml0IiwiYmxhY2tsaXN0IiwiYmxhY2tsaXN0X3N0YXRlcyIsInNvbWUiLCJSZWdFeHAiLCJ0ZXN0IiwiX2VudGl0eURpc3BsYXkiLCJjb21wdXRlRXh0cmFWaXNpYmxlIiwiZXh0cmFDbGFzcyIsIl9zaG93Q29udHJvbCIsImhpZGVfY29udHJvbCIsImNvbXB1dGVTdGF0ZURpc3BsYXkiLCJoYUxvY2FsaXplIiwibG9jYWxpemUiLCJpc0NvbmZpcm1Db250cm9scyIsImNvbmZpcm1fY29udHJvbHMiLCJjb25maXJtX2NvbnRyb2xzX3Nob3dfbG9jayIsImNsaWNrSGFuZGxlciIsImUiLCJzdHlsZSIsInBvaW50ZXJFdmVudHMiLCJsb2NrIiwib3BhY2l0eSIsInNldFRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJhcHBseVRoZW1lcyIsImV4dHJhRG9tQ2hhbmdlZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtIiwiSGFDb25maWdDdXN0b21VaSIsImlzV2lkZSIsIm5hbWUiLCJvYnNlcnZlciIsInJlYWR5IiwiZ2V0TmFtZSIsIm5hbWVDaGFuZ2VkIiwic2V0TmFtZSIsIl9iYWNrSGFuZGxlciIsImhpc3RvcnkiLCJiYWNrIiwiZmlyZSIsIkhhVGhlbWVkU2xpZGVyIiwiZGlzYWJsZU9mZldoZW5NaW4iLCJfY29tcHV0ZUF0dHJpYnV0ZSIsImNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJtaW4iLCJOdW1iZXIiLCJtYXgiLCJwaW4iLCJpc09uIiwibm90aWZ5IiwiX3RoZW1lZE1pbiIsIl9lbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQiLCJhdHRyIiwiZGVmIiwiY29tcHV0ZUNsYXNzIiwidGhlbWVkTWluIiwidmFsdWVDaGFuZ2VkIiwiZXYiLCJ0YXJnZXQiLCJTSE9XX0xBU1RfQ0hBTkdFRF9CTEFDS0xJU1RFRF9DQVJEUyIsIkRPTUFJTl9UT19TTElERVJfU1VQUE9SVCIsImxpZ2h0IiwiY2xpbWF0ZSIsIlRZUEVfVE9fQ09OVFJPTCIsInRvZ2dsZSIsImRpc3BsYXkiLCJTdGF0ZUNhcmRDdXN0b21VaSIsImNvbnRhaW5lciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiX2NvbnRhaW5lciIsInNldFByb3BlcnR5IiwiaW5wdXRDaGFuZ2VkIiwibWFyZ2luIiwicGFkZGluZyIsImJhZGdlTW9kZSIsImlkIiwiY29uc29sZSIsIndhcm4iLCJiYWRnZXNfbGlzdCIsInB1c2giLCJwYXJhbXMiLCJ3aWR0aCIsImZvbnRTaXplIiwiY2xlYW5CYWRnZVN0eWxlIiwibW9kaWZpZWRPYmoiLCJ0aGVtZVRhcmdldCIsIm1heWJlSGlkZUVudGl0eSIsInNsaWRlckVsaWdpYmxlXyIsIm9iaiIsInN0YXRlX2NhcmRfbW9kZSIsInJlZ3VsYXJNb2RlXyIsIm9yaWdpbmFsU3RhdGVDYXJkVHlwZSIsImN1c3RvbVN0YXRlQ2FyZFR5cGUiLCJzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlIiwic3RhdGVfY2FyZF9jdXN0b21fdWlfc2Vjb25kYXJ5Iiwic2VydmljZU1pbiIsInNlcnZpY2VNYXgiLCJ2YWx1ZU5hbWUiLCJzZXRWYWx1ZU5hbWUiLCJuYW1lT24iLCJtaW5fdGVtcCIsIm1heF90ZW1wIiwiY29udHJvbF9lbGVtZW50IiwiU3RhdGVDYXJkV2l0aFNsaWRlciIsInNsaWRlclZhbHVlIiwibW9kZSIsInN0cmV0Y2hTbGlkZXIiLCJicmVha1NsaWRlciIsImhpZGVTbGlkZXIiLCJsaW5lVG9vTG9uZyIsIm1pbkxpbmVCcmVhayIsIm1heExpbmVCcmVhayIsInNob3dTbGlkZXIiLCJfb25Jcm9uUmVzaXplIiwiYmluZCIsIl9pc0Nvbm5lY3RlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfd2FpdEZvckxheW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfc2V0TW9kZSIsIl9mcmFtZUlkIiwicmVhZHlUb0NvbXB1dGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwcmV2QnJlYWtTbGlkZXIiLCJwcmV2SGlkZVNsaWRlciIsIiQiLCJjb250YWluZXJXaWR0aCIsImNsaWVudFdpZHRoIiwiY29udGFpbmVySGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwic3RhdGVIZWlnaHQiLCJfY29tcHV0ZVdyYXBDbGFzcyIsIl9zaG93U2xpZGVyIiwic2xpZGVyQ2hhbmdlZCIsInBhcnNlSW50IiwicGFyYW0iLCJpc05hTiIsInBhdGgiLCJjb21wb3NlZFBhdGgiLCJjYWxsU2VydmljZSIsInN0YXRlT2JqQ2hhbmdlZCIsInN0cmV0Y2hfc2xpZGVyIiwiU3RhdGVDYXJkV2l0aG91dFNsaWRlciIsInN1cGVyQ2xhc3MiLCJFdmVudHNNaXhpbiIsImRldGFpbCIsImV2ZW50IiwiRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNvbXBvc2VkIiwibm9kZSIsImRpc3BhdGNoRXZlbnQiLCJTVVBQT1JURURfU0xJREVSX01PREVTIiwiY3VzdG9tVWlBdHRyaWJ1dGVzIiwiZGV2aWNlIiwidGVtcGxhdGVzIiwiX3N0YXRlRGlzcGxheSIsImNvbmNhdCIsInNsaWRlcl90aGVtZSIsImhpZGVfaW5fZGVmYXVsdF92aWV3IiwiaWNvbl9jb2xvciIsImRvbUhvc3QiLCJnZXRSb290Tm9kZSIsIkRvY3VtZW50RnJhZ21lbnQiLCJob3N0IiwibGlnaHRPclNoYWRvdyIsInNlbGVjdG9yIiwic2hhZG93Um9vdCIsImdldEVsZW1lbnRIaWVyYXJjaHkiLCJoaWVyYXJjaHkiLCJzaGlmdCIsImdldENvbnRleHQiLCJfY29udGV4dCIsImdyb3VwRW50aXR5IiwicmV2ZXJzZSIsImZpbmRNYXRjaCIsImZpbmQiLCJvcHRpb24iLCJtYXRjaCIsIm1heWJlQ2hhbmdlT2JqZWN0QnlEZXZpY2UiLCJhcHBseUF0dHJpYnV0ZXMiLCJtYXliZUNoYW5nZU9iamVjdEJ5R3JvdXAiLCJjb250ZXh0IiwiYyIsIl9zZXRLZWVwIiwiX2N1aV9rZWVwIiwibWF5YmVBcHBseVRlbXBsYXRlQXR0cmlidXRlcyIsIm5ld0F0dHJpYnV0ZXMiLCJoYXNHbG9iYWwiLCJoYXNDaGFuZ2VzIiwidW50ZW1wbGF0ZWRfYXR0cmlidXRlcyIsInVudGVtcGxhdGVkX3N0YXRlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW50ZW1wbGF0ZWRfc3RhdGVEaXNwbGF5IiwibWF5YmVBcHBseVRlbXBsYXRlcyIsIm5ld1Jlc3VsdCIsImNoZWNrQXR0cmlidXRlcyIsImxhc3RfY2hhbmdlZCIsImFsbG93SGlkZGVuIiwiZml4R3JvdXBUaXRsZXMiLCJob21lQXNzaXN0YW50TWFpbiIsImhhQ2FyZHMiLCJtYWluIiwiY2FyZHMiLCJjYXJkIiwibmFtZUVsZW0iLCJ0ZXh0Q29udGVudCIsImNvbnRyb2xDb2x1bW5zIiwiY29sdW1ucyIsInBhcnRpYWxDYXJkcyIsImYiLCJoYW5kbGVXaW5kb3dDaGFuZ2UiLCJfdXBkYXRlQ29sdW1ucyIsIm1xbHMiLCJtcWwiLCJyZW1vdmVMaXN0ZW5lciIsIm1hdGNoTWVkaWEiLCJhZGRMaXN0ZW5lciIsInVzZUN1c3RvbWl6ZXIiLCJjdXN0b21pemVyIiwiaGlkZV9hdHRyaWJ1dGVzIiwidXBkYXRlQ29uZmlnUGFuZWwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwic3RhcnRzV2l0aCIsImhhUGFuZWxDb25maWciLCJoYUNvbmZpZ05hdmlnYXRpb24iLCJjdWlQYXRjaCIsIl9vcmlnaW5hbENvbXB1dGVMb2FkZWQiLCJfY29tcHV0ZUxvYWRlZCIsIl9vcmlnaW5hbENvbXB1dGVDYXB0aW9uIiwiX2NvbXB1dGVDYXB0aW9uIiwiX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uIiwiX2NvbXB1dGVEZXNjcmlwdGlvbiIsInBhZ2UiLCJwYWdlcyIsImNvbmYiLCJjYXB0aW9uIiwibG9hZGVkIiwiZ2V0SGFDb25maWdDdXN0b21VaSIsImhhQ29uZmlnQ3VzdG9tVWkiLCJpcm9uUGFnZXMiLCJsYXN0RWxlbWVudENoaWxkIiwic2VsZWN0IiwidmlzaWJsZSIsInJvdXRlck9wdGlvbnMiLCJyb3V0ZXMiLCJjdXN0b211aSIsInRhZyIsImxvYWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInVwZGF0ZSIsIk1hcCIsImluc3RhbGxTdGF0ZXNIb29rIiwiaG9tZUFzc2lzdGFudCIsIl91cGRhdGVIYXNzIiwib3JpZ2luYWxVcGRhdGUiLCJuZXdFbnRpdHkiLCJfdGhlbWVXYWl0ZXJzIiwid2FpdGVyIiwic3RhdGVDaGFuZ2VkIiwiaW5zdGFsbFBhcnRpYWxDYXJkcyIsIl9kZWZhdWx0Vmlld0ZpbHRlciIsImV4Y2x1ZGVzIiwiZXhjbHVkZUVudGl0eUlkIiwiaW5zdGFsbEFjdGlvbk5hbWUiLCJrbGFzcyIsImRlZmluZVByb3BlcnR5IiwiY3VzdG9tTG9jYWxpemUiLCJhY3Rpb25fbmFtZSIsIl9fZGF0YSIsInNldCIsImluc3RhbGxIYVN0YXRlTGFiZWxCYWRnZSIsImhhU3RhdGVMYWJlbEJhZGdlIiwic3RhcnRJbnRlcnZhbCIsImluc3RhbGxTdGF0ZUJhZGdlIiwic3RhdGVCYWRnZSIsIl91cGRhdGVJY29uQXBwZWFyYW5jZSIsIm9yaWdpbmFsVXBkYXRlSWNvbkFwcGVhcmFuY2UiLCJjdXN0b21VcGRhdGVJY29uQXBwZWFyYW5jZSIsImJhY2tncm91bmRJbWFnZSIsImNvbG9yIiwidXBkYXRlZCIsIm9yaWdpbmFsVXBkYXRlZCIsImN1c3RvbVVwZGF0ZWQiLCJjaGFuZ2VkUHJvcHMiLCJoYXMiLCJfaWNvbiIsImluc3RhbGxIYUF0dHJpYnV0ZXMiLCJoYUF0dHJpYnV0ZXMiLCJjb21wdXRlRmlsdGVyc0FycmF5IiwiY3VzdG9tQ29tcHV0ZUZpbHRlcnNBcnJheSIsImV4dHJhRmlsdGVycyIsInNwbGl0IiwiaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSIsImhhRm9ybUN1c3RvbWl6ZSIsImhhRm9ybUN1c3RvbWl6ZUluaXREb25lIiwiX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUiLCJjdXN0b21Db21wdXRlU2luZ2xlQXR0cmlidXRlIiwic2Vjb25kYXJ5IiwiY29uZmlnIiwiX2luaXRPcGVuT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5ld0F0dHJpYnV0ZXNPcHRpb25zIiwiY3VzdG9tZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMiLCJsb2NhbEF0dHJpYnV0ZXMiLCJnbG9iYWxBdHRyaWJ1dGVzIiwiZXhpc3RpbmdBdHRyaWJ1dGVzIiwia25vd25LZXlzIiwiZmlsdGVyRnJvbUF0dHJpYnV0ZXMiLCJzb3J0IiwiaW5zdGFsbENsYXNzSG9va3MiLCJjbGFzc0luaXREb25lIiwiaW5pdCIsImluaXREb25lIiwicnVuSG9va3MiLCJsb2ciLCJDVVNUT01fVUlfTElTVCIsInZlcnNpb24iLCJ1cmwiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwic2V0SXRlbSIsImZ1bmN0aW9uQm9keSIsImZ1bmMiLCJGdW5jdGlvbiIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtZXNz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RDlDLEVBQ3VERixZQUR2RCxDQUFiO0FBRUE7O0FBQ0EsYUFBT0MsSUFBSSxDQUFDL2MsSUFBRCxFQUFPYSxRQUFQLEVBQWlCRyxNQUFqQixFQUF5QjVCLFVBQXpCLEVBQXFDOEksU0FBckMsRUFBZ0Q3SCxLQUFoRCxDQUFYO0FBQ0QsS0FORCxDQU1FLE9BQU9nSixDQUFQLEVBQVU7QUFDVjtBQUNBLFVBQUtBLENBQUMsWUFBWTRULFdBQWQsSUFBOEI1VCxDQUFDLFlBQVk2VCxjQUEvQyxFQUErRDtBQUM3RGhRLGVBQU8sQ0FBQ0MsSUFBUixDQUFjLEdBQUU5RCxDQUFDLENBQUNhLElBQUssS0FBSWIsQ0FBQyxDQUFDOFQsT0FBUSxnQkFBZUwsWUFBYSxFQUFqRTtBQUNBLGVBQU8sSUFBUDtBQUNEO0FBQ0Q7OztBQUNBLFlBQU16VCxDQUFOO0FBQ0Q7QUFDRjs7QUEvbkJrQyxDQUFyQztBQWlvQkE5SyxNQUFNLENBQUM2SCxRQUFQLENBQWdCZ1csSUFBaEIsRzs7Ozs7Ozs7Ozs7OztBQ3pvQkEsK0RBQWUsVUFBZixFIiwiZmlsZSI6InNjcmlwdHMtZGJnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJ5cG9pbnRzL3NjcmlwdHMuanNcIik7XG4iLCIvKiogQ29uc3RhbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGZyb250ZW5kLiAqL1xuXG4vLyBDb25zdGFudHMgc2hvdWxkIGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBieSBuYW1lLlxuLy8gQXJyYXlzIHdpdGggdmFsdWVzIHNob3VsZCBiZSBhbHBoYWJldGljYWxseSBzb3J0ZWQgaWYgb3JkZXIgZG9lc24ndCBtYXR0ZXIuXG4vLyBFYWNoIGNvbnN0YW50IHNob3VsZCBoYXZlIGEgZGVzY3JpcHRpb24gd2hhdCBpdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvci5cblxuLyoqIEljb24gdG8gdXNlIHdoZW4gbm8gaWNvbiBzcGVjaWZpZWQgZm9yIGRvbWFpbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RPTUFJTl9JQ09OID0gXCJoYXNzOmJvb2ttYXJrXCI7XG5cbi8qKiBQYW5lbCB0byBzaG93IHdoZW4gbm8gcGFuZWwgaXMgcGlja2VkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFORUwgPSBcInN0YXRlc1wiO1xuXG4vKiogRG9tYWlucyB0aGF0IGhhdmUgYSBzdGF0ZSBjYXJkLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfV0lUSF9DQVJEID0gW1xuICBcImNsaW1hdGVcIixcbiAgXCJjb3ZlclwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImlucHV0X3NlbGVjdFwiLFxuICBcImlucHV0X251bWJlclwiLFxuICBcImlucHV0X3RleHRcIixcbiAgXCJsb2NrXCIsXG4gIFwibWVkaWFfcGxheWVyXCIsXG4gIFwic2NlbmVcIixcbiAgXCJzY3JpcHRcIixcbiAgXCJ0aW1lclwiLFxuICBcInZhY3V1bVwiLFxuICBcIndhdGVyX2hlYXRlclwiLFxuICBcIndlYmxpbmtcIixcbl07XG5cbi8qKiBEb21haW5zIHdpdGggc2VwYXJhdGUgbW9yZSBpbmZvIGRpYWxvZy4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX1dJVEhfTU9SRV9JTkZPID0gW1xuICBcImFsYXJtX2NvbnRyb2xfcGFuZWxcIixcbiAgXCJhdXRvbWF0aW9uXCIsXG4gIFwiY2FtZXJhXCIsXG4gIFwiY2xpbWF0ZVwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImNvdmVyXCIsXG4gIFwiZmFuXCIsXG4gIFwiZ3JvdXBcIixcbiAgXCJoaXN0b3J5X2dyYXBoXCIsXG4gIFwiaW5wdXRfZGF0ZXRpbWVcIixcbiAgXCJsaWdodFwiLFxuICBcImxvY2tcIixcbiAgXCJtZWRpYV9wbGF5ZXJcIixcbiAgXCJzY3JpcHRcIixcbiAgXCJzdW5cIixcbiAgXCJ1cGRhdGVyXCIsXG4gIFwidmFjdXVtXCIsXG4gIFwid2F0ZXJfaGVhdGVyXCIsXG4gIFwid2VhdGhlclwiLFxuXTtcblxuLyoqIERvbWFpbnMgdGhhdCBzaG93IG5vIG1vcmUgaW5mbyBkaWFsb2cuICovXG5leHBvcnQgY29uc3QgRE9NQUlOU19ISURFX01PUkVfSU5GTyA9IFtcbiAgXCJpbnB1dF9udW1iZXJcIixcbiAgXCJpbnB1dF9zZWxlY3RcIixcbiAgXCJpbnB1dF90ZXh0XCIsXG4gIFwic2NlbmVcIixcbiAgXCJ3ZWJsaW5rXCIsXG5dO1xuXG4vKiogRG9tYWlucyB0aGF0IHNob3VsZCBoYXZlIHRoZSBoaXN0b3J5IGhpZGRlbiBpbiB0aGUgbW9yZSBpbmZvIGRpYWxvZy4gKi9cbmV4cG9ydCBjb25zdCBET01BSU5TX01PUkVfSU5GT19OT19ISVNUT1JZID0gW1xuICBcImNhbWVyYVwiLFxuICBcImNvbmZpZ3VyYXRvclwiLFxuICBcImhpc3RvcnlfZ3JhcGhcIixcbiAgXCJzY2VuZVwiLFxuXTtcblxuLyoqIFN0YXRlcyB0aGF0IHdlIGNvbnNpZGVyIFwib2ZmXCIuICovXG5leHBvcnQgY29uc3QgU1RBVEVTX09GRiA9IFtcImNsb3NlZFwiLCBcImxvY2tlZFwiLCBcIm9mZlwiXTtcblxuLyoqIERvbWFpbnMgd2hlcmUgd2UgYWxsb3cgdG9nZ2xlIGluIExvdmVsYWNlLiAqL1xuZXhwb3J0IGNvbnN0IERPTUFJTlNfVE9HR0xFID0gbmV3IFNldChbXG4gIFwiZmFuXCIsXG4gIFwiaW5wdXRfYm9vbGVhblwiLFxuICBcImxpZ2h0XCIsXG4gIFwic3dpdGNoXCIsXG5dKTtcblxuLyoqIFRlbXBlcmF0dXJlIHVuaXRzLiAqL1xuZXhwb3J0IGNvbnN0IFVOSVRfQyA9IFwiwrBDXCI7XG5leHBvcnQgY29uc3QgVU5JVF9GID0gXCLCsEZcIjtcblxuLyoqIEVudGl0eSBJRCBvZiB0aGUgZGVmYXVsdCB2aWV3LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVklFV19FTlRJVFlfSUQgPSBcImdyb3VwLmRlZmF1bHRfdmlld1wiO1xuIiwiLyoqXG4gKiBBcHBseSBhIHRoZW1lIHRvIGFuIGVsZW1lbnQgYnkgc2V0dGluZyB0aGUgQ1NTIHZhcmlhYmxlcyBvbiBpdC5cbiAqXG4gKiBlbGVtZW50OiBFbGVtZW50IHRvIGFwcGx5IHRoZW1lIG9uLlxuICogdGhlbWVzOiBIQVNTIFRoZW1lIGluZm9ybWF0aW9uXG4gKiBsb2NhbFRoZW1lOiBzZWxlY3RlZCB0aGVtZS5cbiAqIHVwZGF0ZU1ldGE6IGJvb2xlYW4gaWYgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgdGhlbWUtY29sb3IgbWV0YSBlbGVtZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgZWxlbWVudCxcbiAgdGhlbWVzLFxuICBsb2NhbFRoZW1lLFxuICB1cGRhdGVNZXRhID0gZmFsc2Vcbikge1xuICBpZiAoIWVsZW1lbnQuX3RoZW1lcykge1xuICAgIGVsZW1lbnQuX3RoZW1lcyA9IHt9O1xuICB9XG4gIGxldCB0aGVtZU5hbWUgPSB0aGVtZXMuZGVmYXVsdF90aGVtZTtcbiAgaWYgKGxvY2FsVGhlbWUgPT09IFwiZGVmYXVsdFwiIHx8IChsb2NhbFRoZW1lICYmIHRoZW1lcy50aGVtZXNbbG9jYWxUaGVtZV0pKSB7XG4gICAgdGhlbWVOYW1lID0gbG9jYWxUaGVtZTtcbiAgfVxuICBjb25zdCBzdHlsZXMgPSBPYmplY3QuYXNzaWduKHt9LCBlbGVtZW50Ll90aGVtZXMpO1xuICBpZiAodGhlbWVOYW1lICE9PSBcImRlZmF1bHRcIikge1xuICAgIHZhciB0aGVtZSA9IHRoZW1lcy50aGVtZXNbdGhlbWVOYW1lXTtcbiAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB2YXIgcHJlZml4ZWRLZXkgPSBcIi0tXCIgKyBrZXk7XG4gICAgICBlbGVtZW50Ll90aGVtZXNbcHJlZml4ZWRLZXldID0gXCJcIjtcbiAgICAgIHN0eWxlc1twcmVmaXhlZEtleV0gPSB0aGVtZVtrZXldO1xuICAgIH0pO1xuICB9XG4gIGlmIChlbGVtZW50LnVwZGF0ZVN0eWxlcykge1xuICAgIGVsZW1lbnQudXBkYXRlU3R5bGVzKHN0eWxlcyk7XG4gIH0gZWxzZSBpZiAod2luZG93LlNoYWR5Q1NTKSB7XG4gICAgLy8gaW1wbGVtZW50IHVwZGF0ZVN0eWxlcygpIG1ldGhvZCBvZiBQb2xlbWVyIGVsZW1lbnRzXG4gICAgd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8gKGVsZW1lbnQpLCBzdHlsZXMpO1xuICB9XG5cbiAgaWYgKCF1cGRhdGVNZXRhKSByZXR1cm47XG5cbiAgY29uc3QgbWV0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9dGhlbWUtY29sb3JdXCIpO1xuICBpZiAobWV0YSkge1xuICAgIGlmICghbWV0YS5oYXNBdHRyaWJ1dGUoXCJkZWZhdWx0LWNvbnRlbnRcIikpIHtcbiAgICAgIG1ldGEuc2V0QXR0cmlidXRlKFwiZGVmYXVsdC1jb250ZW50XCIsIG1ldGEuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lQ29sb3IgPVxuICAgICAgc3R5bGVzW1wiLS1wcmltYXJ5LWNvbG9yXCJdIHx8IG1ldGEuZ2V0QXR0cmlidXRlKFwiZGVmYXVsdC1jb250ZW50XCIpO1xuICAgIG1ldGEuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCB0aGVtZUNvbG9yKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBVcGRhdGUgcm9vdCdzIGNoaWxkIGVsZW1lbnQgdG8gYmUgbmV3RWxlbWVudFRhZyByZXBsYWNpbmcgYW5vdGhlciBleGlzdGluZyBjaGlsZCBpZiBhbnkuXG4gKiBDb3B5IGF0dHJpYnV0ZXMgaW50byB0aGUgY2hpbGQgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHluYW1pY0NvbnRlbnRVcGRhdGVyKHJvb3QsIG5ld0VsZW1lbnRUYWcsIGF0dHJpYnV0ZXMpIHtcbiAgY29uc3Qgcm9vdEVsID0gcm9vdDtcbiAgbGV0IGN1c3RvbUVsO1xuXG4gIGlmIChyb290RWwubGFzdENoaWxkICYmIHJvb3RFbC5sYXN0Q2hpbGQudGFnTmFtZSA9PT0gbmV3RWxlbWVudFRhZykge1xuICAgIGN1c3RvbUVsID0gcm9vdEVsLmxhc3RDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocm9vdEVsLmxhc3RDaGlsZCkge1xuICAgICAgcm9vdEVsLnJlbW92ZUNoaWxkKHJvb3RFbC5sYXN0Q2hpbGQpO1xuICAgIH1cbiAgICAvLyBDcmVhdGluZyBhbiBlbGVtZW50IHdpdGggdXBwZXIgY2FzZSB3b3JrcyBmaW5lIGluIENocm9tZSwgYnV0IGluIEZGIGl0IGRvZXNuJ3QgaW1tZWRpYXRlbHlcbiAgICAvLyBiZWNvbWUgYSBkZWZpbmVkIEN1c3RvbSBFbGVtZW50LiBQb2x5bWVyIGRvZXMgdGhhdCBpbiBzb21lIGxhdGVyIHBhc3MuXG4gICAgY3VzdG9tRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5ld0VsZW1lbnRUYWcudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBpZiAoY3VzdG9tRWwuc2V0UHJvcGVydGllcykge1xuICAgIGN1c3RvbUVsLnNldFByb3BlcnRpZXMoYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbiB3YXNuJ3QgbG9hZGVkIHlldCAtIHNldFByb3BlcnRpZXMgd291bGQgYmVcbiAgICAvLyBtaXNzaW5nLCBidXQgbm8gaGFybSBpbiBzZXR0aW5nIGF0dHJpYnV0ZXMgb25lLWJ5LW9uZSB0aGVuLlxuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY3VzdG9tRWxba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjdXN0b21FbC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcm9vdEVsLmFwcGVuZENoaWxkKGN1c3RvbUVsKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSG9tZUFzc2lzdGFudCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYW5Ub2dnbGVEb21haW4oaGFzczogSG9tZUFzc2lzdGFudCwgZG9tYWluOiBzdHJpbmcpIHtcbiAgY29uc3Qgc2VydmljZXMgPSBoYXNzLnNlcnZpY2VzW2RvbWFpbl07XG4gIGlmICghc2VydmljZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZG9tYWluID09PSBcImxvY2tcIikge1xuICAgIHJldHVybiBcImxvY2tcIiBpbiBzZXJ2aWNlcztcbiAgfVxuICBpZiAoZG9tYWluID09PSBcImNvdmVyXCIpIHtcbiAgICByZXR1cm4gXCJvcGVuX2NvdmVyXCIgaW4gc2VydmljZXM7XG4gIH1cbiAgcmV0dXJuIFwidHVybl9vblwiIGluIHNlcnZpY2VzO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjYW5Ub2dnbGVEb21haW4gZnJvbSBcIi4vY2FuX3RvZ2dsZV9kb21haW5cIjtcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9zdGF0ZV9kb21haW5cIjtcbmltcG9ydCB7IEhvbWVBc3Npc3RhbnQgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHN1cHBvcnRzRmVhdHVyZSB9IGZyb20gXCIuL3N1cHBvcnRzLWZlYXR1cmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2FuVG9nZ2xlU3RhdGUoXG4gIGhhc3M6IEhvbWVBc3Npc3RhbnQsXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5XG4pIHtcbiAgY29uc3QgZG9tYWluID0gY29tcHV0ZVN0YXRlRG9tYWluKHN0YXRlT2JqKTtcbiAgaWYgKGRvbWFpbiA9PT0gXCJncm91cFwiKSB7XG4gICAgcmV0dXJuIHN0YXRlT2JqLnN0YXRlID09PSBcIm9uXCIgfHwgc3RhdGVPYmouc3RhdGUgPT09IFwib2ZmXCI7XG4gIH1cbiAgaWYgKGRvbWFpbiA9PT0gXCJjbGltYXRlXCIpIHtcbiAgICByZXR1cm4gc3VwcG9ydHNGZWF0dXJlKHN0YXRlT2JqLCA0MDk2KTtcbiAgfVxuXG4gIHJldHVybiBjYW5Ub2dnbGVEb21haW4oaGFzcywgZG9tYWluKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVEb21haW4oZW50aXR5SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnRpdHlJZC5zdWJzdHIoMCwgZW50aXR5SWQuaW5kZXhPZihcIi5cIikpO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0eSB9IGZyb20gXCJob21lLWFzc2lzdGFudC1qcy13ZWJzb2NrZXRcIjtcbmltcG9ydCBjb21wdXRlRG9tYWluIGZyb20gXCIuL2NvbXB1dGVfZG9tYWluXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iajogSGFzc0VudGl0eSkge1xuICByZXR1cm4gY29tcHV0ZURvbWFpbihzdGF0ZU9iai5lbnRpdHlfaWQpO1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0aWVzIH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IHsgR3JvdXBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R3JvdXBFbnRpdGllcyhcbiAgZW50aXRpZXM6IEhhc3NFbnRpdGllcyxcbiAgZ3JvdXA6IEdyb3VwRW50aXR5XG4pIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgZ3JvdXAuYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoZW50aXR5SWQpID0+IHtcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tlbnRpdHlJZF07XG5cbiAgICBpZiAoZW50aXR5KSB7XG4gICAgICByZXN1bHRbZW50aXR5LmVudGl0eV9pZF0gPSBlbnRpdHk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgSGFzc0VudGl0aWVzIH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNvbXB1dGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9kb21haW5cIjtcbmltcG9ydCBnZXRHcm91cEVudGl0aWVzIGZyb20gXCIuL2dldF9ncm91cF9lbnRpdGllc1wiO1xuaW1wb3J0IHsgR3JvdXBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuLy8gUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCBlbnRpdGllcyB0aGF0IHRoZSB2aWV3IHdpbGwgc2hvd1xuLy8gaW5jbHVkaW5nIGVtYmVkZGVkIGdyb3Vwcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdFbnRpdGllcyhcbiAgZW50aXRpZXM6IEhhc3NFbnRpdGllcyxcbiAgdmlldzogR3JvdXBFbnRpdHlcbik6IEhhc3NFbnRpdGllcyB7XG4gIGNvbnN0IHZpZXdFbnRpdGllcyA9IHt9O1xuXG4gIHZpZXcuYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoZW50aXR5SWQpID0+IHtcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tlbnRpdHlJZF07XG5cbiAgICBpZiAoZW50aXR5ICYmICFlbnRpdHkuYXR0cmlidXRlcy5oaWRkZW4pIHtcbiAgICAgIHZpZXdFbnRpdGllc1tlbnRpdHkuZW50aXR5X2lkXSA9IGVudGl0eTtcblxuICAgICAgaWYgKGNvbXB1dGVEb21haW4oZW50aXR5LmVudGl0eV9pZCkgPT09IFwiZ3JvdXBcIikge1xuICAgICAgICBjb25zdCBncm91cEVudGl0aWVzID0gZ2V0R3JvdXBFbnRpdGllcyhlbnRpdGllcywgZW50aXR5IGFzIEdyb3VwRW50aXR5KTtcblxuICAgICAgICBPYmplY3Qua2V5cyhncm91cEVudGl0aWVzKS5mb3JFYWNoKChnckVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JFbnRpdHkgPSBncm91cEVudGl0aWVzW2dyRW50aXR5SWRdO1xuXG4gICAgICAgICAgaWYgKCFnckVudGl0eS5hdHRyaWJ1dGVzLmhpZGRlbikge1xuICAgICAgICAgICAgdmlld0VudGl0aWVzW2dyRW50aXR5SWRdID0gZ3JFbnRpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2aWV3RW50aXRpZXM7XG59XG4iLCJpbXBvcnQgeyBIYXNzRW50aXR5IH0gZnJvbSBcImhvbWUtYXNzaXN0YW50LWpzLXdlYnNvY2tldFwiO1xuaW1wb3J0IGNhblRvZ2dsZVN0YXRlIGZyb20gXCIuL2Nhbl90b2dnbGVfc3RhdGVcIjtcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSBcIi4vY29tcHV0ZV9zdGF0ZV9kb21haW5cIjtcbmltcG9ydCB7IERPTUFJTlNfV0lUSF9DQVJEIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBIb21lQXNzaXN0YW50IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXRlQ2FyZFR5cGUoXG4gIGhhc3M6IEhvbWVBc3Npc3RhbnQsXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5XG4pIHtcbiAgaWYgKHN0YXRlT2JqLnN0YXRlID09PSBcInVuYXZhaWxhYmxlXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH1cblxuICBjb25zdCBkb21haW4gPSBjb21wdXRlU3RhdGVEb21haW4oc3RhdGVPYmopO1xuXG4gIGlmIChET01BSU5TX1dJVEhfQ0FSRC5pbmNsdWRlcyhkb21haW4pKSB7XG4gICAgcmV0dXJuIGRvbWFpbjtcbiAgfVxuICBpZiAoXG4gICAgY2FuVG9nZ2xlU3RhdGUoaGFzcywgc3RhdGVPYmopICYmXG4gICAgc3RhdGVPYmouYXR0cmlidXRlcy5jb250cm9sICE9PSBcImhpZGRlblwiXG4gICkge1xuICAgIHJldHVybiBcInRvZ2dsZVwiO1xuICB9XG4gIHJldHVybiBcImRpc3BsYXlcIjtcbn1cbiIsImltcG9ydCB7IEhhc3NFbnRpdHkgfSBmcm9tIFwiaG9tZS1hc3Npc3RhbnQtanMtd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0c0ZlYXR1cmUgPSAoXG4gIHN0YXRlT2JqOiBIYXNzRW50aXR5LFxuICBmZWF0dXJlOiBudW1iZXJcbik6IGJvb2xlYW4gPT4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICByZXR1cm4gKHN0YXRlT2JqLmF0dHJpYnV0ZXMuc3VwcG9ydGVkX2ZlYXR1cmVzISAmIGZlYXR1cmUpICE9PSAwO1xufTtcbiIsImNvbnN0IGhhc3NBdHRyaWJ1dGVVdGlsID0ge307XG5cbmhhc3NBdHRyaWJ1dGVVdGlsLkRPTUFJTl9ERVZJQ0VfQ0xBU1MgPSB7XG4gIGJpbmFyeV9zZW5zb3I6IFtcbiAgICBcImJhdHRlcnlcIixcbiAgICBcImNvbGRcIixcbiAgICBcImNvbm5lY3Rpdml0eVwiLFxuICAgIFwiZG9vclwiLFxuICAgIFwiZ2FyYWdlX2Rvb3JcIixcbiAgICBcImdhc1wiLFxuICAgIFwiaGVhdFwiLFxuICAgIFwibGlnaHRcIixcbiAgICBcImxvY2tcIixcbiAgICBcIm1vaXN0dXJlXCIsXG4gICAgXCJtb3Rpb25cIixcbiAgICBcIm1vdmluZ1wiLFxuICAgIFwib2NjdXBhbmN5XCIsXG4gICAgXCJvcGVuaW5nXCIsXG4gICAgXCJwbHVnXCIsXG4gICAgXCJwb3dlclwiLFxuICAgIFwicHJlc2VuY2VcIixcbiAgICBcInByb2JsZW1cIixcbiAgICBcInNhZmV0eVwiLFxuICAgIFwic21va2VcIixcbiAgICBcInNvdW5kXCIsXG4gICAgXCJ2aWJyYXRpb25cIixcbiAgICBcIndpbmRvd1wiLFxuICBdLFxuICBjb3ZlcjogW1wiZ2FyYWdlXCJdLFxuICBzZW5zb3I6IFtcImJhdHRlcnlcIiwgXCJodW1pZGl0eVwiLCBcImlsbHVtaW5hbmNlXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJwcmVzc3VyZVwiXSxcbn07XG5cbmhhc3NBdHRyaWJ1dGVVdGlsLlVOS05PV05fVFlQRSA9IFwianNvblwiO1xuaGFzc0F0dHJpYnV0ZVV0aWwuQUREX1RZUEUgPSBcImtleS12YWx1ZVwiO1xuXG5oYXNzQXR0cmlidXRlVXRpbC5UWVBFX1RPX1RBRyA9IHtcbiAgc3RyaW5nOiBcImhhLWN1c3RvbWl6ZS1zdHJpbmdcIixcbiAganNvbjogXCJoYS1jdXN0b21pemUtc3RyaW5nXCIsXG4gIGljb246IFwiaGEtY3VzdG9taXplLWljb25cIixcbiAgYm9vbGVhbjogXCJoYS1jdXN0b21pemUtYm9vbGVhblwiLFxuICBhcnJheTogXCJoYS1jdXN0b21pemUtYXJyYXlcIixcbiAgXCJrZXktdmFsdWVcIjogXCJoYS1jdXN0b21pemUta2V5LXZhbHVlXCIsXG59O1xuXG4vLyBBdHRyaWJ1dGVzIGhlcmUgc2VydmUgZHVhbCBwdXJwb3NlOlxuLy8gMSkgQW55IGtleSBvZiB0aGlzIG9iamVjdCB3b24ndCBiZSBzaG93biBpbiBtb3JlLWluZm8gd2luZG93LlxuLy8gMikgQW55IGtleSB3aGljaCBoYXMgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgd2lsbCBhcHBlYXIgaW4gY3VzdG9taXphdGlvblxuLy8gICAgY29uZmlnIGFjY29yZGluZyB0byBpdHMgdmFsdWUuXG5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTID0gaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUyB8fCB7XG4gIGVudGl0eV9waWN0dXJlOiB1bmRlZmluZWQsXG4gIGZyaWVuZGx5X25hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiTmFtZVwiIH0sXG4gIGljb246IHsgdHlwZTogXCJpY29uXCIgfSxcbiAgZW11bGF0ZWRfaHVlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZG9tYWluczogW1wiZW11bGF0ZWRfaHVlXCJdLFxuICB9LFxuICBlbXVsYXRlZF9odWVfbmFtZToge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZG9tYWluczogW1wiZW11bGF0ZWRfaHVlXCJdLFxuICB9LFxuICBoYWFza2FfaGlkZGVuOiB1bmRlZmluZWQsXG4gIGhhYXNrYV9uYW1lOiB1bmRlZmluZWQsXG4gIGhvbWVicmlkZ2VfaGlkZGVuOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gIGhvbWVicmlkZ2VfbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gIHN1cHBvcnRlZF9mZWF0dXJlczogdW5kZWZpbmVkLFxuICBhdHRyaWJ1dGlvbjogdW5kZWZpbmVkLFxuICBjdXN0b21fdWlfbW9yZV9pbmZvOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgY3VzdG9tX3VpX3N0YXRlX2NhcmQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICBkZXZpY2VfY2xhc3M6IHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgb3B0aW9uczogaGFzc0F0dHJpYnV0ZVV0aWwuRE9NQUlOX0RFVklDRV9DTEFTUyxcbiAgICBkZXNjcmlwdGlvbjogXCJEZXZpY2UgY2xhc3NcIixcbiAgICBkb21haW5zOiBbXCJiaW5hcnlfc2Vuc29yXCIsIFwiY292ZXJcIiwgXCJzZW5zb3JcIl0sXG4gIH0sXG4gIGhpZGRlbjogeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVzY3JpcHRpb246IFwiSGlkZSBmcm9tIFVJXCIgfSxcbiAgYXNzdW1lZF9zdGF0ZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRvbWFpbnM6IFtcbiAgICAgIFwic3dpdGNoXCIsXG4gICAgICBcImxpZ2h0XCIsXG4gICAgICBcImNvdmVyXCIsXG4gICAgICBcImNsaW1hdGVcIixcbiAgICAgIFwiZmFuXCIsXG4gICAgICBcImdyb3VwXCIsXG4gICAgICBcIndhdGVyX2hlYXRlclwiLFxuICAgIF0sXG4gIH0sXG4gIGluaXRpYWxfc3RhdGU6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRvbWFpbnM6IFtcImF1dG9tYXRpb25cIl0sXG4gIH0sXG4gIHVuaXRfb2ZfbWVhc3VyZW1lbnQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFzc0F0dHJpYnV0ZVV0aWw7XG4iLCIvKipcbkBsaWNlbnNlXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuXG53aW5kb3cuSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3ApIHsgcmV0dXJuIHByb3A7IH07XG4iLCIvKipcbkBsaWNlbnNlXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuaW1wb3J0ICcuL2Jvb3QuanMnO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIHN0YXRpYyBzdHJpbmcgdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmlsdGVyXG4gKiBzdHJpbmdzIGJ5IGFzc2V0aW5nIHRoYXQgdGhleSBoYXZlIGJlZW4gY3JlYXRlZCB2aWEgdGhpcyBjbGFzcy4gVGhlXG4gKiBgdmFsdWVgIHByb3BlcnR5IHJldHVybnMgdGhlIHN0cmluZyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICovXG5jbGFzcyBMaXRlcmFsU3RyaW5nIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy52YWx1ZSA9IHN0cmluZy50b1N0cmluZygpO1xuICB9XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IExpdGVyYWxTdHJpbmcgc3RyaW5nIHZhbHVlXG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgT2JqZWN0IHRvIHN0cmluZ2lmeSBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ30gSFRNTCBzdHJpbmdpZmllZCBmb3JtIG9mIGBvYmpgXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7IUxpdGVyYWxTdHJpbmd9ICovKHZhbHVlKS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke3ZhbHVlfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBPYmplY3QgdG8gc3RyaW5naWZ5IGludG8gSFRNTFxuICogQHJldHVybiB7c3RyaW5nfSBIVE1MIHN0cmluZ2lmaWVkIGZvcm0gb2YgYG9iamBcbiAqL1xuZnVuY3Rpb24gaHRtbFZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHshSFRNTFRlbXBsYXRlRWxlbWVudCB9ICovKHZhbHVlKS5pbm5lckhUTUw7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpdGVyYWxWYWx1ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbm9uLXRlbXBsYXRlIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbCBmdW5jdGlvbjogJHt2YWx1ZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgdGVtcGxhdGUgbGl0ZXJhbCB0YWcgdGhhdCBjcmVhdGVzIGFuIEhUTUwgPHRlbXBsYXRlPiBlbGVtZW50IGZyb20gdGhlXG4gKiBjb250ZW50cyBvZiB0aGUgc3RyaW5nLlxuICpcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB3cml0ZSBhIFBvbHltZXIgVGVtcGxhdGUgaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBUZW1wbGF0ZXMgY2FuIGJlIGNvbXBvc2VkIGJ5IGludGVycG9sYXRpbmcgYEhUTUxUZW1wbGF0ZUVsZW1lbnRgcyBpblxuICogZXhwcmVzc2lvbnMgaW4gdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgbGl0ZXJhbC4gVGhlIG5lc3RlZCB0ZW1wbGF0ZSdzXG4gKiBgaW5uZXJIVE1MYCBpcyBpbmNsdWRlZCBpbiB0aGUgY29udGFpbmluZyB0ZW1wbGF0ZS4gIFRoZSBvbmx5IG90aGVyXG4gKiB2YWx1ZXMgYWxsb3dlZCBpbiBleHByZXNzaW9ucyBhcmUgdGhvc2UgcmV0dXJuZWQgZnJvbSBgaHRtbExpdGVyYWxgXG4gKiB3aGljaCBlbnN1cmVzIG9ubHkgbGl0ZXJhbCB2YWx1ZXMgZnJvbSBKUyBzb3VyY2UgZXZlciByZWFjaCB0aGUgSFRNTCwgdG9cbiAqIGd1YXJkIGFnYWluc3QgWFNTIHJpc2tzLlxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGRpc2FsbG93ZWQgaW4gZXhwcmVzc2lvbnMgdG8gaGVscCBwcmV2ZW50IFhTU1xuICogYXR0YWNrczsgaG93ZXZlciwgYGh0bWxMaXRlcmFsYCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIHN0YXRpY1xuICogc3RyaW5nIHZhbHVlcyBpbnRvIHRlbXBsYXRlcy4gVGhpcyBpcyB1c2VmdWwgdG8gY29tcG9zZSBzdHJpbmdzIGludG9cbiAqIHBsYWNlcyB0aGF0IGRvIG5vdCBhY2NlcHQgaHRtbCwgbGlrZSB0aGUgY3NzIHRleHQgb2YgYSBgc3R5bGVgXG4gKiBlbGVtZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gKiAgICAgICByZXR1cm4gaHRtbGBcbiAqICAgICAgICAgPHN0eWxlPjpob3N0eyBjb250ZW50OlwiLi4uXCIgfTwvc3R5bGU+XG4gKiAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3dlZFwiPiR7dGhpcy5wYXJ0aWFsVGVtcGxhdGV9PC9kaXY+XG4gKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9XG4gKiAgICAgICBgO1xuICogICAgIH1cbiAqICAgICBzdGF0aWMgZ2V0IHBhcnRpYWxUZW1wbGF0ZSgpIHsgcmV0dXJuIGh0bWxgPHNwYW4+UGFydGlhbCE8L3NwYW4+YDsgfVxuICpcbiAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHJldHVybiB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IENvbnN0cnVjdGVkIEhUTUxUZW1wbGF0ZUVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWwgPSBmdW5jdGlvbiBodG1sKHN0cmluZ3MsIC4uLnZhbHVlcykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHYsIGlkeCkgPT5cbiAgICAgIGFjYyArIGh0bWxWYWx1ZSh2KSArIHN0cmluZ3NbaWR4ICsgMV0sIHN0cmluZ3NbMF0pO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG4vKipcbiAqIEFuIGh0bWwgbGl0ZXJhbCB0YWcgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBodG1sYCB0byBjb21wb3NlLlxuICogYSBsaXRlcmFsIHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICogICAgICAgcmV0dXJuIGh0bWxgXG4gKiAgICAgICAgIDxzdHlsZT5cbiAqICAgICAgICAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XG4gKiAgICAgICAgICAgJHt0aGlzLnN0eWxlVGVtcGxhdGUoKX1cbiAqICAgICAgICAgPC9zdHlsZT5cbiAqICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvd2VkXCI+JHtzdGF0aWNWYWx1ZX08L2Rpdj5cbiAqICAgICAgICAgJHtzdXBlci50ZW1wbGF0ZX1cbiAqICAgICAgIGA7XG4gKiAgICAgfVxuICogICAgIHN0YXRpYyBnZXQgc3R5bGVUZW1wbGF0ZSgpIHtcbiAqICAgICAgICByZXR1cm4gaHRtbExpdGVyYWxgLnNoYWRvd2VkIHsgYmFja2dyb3VuZDogZ3JheTsgfWA7XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHJldHVybiB7IUxpdGVyYWxTdHJpbmd9IENvbnN0cnVjdGVkIGxpdGVyYWwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sTGl0ZXJhbCA9IGZ1bmN0aW9uKHN0cmluZ3MsIC4uLnZhbHVlcykge1xuICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcodmFsdWVzLnJlZHVjZSgoYWNjLCB2LCBpZHgpID0+XG4gICAgICBhY2MgKyBsaXRlcmFsVmFsdWUodikgKyBzdHJpbmdzW2lkeCArIDFdLCBzdHJpbmdzWzBdKSk7XG59O1xuIiwiaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgQ3VpQmFzZUVsZW1lbnQgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcbiAgICAgIGluRGlhbG9nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZU9iajogT2JqZWN0LFxuICAgICAgY29udHJvbEVsZW1lbnQ6IFN0cmluZyxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaiknLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqKSB7XG4gICAgbGV0IGV4dHJhcyA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuZXh0cmFfZGF0YV90ZW1wbGF0ZTtcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXh0cmFzKSkge1xuICAgICAgICBleHRyYXMgPSBbZXh0cmFzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYXMubWFwKGV4dHJhID0+IHdpbmRvdy5jdXN0b21VSS5jb21wdXRlVGVtcGxhdGUoXG4gICAgICAgIGV4dHJhLFxuICAgICAgICBoYXNzLFxuICAgICAgICBoYXNzLnN0YXRlcyxcbiAgICAgICAgc3RhdGVPYmosXG4gICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMsXG4gICAgICAgIC8qIGF0dHJpYnV0ZT0gKi8gdW5kZWZpbmVkLFxuICAgICAgICBzdGF0ZU9iai5zdGF0ZSxcbiAgICAgICkpLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0ICE9PSBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpIHtcbiAgICBpZiAoaW5EaWFsb2cpIHJldHVybiB0cnVlO1xuICAgIGlmIChleHRyYS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISFzdGF0ZU9iai5hdHRyaWJ1dGVzLnNob3dfbGFzdF9jaGFuZ2VkO1xuICB9XG5cbiAgaGFzRXh0cmEoZXh0cmEpIHtcbiAgICByZXR1cm4gZXh0cmEubGVuZ3RoID4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQ3VpQmFzZUVsZW1lbnQ7XG4iLCJpbXBvcnQgZHluYW1pY0NvbnRlbnRVcGRhdGVyIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vZHluYW1pY19jb250ZW50X3VwZGF0ZXIuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIER5bmFtaWNFbGVtZW50IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNzOiBPYmplY3QsXG4gICAgICBzdGF0ZU9iajogT2JqZWN0LFxuICAgICAgZWxlbWVudE5hbWU6IFN0cmluZyxcblxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdvYnNlcnZlckZ1bmMoaGFzcywgc3RhdGVPYmosIGVsZW1lbnROYW1lLCBpbkRpYWxvZyknLFxuICAgIF07XG4gIH1cblxuICBvYnNlcnZlckZ1bmMoaGFzcywgc3RhdGVPYmosIGVsZW1lbnROYW1lLCBpbkRpYWxvZykge1xuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBlbGVtZW50TmFtZSA/IGVsZW1lbnROYW1lLnRvVXBwZXJDYXNlKCkgOiAnRElWJyxcbiAgICAgIHsgaGFzcywgc3RhdGVPYmosIGluRGlhbG9nIH0pO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2R5bmFtaWMtZWxlbWVudCcsIER5bmFtaWNFbGVtZW50KTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgYXBwbHlUaGVtZXNPbkVsZW1lbnQgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2RvbS9hcHBseV90aGVtZXNfb25fZWxlbWVudC5qcyc7XG5cbmltcG9ydCAnLi9keW5hbWljLWVsZW1lbnQuanMnO1xuaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbmN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdzdGF0ZS1jYXJkLWRpc3BsYXknKS50aGVuKCgpID0+IHtcbiAgLyoqXG4gICAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gICAqL1xuICBjbGFzcyBEeW5hbWljV2l0aEV4dHJhIGV4dGVuZHMgY3VzdG9tRWxlbWVudHMuZ2V0KCdzdGF0ZS1jYXJkLWRpc3BsYXknKSB7XG4gICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50IGlyb24tZmxleC1mYWN0b3JzXCI+PC9zdHlsZT5cbiAgICAgIDxzdHlsZT5cbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgICAuY29udHJvbC13cmFwcGVyIHtcbiAgICAgICAgICBtYXJnaW46IC00cHggLTE2cHggLTRweCAwO1xuICAgICAgICAgIHBhZGRpbmc6IDRweCAxNnB4O1xuICAgICAgICB9XG4gICAgICAgIGhhLXN0YXRlLWxhYmVsLWJhZGdlIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICAgIGR5bmFtaWMtZWxlbWVudCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgI292ZXJsYXkge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgICAjbG9jayB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICAgIG9wYWNpdHk6IDAuMztcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDdweDtcbiAgICAgICAgfVxuICAgICAgICAjbG9jay5oYS1jb3Zlci1jb250cm9scyB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1MnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICB9XG4gICAgICAgIC5leHRyYSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTE2cHg7XG4gICAgICAgICAgLS1oYS1sYWJlbC1iYWRnZS1zaXplOiAzNnB4O1xuICAgICAgICAgIC0taGEtbGFiZWwtYmFkZ2UtZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgfVxuICAgICAgICAuc3RhdGUge1xuICAgICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIH1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzJD0nW1tleHRyYUNsYXNzKGV4dHJhT2JqVmlzaWJsZSldXSBob3Jpem9udGFsIGxheW91dCc+XG4gICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tleHRyYU9ialZpc2libGVdXSc+XG4gICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20tcmVwZWF0J1xuICAgICAgICAgICAgICAgICAgICBpdGVtcz0nW1tleHRyYU9ial1dJ1xuICAgICAgICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSdleHRyYURvbUNoYW5nZWQnPlxuICAgICAgICAgICAgPGhhLXN0YXRlLWxhYmVsLWJhZGdlIGhhc3M9J1tbaGFzc11dJyBzdGF0ZT0nW1tpdGVtXV0nPjwvaGEtc3RhdGUtbGFiZWwtYmFkZ2U+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbW19zaG93Q29udHJvbChpbkRpYWxvZywgc3RhdGVPYmopXV0nPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tjb250cm9sRWxlbWVudF1dJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGR5bmFtaWMtZWxlbWVudFxuICAgICAgICAgICAgICAgICAgY2xhc3M9J2ZsZXgnXG4gICAgICAgICAgICAgICAgICBzdGF0ZS1vYmo9XCJbW3N0YXRlT2JqXV1cIlxuICAgICAgICAgICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LW5hbWU9J1tbY29udHJvbEVsZW1lbnRdXSc+XG4gICAgICAgICAgICAgIDwvZHluYW1pYy1lbGVtZW50PlxuICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbaXNDb25maXJtQ29udHJvbHMoc3RhdGVPYmopXV0nPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJvdmVybGF5XCIgb24tY2xpY2s9J2NsaWNrSGFuZGxlcic+XG4gICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbc3RhdGVPYmouYXR0cmlidXRlcy5jb25maXJtX2NvbnRyb2xzX3Nob3dfbG9ja11dJz5cbiAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpZD1cImxvY2tcIiBjbGFzcyQ9XCJbW2NvbnRyb2xFbGVtZW50XV1cIiBpY29uPVwibWRpOmxvY2stb3V0bGluZVwiPjwvaXJvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20taWYnIGlmPSdbWyFjb250cm9sRWxlbWVudF1dJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J3N0YXRlJz5bW2NvbXB1dGVTdGF0ZURpc3BsYXkoc3RhdGVPYmopXV08L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhhc3M6IE9iamVjdCxcbiAgICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IFN0cmluZyxcbiAgICAgICAgZXh0cmFPYmo6IHtcbiAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYShoYXNzLCBzdGF0ZU9iaiwgX2F0dGFjaGVkKScsXG4gICAgICAgIH0sXG4gICAgICAgIF9hdHRhY2hlZDogQm9vbGVhbixcbiAgICAgICAgZXh0cmFPYmpWaXNpYmxlOiB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBjb21wdXRlZDogJ2NvbXB1dGVFeHRyYVZpc2libGUoZXh0cmFPYmosIGluRGlhbG9nKScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUV4dHJhKGhhc3MsIHN0YXRlT2JqLCBhdHRhY2hlZCkge1xuICAgICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmV4dHJhX2JhZGdlIHx8ICFhdHRhY2hlZCkgcmV0dXJuIFtdO1xuICAgICAgbGV0IGV4dHJhQmFkZ2VzID0gc3RhdGVPYmouYXR0cmlidXRlcy5leHRyYV9iYWRnZTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShleHRyYUJhZGdlcykpIHtcbiAgICAgICAgZXh0cmFCYWRnZXMgPSBbZXh0cmFCYWRnZXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhQmFkZ2VzLm1hcCgoZXh0cmFCYWRnZSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKGV4dHJhQmFkZ2UuZW50aXR5X2lkICYmIGhhc3Muc3RhdGVzW2V4dHJhQmFkZ2UuZW50aXR5X2lkXSkge1xuICAgICAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICAgIHRoaXMsIGhhc3Muc3RhdGVzW2V4dHJhQmFkZ2UuZW50aXR5X2lkXSwgdGhpcy5pbkRpYWxvZyxcbiAgICAgICAgICAgIC8qIGFsbG93SGlkZGVuPSAqL2ZhbHNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmFCYWRnZS5hdHRyaWJ1dGUgJiZcbiAgICAgICAgICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzW2V4dHJhQmFkZ2UuYXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgc3RhdGU6IFN0cmluZyhzdGF0ZU9iai5hdHRyaWJ1dGVzW2V4dHJhQmFkZ2UuYXR0cmlidXRlXSksXG4gICAgICAgICAgICBlbnRpdHlfaWQ6ICdub25lLm5vbmUnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyB1bml0X29mX21lYXN1cmVtZW50OiBleHRyYUJhZGdlLnVuaXQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgbGV0IGJsYWNrbGlzdCA9IGV4dHJhQmFkZ2UuYmxhY2tsaXN0X3N0YXRlcztcbiAgICAgICAgaWYgKGJsYWNrbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGJsYWNrbGlzdCkpIHtcbiAgICAgICAgICAgIGJsYWNrbGlzdCA9IFtibGFja2xpc3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmxhY2tsaXN0LnNvbWUodiA9PiBSZWdFeHAodikudGVzdChyZXN1bHQuc3RhdGUudG9TdHJpbmcoKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Ll9lbnRpdHlEaXNwbGF5ID0gJyc7XG4gICAgICAgIHJlc3VsdC5hdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbih7fSwgeyBmcmllbmRseV9uYW1lOiAnJyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pLmZpbHRlcihleHRyYUJhZGdlID0+IGV4dHJhQmFkZ2UgIT0gbnVsbCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUV4dHJhVmlzaWJsZShleHRyYU9iaiwgaW5EaWFsb2cpIHtcbiAgICAgIGlmIChpbkRpYWxvZyB8fCAhZXh0cmFPYmopIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBleHRyYU9iai5sZW5ndGggIT09IDA7XG4gICAgfVxuXG4gICAgZXh0cmFDbGFzcyhleHRyYU9ialZpc2libGUpIHtcbiAgICAgIHJldHVybiBleHRyYU9ialZpc2libGUgPyAnZXh0cmEnIDogJyc7XG4gICAgfVxuXG4gICAgX3Nob3dDb250cm9sKGluRGlhbG9nLCBzdGF0ZU9iaikge1xuICAgICAgaWYgKGluRGlhbG9nKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiAhc3RhdGVPYmouYXR0cmlidXRlcy5oaWRlX2NvbnRyb2w7XG4gICAgfVxuXG4gICAgY29tcHV0ZVN0YXRlRGlzcGxheShzdGF0ZU9iaikge1xuICAgICAgLy8gaGFMb2NhbGl6ZSByZW1vdmVkIGluIDAuNjFcbiAgICAgIHJldHVybiBzdXBlci5jb21wdXRlU3RhdGVEaXNwbGF5KHRoaXMuaGFMb2NhbGl6ZSB8fCB0aGlzLmxvY2FsaXplLCBzdGF0ZU9iaik7XG4gICAgfVxuXG4gICAgaXNDb25maXJtQ29udHJvbHMoc3RhdGVPYmopIHtcbiAgICAgIHJldHVybiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbmZpcm1fY29udHJvbHMgfHxcbiAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLmNvbmZpcm1fY29udHJvbHNfc2hvd19sb2NrO1xuICAgIH1cblxuICAgIGNsaWNrSGFuZGxlcihlKSB7XG4gICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI292ZXJsYXknKS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgY29uc3QgbG9jayA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjbG9jaycpO1xuICAgICAgaWYgKGxvY2spIHtcbiAgICAgICAgbG9jay5pY29uID0gJ21kaTpsb2NrLW9wZW4tb3V0bGluZSc7XG4gICAgICAgIGxvY2suc3R5bGUub3BhY2l0eSA9ICcwLjEnO1xuICAgICAgfVxuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI292ZXJsYXknKS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJyc7XG4gICAgICAgIGlmIChsb2NrKSB7XG4gICAgICAgICAgbG9jay5pY29uID0gJ21kaTpsb2NrLW91dGxpbmUnO1xuICAgICAgICAgIGxvY2suc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9LCA1MDAwKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgYXBwbHlUaGVtZXMoaGFzcywgZWxlbWVudCwgc3RhdGVPYmopIHtcbiAgICAgIGNvbnN0IHRoZW1lTmFtZSA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMudGhlbWUgfHwgJ2RlZmF1bHQnO1xuICAgICAgYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gICAgICAgIGVsZW1lbnQsIGhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sIHRoZW1lTmFtZSk7XG4gICAgfVxuXG4gICAgZXh0cmFEb21DaGFuZ2VkKCkge1xuICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2hhLXN0YXRlLWxhYmVsLWJhZGdlJylcbiAgICAgICAgLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICB0aGlzLmFwcGx5VGhlbWVzKHRoaXMuaGFzcywgZWxlbSwgZWxlbS5zdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ2R5bmFtaWMtd2l0aC1leHRyYScsIER5bmFtaWNXaXRoRXh0cmEpO1xufSk7XG4iLCJpbXBvcnQgeyBodG1sIH0gZnJvbSAnQHBvbHltZXIvcG9seW1lci9saWIvdXRpbHMvaHRtbC10YWcuanMnO1xuaW1wb3J0IEV2ZW50c01peGluIGZyb20gJy4uL21peGlucy9ldmVudHMtbWl4aW4uanMnO1xuaW1wb3J0ICcuLi91dGlscy9ob29rcy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgSGFDb25maWdDdXN0b21VaSBleHRlbmRzIEV2ZW50c01peGluKFBvbHltZXIuRWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZSBpbmNsdWRlPVwiaGEtc3R5bGVcIj48L3N0eWxlPlxuICAgIDxhcHAtaGVhZGVyLWxheW91dCBoYXMtc2Nyb2xsaW5nLXJlZ2lvbj5cbiAgICAgIDxhcHAtaGVhZGVyIHNsb3Q9XCJoZWFkZXJcIiBmaXhlZD5cbiAgICAgICAgPGFwcC10b29sYmFyPlxuICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvblxuICAgICAgICAgICAgaWNvbj0naGFzczphcnJvdy1sZWZ0J1xuICAgICAgICAgICAgb24tY2xpY2s9J19iYWNrSGFuZGxlcidcbiAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj5cbiAgICAgICAgICA8ZGl2IG1haW4tdGl0bGU+Q3VzdG9tIFVJIHNldHRpbmdzPC9kaXY+XG4gICAgICAgIDwvYXBwLXRvb2xiYXI+XG4gICAgICA8L2FwcC1oZWFkZXI+XG5cbiAgICAgIDxoYS1jb25maWctc2VjdGlvbiBpcy13aWRlPSdbW2lzV2lkZV1dJz5cbiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0nRGV2aWNlIG5hbWUnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9J2NhcmQtY29udGVudCc+XG4gICAgICAgICAgICBTZXQgZGV2aWNlIG5hbWUgc28gdGhhdCB5b3UgY2FuIHJlZmVyZW5jZSBpdCBpbiBwZXItZGV2aWNlIHNldHRpbmdzXG4gICAgICAgICAgICA8cGFwZXItaW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9J05hbWUnXG4gICAgICAgICAgICAgIHZhbHVlPSd7e25hbWV9fSdcbiAgICAgICAgICAgID48L3BhcGVyLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3BhcGVyLWNhcmQ+XG4gICAgICA8L2hhLWNvbmZpZy1zZWN0aW9uPlxuICAgIDwvYXBwLWhlYWRlci1sYXlvdXQ+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNXaWRlOiBCb29sZWFuLFxuXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb2JzZXJ2ZXI6ICduYW1lQ2hhbmdlZCcsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZWFkeSgpIHtcbiAgICBzdXBlci5yZWFkeSgpO1xuICAgIHRoaXMubmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gIH1cblxuICBuYW1lQ2hhbmdlZChuYW1lKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLnNldE5hbWUobmFtZSk7XG4gIH1cblxuICBfYmFja0hhbmRsZXIoKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xuICAgIHRoaXMuZmlyZSgnbG9jYXRpb24tY2hhbmdlZCcpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2hhLWNvbmZpZy1jdXN0b20tdWknLCBIYUNvbmZpZ0N1c3RvbVVpKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgSGFUaGVtZWRTbGlkZXIgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgbWFyZ2luOiB2YXIoLS1oYS10aGVtZWQtc2xpZGVyLW1hcmdpbiwgaW5pdGlhbCk7XG4gICAgICB9XG4gICAgICAuZGlzYWJsZS1vZmYtd2hlbi1taW4ge1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6ICB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLmRpc2FibGUtb2ZmLXdoZW4tbWluLmlzLW9uIHtcbiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IpO1xuICAgICAgfVxuICAgICAgcGFwZXItc2xpZGVyIHtcbiAgICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICB3aWR0aDogdmFyKC0taGEtcGFwZXItc2xpZGVyLXdpZHRoLCAyMDBweCk7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cblxuICAgIDxwYXBlci1zbGlkZXJcbiAgICAgICAgIG1pbj0nW1tfdGhlbWVkTWluXV0nXG4gICAgICAgICBtYXg9J1tbX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIFwibWF4XCIsIG1heCldXSdcbiAgICAgICAgIHBpbj0nW1tfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJwaW5cIiwgcGluKV1dJ1xuICAgICAgICAgY2xhc3MkPSdbW2NvbXB1dGVDbGFzcyh0aGVtZSwgaXNPbiwgX3RoZW1lZE1pbildXScgdmFsdWU9J1tbdmFsdWVdXSdcbiAgICAgICAgIG9uLWNoYW5nZT0ndmFsdWVDaGFuZ2VkJz5cbiAgICA8L3BhcGVyLXNsaWRlcj5cbiAgICBgO1xuICB9XG5cbiAgcmVhZHkoKSB7XG4gICAgc3VwZXIucmVhZHkoKTtcbiAgICB0aGlzLmRpc2FibGVPZmZXaGVuTWluID0gIXRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhpcy50aGVtZSwgJ29mZl93aGVuX21pbicsICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKTtcbiAgICB0aGlzLmNvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhpcy50aGVtZSwgdGhpcy5kaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMCxcbiAgICAgIH0sXG4gICAgICBtYXg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICB2YWx1ZTogMTAwLFxuICAgICAgfSxcbiAgICAgIHBpbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaXNPbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICBub3RpZnk6IHRydWUsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVJlcG9ydFdoZW5Ob3RDaGFuZ2VkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG5cbiAgICAgIHRoZW1lOiBPYmplY3QsXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIG5vdGlmeTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBfdGhlbWVkTWluOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfY29tcHV0ZUF0dHJpYnV0ZSh0aGVtZSwgXCJtaW5cIiwgbWluKScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2NvbXB1dGVFbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQodGhlbWUsIGRpc2FibGVSZXBvcnRXaGVuTm90Q2hhbmdlZCknLFxuICAgIF07XG4gIH1cblxuICBjb21wdXRlRW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkKHRoZW1lLCBkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpIHtcbiAgICB0aGlzLl9lbmFibGVkVGhlbWVkUmVwb3J0V2hlbk5vdENoYW5nZWQgPSB0aGlzLl9jb21wdXRlQXR0cmlidXRlKFxuICAgICAgdGhlbWUsICdyZXBvcnRfd2hlbl9ub3RfY2hhbmdlZCcsICFkaXNhYmxlUmVwb3J0V2hlbk5vdENoYW5nZWQpO1xuICB9XG5cbiAgX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsIGF0dHIsIGRlZikge1xuICAgIGlmICh0aGVtZSkge1xuICAgICAgaWYgKGF0dHIgaW4gdGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoZW1lW2F0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmO1xuICB9XG5cbiAgY29tcHV0ZUNsYXNzKHRoZW1lLCBpc09uLCB0aGVtZWRNaW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgaWYgKGlzT24pIHtcbiAgICAgIHJlc3VsdCArPSAnaXMtb24gJztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbXB1dGVBdHRyaWJ1dGUodGhlbWUsICdvZmZfd2hlbl9taW4nLCAhdGhpcy5kaXNhYmxlT2ZmV2hlbk1pbikgfHwgdGhlbWVkTWluID09PSAwKSB7XG4gICAgICAvLyBJZiBvZmZXaGVuTWluIGlzIGVuYWJsZWQgZG9uJ3QgY3VzdG9taXplLlxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cmVzdWx0fWRpc2FibGUtb2ZmLXdoZW4tbWluYDtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZChldikge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZFRoZW1lZFJlcG9ydFdoZW5Ob3RDaGFuZ2VkICYmIHRoaXMudmFsdWUgPT09IGV2LnRhcmdldC52YWx1ZSkge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBldi50YXJnZXQudmFsdWU7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnaGEtdGhlbWVkLXNsaWRlcicsIEhhVGhlbWVkU2xpZGVyKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZHluYW1pY0NvbnRlbnRVcGRhdGVyIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9kb20vZHluYW1pY19jb250ZW50X3VwZGF0ZXIuanMnO1xuaW1wb3J0IHN0YXRlQ2FyZFR5cGUgZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9zdGF0ZV9jYXJkX3R5cGUudHMnO1xuXG5pbXBvcnQgJy4uL3V0aWxzL2hvb2tzLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGgtc2xpZGVyLmpzJztcbmltcG9ydCAnLi9zdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyLmpzJztcblxuY29uc3QgU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMgPSBbJ2NvbmZpZ3VyYXRvciddO1xuY29uc3QgRE9NQUlOX1RPX1NMSURFUl9TVVBQT1JUID0ge1xuICBsaWdodDogMSwgLy8gU1VQUE9SVF9CUklHSFRORVNTXG4gIGNvdmVyOiA0LCAvLyBTVVBQT1JUX1NFVF9QT1NJVElPTlxuICBjbGltYXRlOiAxLCAvLyBTVVBQT1JUX1RBUkdFVF9URU1QRVJBVFVSRVxufTtcbmNvbnN0IFRZUEVfVE9fQ09OVFJPTCA9IHtcbiAgdG9nZ2xlOiAnaGEtZW50aXR5LXRvZ2dsZScsXG4gIGRpc3BsYXk6ICcnLFxuICBjb3ZlcjogJ2hhLWNvdmVyLWNvbnRyb2xzJyxcbn07XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkQ3VzdG9tVWkgZXh0ZW5kcyBQb2x5bWVyLkVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc3M6IE9iamVjdCxcblxuICAgICAgaW5EaWFsb2c6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcblxuICAgICAgc3RhdGVPYmo6IE9iamVjdCxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKScsXG4gICAgXTtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKGNvbnRhaW5lci50YWdOYW1lID09PSAnRElWJyAmJlxuICAgICAgICAoY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSB8fCBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdjaGlsZC1jYXJkJykpKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICAgIC8vIFNpbmNlIHRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIGJhY2tncm91bmQgLSBubyBuZWVkIHRvIGNsZWFyIGl0LlxuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1wYXBlci1jYXJkLWJhY2tncm91bmQtY29sb3IsIGluaGVyaXQpJyk7XG5cbiAgICAgIC8vIFBvbHlmaWxsICd1cGRhdGVTdHlsZXMnLlxuICAgICAgaWYgKCFjb250YWluZXIudXBkYXRlU3R5bGVzKSB7XG4gICAgICAgIGNvbnRhaW5lci51cGRhdGVTdHlsZXMgPSAoc3R5bGVzKSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHN0eWxlc1trZXldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pbnB1dENoYW5nZWQodGhpcy5oYXNzLCB0aGlzLmluRGlhbG9nLCB0aGlzLnN0YXRlT2JqKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycsIHBhZGRpbmc6ICcnIH0pO1xuICAgICAgYXBwbHlUaGVtZXNPbkVsZW1lbnQoXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LCAnZGVmYXVsdCcpO1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIGJhZGdlTW9kZShoYXNzLCBzdGF0ZU9iaiwgZG9tYWluKSB7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgaWYgKGRvbWFpbiA9PT0gJ2dyb3VwJykge1xuICAgICAgc3RhdGVPYmouYXR0cmlidXRlcy5lbnRpdHlfaWQuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBoYXNzLnN0YXRlc1tpZF07XG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIElEICR7aWR9IGluIGdyb3VwICR7c3RhdGVPYmouZW50aXR5X2lkfWApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QgfHxcbiAgICAgICAgICAgIHN0YXRlT2JqLmF0dHJpYnV0ZXMuYmFkZ2VzX2xpc3QuaW5jbHVkZXMoc3RhdGUuZW50aXR5X2lkKSkge1xuICAgICAgICAgIHN0YXRlcy5wdXNoKHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdChcbiAgICAgICAgICAgIHRoaXMsIHN0YXRlLCBmYWxzZSAvKiBpbkRpYWxvZyAqLywgZmFsc2UgLyogYWxsb3dIaWRkZW4gKi8pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlcy5wdXNoKHN0YXRlT2JqKTtcbiAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9O1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc3RhdGUnKSkge1xuICAgICAgICAgIHBhcmFtcy5tYXJnaW4gPSAndmFyKC0taGEtYmFkZ2VzLWNhcmQtbWFyZ2luLCAwKSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZHluYW1pY0NvbnRlbnRVcGRhdGVyKFxuICAgICAgdGhpcyxcbiAgICAgICdIQS1CQURHRVMtQ0FSRCcsXG4gICAgICB7IGhhc3MsIHN0YXRlcyB9KTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIudXBkYXRlU3R5bGVzKHtcbiAgICAgICAgd2lkdGg6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC13aWR0aCwgaW5pdGlhbCknLFxuICAgICAgICAndGV4dC1hbGlnbic6ICd2YXIoLS1oYS1iYWRnZXMtY2FyZC10ZXh0LWFsaWduLCBpbml0aWFsKScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0Q2hpbGQuc3R5bGUuZm9udFNpemUgPSAnODUlJztcblxuICAgIC8vIFNpbmNlIHRoaXMgdmFyaWFibGUgb25seSBhZmZlY3RzIGJhZGdlcyBtb2RlIC0gbm8gbmVlZCB0byBjbGVhbiBpdCB1cC5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLWhhLXN0YXRlLWxhYmVsLWJhZGdlLW1hcmdpbi1ib3R0b20nLCAnMCcpO1xuICB9XG5cbiAgY2xlYW5CYWRnZVN0eWxlKCkge1xuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoe1xuICAgICAgICBkaXNwbGF5OiAnJyxcbiAgICAgICAgd2lkdGg6ICcnLFxuICAgICAgICAndGV4dC1hbGlnbic6ICcnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3R5bGVzKHsgZGlzcGxheTogJycsIG1hcmdpbjogJycgfSk7XG4gIH1cblxuICBhcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaikge1xuICAgIGxldCB0aGVtZVRhcmdldCA9IHRoaXM7XG4gICAgbGV0IHRoZW1lTmFtZSA9ICdkZWZhdWx0JztcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICB0aGVtZVRhcmdldCA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWUpIHtcbiAgICAgIHRoZW1lTmFtZSA9IG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMudGhlbWU7XG4gICAgfVxuICAgIGFwcGx5VGhlbWVzT25FbGVtZW50KFxuICAgICAgdGhlbWVUYXJnZXQsIGhhc3MudGhlbWVzIHx8IHsgZGVmYXVsdF90aGVtZTogJ2RlZmF1bHQnLCB0aGVtZXM6IHt9IH0sIHRoZW1lTmFtZSk7XG4gIH1cblxuICBtYXliZUhpZGVFbnRpdHkobW9kaWZpZWRPYmopIHtcbiAgICBpZiAoIW1vZGlmaWVkT2JqKSB7XG4gICAgICBpZiAodGhpcy5sYXN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcwJywgcGFkZGluZzogJzAnIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci51cGRhdGVTdHlsZXMoeyBtYXJnaW46ICcnLCBwYWRkaW5nOiAnJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgb2JqLCBpbkRpYWxvZykge1xuICAgIGlmIChpbkRpYWxvZykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBET01BSU5fVE9fU0xJREVSX1NVUFBPUlRbZG9tYWluXSAmJlxuICAgICAgKERPTUFJTl9UT19TTElERVJfU1VQUE9SVFtkb21haW5dICYgb2JqLmF0dHJpYnV0ZXMuc3VwcG9ydGVkX2ZlYXR1cmVzKSAmJlxuICAgICAgb2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlICYmIG9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSAhPT0gJ25vLXNsaWRlcic7XG4gIH1cblxuICBpbnB1dENoYW5nZWQoaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqKSB7XG4gICAgaWYgKCFzdGF0ZU9iaiB8fCAhaGFzcyB8fCAhdGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGRvbWFpbiA9IGNvbXB1dGVTdGF0ZURvbWFpbihzdGF0ZU9iaik7XG4gICAgY29uc3QgbW9kaWZpZWRPYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3QoXG4gICAgICB0aGlzLCBzdGF0ZU9iaiwgaW5EaWFsb2csIHRydWUgLyogYWxsb3dIaWRkZW4gKi8pO1xuXG4gICAgaWYgKHRoaXMubWF5YmVIaWRlRW50aXR5KG1vZGlmaWVkT2JqKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5hcHBseVRoZW1lcyhoYXNzLCBtb2RpZmllZE9iaik7XG5cbiAgICBpZiAoIWluRGlhbG9nICYmIG1vZGlmaWVkT2JqLmF0dHJpYnV0ZXMuc3RhdGVfY2FyZF9tb2RlID09PSAnYmFkZ2VzJykge1xuICAgICAgdGhpcy5iYWRnZU1vZGUoaGFzcywgbW9kaWZpZWRPYmosIGRvbWFpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVndWxhck1vZGVfKGhhc3MsIGluRGlhbG9nLCBtb2RpZmllZE9iaiwgZG9tYWluKTtcbiAgICB9XG4gIH1cblxuICByZWd1bGFyTW9kZV8oaGFzcywgaW5EaWFsb2csIHN0YXRlT2JqLCBkb21haW4pIHtcbiAgICB0aGlzLmNsZWFuQmFkZ2VTdHlsZSgpO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaGFzcyxcbiAgICAgIHN0YXRlT2JqLFxuICAgICAgaW5EaWFsb2csXG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbFN0YXRlQ2FyZFR5cGUgPSBzdGF0ZUNhcmRUeXBlKGhhc3MsIHN0YXRlT2JqKTtcbiAgICBsZXQgY3VzdG9tU3RhdGVDYXJkVHlwZTtcbiAgICBjb25zdCBzZWNvbmRhcnlTdGF0ZUNhcmRUeXBlID0gc3RhdGVPYmouYXR0cmlidXRlcy5zdGF0ZV9jYXJkX2N1c3RvbV91aV9zZWNvbmRhcnk7XG5cbiAgICBpZiAoZG9tYWluID09PSAnbGlnaHQnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1lbnRpdHktdG9nZ2xlJyxcbiAgICAgICAgc2VydmljZU1pbjogJ3R1cm5fb2ZmJyxcbiAgICAgICAgc2VydmljZU1heDogJ3R1cm5fb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdicmlnaHRuZXNzJyxcbiAgICAgICAgZG9tYWluLFxuICAgICAgfSk7XG4gICAgICBjdXN0b21TdGF0ZUNhcmRUeXBlID0gJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluID09PSAnY292ZXInICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jb3Zlci1jb250cm9scycsXG4gICAgICAgIG1heDogMTAwLFxuICAgICAgICBzZXJ2aWNlTWluOiAnY2xvc2VfY292ZXInLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X2NvdmVyX3Bvc2l0aW9uJyxcbiAgICAgICAgc2V0VmFsdWVOYW1lOiAncG9zaXRpb24nLFxuICAgICAgICB2YWx1ZU5hbWU6ICdjdXJyZW50X3Bvc2l0aW9uJyxcbiAgICAgICAgbmFtZU9uOiAnb3BlbicsXG4gICAgICAgIGRvbWFpbixcbiAgICAgIH0pO1xuICAgICAgY3VzdG9tU3RhdGVDYXJkVHlwZSA9ICdzdGF0ZS1jYXJkLXdpdGgtc2xpZGVyJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbiA9PT0gJ2NsaW1hdGUnICYmIHRoaXMuc2xpZGVyRWxpZ2libGVfKGRvbWFpbiwgc3RhdGVPYmosIGluRGlhbG9nKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6ICdoYS1jbGltYXRlLXN0YXRlJyxcbiAgICAgICAgbWluOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLm1pbl90ZW1wIHx8IC0xMDAsXG4gICAgICAgIG1heDogc3RhdGVPYmouYXR0cmlidXRlcy5tYXhfdGVtcCB8fCAyMDAsXG4gICAgICAgIHNlcnZpY2VNaW46ICdzZXRfdGVtcGVyYXR1cmUnLFxuICAgICAgICBzZXJ2aWNlTWF4OiAnc2V0X3RlbXBlcmF0dXJlJyxcbiAgICAgICAgdmFsdWVOYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICBuYW1lT246ICcnLFxuICAgICAgICBkb21haW4sXG4gICAgICB9KTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRoLXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSBUWVBFX1RPX0NPTlRST0xbb3JpZ2luYWxTdGF0ZUNhcmRUeXBlXTtcbiAgICAgIGN1c3RvbVN0YXRlQ2FyZFR5cGUgPSAnc3RhdGUtY2FyZC13aXRob3V0LXNsaWRlcic7XG4gICAgfSBlbHNlIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnNob3dfbGFzdF9jaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAhU0hPV19MQVNUX0NIQU5HRURfQkxBQ0tMSVNURURfQ0FSRFMuaW5jbHVkZXMob3JpZ2luYWxTdGF0ZUNhcmRUeXBlKSkge1xuICAgICAgcGFyYW1zLmluRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLnN0YXRlID09PSAndW5hdmFpbGFibGUnKSB7XG4gICAgICBwYXJhbXMuY29udHJvbEVsZW1lbnQgPSAnJztcbiAgICB9XG4gICAgaWYgKHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5jb250cm9sRWxlbWVudCA9IHN0YXRlT2JqLmF0dHJpYnV0ZXMuY29udHJvbF9lbGVtZW50O1xuICAgIH1cblxuICAgIGR5bmFtaWNDb250ZW50VXBkYXRlcihcbiAgICAgIHRoaXMsXG4gICAgICAoc2Vjb25kYXJ5U3RhdGVDYXJkVHlwZSB8fCBjdXN0b21TdGF0ZUNhcmRUeXBlIHx8IGBTVEFURS1DQVJELSR7b3JpZ2luYWxTdGF0ZUNhcmRUeXBlfWApLnRvVXBwZXJDYXNlKCksXG4gICAgICBwYXJhbXMpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtY3VzdG9tLXVpJywgU3RhdGVDYXJkQ3VzdG9tVWkpO1xuIiwiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bwb2x5bWVyL3BvbHltZXIvbGliL3V0aWxzL2h0bWwtdGFnLmpzJztcbmltcG9ydCBDdWlCYXNlRWxlbWVudCBmcm9tICcuL2N1aS1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0ICcuL2R5bmFtaWMtd2l0aC1leHRyYS5qcyc7XG5pbXBvcnQgJy4vaGEtdGhlbWVkLXNsaWRlci5qcyc7XG5cbi8qKlxuICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAqL1xuY2xhc3MgU3RhdGVDYXJkV2l0aFNsaWRlciBleHRlbmRzIEN1aUJhc2VFbGVtZW50IHtcbiAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICA8c3R5bGUgaXM9XCJjdXN0b20tc3R5bGVcIiBpbmNsdWRlPVwiaXJvbi1mbGV4IGlyb24tZmxleC1hbGlnbm1lbnQgaXJvbi1mbGV4LWZhY3RvcnNcIj48L3N0eWxlPlxuICAgIDxzdHlsZT5cbiAgICAgICNjb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgICAuc2Vjb25kLWxpbmUsIC5zdGF0ZS1hbmQtdG9nZ2xlLCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5ub3dyYXAgLnN0YXRlLWFuZC10b2dnbGUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBmbGV4LWdyb3c6IDA7XG4gICAgICB9XG4gICAgICAubm93cmFwIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5zZWNvbmQtbGluZSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC0xNnB4O1xuICAgICAgfVxuICAgICAgLnN0cmV0Y2ggLnNlY29uZC1saW5lLCAuc3RyZXRjaCBoYS10aGVtZWQtc2xpZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIC0taGEtcGFwZXItc2xpZGVyLXdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgICAgLm5vd3JhcCAuc3RhdGUtaW5mbyB7XG4gICAgICAgIG1pbi13aWR0aDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICAgIGhhLXRoZW1lZC1zbGlkZXIsIC50b3Atd3JhcHBlciB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC50b3Atd3JhcHBlci5zdHJldGNoIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5oaWRkZW4ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzJD0naG9yaXpvbnRhbCBsYXlvdXQgZmxleCB0b3Atd3JhcHBlciBbW19jb21wdXRlV3JhcENsYXNzKG1vZGUsIHN0cmV0Y2hTbGlkZXIsIGxpbmVUb29Mb25nLCBpbkRpYWxvZyldXSc+XG4gICAgICA8ZGl2IGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQgZmxleC1hdXRvIHN0YXRlLWFuZC10b2dnbGUnPlxuICAgICAgICA8c3RhdGUtaW5mb1xuICAgICAgICAgICAgY2xhc3M9J3N0YXRlLWluZm8gZmxleC1hdXRvJ1xuICAgICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICAgIGluLWRpYWxvZz0nW1tzaG93TGFzdENoYW5nZWQoc3RhdGVPYmosIGluRGlhbG9nLCBleHRyYSldXSdcbiAgICAgICAgICAgIHNlY29uZGFyeS1saW5lJD0nW1toYXNFeHRyYShleHRyYSldXSdcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLXJlcGVhdCcgaXRlbXM9J1tbZXh0cmFdXSc+XG4gICAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9zdGF0ZS1pbmZvPlxuICAgICAgICA8dGVtcGxhdGUgaXM9J2RvbS1pZicgaWY9J1tbYnJlYWtTbGlkZXJdXScgY2xhc3M9J2hpZGRlbic+XG4gICAgICAgICAgPGR5bmFtaWMtd2l0aC1leHRyYSBoYXNzPSdbW2hhc3NdXScgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nIGNvbnRyb2wtZWxlbWVudD0nW1tjb250cm9sRWxlbWVudF1dJyBpbi1kaWFsb2c9J1tbaW5EaWFsb2ddXSc+PC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1tzaG93U2xpZGVyXV0nIHJlc3RhbXA+XG4gICAgICAgIDxkaXYgY2xhc3M9J2hvcml6b250YWwgbGF5b3V0IGZsZXgtYXV0byBlbmQtanVzdGlmaWVkIHNlY29uZC1saW5lJz5cbiAgICAgICAgICA8aGEtdGhlbWVkLXNsaWRlclxuICAgICAgICAgICAgaWQ9J3NsaWRlcidcbiAgICAgICAgICAgIG1heD1bW21heF1dXG4gICAgICAgICAgICBtaW49W1ttaW5dXVxuICAgICAgICAgICAgdGhlbWU9J1tbc3RhdGVPYmouYXR0cmlidXRlcy5zbGlkZXJfdGhlbWVdXSdcbiAgICAgICAgICAgIGlzLW9uPSdbW2lzT24oc3RhdGVPYmosIG5hbWVPbildXSdcbiAgICAgICAgICAgIHZhbHVlPSd7e3NsaWRlclZhbHVlfX0nXG4gICAgICAgICAgICBkaXNhYmxlLW9mZi13aGVuLW1pbj0ne3tkaXNhYmxlT2ZmV2hlbk1pbn19J1xuICAgICAgICAgICAgb24tY2hhbmdlPSdzbGlkZXJDaGFuZ2VkJ1xuICAgICAgICAgICAgb24tY2xpY2s9J3N0b3BQcm9wYWdhdGlvbic+XG4gICAgICAgICAgPC9oYS10aGVtZWQtc2xpZGVyPlxuICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0nZG9tLWlmJyBpZj0nW1shYnJlYWtTbGlkZXJdXSc+XG4gICAgICAgICAgICA8ZHluYW1pYy13aXRoLWV4dHJhIGhhc3M9J1tbaGFzc11dJyBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXScgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nIGluLWRpYWxvZz0nW1tpbkRpYWxvZ11dJz48L2R5bmFtaWMtd2l0aC1leHRyYT5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWluOiBTdHJpbmcsXG4gICAgICBzZXJ2aWNlTWF4OiBTdHJpbmcsXG4gICAgICB2YWx1ZU5hbWU6IFN0cmluZyxcbiAgICAgIHNldFZhbHVlTmFtZTogU3RyaW5nLFxuICAgICAgbmFtZU9uOiB7IHR5cGU6IFN0cmluZywgdmFsdWU6ICdvbicgfSxcbiAgICAgIG1pbjogeyB0eXBlOiBOdW1iZXIsIHZhbHVlOiAwIH0sXG4gICAgICBtYXg6IHsgdHlwZTogTnVtYmVyLCB2YWx1ZTogMjU1IH0sXG5cbiAgICAgIHNsaWRlclZhbHVlOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZU9mZldoZW5NaW46IEJvb2xlYW4sXG4gICAgICBtb2RlOiBTdHJpbmcsXG4gICAgICBzdHJldGNoU2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBicmVha1NsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaGlkZVNsaWRlcjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbGluZVRvb0xvbmc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG1pbkxpbmVCcmVhazogTnVtYmVyLFxuICAgICAgbWF4TGluZUJyZWFrOiBOdW1iZXIsXG4gICAgICBzaG93U2xpZGVyOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgY29tcHV0ZWQ6ICdfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJlYWR5KCkge1xuICAgIHN1cGVyLnJlYWR5KCk7XG4gICAgdGhpcy5fb25Jcm9uUmVzaXplID0gdGhpcy5fb25Jcm9uUmVzaXplLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gIH1cblxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25Jcm9uUmVzaXplKTtcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3N0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpJyxcbiAgICBdO1xuICB9XG5cbiAgX3dhaXRGb3JMYXlvdXQoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuICAgIHRoaXMuX3NldE1vZGUoKTtcbiAgICBpZiAodGhpcy5fZnJhbWVJZCkgcmV0dXJuO1xuICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZUlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgIHRoaXMucmVhZHlUb0NvbXB1dGUgPSB0cnVlO1xuICAgICAgdGhpcy5fb25Jcm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBfc2V0TW9kZSgpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBoaWRlU2xpZGVyOiB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicgJiYgdGhpcy5saW5lVG9vTG9uZyxcbiAgICAgIGJyZWFrU2xpZGVyOlxuICAgICAgICAgICAodGhpcy5tb2RlID09PSAnYnJlYWstc2xpZGVyJyB8fCB0aGlzLm1vZGUgPT09ICdoaWRlLXNsaWRlcicpICYmXG4gICAgICAgICAgIHRoaXMubGluZVRvb0xvbmcsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2hvd1NsaWRlcikge1xuICAgICAgb2JqLmJyZWFrU2xpZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKG9iaik7XG4gIH1cblxuICBfb25Jcm9uUmVzaXplKCkge1xuICAgIGlmICghdGhpcy5yZWFkeVRvQ29tcHV0ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICduby1zbGlkZXInKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMoe1xuICAgICAgICBoaWRlU2xpZGVyOiB0cnVlLFxuICAgICAgICBicmVha1NsaWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2QnJlYWtTbGlkZXIgPSB0aGlzLmJyZWFrU2xpZGVyO1xuICAgIGNvbnN0IHByZXZIaWRlU2xpZGVyID0gdGhpcy5oaWRlU2xpZGVyO1xuICAgIHRoaXMuc2V0UHJvcGVydGllcyh7XG4gICAgICBsaW5lVG9vTG9uZzogZmFsc2UsXG4gICAgICBoaWRlU2xpZGVyOiBmYWxzZSxcbiAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy4kO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA8PSB0aGlzLm1pbkxpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXJXaWR0aCA+PSB0aGlzLm1heExpbmVCcmVhaykge1xuICAgICAgdGhpcy5saW5lVG9vTG9uZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldkhpZGVTbGlkZXIgJiYgdGhpcy5tb2RlID09PSAnaGlkZS1zbGlkZXInKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdW5oaWRlIHRoZSBzbGlkZXIgaW4gb3JkZXIgdG8gcmVjYWxjdWxhdGUgaGVpZ2h0LlxuICAgICAgICB0aGlzLl93YWl0Rm9yTGF5b3V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBzdGF0ZUhlaWdodCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcuc3RhdGUtaW5mbycpLmNsaWVudEhlaWdodDtcbiAgICAgIHRoaXMubGluZVRvb0xvbmcgPSBjb250YWluZXJIZWlnaHQgPiBzdGF0ZUhlaWdodCAqIDEuNTtcbiAgICAgIGlmICh0aGlzLmxpbmVUb29Mb25nKSB7XG4gICAgICAgIHRoaXMubWluTGluZUJyZWFrID0gY29udGFpbmVyV2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKCFwcmV2QnJlYWtTbGlkZXIpIHtcbiAgICAgICAgdGhpcy5tYXhMaW5lQnJlYWsgPSBjb250YWluZXJXaWR0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2V0TW9kZSgpO1xuICB9XG5cbiAgX2NvbXB1dGVXcmFwQ2xhc3MobW9kZSwgc3RyZXRjaFNsaWRlciwgbGluZVRvb0xvbmcsIGluRGlhbG9nKSB7XG4gICAgaWYgKGluRGlhbG9nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnc2luZ2xlLWxpbmUnKSB7XG4gICAgICByZXR1cm4gJ25vd3JhcCc7XG4gICAgfVxuICAgIGlmIChzdHJldGNoU2xpZGVyICYmIGxpbmVUb29Mb25nKSB7XG4gICAgICByZXR1cm4gJ3N0cmV0Y2ggd3JhcCc7XG4gICAgfVxuICAgIHJldHVybiAnd3JhcCc7XG4gIH1cblxuICBfc2hvd1NsaWRlcihpbkRpYWxvZywgc3RhdGVPYmosIGhpZGVTbGlkZXIpIHtcbiAgICBpZiAoaW5EaWFsb2cgfHwgaGlkZVNsaWRlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNsaWRlckNoYW5nZWQoZXYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGV2LnRhcmdldC52YWx1ZSwgMTApO1xuICAgIGNvbnN0IHBhcmFtID0geyBlbnRpdHlfaWQ6IHRoaXMuc3RhdGVPYmouZW50aXR5X2lkIH07XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHJldHVybjtcbiAgICBsZXQgdGFyZ2V0ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNzbGlkZXInKTtcbiAgICBpZiAoZXYudGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgIC8vIE5vIFNoYWRvdyBET00gLSB3ZSBoYXZlIGFjY2VzcyB0byBvcmlnaW5hbCB0YXJnZXQuXG4gICAgICAoeyB0YXJnZXQgfSA9IGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LnBhdGgpIHtcbiAgICAgIFt0YXJnZXRdID0gZXYucGF0aDtcbiAgICB9IGVsc2UgaWYgKGV2LmNvbXBvc2VkUGF0aCkge1xuICAgICAgW3RhcmdldF0gPSBldi5jb21wb3NlZFBhdGgoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAwIHx8ICh2YWx1ZSA8PSB0YXJnZXQubWluICYmICF0aGlzLmRpc2FibGVPZmZXaGVuTWluKSkge1xuICAgICAgdGhpcy5oYXNzLmNhbGxTZXJ2aWNlKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2VNaW4sIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1bdGhpcy5zZXRWYWx1ZU5hbWUgfHwgdGhpcy52YWx1ZU5hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmhhc3MuY2FsbFNlcnZpY2UodGhpcy5kb21haW4sIHRoaXMuc2VydmljZU1heCwgcGFyYW0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlT2JqQ2hhbmdlZChzdGF0ZU9iaiwgbmFtZU9uLCB2YWx1ZU5hbWUpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBzbGlkZXJWYWx1ZTogdGhpcy5pc09uKHN0YXRlT2JqLCBuYW1lT24pID8gc3RhdGVPYmouYXR0cmlidXRlc1t2YWx1ZU5hbWVdIDogMCxcbiAgICB9O1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWluTGluZUJyZWFrOiAwLFxuICAgICAgICBtYXhMaW5lQnJlYWs6IDk5OSxcbiAgICAgICAgaGlkZVNsaWRlcjogZmFsc2UsXG4gICAgICAgIGJyZWFrU2xpZGVyOiBmYWxzZSxcbiAgICAgICAgbGluZVRvb0xvbmc6IGZhbHNlLFxuICAgICAgICBtb2RlOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0YXRlX2NhcmRfbW9kZSxcbiAgICAgICAgc3RyZXRjaFNsaWRlcjogISFzdGF0ZU9iai5hdHRyaWJ1dGVzLnN0cmV0Y2hfc2xpZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhvYmopO1xuICAgIGlmIChzdGF0ZU9iaikge1xuICAgICAgdGhpcy5fd2FpdEZvckxheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzT24oc3RhdGVPYmosIG5hbWVPbikge1xuICAgIHJldHVybiBzdGF0ZU9iaiAmJiAoIW5hbWVPbiB8fCBzdGF0ZU9iai5zdGF0ZSA9PT0gbmFtZU9uKTtcbiAgfVxuXG4gIHN0b3BQcm9wYWdhdGlvbihldikge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3N0YXRlLWNhcmQtd2l0aC1zbGlkZXInLCBTdGF0ZUNhcmRXaXRoU2xpZGVyKTtcbiIsImltcG9ydCB7IGh0bWwgfSBmcm9tICdAcG9seW1lci9wb2x5bWVyL2xpYi91dGlscy9odG1sLXRhZy5qcyc7XG5pbXBvcnQgQ3VpQmFzZUVsZW1lbnQgZnJvbSAnLi9jdWktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCAnLi9keW5hbWljLXdpdGgtZXh0cmEuanMnO1xuXG4vKipcbiAqIEBleHRlbmRzIEhUTUxFbGVtZW50XG4gKi9cbmNsYXNzIFN0YXRlQ2FyZFdpdGhvdXRTbGlkZXIgZXh0ZW5kcyBDdWlCYXNlRWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgPHN0eWxlIGlzPVwiY3VzdG9tLXN0eWxlXCIgaW5jbHVkZT1cImlyb24tZmxleCBpcm9uLWZsZXgtYWxpZ25tZW50XCI+PC9zdHlsZT5cbiAgICA8c3R5bGU+XG4gICAgICAjY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG5cbiAgICA8ZGl2IGlkPSdjb250YWluZXInIGNsYXNzPSdob3Jpem9udGFsIGxheW91dCBqdXN0aWZpZWQnPlxuICAgICAgPHN0YXRlLWluZm9cbiAgICAgICAgICBoYXNzPSdbW2hhc3NdXSdcbiAgICAgICAgICBjbGFzcz0nc3RhdGUtaW5mbydcbiAgICAgICAgICBzdGF0ZS1vYmo9J1tbc3RhdGVPYmpdXSdcbiAgICAgICAgICBpbi1kaWFsb2c9J1tbc2hvd0xhc3RDaGFuZ2VkKHN0YXRlT2JqLCBpbkRpYWxvZywgZXh0cmEpXV0nXG4gICAgICAgICAgc2Vjb25kYXJ5LWxpbmUkPSdbW2hhc0V4dHJhKGV4dHJhKV1dJz5cbiAgICAgICAgPHRlbXBsYXRlIGlzPSdkb20tcmVwZWF0JyBpdGVtcz0nW1tleHRyYV1dJz5cbiAgICAgICAgICA8ZGl2PltbaXRlbV1dPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3N0YXRlLWluZm8+XG4gICAgICA8ZHluYW1pYy13aXRoLWV4dHJhXG4gICAgICAgICAgaGFzcz0nW1toYXNzXV0nXG4gICAgICAgICAgc3RhdGUtb2JqPSdbW3N0YXRlT2JqXV0nXG4gICAgICAgICAgY29udHJvbC1lbGVtZW50PSdbW2NvbnRyb2xFbGVtZW50XV0nXG4gICAgICAgICAgaW4tZGlhbG9nPSdbW2luRGlhbG9nXV0nPlxuICAgICAgPC9keW5hbWljLXdpdGgtZXh0cmE+XG4gICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdzdGF0ZS1jYXJkLXdpdGhvdXQtc2xpZGVyJywgU3RhdGVDYXJkV2l0aG91dFNsaWRlcik7XG4iLCIvLyBQb2x5bWVyIGxlZ2FjeSBldmVudCBoZWxwZXJzIHVzZWQgY291cnRlc3kgb2YgdGhlIFBvbHltZXIgcHJvamVjdC5cbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBvcnQgZGVmYXVsdCAoc3VwZXJDbGFzcykgPT4ge1xuICAvKipcbiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnRcbiAgICovXG4gIGNsYXNzIEV2ZW50c01peGluIGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCB3aXRoIGFuIG9wdGlvbmFsIGRldGFpbCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIE5hbWUgb2YgZXZlbnQgdHlwZS5cbiAgICAgKiBAcGFyYW0geyo9fSBkZXRhaWwgRGV0YWlsIHZhbHVlIGNvbnRhaW5pbmcgZXZlbnQtc3BlY2lmaWNcbiAgICAgKiAgIHBheWxvYWQuXG4gICAgICogQHBhcmFtIHt7IGJ1YmJsZXM6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IChib29sZWFufHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgIGNvbXBvc2VkOiAoYm9vbGVhbnx1bmRlZmluZWQpIH09fVxuICAgICAqICBvcHRpb25zIE9iamVjdCBzcGVjaWZ5aW5nIG9wdGlvbnMuICBUaGVzZSBtYXkgaW5jbHVkZTpcbiAgICAgKiAgYGJ1YmJsZXNgIChib29sZWFuLCBkZWZhdWx0cyB0byBgdHJ1ZWApLFxuICAgICAqICBgY2FuY2VsYWJsZWAgKGJvb2xlYW4sIGRlZmF1bHRzIHRvIGZhbHNlKSwgYW5kXG4gICAgICogIGBub2RlYCBvbiB3aGljaCB0byBmaXJlIHRoZSBldmVudCAoSFRNTEVsZW1lbnQsIGRlZmF1bHRzIHRvIGB0aGlzYCkuXG4gICAgICogQHJldHVybiB7RXZlbnR9IFRoZSBuZXcgZXZlbnQgdGhhdCB3YXMgZmlyZWQuXG4gICAgICovXG4gICAgZmlyZSh0eXBlLCBkZXRhaWwgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmJsZXM6IG9wdGlvbnMuYnViYmxlcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogQm9vbGVhbihvcHRpb25zLmNhbmNlbGFibGUpLFxuICAgICAgICBjb21wb3NlZDogb3B0aW9ucy5jb21wb3NlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuY29tcG9zZWQsXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LmRldGFpbCA9IGRldGFpbDtcbiAgICAgIGNvbnN0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgdGhpcztcbiAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBFdmVudHNNaXhpbjtcbn07XG4iLCJpbXBvcnQgaGFzc0F0dHJpYnV0ZXNVdGlsIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL3V0aWwvaGFzcy1hdHRyaWJ1dGVzLXV0aWwuanMnO1xuXG53aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwgfHwge307XG5jb25zdCBTVVBQT1JURURfU0xJREVSX01PREVTID0gW1xuICAnc2luZ2xlLWxpbmUnLCAnYnJlYWstc2xpZGVyJywgJ2JyZWFrLXNsaWRlci10b2dnbGUnLCAnaGlkZS1zbGlkZXInLCAnbm8tc2xpZGVyJyxcbl07XG5cbmNvbnN0IGN1c3RvbVVpQXR0cmlidXRlcyA9IHtcbiAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgZGV2aWNlOiB1bmRlZmluZWQsXG4gIHRlbXBsYXRlczogdW5kZWZpbmVkLFxuICBzdGF0ZTogdW5kZWZpbmVkLFxuICBfc3RhdGVEaXNwbGF5OiB1bmRlZmluZWQsXG4gIGNvbnRyb2xfZWxlbWVudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBzdGF0ZV9jYXJkX21vZGU6IHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGxpZ2h0OiBTVVBQT1JURURfU0xJREVSX01PREVTLmNvbmNhdCgnYmFkZ2VzJyksXG4gICAgICBjb3ZlcjogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgY2xpbWF0ZTogU1VQUE9SVEVEX1NMSURFUl9NT0RFUy5jb25jYXQoJ2JhZGdlcycpLFxuICAgICAgJyonOiBbJ2JhZGdlcyddLFxuICAgIH0sXG4gIH0sXG4gIHN0YXRlX2NhcmRfY3VzdG9tX3VpX3NlY29uZGFyeTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBiYWRnZXNfbGlzdDogeyB0eXBlOiAnanNvbicgfSxcbiAgc2hvd19sYXN0X2NoYW5nZWQ6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfY29udHJvbDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgZXh0cmFfZGF0YV90ZW1wbGF0ZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICBleHRyYV9iYWRnZTogeyB0eXBlOiAnanNvbicgfSxcbiAgc3RyZXRjaF9zbGlkZXI6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIHNsaWRlcl90aGVtZTogeyB0eXBlOiAnanNvbicgfSxcbiAgdGhlbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgY29uZmlybV9jb250cm9sczogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgY29uZmlybV9jb250cm9sc19zaG93X2xvY2s6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIGhpZGVfaW5fZGVmYXVsdF92aWV3OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICBpY29uX2NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG59O1xud2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMgPSBoYXNzQXR0cmlidXRlc1V0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUztcbndpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5VTktOT1dOX1RZUEUgPSBoYXNzQXR0cmlidXRlc1V0aWwuVU5LTk9XTl9UWVBFO1xuT2JqZWN0LmFzc2lnbih3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUywgY3VzdG9tVWlBdHRyaWJ1dGVzKTtcbiIsImltcG9ydCBhcHBseVRoZW1lc09uRWxlbWVudCBmcm9tICcuLi8uLi9ob21lLWFzc2lzdGFudC1wb2x5bWVyL3NyYy9jb21tb24vZG9tL2FwcGx5X3RoZW1lc19vbl9lbGVtZW50LmpzJztcbmltcG9ydCBjb21wdXRlU3RhdGVEb21haW4gZnJvbSAnLi4vLi4vaG9tZS1hc3Npc3RhbnQtcG9seW1lci9zcmMvY29tbW9uL2VudGl0eS9jb21wdXRlX3N0YXRlX2RvbWFpbi50cyc7XG5pbXBvcnQgZ2V0Vmlld0VudGl0aWVzIGZyb20gJy4uLy4uL2hvbWUtYXNzaXN0YW50LXBvbHltZXIvc3JjL2NvbW1vbi9lbnRpdHkvZ2V0X3ZpZXdfZW50aXRpZXMudHMnO1xuXG5pbXBvcnQgJy4uL2VsZW1lbnRzL2hhLWNvbmZpZy1jdXN0b20tdWkuanMnO1xuaW1wb3J0IFZFUlNJT04gZnJvbSAnLi92ZXJzaW9uLmpzJztcbmltcG9ydCAnLi9oYXNzLWF0dHJpYnV0ZS11dGlsLmpzJztcblxud2luZG93LmN1c3RvbVVJID0gd2luZG93LmN1c3RvbVVJIHx8IHtcbiAgU1VQUE9SVEVEX1NMSURFUl9NT0RFUzogW1xuICAgICdzaW5nbGUtbGluZScsICdicmVhay1zbGlkZXInLCAnYnJlYWstc2xpZGVyLXRvZ2dsZScsICdoaWRlLXNsaWRlcicsICduby1zbGlkZXInLFxuICBdLFxuXG4gIGRvbUhvc3QoZWxlbSkge1xuICAgIGlmIChlbGVtID09PSBkb2N1bWVudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW0uZ2V0Um9vdE5vZGUoKTtcbiAgICByZXR1cm4gKHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSA/IC8qKiBAdHlwZSB7U2hhZG93Um9vdH0gKi8gKHJvb3QpLmhvc3QgOiByb290O1xuICB9LFxuXG4gIGxpZ2h0T3JTaGFkb3coZWxlbSwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZWxlbS5zaGFkb3dSb290ID9cbiAgICAgIGVsZW0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6XG4gICAgICBlbGVtLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9LFxuXG4gIGdldEVsZW1lbnRIaWVyYXJjaHkocm9vdCwgaGllcmFyY2h5KSB7XG4gICAgaWYgKHJvb3QgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVsZW0gPSBoaWVyYXJjaHkuc2hpZnQoKTtcbiAgICBpZiAoZWxlbSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhyb290LCBlbGVtKSwgaGllcmFyY2h5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0sXG5cbiAgZ2V0Q29udGV4dChlbGVtKSB7XG4gICAgaWYgKGVsZW0uX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbS5fY29udGV4dCA9IFtdO1xuICAgICAgZm9yIChsZXQgZWxlbWVudCA9IChlbGVtLnRhZ05hbWUgPT09ICdIQS1FTlRJVElFUy1DQVJEJyA/IHdpbmRvdy5jdXN0b21VSS5kb21Ib3N0KGVsZW0pIDogZWxlbSk7XG4gICAgICAgIGVsZW1lbnQ7IGVsZW1lbnQgPSB3aW5kb3cuY3VzdG9tVUkuZG9tSG9zdChlbGVtZW50KSkge1xuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ0hBLUVOVElUSUVTLUNBUkQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuZ3JvdXBFbnRpdHkuZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ncm91cEVudGl0eSA9PT0gZmFsc2UgJiYgZWxlbWVudC5zdGF0ZXMgJiYgZWxlbWVudC5zdGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChgZ3JvdXAuJHtjb21wdXRlU3RhdGVEb21haW4oZWxlbWVudC5zdGF0ZXNbMF0pfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTU9SRS1JTkZPLUdST1VQJzpcbiAgICAgICAgICBjYXNlICdTVEFURS1DQVJELUNPTlRFTlQnOlxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgZWxlbS5fY29udGV4dC5wdXNoKGVsZW1lbnQuc3RhdGVPYmouZW50aXR5X2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0hBLUNBUkRTJzpcbiAgICAgICAgICAgIGVsZW0uX2NvbnRleHQucHVzaChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWV3JykgfHwgJ2RlZmF1bHRfdmlldycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtLl9jb250ZXh0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW0uX2NvbnRleHQ7XG4gIH0sXG5cbiAgZmluZE1hdGNoKGtleSwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgaWYgKG9wdGlvbnNba2V5XSkgcmV0dXJuIGtleTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob3B0aW9ucykuZmluZChvcHRpb24gPT4ga2V5Lm1hdGNoKGBeJHtvcHRpb259JGApKTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKSB7XG4gICAgY29uc3QgbmFtZSA9IHdpbmRvdy5jdXN0b21VSS5nZXROYW1lKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLmZpbmRNYXRjaChuYW1lLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIHN0YXRlT2JqO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZVttYXRjaF0pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHJldHVybiBzdGF0ZU9iajtcbiAgICByZXR1cm4gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgYXR0cmlidXRlcyk7XG4gIH0sXG5cbiAgbWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIHN0YXRlT2JqKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHdpbmRvdy5jdXN0b21VSS5nZXRDb250ZXh0KGVsZW0pO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgaWYgKCFzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb250ZXh0LmZvckVhY2goKGMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5maW5kTWF0Y2goYywgc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cCk7XG4gICAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5ncm91cFttYXRjaF0pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBzdGF0ZU9iai5hdHRyaWJ1dGVzLmdyb3VwW21hdGNoXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCkgcmV0dXJuIHN0YXRlT2JqO1xuXG4gICAgcmV0dXJuIHdpbmRvdy5jdXN0b21VSS5hcHBseUF0dHJpYnV0ZXMoc3RhdGVPYmosIGF0dHJpYnV0ZXMpO1xuICB9LFxuXG4gIF9zZXRLZWVwKG9iaiwgdmFsdWUpIHtcbiAgICBpZiAob2JqLl9jdWlfa2VlcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmouX2N1aV9rZWVwID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5fY3VpX2tlZXAgPSBvYmouX2N1aV9rZWVwICYmIHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBtYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKGhhc3MsIHN0YXRlcywgc3RhdGVPYmosIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZXMudGVtcGxhdGVzKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuX3NldEtlZXAoc3RhdGVPYmosIHRydWUpO1xuICAgICAgcmV0dXJuIHN0YXRlT2JqO1xuICAgIH1cbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge307XG4gICAgbGV0IGhhc0dsb2JhbCA9IGZhbHNlO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy50ZW1wbGF0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhdHRyaWJ1dGVzLnRlbXBsYXRlc1trZXldO1xuICAgICAgaWYgKHRlbXBsYXRlLm1hdGNoKC9cXGIoZW50aXRpZXN8aGFzcylcXGIvKSkge1xuICAgICAgICBoYXNHbG9iYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB3aW5kb3cuY3VzdG9tVUkuY29tcHV0ZVRlbXBsYXRlKFxuICAgICAgICB0ZW1wbGF0ZSwgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgYXR0cmlidXRlcyxcbiAgICAgICAgKHN0YXRlT2JqLnVudGVtcGxhdGVkX2F0dHJpYnV0ZXMgJiYgc3RhdGVPYmoudW50ZW1wbGF0ZWRfYXR0cmlidXRlc1trZXldKSB8fFxuICAgICAgICAgICAgYXR0cmlidXRlc1trZXldLFxuICAgICAgICBzdGF0ZU9iai51bnRlbXBsYXRlZF9zdGF0ZSB8fCBzdGF0ZU9iai5zdGF0ZSk7XG4gICAgICAvLyBJbiBjYXNlIG9mIG51bGwgZG9uJ3Qgc2V0IHRoZSB2YWx1ZS5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgbmV3QXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gICAgICBpZiAoa2V5ID09PSAnc3RhdGUnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gc3RhdGVPYmouc3RhdGUpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdfc3RhdGVEaXNwbGF5Jykge1xuICAgICAgICBpZiAodmFsdWUgIT09IHN0YXRlT2JqLl9zdGF0ZURpc3BsYXkpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gYXR0cmlidXRlc1trZXldKSB7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5jdXN0b21VSS5fc2V0S2VlcChzdGF0ZU9iaiwgIWhhc0dsb2JhbCk7XG4gICAgaWYgKCFoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gc3RhdGVPYmo7XG4gICAgfVxuICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzID09PSBhdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBXZSBhcmUgb3BlcmF0aW5nIG9uIHJlYWwgYXR0cmlidXRlcy4gUmVwbGFjZSB0aGVtLlxuICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLmFwcGx5QXR0cmlidXRlcyhzdGF0ZU9iaiwgbmV3QXR0cmlidXRlcyk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdzdGF0ZScpKSB7XG4gICAgICAgIGlmIChuZXdBdHRyaWJ1dGVzLnN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnN0YXRlID0gU3RyaW5nKG5ld0F0dHJpYnV0ZXMuc3RhdGUpO1xuICAgICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZSA9IHN0YXRlT2JqLnN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0F0dHJpYnV0ZXMsICdfc3RhdGVEaXNwbGF5JykpIHtcbiAgICAgICAgcmVzdWx0Ll9zdGF0ZURpc3BsYXkgPSBuZXdBdHRyaWJ1dGVzLl9zdGF0ZURpc3BsYXk7XG4gICAgICAgIHJlc3VsdC51bnRlbXBsYXRlZF9zdGF0ZURpc3BsYXkgPSBzdGF0ZU9iai5fc3RhdGVEaXNwbGF5O1xuICAgICAgfVxuICAgICAgd2luZG93LmN1c3RvbVVJLl9zZXRLZWVwKHJlc3VsdCwgIWhhc0dsb2JhbCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBPcGVyYXRpbmcgb24gY29udGV4dC1hd2FyZSBhdHRyaWJ1dGVzLiBSZXR1cm4gc2hhbGxvdyBjb3B5IG9mIG9iamVjdC5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICB9LFxuXG4gIG1heWJlQXBwbHlUZW1wbGF0ZXMoaGFzcywgc3RhdGVzLCBzdGF0ZU9iaikge1xuICAgIGNvbnN0IG5ld1Jlc3VsdCA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUFwcGx5VGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgICAgaGFzcywgc3RhdGVzLCBzdGF0ZU9iaiwgc3RhdGVPYmouYXR0cmlidXRlcyk7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSAobmV3UmVzdWx0ICE9PSBzdGF0ZU9iaik7XG5cbiAgICBmdW5jdGlvbiBjaGVja0F0dHJpYnV0ZXMob2JqKSB7XG4gICAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgICAgT2JqZWN0LnZhbHVlcyhvYmopLmZvckVhY2goKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgaGFzcywgc3RhdGVzLCBuZXdSZXN1bHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBoYXNDaGFuZ2VzIHw9IChyZXN1bHQgIT09IG5ld1Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZGV2aWNlKTtcbiAgICAgIGNoZWNrQXR0cmlidXRlcyhvYmouZ3JvdXApO1xuICAgIH1cblxuICAgIGNoZWNrQXR0cmlidXRlcyhzdGF0ZU9iai5hdHRyaWJ1dGVzLmRldmljZSk7XG4gICAgY2hlY2tBdHRyaWJ1dGVzKHN0YXRlT2JqLmF0dHJpYnV0ZXMuZ3JvdXApO1xuICAgIGlmIChuZXdSZXN1bHQgIT09IHN0YXRlT2JqKSByZXR1cm4gbmV3UmVzdWx0O1xuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmopO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVPYmo7XG4gIH0sXG5cbiAgYXBwbHlBdHRyaWJ1dGVzKHN0YXRlT2JqLCBhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eV9pZDogc3RhdGVPYmouZW50aXR5X2lkLFxuICAgICAgc3RhdGU6IHN0YXRlT2JqLnN0YXRlLFxuICAgICAgYXR0cmlidXRlczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGVPYmouYXR0cmlidXRlcywgYXR0cmlidXRlcyksXG4gICAgICB1bnRlbXBsYXRlZF9hdHRyaWJ1dGVzOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLFxuICAgICAgbGFzdF9jaGFuZ2VkOiBzdGF0ZU9iai5sYXN0X2NoYW5nZWQsXG4gICAgfTtcbiAgfSxcblxuICBtYXliZUNoYW5nZU9iamVjdChlbGVtLCBzdGF0ZU9iaiwgaW5EaWFsb2csIGFsbG93SGlkZGVuKSB7XG4gICAgaWYgKGluRGlhbG9nKSByZXR1cm4gc3RhdGVPYmo7XG4gICAgbGV0IG9iaiA9IHdpbmRvdy5jdXN0b21VSS5tYXliZUNoYW5nZU9iamVjdEJ5RGV2aWNlKHN0YXRlT2JqKTtcbiAgICBvYmogPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVDaGFuZ2VPYmplY3RCeUdyb3VwKGVsZW0sIG9iaik7XG4gICAgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQXBwbHlUZW1wbGF0ZUF0dHJpYnV0ZXMoXG4gICAgICBlbGVtLmhhc3MsIGVsZW0uaGFzcy5zdGF0ZXMsIG9iaiwgb2JqLmF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKG9iaiAhPT0gc3RhdGVPYmogJiYgb2JqLmF0dHJpYnV0ZXMuaGlkZGVuICYmIGFsbG93SGlkZGVuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBmaXhHcm91cFRpdGxlcygpIHtcbiAgICBjb25zdCBob21lQXNzaXN0YW50TWFpbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nXSk7XG4gICAgaWYgKGhvbWVBc3Npc3RhbnRNYWluID09PSBudWxsKSB7XG4gICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEgc2Vjb25kLlxuICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzLCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYUNhcmRzID0gd2luZG93LmN1c3RvbVVJLmdldEVsZW1lbnRIaWVyYXJjaHkoaG9tZUFzc2lzdGFudE1haW4sIFtcbiAgICAgICdwYXJ0aWFsLWNhcmRzJyxcbiAgICAgICdoYS1jYXJkc1t2aWV3LXZpc2libGVdJ10pO1xuICAgIGlmIChoYUNhcmRzID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhQ2FyZHMsICcubWFpbicpIHx8IGhhQ2FyZHMuJC5tYWluO1xuICAgIGNvbnN0IGNhcmRzID0gbWFpbi5xdWVyeVNlbGVjdG9yQWxsKCdoYS1lbnRpdGllcy1jYXJkJyk7XG4gICAgY2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4ge1xuICAgICAgaWYgKGNhcmQuZ3JvdXBFbnRpdHkpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0KFxuICAgICAgICAgIGNhcmQsXG4gICAgICAgICAgY2FyZC5ncm91cEVudGl0eSxcbiAgICAgICAgICBmYWxzZSAvKiBpbkRpYWxvZyAqLyxcbiAgICAgICAgICBmYWxzZSAvKiBhbGxvd0hpZGRlbiAqLyk7XG4gICAgICAgIGlmIChvYmogIT09IGNhcmQuZ3JvdXBFbnRpdHkgJiYgb2JqLmF0dHJpYnV0ZXMuZnJpZW5kbHlfbmFtZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVFbGVtID0gd2luZG93LmN1c3RvbVVJLmxpZ2h0T3JTaGFkb3coY2FyZCwgJy5uYW1lJyk7XG4gICAgICAgICAgbmFtZUVsZW0udGV4dENvbnRlbnQgPSBvYmouYXR0cmlidXRlcy5mcmllbmRseV9uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgY29udHJvbENvbHVtbnMoY29sdW1ucykge1xuICAgIGNvbnN0IHBhcnRpYWxDYXJkcyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtY2FyZHMnXSk7XG4gICAgaWYgKHBhcnRpYWxDYXJkcyA9PT0gbnVsbCkge1xuICAgICAgLy8gRE9NIG5vdCByZWFkeS4gV2FpdCAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMuYmluZChudWxsLCBjb2x1bW5zKSxcbiAgICAgICAgMTAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZ1bmN0aW9uIHJlbmFtZWQgZnJvbSBoYW5kbGVXaW5kb3dDaGFuZ2UgdG8gX3VwZGF0ZUNvbHVtbnMgb24gMy43LjE4XG4gICAgY29uc3QgZiA9IHBhcnRpYWxDYXJkcy5oYW5kbGVXaW5kb3dDaGFuZ2UgfHwgcGFydGlhbENhcmRzLl91cGRhdGVDb2x1bW5zO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzLmZvckVhY2goKG1xbCkgPT4ge1xuICAgICAgbXFsLnJlbW92ZUxpc3RlbmVyKGYpO1xuICAgIH0pO1xuICAgIHBhcnRpYWxDYXJkcy5tcWxzID0gY29sdW1ucy5tYXAoKHdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBtcWwgPSB3aW5kb3cubWF0Y2hNZWRpYShgKG1pbi13aWR0aDogJHt3aWR0aH1weClgKTtcbiAgICAgIG1xbC5hZGRMaXN0ZW5lcihmKTtcbiAgICAgIHJldHVybiBtcWw7XG4gICAgfSk7XG4gICAgZigpO1xuICB9LFxuXG4gIHVzZUN1c3RvbWl6ZXIoKSB7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBjb25zdCBjdXN0b21pemVyID0gbWFpbi5oYXNzLnN0YXRlc1snY3VzdG9taXplci5jdXN0b21pemVyJ107XG4gICAgaWYgKCFjdXN0b21pemVyKSByZXR1cm47XG4gICAgaWYgKGN1c3RvbWl6ZXIuYXR0cmlidXRlcy5jb2x1bW5zKSB7XG4gICAgICB3aW5kb3cuY3VzdG9tVUkuY29udHJvbENvbHVtbnMoY3VzdG9taXplci5hdHRyaWJ1dGVzLmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAoY3VzdG9taXplci5hdHRyaWJ1dGVzLmhpZGVfYXR0cmlidXRlcykge1xuICAgICAgaWYgKHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbCAmJiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUykge1xuICAgICAgICBjdXN0b21pemVyLmF0dHJpYnV0ZXMuaGlkZV9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIHdpbmRvdy5oYXNzQXR0cmlidXRlVXRpbC5MT0dJQ19TVEFURV9BVFRSSUJVVEVTLCBhdHRyKSkge1xuICAgICAgICAgICAgd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlQ29uZmlnUGFuZWwoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY29uc3QgaGFQYW5lbENvbmZpZyA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGRvY3VtZW50LCBbXG4gICAgICAnaG9tZS1hc3Npc3RhbnQnLFxuICAgICAgJ2hvbWUtYXNzaXN0YW50LW1haW4nLFxuICAgICAgJ3BhcnRpYWwtcGFuZWwtcmVzb2x2ZXInLFxuICAgICAgJ2hhLXBhbmVsLWNvbmZpZyddKTtcbiAgICBpZiAoIWhhUGFuZWxDb25maWcpIHtcbiAgICAgIC8vIERPTSBub3QgcmVhZHkuIFdhaXQgMTAwbXMuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkudXBkYXRlQ29uZmlnUGFuZWwsIDEwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhQ29uZmlnTmF2aWdhdGlvbiA9IHdpbmRvdy5jdXN0b21VSS5nZXRFbGVtZW50SGllcmFyY2h5KGhhUGFuZWxDb25maWcsIFtcbiAgICAgICdoYS1jb25maWctZGFzaGJvYXJkJyxcbiAgICAgICdoYS1jb25maWctbmF2aWdhdGlvbiddKTtcbiAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uKSB7XG4gICAgICAvLyBIYUNvbmZpZ05hdmlnYXRpb24gc3RhcnRlZCB1c2luZyBsb2NhbGl6ZSBvbiAyMS4wMS4yMDE4XG4gICAgICBpZiAoaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplICYmICFoYUNvbmZpZ05hdmlnYXRpb24uY3VpUGF0Y2gpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLmN1aVBhdGNoID0gdHJ1ZTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVMb2FkZWQgPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVMb2FkZWQ7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlQ2FwdGlvbiA9IGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZUNhcHRpb247XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fb3JpZ2luYWxDb21wdXRlRGVzY3JpcHRpb24gPSBoYUNvbmZpZ05hdmlnYXRpb24uX2NvbXB1dGVEZXNjcmlwdGlvbjtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlTG9hZGVkID0gKGhhc3MsIHBhZ2UpID0+XG4gICAgICAgICAgcGFnZSA9PT0gJ2N1c3RvbXVpJyB8fCBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZUxvYWRlZChoYXNzLCBwYWdlKTtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLl9jb21wdXRlQ2FwdGlvbiA9IChwYWdlLCBsb2NhbGl6ZSkgPT5cbiAgICAgICAgICAocGFnZSA9PT0gJ2N1c3RvbXVpJyA/ICdDdXN0b20gVUknIDogaGFDb25maWdOYXZpZ2F0aW9uLl9vcmlnaW5hbENvbXB1dGVDYXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICAgIGhhQ29uZmlnTmF2aWdhdGlvbi5fY29tcHV0ZURlc2NyaXB0aW9uID0gKHBhZ2UsIGxvY2FsaXplKSA9PlxuICAgICAgICAgIChwYWdlID09PSAnY3VzdG9tdWknID8gJ1NldFVJIHR3ZWFrcycgOiBoYUNvbmZpZ05hdmlnYXRpb24uX29yaWdpbmFsQ29tcHV0ZURlc2NyaXB0aW9uKHBhZ2UsIGxvY2FsaXplKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWhhQ29uZmlnTmF2aWdhdGlvbi5wYWdlcy5zb21lKGNvbmYgPT4gY29uZiA9PT0gJ2N1c3RvbXVpJyB8fCBjb25mLmRvbWFpbiA9PT0gJ2N1c3RvbXVpJykpIHtcbiAgICAgICAgaGFDb25maWdOYXZpZ2F0aW9uLnB1c2goJ3BhZ2VzJywgaGFDb25maWdOYXZpZ2F0aW9uLmxvY2FsaXplID8gJ2N1c3RvbXVpJyA6IHtcbiAgICAgICAgICBkb21haW46ICdjdXN0b211aScsXG4gICAgICAgICAgY2FwdGlvbjogJ0N1c3RvbSBVSScsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTZXQgVUkgdHdlYWtzLicsXG4gICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZ2V0SGFDb25maWdDdXN0b21VaSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhhQ29uZmlnQ3VzdG9tVWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoYS1jb25maWctY3VzdG9tLXVpJyk7XG4gICAgICBoYUNvbmZpZ0N1c3RvbVVpLmlzV2lkZSA9IGhhUGFuZWxDb25maWcuaXNXaWRlO1xuICAgICAgaGFDb25maWdDdXN0b21VaS5zZXRBdHRyaWJ1dGUoJ3BhZ2UtbmFtZScsICdjdXN0b211aScpO1xuICAgICAgcmV0dXJuIGhhQ29uZmlnQ3VzdG9tVWk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlyb25QYWdlcyA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGhhUGFuZWxDb25maWcsICdpcm9uLXBhZ2VzJyk7XG4gICAgaWYgKGlyb25QYWdlcykge1xuICAgICAgaWYgKGlyb25QYWdlcy5sYXN0RWxlbWVudENoaWxkLnRhZ05hbWUgIT09ICdIQS1DT05GSUctQ1VTVE9NLVVJJykge1xuICAgICAgICBjb25zdCBoYUNvbmZpZ0N1c3RvbVVpID0gZ2V0SGFDb25maWdDdXN0b21VaSgpO1xuICAgICAgICBpcm9uUGFnZXMuYXBwZW5kQ2hpbGQoaGFDb25maWdDdXN0b21VaSk7XG4gICAgICAgIGlyb25QYWdlcy5hZGRFdmVudExpc3RlbmVyKCdpcm9uLWl0ZW1zLWNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnL2N1c3RvbXVpJykpIHtcbiAgICAgICAgICAgIGlyb25QYWdlcy5zZWxlY3QoJ2N1c3RvbXVpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhUGFuZWxDb25maWcuc2hhZG93Um9vdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IGhhUGFuZWxDb25maWcuc2hhZG93Um9vdCB8fCBoYVBhbmVsQ29uZmlnO1xuICAgICAgaWYgKHJvb3QubGFzdEVsZW1lbnRDaGlsZC50YWdOYW1lICE9PSAnSEEtQ09ORklHLUNVU1RPTS1VSScpIHtcbiAgICAgICAgY29uc3QgaGFDb25maWdDdXN0b21VaSA9IGdldEhhQ29uZmlnQ3VzdG9tVWkoKTtcbiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChoYUNvbmZpZ0N1c3RvbVVpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpc2libGUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZy9jdXN0b211aScpO1xuICAgICAgcm9vdC5sYXN0RWxlbWVudENoaWxkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJycgOiAnbm9uZSc7XG4gICAgfSBlbHNlIGlmIChoYVBhbmVsQ29uZmlnLnJvdXRlck9wdGlvbnMgJiYgaGFQYW5lbENvbmZpZy5yb3V0ZXJPcHRpb25zLnJvdXRlcykge1xuICAgICAgaWYgKCFoYVBhbmVsQ29uZmlnLnJvdXRlck9wdGlvbnMucm91dGVzLmN1c3RvbXVpKSB7XG4gICAgICAgIGhhUGFuZWxDb25maWcucm91dGVyT3B0aW9ucy5yb3V0ZXMuY3VzdG9tdWkgPSB7XG4gICAgICAgICAgdGFnOiAnaGEtY29uZmlnLWN1c3RvbS11aScsXG4gICAgICAgICAgbG9hZDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIH07XG4gICAgICAgIC8vIEN1c3RvbVVJIHBhbmVsIGlzIHRoZSBlbnRyeXBvaW50LCBzbyB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgcGFnZS5cbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKCcvY29uZmlnL2N1c3RvbXVpJykpIHtcbiAgICAgICAgICBoYVBhbmVsQ29uZmlnLnVwZGF0ZShuZXcgTWFwKFtbJ3JvdXRlJywgdW5kZWZpbmVkXV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBpbnN0YWxsU3RhdGVzSG9vaygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaG9tZS1hc3Npc3RhbnQnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbWVBc3Npc3RhbnQgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAoIWhvbWVBc3Npc3RhbnQgfHwgIWhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGhvbWVBc3Npc3RhbnQucHJvdG90eXBlLl91cGRhdGVIYXNzO1xuICAgICAgaG9tZUFzc2lzdGFudC5wcm90b3R5cGUuX3VwZGF0ZUhhc3MgPSBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGNvbnN0IHsgaGFzcyB9ID0gdGhpcztcbiAgICAgICAgaWYgKG9iai5zdGF0ZXMpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhvYmouc3RhdGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9iai5zdGF0ZXNba2V5XTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuX2N1aV9rZWVwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdFbnRpdHkgPSB3aW5kb3cuY3VzdG9tVUkubWF5YmVBcHBseVRlbXBsYXRlcyhoYXNzLCBvYmouc3RhdGVzLCBlbnRpdHkpO1xuICAgICAgICAgICAgaWYgKGhhc3Muc3RhdGVzICYmIGVudGl0eSAhPT0gaGFzcy5zdGF0ZXNba2V5XSkge1xuICAgICAgICAgICAgICAvLyBOZXcgc3RhdGUgYXJyaXZlZC4gUHV0IG1vZGlmaWVkIHN0YXRlIGluLlxuICAgICAgICAgICAgICBvYmouc3RhdGVzW2tleV0gPSBuZXdFbnRpdHk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSAhPT0gbmV3RW50aXR5KSB7XG4gICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHNhbWUgc3RhdGUgYnV0IGNvbnRlbnRzIGNoYW5nZWQgZHVlIHRvIG90aGVyIHN0YXRlIGNoYW5nZXMuXG4gICAgICAgICAgICAgIG9iai5zdGF0ZXNba2V5XSA9IG5ld0VudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbFVwZGF0ZS5jYWxsKHRoaXMsIG9iaik7XG4gICAgICAgIGlmIChvYmoudGhlbWVzICYmIGhhc3MuX3RoZW1lV2FpdGVycykge1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycy5mb3JFYWNoKHdhaXRlciA9PiB3YWl0ZXIuc3RhdGVDaGFuZ2VkKHdhaXRlci5zdGF0ZSkpO1xuICAgICAgICAgIGhhc3MuX3RoZW1lV2FpdGVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1haW4gPSB3aW5kb3cuY3VzdG9tVUkubGlnaHRPclNoYWRvdyhkb2N1bWVudCwgJ2hvbWUtYXNzaXN0YW50Jyk7XG4gICAgICBpZiAobWFpbi5oYXNzICYmIG1haW4uaGFzcy5zdGF0ZXMpIHtcbiAgICAgICAgbWFpbi5fdXBkYXRlSGFzcyh7IHN0YXRlczogbWFpbi5oYXNzLnN0YXRlcyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsUGFydGlhbENhcmRzKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdwYXJ0aWFsLWNhcmRzJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0aWFsQ2FyZHMgPSBjdXN0b21FbGVtZW50cy5nZXQoJ3BhcnRpYWwtY2FyZHMnKTtcbiAgICAgIGlmICghcGFydGlhbENhcmRzIHx8ICFwYXJ0aWFsQ2FyZHMucHJvdG90eXBlLl9kZWZhdWx0Vmlld0ZpbHRlcikgcmV0dXJuO1xuICAgICAgcGFydGlhbENhcmRzLnByb3RvdHlwZS5fZGVmYXVsdFZpZXdGaWx0ZXIgPSAoaGFzcywgZW50aXR5SWQpID0+IHtcbiAgICAgICAgaWYgKGhhc3Muc3RhdGVzW2VudGl0eUlkXS5hdHRyaWJ1dGVzLmhpZGRlbikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBleGNsdWRlcyA9IHt9O1xuICAgICAgICBPYmplY3QudmFsdWVzKGhhc3Muc3RhdGVzKS5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgICBpZiAoZW50aXR5LmF0dHJpYnV0ZXMgJiYgZW50aXR5LmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVFbnRpdHlJZCA9IGVudGl0eS5lbnRpdHlfaWQ7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSkgcmV0dXJuO1xuICAgICAgICAgICAgZXhjbHVkZXNbZXhjbHVkZUVudGl0eUlkXSA9IGVudGl0eTtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuYXR0cmlidXRlcy52aWV3KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZXdFbnRpdGllcyA9IGdldFZpZXdFbnRpdGllcyhoYXNzLnN0YXRlcywgZW50aXR5KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModmlld0VudGl0aWVzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBpZCA9PiB2aWV3RW50aXRpZXNbaWRdLmF0dHJpYnV0ZXMuaGlkZV9pbl9kZWZhdWx0X3ZpZXcgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXhjbHVkZXNbaWRdID0gdmlld0VudGl0aWVzW2lkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gIWV4Y2x1ZGVzW2VudGl0eUlkXTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgLy8gQWxsb3dzIGNoYW5naW5nIHRoZSAnRXhlY3V0ZScgLyAnQWN0aXZhdGUnIHRleHQgb24gc2NyaXB0L3NjZW5lIGNhcmRzLlxuICBpbnN0YWxsQWN0aW9uTmFtZShlbGVtZW50TmFtZSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKGVsZW1lbnROYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGtsYXNzID0gY3VzdG9tRWxlbWVudHMuZ2V0KGVsZW1lbnROYW1lKTtcbiAgICAgIGlmICgha2xhc3MgfHwgIWtsYXNzLnByb3RvdHlwZSkgcmV0dXJuO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtsYXNzLnByb3RvdHlwZSwgJ2xvY2FsaXplJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tTG9jYWxpemUodikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVPYmogJiYgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU9iai5hdHRyaWJ1dGVzLmFjdGlvbl9uYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlT2JqLmF0dHJpYnV0ZXMuYWN0aW9uX25hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGEubG9jYWxpemUodik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXN0b21Mb2NhbGl6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KCkge30sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBBbGxvd3MgdGhlbWluZyBcInJlZ3VsYXJcIiB0b3AgYmFkZ2VzLlxuICBpbnN0YWxsSGFTdGF0ZUxhYmVsQmFkZ2UoKSB7XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLXN0YXRlLWxhYmVsLWJhZGdlJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYVN0YXRlTGFiZWxCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnaGEtc3RhdGUtbGFiZWwtYmFkZ2UnKTtcbiAgICAgIGlmICghaGFTdGF0ZUxhYmVsQmFkZ2UgfHwgIWhhU3RhdGVMYWJlbEJhZGdlLnByb3RvdHlwZS5zdGF0ZUNoYW5nZWQpIHJldHVybjtcbiAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICBoYVN0YXRlTGFiZWxCYWRnZS5wcm90b3R5cGUuc3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24gdXBkYXRlKHN0YXRlT2JqKSB7XG4gICAgICAgIC8vIFRPRE86IENhbGwgd2luZG93LmN1c3RvbVVJLm1heWJlQ2hhbmdlT2JqZWN0XG4gICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzcy50aGVtZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzcy5fdGhlbWVXYWl0ZXJzID0gdGhpcy5oYXNzLl90aGVtZVdhaXRlcnMgfHwgW107XG4gICAgICAgICAgICB0aGlzLmhhc3MuX3RoZW1lV2FpdGVycy5wdXNoKHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseVRoZW1lc09uRWxlbWVudChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5oYXNzLnRoZW1lcyB8fCB7IGRlZmF1bHRfdGhlbWU6ICdkZWZhdWx0JywgdGhlbWVzOiB7fSB9LFxuICAgICAgICAgICAgICBzdGF0ZU9iai5hdHRyaWJ1dGVzLnRoZW1lIHx8ICdkZWZhdWx0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKCk7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAvLyBBZGRlZCBvbiAxOS4xLjIwMThcbiAgICAgICAgICB0aGlzLnN0YXJ0SW50ZXJ2YWwoc3RhdGVPYmopO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxTdGF0ZUJhZGdlKCkge1xuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdzdGF0ZS1iYWRnZScpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVCYWRnZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnc3RhdGUtYmFkZ2UnKTtcbiAgICAgIGlmICghc3RhdGVCYWRnZSkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXRlQmFkZ2UucHJvdG90eXBlLl91cGRhdGVJY29uQXBwZWFyYW5jZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZUljb25BcHBlYXJhbmNlID0gc3RhdGVCYWRnZS5wcm90b3R5cGUuX3VwZGF0ZUljb25BcHBlYXJhbmNlO1xuICAgICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgICBzdGF0ZUJhZGdlLnByb3RvdHlwZS5fdXBkYXRlSWNvbkFwcGVhcmFuY2UgPSBmdW5jdGlvbiBjdXN0b21VcGRhdGVJY29uQXBwZWFyYW5jZShzdGF0ZU9iaikge1xuICAgICAgICAgIGlmIChzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IgJiYgIXN0YXRlT2JqLmF0dHJpYnV0ZXMuZW50aXR5X3BpY3R1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJyc7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuJC5pY29uLnN0eWxlLCB7XG4gICAgICAgICAgICAgIGNvbG9yOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IsXG4gICAgICAgICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZ2luYWxVcGRhdGVJY29uQXBwZWFyYW5jZS5jYWxsKHRoaXMsIHN0YXRlT2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlQmFkZ2UucHJvdG90eXBlLnVwZGF0ZWQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVcGRhdGVkID0gc3RhdGVCYWRnZS5wcm90b3R5cGUudXBkYXRlZDtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgc3RhdGVCYWRnZS5wcm90b3R5cGUudXBkYXRlZCA9IGZ1bmN0aW9uIGN1c3RvbVVwZGF0ZWQoY2hhbmdlZFByb3BzKSB7XG4gICAgICAgICAgaWYgKCFjaGFuZ2VkUHJvcHMuaGFzKCdzdGF0ZU9iaicpKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgeyBzdGF0ZU9iaiB9ID0gdGhpcztcbiAgICAgICAgICBpZiAoc3RhdGVPYmouYXR0cmlidXRlcy5pY29uX2NvbG9yICYmICFzdGF0ZU9iai5hdHRyaWJ1dGVzLmVudGl0eV9waWN0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9pY29uLnN0eWxlLCB7XG4gICAgICAgICAgICAgIGNvbG9yOiBzdGF0ZU9iai5hdHRyaWJ1dGVzLmljb25fY29sb3IsXG4gICAgICAgICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZ2luYWxVcGRhdGVkLmNhbGwodGhpcywgY2hhbmdlZFByb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgaW5zdGFsbEhhQXR0cmlidXRlcygpIHtcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnaGEtYXR0cmlidXRlcycpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFBdHRyaWJ1dGVzID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdoYS1hdHRyaWJ1dGVzJyk7XG4gICAgICBpZiAoIWhhQXR0cmlidXRlcyB8fCAhaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5IHx8XG4gICAgICAgICAhd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsKSByZXR1cm47XG4gICAgICAvLyBVc2UgbmFtZWQgZnVuY3Rpb24gdG8gcHJlc2VydmUgJ3RoaXMnLlxuICAgICAgaGFBdHRyaWJ1dGVzLnByb3RvdHlwZS5jb21wdXRlRmlsdGVyc0FycmF5ID1cbiAgICAgICAgZnVuY3Rpb24gY3VzdG9tQ29tcHV0ZUZpbHRlcnNBcnJheShleHRyYUZpbHRlcnMpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVMpLmNvbmNhdChcbiAgICAgICAgICAgIGV4dHJhRmlsdGVycyA/IGV4dHJhRmlsdGVycy5zcGxpdCgnLCcpIDogW10pO1xuICAgICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGluc3RhbGxIYUZvcm1DdXN0b21pemUoKSB7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2NvbmZpZycpKSByZXR1cm47XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2hhLWZvcm0tY3VzdG9taXplJykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYUZvcm1DdXN0b21pemUgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2hhLWZvcm0tY3VzdG9taXplJyk7XG4gICAgICBpZiAoIWhhRm9ybUN1c3RvbWl6ZSkge1xuICAgICAgICAvLyBET00gbm90IHJlYWR5LiBXYWl0IDEwMG1zLlxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhRm9ybUN1c3RvbWl6ZSwgMTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHdpbmRvdy5jdXN0b21VSS5oYUZvcm1DdXN0b21pemVJbml0RG9uZSkgcmV0dXJuO1xuICAgICAgd2luZG93LmN1c3RvbVVJLmhhRm9ybUN1c3RvbWl6ZUluaXREb25lID0gdHJ1ZTtcblxuICAgICAgaWYgKCF3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwpIHJldHVybjtcbiAgICAgIGlmIChoYUZvcm1DdXN0b21pemUucHJvdG90eXBlLl9jb21wdXRlU2luZ2xlQXR0cmlidXRlKSB7XG4gICAgICAgIC8vIFVzZSBuYW1lZCBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycuXG4gICAgICAgIGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuX2NvbXB1dGVTaW5nbGVBdHRyaWJ1dGUgPVxuICAgICAgICAgIGZ1bmN0aW9uIGN1c3RvbUNvbXB1dGVTaW5nbGVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFU1trZXldXG4gICAgICAgICAgICAgICAgfHwgeyB0eXBlOiB3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuVU5LTk9XTl9UWVBFIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdE9wZW5PYmplY3Qoa2V5LCBjb25maWcudHlwZSA9PT0gJ2pzb24nID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogdmFsdWUsIHNlY29uZGFyeSwgY29uZmlnKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGhhRm9ybUN1c3RvbWl6ZS5wcm90b3R5cGUuZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMpIHtcbiAgICAgICAgLy8gVXNlIG5hbWVkIGZ1bmN0aW9uIHRvIHByZXNlcnZlICd0aGlzJy5cbiAgICAgICAgaGFGb3JtQ3VzdG9taXplLnByb3RvdHlwZS5nZXROZXdBdHRyaWJ1dGVzT3B0aW9ucyA9XG4gICAgICAgICAgZnVuY3Rpb24gY3VzdG9tZ2V0TmV3QXR0cmlidXRlc09wdGlvbnMoXG4gICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZXMsIGdsb2JhbEF0dHJpYnV0ZXMsIGV4aXN0aW5nQXR0cmlidXRlcywgbmV3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga25vd25LZXlzID1cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh3aW5kb3cuaGFzc0F0dHJpYnV0ZVV0aWwuTE9HSUNfU1RBVEVfQVRUUklCVVRFUylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25mID0gd2luZG93Lmhhc3NBdHRyaWJ1dGVVdGlsLkxPR0lDX1NUQVRFX0FUVFJJQlVURVNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmYgJiYgKCFjb25mLmRvbWFpbnMgfHwgIXRoaXMuZW50aXR5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYuZG9tYWlucy5pbmNsdWRlcyhjb21wdXRlU3RhdGVEb21haW4odGhpcy5lbnRpdHkpKSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcih0aGlzLmZpbHRlckZyb21BdHRyaWJ1dGVzKGxvY2FsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZ2xvYmFsQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyRnJvbUF0dHJpYnV0ZXMoZXhpc3RpbmdBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJGcm9tQXR0cmlidXRlcyhuZXdBdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICByZXR1cm4ga25vd25LZXlzLnNvcnQoKS5jb25jYXQoJ090aGVyJyk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBpbnN0YWxsQ2xhc3NIb29rcygpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmNsYXNzSW5pdERvbmUpIHJldHVybjtcbiAgICB3aW5kb3cuY3VzdG9tVUkuY2xhc3NJbml0RG9uZSA9IHRydWU7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxQYXJ0aWFsQ2FyZHMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbFN0YXRlc0hvb2soKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEhhU3RhdGVMYWJlbEJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxTdGF0ZUJhZGdlKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUF0dHJpYnV0ZXMoKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NlbmUnKTtcbiAgICB3aW5kb3cuY3VzdG9tVUkuaW5zdGFsbEFjdGlvbk5hbWUoJ3N0YXRlLWNhcmQtc2NyaXB0Jyk7XG4gIH0sXG5cbiAgaW5pdCgpIHtcbiAgICBpZiAod2luZG93LmN1c3RvbVVJLmluaXREb25lKSByZXR1cm47XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxDbGFzc0hvb2tzKCk7XG4gICAgY29uc3QgbWFpbiA9IHdpbmRvdy5jdXN0b21VSS5saWdodE9yU2hhZG93KGRvY3VtZW50LCAnaG9tZS1hc3Npc3RhbnQnKTtcbiAgICBpZiAoIW1haW4uaGFzcyB8fCAhbWFpbi5oYXNzLnN0YXRlcykge1xuICAgICAgLy8gQ29ubmVjdGlvbiB3YXNuJ3QgbWFkZSB5ZXQuIFRyeSBpbiAxIHNlY29uZC5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHdpbmRvdy5jdXN0b21VSS5pbml0LCAxMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LmN1c3RvbVVJLmluaXREb25lID0gdHJ1ZTtcblxuICAgIHdpbmRvdy5jdXN0b21VSS51c2VDdXN0b21pemVyKCk7XG5cbiAgICB3aW5kb3cuY3VzdG9tVUkucnVuSG9va3MoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9jYXRpb24tY2hhbmdlZCcsIHdpbmRvdy5zZXRUaW1lb3V0LmJpbmQobnVsbCwgd2luZG93LmN1c3RvbVVJLnJ1bkhvb2tzLCAxMDApKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5sb2coYExvYWRlZCBDdXN0b21VSSAke1ZFUlNJT059YCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKCF3aW5kb3cuQ1VTVE9NX1VJX0xJU1QpIHtcbiAgICAgIHdpbmRvdy5DVVNUT01fVUlfTElTVCA9IFtdO1xuICAgIH1cbiAgICB3aW5kb3cuQ1VTVE9NX1VJX0xJU1QucHVzaCh7XG4gICAgICBuYW1lOiAnQ3VzdG9tVUknLFxuICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgIHVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXktZ2l0L2hvbWUtYXNzaXN0YW50LWN1c3RvbS11aScsXG4gICAgfSk7XG4gIH0sXG5cbiAgcnVuSG9va3MoKSB7XG4gICAgd2luZG93LmN1c3RvbVVJLmZpeEdyb3VwVGl0bGVzKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLnVwZGF0ZUNvbmZpZ1BhbmVsKCk7XG4gICAgd2luZG93LmN1c3RvbVVJLmluc3RhbGxIYUZvcm1DdXN0b21pemUoKTtcbiAgfSxcblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hhLWRldmljZS1uYW1lJykgfHwgJyc7XG4gIH0sXG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoYS1kZXZpY2UtbmFtZScsIG5hbWUgfHwgJycpO1xuICB9LFxuXG4gIGNvbXB1dGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgaGFzcywgZW50aXRpZXMsIGVudGl0eSwgYXR0cmlidXRlcywgYXR0cmlidXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9ICh0ZW1wbGF0ZS5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSA/IHRlbXBsYXRlIDogYHJldHVybiBcXGAke3RlbXBsYXRlfVxcYDtgO1xuICAgIHRyeSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYyAqL1xuICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcbiAgICAgICAgJ2hhc3MnLCAnZW50aXRpZXMnLCAnZW50aXR5JywgJ2F0dHJpYnV0ZXMnLCAnYXR0cmlidXRlJywgJ3N0YXRlJywgZnVuY3Rpb25Cb2R5KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3LWZ1bmMgKi9cbiAgICAgIHJldHVybiBmdW5jKGhhc3MsIGVudGl0aWVzLCBlbnRpdHksIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgc3RhdGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIGlmICgoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB8fCBlIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2UubmFtZX06ICR7ZS5tZXNzYWdlfSBpbiB0ZW1wbGF0ZSAke2Z1bmN0aW9uQm9keX1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9LFxufTtcbndpbmRvdy5jdXN0b21VSS5pbml0KCk7XG4iLCJleHBvcnQgZGVmYXVsdCAnMjAxOTAzMjQnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/scripts-es5.js.map b/scripts-es5.js.map index 2a0b138..518fa9b 100644 --- a/scripts-es5.js.map +++ b/scripts-es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../home-assistant-polymer/src/common/dom/apply_themes_on_element.js","webpack:///../home-assistant-polymer/src/common/entity/compute_domain.ts","webpack:///../home-assistant-polymer/src/common/entity/compute_state_domain.ts","webpack:///../home-assistant-polymer/src/common/dom/dynamic_content_updater.js","webpack:///../home-assistant-polymer/src/common/entity/supports-feature.ts","webpack:///../home-assistant-polymer/src/common/const.ts","webpack:///../home-assistant-polymer/src/common/entity/state_card_type.ts","webpack:///./node_modules/@polymer/polymer/lib/utils/html-tag.js","webpack:///./src/mixins/events-mixin.js","webpack:///./src/elements/ha-config-custom-ui.js","webpack:///./src/utils/version.js","webpack:///../home-assistant-polymer/src/util/hass-attributes-util.js","webpack:///./src/utils/hass-attribute-util.js","webpack:///./src/utils/hooks.js","webpack:///../home-assistant-polymer/src/common/entity/get_view_entities.ts","webpack:///../home-assistant-polymer/src/common/entity/get_group_entities.ts","webpack:///./src/elements/cui-base-element.js","webpack:///./src/elements/dynamic-element.js","webpack:///./src/elements/dynamic-with-extra.js","webpack:///./src/elements/ha-themed-slider.js","webpack:///./src/elements/state-card-with-slider.js","webpack:///./src/elements/state-card-without-slider.js","webpack:///./src/elements/state-card-custom-ui.js","webpack:///../home-assistant-polymer/src/common/entity/can_toggle_state.ts","webpack:///../home-assistant-polymer/src/common/entity/can_toggle_domain.ts","webpack:///./node_modules/@polymer/polymer/lib/utils/boot.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","default","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","applyThemesOnElement","element","themes","localTheme","updateMeta","arguments","length","_themes","themeName","default_theme","styles","assign","theme","keys","forEach","key","prefixedKey","updateStyles","window","ShadyCSS","styleSubtree","meta","document","querySelector","hasAttribute","setAttribute","getAttribute","themeColor","computeDomain","entityId","substr","indexOf","computeStateDomain","stateObj","entity_id","dynamicContentUpdater","root","newElementTag","attributes","customEl","rootEl","lastChild","tagName","removeChild","createElement","toLowerCase","setProperties","parentNode","appendChild","supportsFeature","feature","supported_features","DOMAINS_WITH_CARD","_defineProperties","target","props","descriptor","writable","Set","LiteralString","string","this","toString","html","strings","template","_len","values","Array","_key","innerHTML","reduce","acc","v","idx","HTMLTemplateElement","Error","concat","literalValue","events_mixin","superClass","_superClass","EventsMixin","instance","Constructor","TypeError","_getPrototypeOf","apply","subClass","create","constructor","_setPrototypeOf","type","detail","options","event","Event","bubbles","cancelable","Boolean","composed","node","dispatchEvent","ha_config_custom_ui_typeof","obj","Symbol","iterator","_templateObject","raw","data","slice","freeze","defineProperties","ha_config_custom_ui_defineProperties","_get","receiver","Reflect","base","ha_config_custom_ui_getPrototypeOf","desc","getOwnPropertyDescriptor","setPrototypeOf","getPrototypeOf","__proto__","ha_config_custom_ui_setPrototypeOf","ha_config_custom_ui_HaConfigCustomUi","self","ReferenceError","Polymer","Element","isWide","String","observer","protoProps","HaConfigCustomUi","customUI","getName","setName","history","back","fire","staticProps","customElements","define","hassAttributeUtil","binary_sensor","cover","sensor","json","icon","boolean","array","key-value","LOGIC_STATE_ATTRIBUTES","entity_picture","friendly_name","description","emulated_hue","domains","emulated_hue_name","haaska_hidden","haaska_name","homebridge_hidden","homebridge_name","attribution","custom_ui_more_info","custom_ui_state_card","device_class","DOMAIN_DEVICE_CLASS","hidden","assumed_state","initial_state","unit_of_measurement","hass_attributes_util","SUPPORTED_SLIDER_MODES","customUiAttributes","group","device","templates","state","_stateDisplay","control_element","state_card_mode","light","climate","*","state_card_custom_ui_secondary","badges_list","show_last_changed","hide_control","extra_data_template","extra_badge","stretch_slider","slider_theme","confirm_controls","confirm_controls_show_lock","hide_in_default_view","icon_color","cui_base_element_typeof","cui_base_element_defineProperties","cui_base_element_getPrototypeOf","cui_base_element_setPrototypeOf","UNKNOWN_TYPE","domHost","elem","getRootNode","DocumentFragment","host","lightOrShadow","selector","shadowRoot","getElementHierarchy","hierarchy","shift","getContext","_context","groupEntity","push","states","reverse","findMatch","find","option","match","maybeChangeObjectByDevice","applyAttributes","maybeChangeObjectByGroup","_this","context","_setKeep","_cui_keep","maybeApplyTemplateAttributes","hass","newAttributes","hasGlobal","hasChanges","computeTemplate","untemplated_attributes","untemplated_state","result","untemplated_stateDisplay","maybeApplyTemplates","newResult","checkAttributes","last_changed","maybeChangeObject","inDialog","allowHidden","fixGroupTitles","homeAssistantMain","haCards","$","main","querySelectorAll","card","textContent","setTimeout","controlColumns","columns","partialCards","f","handleWindowChange","_updateColumns","mqls","mql","removeListener","map","width","matchMedia","addListener","bind","useCustomizer","customizer","hide_attributes","attr","updateConfigPanel","location","pathname","startsWith","haPanelConfig","haConfigNavigation","localize","cuiPatch","_originalComputeLoaded","_computeLoaded","_originalComputeCaption","_computeCaption","_originalComputeDescription","_computeDescription","page","pages","some","conf","domain","caption","loaded","getHaConfigCustomUi","haConfigCustomUi","ironPages","lastElementChild","addEventListener","select","visible","style","display","installStatesHook","whenDefined","then","homeAssistant","_updateHass","originalUpdate","entity","newEntity","_themeWaiters","waiter","stateChanged","installPartialCards","_defaultViewFilter","excludes","excludeEntityId","view","viewEntities","entities","groupEntities","grEntityId","grEntity","filter","id","installActionName","elementName","klass","action_name","__data","set","installHaStateLabelBadge","haStateLabelBadge","startInterval","installStateBadge","stateBadge","_updateIconAppearance","originalUpdateIconAppearance","backgroundImage","color","installHaAttributes","haAttributes","computeFiltersArray","extraFilters","split","installHaFormCustomize","haFormCustomize","haFormCustomizeInitDone","_computeSingleAttribute","secondary","config","_initOpenObject","JSON","stringify","getNewAttributesOptions","localAttributes","globalAttributes","existingAttributes","_this2","includes","filterFromAttributes","sort","installClassHooks","classInitDone","init","initDone","runHooks","console","log","CUSTOM_UI_LIST","version","url","localStorage","getItem","setItem","attribute","functionBody","Function","e","SyntaxError","warn","message","cui_base_element","controlElement","extra","computed","extras","isArray","CuiBaseElement","dynamic_element_typeof","dynamic_element_defineProperties","dynamic_element_getPrototypeOf","dynamic_element_setPrototypeOf","dynamic_element_DynamicElement","toUpperCase","DynamicWithExtra","_customElements$get","dynamic_with_extra_getPrototypeOf","dynamic_with_extra_setPrototypeOf","dynamic_with_extra_templateObject","extraObj","_attached","extraObjVisible","dynamic_with_extra_get","_isAttached","attached","extraBadges","extraBadge","unit","blacklist","blacklist_states","RegExp","test","_entityDisplay","haLocalize","pointerEvents","lock","opacity","stopPropagation","_this3","applyThemes","ha_themed_slider_HaThemedSlider","ha_themed_slider_templateObject","min","Number","max","pin","isOn","disableOffWhenMin","notify","disableReportWhenNotChanged","_themedMin","ha_themed_slider_get","ha_themed_slider_getPrototypeOf","HaThemedSlider","_computeAttribute","computeEnabledThemedReportWhenNotChanged","_enabledThemedReportWhenNotChanged","def","themedMin","ev","state_card_with_slider_StateCardWithSlider","state_card_with_slider_templateObject","serviceMin","serviceMax","valueName","setValueName","nameOn","sliderValue","mode","stretchSlider","breakSlider","hideSlider","lineTooLong","minLineBreak","maxLineBreak","showSlider","state_card_with_slider_get","state_card_with_slider_getPrototypeOf","StateCardWithSlider","_onIronResize","_isConnected","_waitForLayout","removeEventListener","_setMode","_frameId","readyToCompute","requestAnimationFrame","prevBreakSlider","prevHideSlider","container","containerWidth","clientWidth","containerHeight","clientHeight","stateHeight","parseInt","param","isNaN","path","_slicedToArray","composedPath","callService","state_card_without_slider_StateCardWithoutSlider","state_card_without_slider_templateObject","SHOW_LAST_CHANGED_BLACKLISTED_CARDS","DOMAIN_TO_SLIDER_SUPPORT","TYPE_TO_CONTROL","toggle","state_card_custom_ui_StateCardCustomUi","state_card_custom_ui_get","state_card_custom_ui_getPrototypeOf","StateCardCustomUi","classList","contains","_container","setProperty","inputChanged","margin","padding","params","text-align","fontSize","modifiedObj","themeTarget","maybeHideEntity","regularMode_","badgeMode","cleanBadgeStyle","customStateCardType","originalStateCardType","services","control","stateCardType","secondaryStateCardType","sliderEligible_","min_temp","max_temp","JSCompiler_renameProperty","prop"],"mappings":"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","file":"scripts-es5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/**\n * Apply a theme to an element by setting the CSS variables on it.\n *\n * element: Element to apply theme on.\n * themes: HASS Theme information\n * localTheme: selected theme.\n * updateMeta: boolean if we should update the theme-color meta element.\n */\nexport default function applyThemesOnElement(\n element,\n themes,\n localTheme,\n updateMeta = false\n) {\n if (!element._themes) {\n element._themes = {};\n }\n let themeName = themes.default_theme;\n if (localTheme === \"default\" || (localTheme && themes.themes[localTheme])) {\n themeName = localTheme;\n }\n const styles = Object.assign({}, element._themes);\n if (themeName !== \"default\") {\n var theme = themes.themes[themeName];\n Object.keys(theme).forEach((key) => {\n var prefixedKey = \"--\" + key;\n element._themes[prefixedKey] = \"\";\n styles[prefixedKey] = theme[key];\n });\n }\n if (element.updateStyles) {\n element.updateStyles(styles);\n } else if (window.ShadyCSS) {\n // implement updateStyles() method of Polemer elements\n window.ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ (element), styles);\n }\n\n if (!updateMeta) return;\n\n const meta = document.querySelector(\"meta[name=theme-color]\");\n if (meta) {\n if (!meta.hasAttribute(\"default-content\")) {\n meta.setAttribute(\"default-content\", meta.getAttribute(\"content\"));\n }\n const themeColor =\n styles[\"--primary-color\"] || meta.getAttribute(\"default-content\");\n meta.setAttribute(\"content\", themeColor);\n }\n}\n","export default function computeDomain(entityId: string): string {\n return entityId.substr(0, entityId.indexOf(\".\"));\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport computeDomain from \"./compute_domain\";\n\nexport default function computeStateDomain(stateObj: HassEntity) {\n return computeDomain(stateObj.entity_id);\n}\n","/**\n * Update root's child element to be newElementTag replacing another existing child if any.\n * Copy attributes into the child element.\n */\nexport default function dynamicContentUpdater(root, newElementTag, attributes) {\n const rootEl = root;\n let customEl;\n\n if (rootEl.lastChild && rootEl.lastChild.tagName === newElementTag) {\n customEl = rootEl.lastChild;\n } else {\n if (rootEl.lastChild) {\n rootEl.removeChild(rootEl.lastChild);\n }\n // Creating an element with upper case works fine in Chrome, but in FF it doesn't immediately\n // become a defined Custom Element. Polymer does that in some later pass.\n customEl = document.createElement(newElementTag.toLowerCase());\n }\n\n if (customEl.setProperties) {\n customEl.setProperties(attributes);\n } else {\n // If custom element definition wasn't loaded yet - setProperties would be\n // missing, but no harm in setting attributes one-by-one then.\n Object.keys(attributes).forEach((key) => {\n customEl[key] = attributes[key];\n });\n }\n\n if (customEl.parentNode === null) {\n rootEl.appendChild(customEl);\n }\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const supportsFeature = (\n stateObj: HassEntity,\n feature: number\n): boolean => {\n // tslint:disable-next-line:no-bitwise\n return (stateObj.attributes.supported_features! & feature) !== 0;\n};\n","/** Constants to be used in the frontend. */\n\n// Constants should be alphabetically sorted by name.\n// Arrays with values should be alphabetically sorted if order doesn't matter.\n// Each constant should have a description what it is supposed to be used for.\n\n/** Icon to use when no icon specified for domain. */\nexport const DEFAULT_DOMAIN_ICON = \"hass:bookmark\";\n\n/** Panel to show when no panel is picked. */\nexport const DEFAULT_PANEL = \"states\";\n\n/** Domains that have a state card. */\nexport const DOMAINS_WITH_CARD = [\n \"climate\",\n \"cover\",\n \"configurator\",\n \"input_select\",\n \"input_number\",\n \"input_text\",\n \"lock\",\n \"media_player\",\n \"scene\",\n \"script\",\n \"timer\",\n \"vacuum\",\n \"water_heater\",\n \"weblink\",\n];\n\n/** Domains with separate more info dialog. */\nexport const DOMAINS_WITH_MORE_INFO = [\n \"alarm_control_panel\",\n \"automation\",\n \"camera\",\n \"climate\",\n \"configurator\",\n \"cover\",\n \"fan\",\n \"group\",\n \"history_graph\",\n \"input_datetime\",\n \"light\",\n \"lock\",\n \"media_player\",\n \"script\",\n \"sun\",\n \"updater\",\n \"vacuum\",\n \"water_heater\",\n \"weather\",\n];\n\n/** Domains that show no more info dialog. */\nexport const DOMAINS_HIDE_MORE_INFO = [\n \"input_number\",\n \"input_select\",\n \"input_text\",\n \"scene\",\n \"weblink\",\n];\n\n/** Domains that should have the history hidden in the more info dialog. */\nexport const DOMAINS_MORE_INFO_NO_HISTORY = [\n \"camera\",\n \"configurator\",\n \"history_graph\",\n \"scene\",\n];\n\n/** States that we consider \"off\". */\nexport const STATES_OFF = [\"closed\", \"locked\", \"off\"];\n\n/** Domains where we allow toggle in Lovelace. */\nexport const DOMAINS_TOGGLE = new Set([\n \"fan\",\n \"input_boolean\",\n \"light\",\n \"switch\",\n]);\n\n/** Temperature units. */\nexport const UNIT_C = \"°C\";\nexport const UNIT_F = \"°F\";\n\n/** Entity ID of the default view. */\nexport const DEFAULT_VIEW_ENTITY_ID = \"group.default_view\";\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport canToggleState from \"./can_toggle_state\";\nimport computeStateDomain from \"./compute_state_domain\";\nimport { DOMAINS_WITH_CARD } from \"../const\";\nimport { HomeAssistant } from \"../../types\";\n\nexport default function stateCardType(\n hass: HomeAssistant,\n stateObj: HassEntity\n) {\n if (stateObj.state === \"unavailable\") {\n return \"display\";\n }\n\n const domain = computeStateDomain(stateObj);\n\n if (DOMAINS_WITH_CARD.includes(domain)) {\n return domain;\n }\n if (\n canToggleState(hass, stateObj) &&\n stateObj.attributes.control !== \"hidden\"\n ) {\n return \"toggle\";\n }\n return \"display\";\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport './boot.js';\n\n/**\n * Class representing a static string value which can be used to filter\n * strings by asseting that they have been created via this class. The\n * `value` property returns the string passed to the constructor.\n */\nclass LiteralString {\n constructor(string) {\n /** @type {string} */\n this.value = string.toString();\n }\n /**\n * @return {string} LiteralString string value\n */\n toString() {\n return this.value;\n }\n}\n\n/**\n * @param {*} value Object to stringify into HTML\n * @return {string} HTML stringified form of `obj`\n */\nfunction literalValue(value) {\n if (value instanceof LiteralString) {\n return /** @type {!LiteralString} */(value).value;\n } else {\n throw new Error(\n `non-literal value passed to Polymer's htmlLiteral function: ${value}`\n );\n }\n}\n\n/**\n * @param {*} value Object to stringify into HTML\n * @return {string} HTML stringified form of `obj`\n */\nfunction htmlValue(value) {\n if (value instanceof HTMLTemplateElement) {\n return /** @type {!HTMLTemplateElement } */(value).innerHTML;\n } else if (value instanceof LiteralString) {\n return literalValue(value);\n } else {\n throw new Error(\n `non-template value passed to Polymer's html function: ${value}`);\n }\n}\n\n/**\n * A template literal tag that creates an HTML