survey-creator-react 1.9.28 → 1.9.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SurveyJS Creator React v1.9.28
2
+ * SurveyJS Creator React v1.9.31
3
3
  * (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * Github: https://github.com/surveyjs/survey-creator
5
5
  * License: https://surveyjs.io/Licenses#SurveyCreator
@@ -357,8 +357,10 @@ var LogoImageComponent = /** @class */ (function (_super) {
357
357
  content = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
358
358
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["LogoImage"], { data: this.props.data.survey }),
359
359
  this.model.allowEdit ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-image-item-value-controls" },
360
- Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { className: "svc-image-item-value-controls__button svc-image-item-value-controls__choose-file", size: 24, iconName: "icon-file", onClick: function () { return _this.model.chooseFile(_this.model); } })),
361
- Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { className: "svc-image-item-value-controls__button svc-image-item-value-controls__remove", size: 24, iconName: "icon-delete", onClick: function () { return _this.model.remove(_this.model); } }))) : null);
360
+ Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-image-item-value-controls__button svc-image-item-value-controls__choose-file", onClick: function () { return _this.model.chooseFile(_this.model); } },
361
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { size: 24, iconName: "icon-file" }))),
362
+ Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-image-item-value-controls__button svc-image-item-value-controls__remove", onClick: function () { return _this.model.remove(_this.model); } },
363
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { size: 24, iconName: "icon-delete" })))) : null);
362
364
  }
363
365
  else {
364
366
  content = this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-logo-image-placeholder", onClick: function () { return _this.model.chooseFile(_this.model); } }, this.model.chooseLogoPlaceholder)) : null;
@@ -2281,10 +2283,10 @@ survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.reg
2281
2283
  __webpack_require__.r(__webpack_exports__);
2282
2284
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingAdornerComponent", function() { return QuestionRatingAdornerComponent; });
2283
2285
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./src/entries/helpers.ts");
2284
- /* harmony import */ var survey_creator_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-creator-core */ "survey-creator-core");
2285
- /* harmony import */ var survey_creator_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_creator_core__WEBPACK_IMPORTED_MODULE_1__);
2286
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
2287
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
2286
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
2287
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
2288
+ /* harmony import */ var survey_creator_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-creator-core */ "survey-creator-core");
2289
+ /* harmony import */ var survey_creator_core__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(survey_creator_core__WEBPACK_IMPORTED_MODULE_2__);
2288
2290
  /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-react-ui */ "survey-react-ui");
2289
2291
  /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__);
2290
2292
 
@@ -2299,7 +2301,7 @@ var QuestionRatingAdornerComponent = /** @class */ (function (_super) {
2299
2301
  return _this;
2300
2302
  }
2301
2303
  QuestionRatingAdornerComponent.prototype.createQuestionViewModel = function () {
2302
- return new survey_creator_core__WEBPACK_IMPORTED_MODULE_1__["QuestionRatingAdornerViewModel"](this.props.componentData, this.props.question, null);
2304
+ return new survey_creator_core__WEBPACK_IMPORTED_MODULE_2__["QuestionRatingAdornerViewModel"](this.props.componentData, this.props.question, null);
2303
2305
  };
2304
2306
  Object.defineProperty(QuestionRatingAdornerComponent.prototype, "ratingModel", {
2305
2307
  get: function () {
@@ -2320,23 +2322,23 @@ var QuestionRatingAdornerComponent = /** @class */ (function (_super) {
2320
2322
  };
2321
2323
  QuestionRatingAdornerComponent.prototype.renderElement = function () {
2322
2324
  var model = this.ratingModel;
2323
- return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null,
2324
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-rating-question-content" },
2325
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-rating-question-controls svc-item-value-controls" },
2326
- model.allowRemove ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__remove", "aria-label": model.removeTooltip, onClick: function () { return model.removeItem(model); } },
2327
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-remove_16x16" }))) : null,
2328
- model.allowAdd ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__add", "aria-label": model.addTooltip, onClick: function () { return model.addItem(model); } },
2329
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-add_16x16" }))) : null),
2325
+ return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
2326
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-rating-question-content" },
2327
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-rating-question-controls svc-item-value-controls" },
2328
+ model.allowRemove ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__remove", "aria-label": model.removeTooltip, onClick: function () { return model.removeItem(model); } },
2329
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-remove_16x16" }))) : null,
2330
+ model.allowAdd ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__add", "aria-label": model.addTooltip, onClick: function () { return model.addItem(model); } },
2331
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-add_16x16" }))) : null),
2330
2332
  this.props.element)));
2331
2333
  };
2332
2334
  return QuestionRatingAdornerComponent;
2333
2335
  }(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"]));
2334
2336
 
2335
2337
  survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.registerElement("svc-rating-question", function (props) {
2336
- return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(QuestionRatingAdornerComponent, props);
2338
+ return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(QuestionRatingAdornerComponent, props);
2337
2339
  });
2338
2340
  survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.registerElement("svc-rating-question-content", function (props) {
2339
- return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(QuestionRatingAdornerComponent, props);
2341
+ return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(QuestionRatingAdornerComponent, props);
2340
2342
  });
2341
2343
 
2342
2344
 
@@ -2669,7 +2671,7 @@ __webpack_require__.r(__webpack_exports__);
2669
2671
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return survey_creator_core__WEBPACK_IMPORTED_MODULE_42__["StylesManager"]; });
2670
2672
 
2671
2673
  var Version;
2672
- Version = "".concat("1.9.28");
2674
+ Version = "".concat("1.9.31");
2673
2675
  // import "@survey/creator/survey-creator-core.css";
2674
2676
 
2675
2677
 
@@ -2949,9 +2951,12 @@ var TabDesignerComponent = /** @class */ (function (_super) {
2949
2951
  TabDesignerComponent.prototype.renderPlaceHolder = function () {
2950
2952
  return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
2951
2953
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-designer__placeholder-container", "data-sv-drop-target-survey-element": "newGhostPage" },
2952
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-designer-placeholder-text svc-text svc-text--normal" }, this.model.placeholderText),
2954
+ this.renderPlaceHolderContent(),
2953
2955
  this.renderNewPage("svc-designer-placeholder-page"))));
2954
2956
  };
2957
+ TabDesignerComponent.prototype.renderPlaceHolderContent = function () {
2958
+ return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-designer-placeholder-text svc-text svc-text--normal" }, this.model.placeholderText);
2959
+ };
2955
2960
  TabDesignerComponent.prototype.renderTabContent = function () {
2956
2961
  var survey = this.creator.survey;
2957
2962
  return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
@@ -3846,4 +3851,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
3846
3851
 
3847
3852
  /******/ });
3848
3853
  });
3849
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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RUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMvRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FDdERGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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Ozs7Ozs7Ozs7O0FDQUEsNkQiLCJmaWxlIjoic3VydmV5LWNyZWF0b3ItcmVhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN1cnZleUNyZWF0b3JcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiLCBcInN1cnZleS1jcmVhdG9yLWNvcmVcIiwgXCJzdXJ2ZXktcmVhY3QtdWlcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSwgcm9vdFtcIlN1cnZleUNyZWF0b3JDb3JlXCJdLCByb290W1wiU3VydmV5UmVhY3RcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9pbmRleC50c1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjbGFzc2VzID0gdGhpcy5wcm9wcy5jbGFzc2VzICsgXCIgc3ZjLWFjdGlvbi1idXR0b25cIjtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgY2xhc3NlcyArPSBcIiBzdmMtYWN0aW9uLWJ1dHRvbi0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLWRpc2FibGVkXCI7XG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtjbGFzc2VzfT57dGhpcy5wcm9wcy50ZXh0fTwvc3Bhbj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEltYWdlSXRlbVZhbHVlLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEltYWdlSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgcHJldmVudERyYWdIYW5kbGVyID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBpc05ldyA9ICF0aGlzLnByb3BzLnF1ZXN0aW9uLmlzSXRlbUluTGlzdCh0aGlzLnByb3BzLml0ZW0pO1xuICAgIGNvbnN0IGltYWdlU3R5bGUgPSB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfTtcblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGNvbnRlbnQgPSAoPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAoaXNOZXcgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlci0tZ2hvc3RcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMucHJldmVudERyYWdIYW5kbGVyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19naG9zdFwifSBzdHlsZT17aW1hZ2VTdHlsZX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2NvbnRlbnRcIn0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IGdldExvY1N0cmluZywgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCB9IGZyb20gXCJzcmMvZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBpdGVtOiBJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICBcInN2Yy1pdGVtLXZhbHVlLXdyYXBwZXJcIiArXG4gICAgICAgICAgKHRoaXMubW9kZWwuYWxsb3dBZGQgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnZ2luZyA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1kcmFnZ2luZ1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BHaG9zdCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1naG9zdFwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlRG93biA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlVXAgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZXVwXCIgOiBcIlwiKVxuICAgICAgICB9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlPXtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gdGhpcy5tb2RlbC5pdGVtLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWVfX2dob3N0XCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPntidXR0b259PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWl0ZW0tdmFsdWVfX2l0ZW1cIn0gb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBldmVudCl9Pnt0aGlzLnByb3BzLmVsZW1lbnR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsOiBMb2dvSW1hZ2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbChwcm9wcy5kYXRhLCBudWxsKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLm1vZGVsLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCkge1xuICAgICAgY29udGVudCA9IDw+XG4gICAgICAgIDxMb2dvSW1hZ2UgZGF0YT17dGhpcy5wcm9wcy5kYXRhLnN1cnZleX0+PC9Mb2dvSW1hZ2U+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxTdmdJY29uIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9PjwvU3ZnSWNvbj4pfVxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfT48L1N2Z0ljb24+KX1cbiAgICAgICAgPC9kaXY+IDogbnVsbH1cbiAgICAgIDwvPjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZS1wbGFjZWhvbGRlclwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+e3RoaXMubW9kZWwuY2hvb3NlTG9nb1BsYWNlaG9sZGVyfTwvZGl2PikgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2VcIj5cbiAgICAgICAgPGlucHV0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgdGFiSW5kZXg9ey0xfSBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCIgLz5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWxvZ28taW1hZ2VcIixcbiAgKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGNlbGw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsKFxuICAgICAgZGF0YS5jcmVhdG9yLFxuICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgZGF0YS5xdWVzdGlvbixcbiAgICAgIGRhdGEucm93LFxuICAgICAgZGF0YS5jb2x1bW4sXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGVEYXRhID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMubW9kZWwucm93ID0gZGF0YS5yb3c7XG4gICAgdGhpcy5tb2RlbC5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udHJvbHMgPSBudWxsO1xuICAgIGlmICghIXRoaXMubW9kZWwucXVlc3Rpb24pIHtcbiAgICAgIGNvbnRyb2xzID0gPGRpdiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmVkaXRRdWVzdGlvbih0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZWRpdFwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pfVxuICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGxcIn1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiAhdGhpcy5wcm9wcy5xdWVzdGlvbiAmJiB0aGlzLm1vZGVsLnNlbGVjdENvbnRleHQodGhpcy5tb2RlbCwgZSl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbC0tc2VsZWN0ZWRcIiArICh0aGlzLm1vZGVsLmlzU2VsZWN0ZWQgPyBcIiBzdmMtdmlzaWJsZVwiIDogXCJcIil9PjwvZGl2PlxuXG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAge2NvbnRyb2xzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtbWF0cml4LWNlbGxcIixcbiAgKHByb3BzOiBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIHByaXZhdGUgc2V0SGFuZGxlcigpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuaGFzRnVuYyh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5hZGQodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gIH1cbiAgICBwcml2YXRlIG9uUHJvcENoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlYWN0aXZlUHJvcHMgPSBbXG4gICAgICAgIFwic2hvd1Byb2dyZXNzQmFyXCIsXG4gICAgICAgIFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgICAgIFwiY3VycmVudFBhZ2VWYWx1ZVwiXG4gICAgICBdO1xuICAgICAgaWYgKHJlYWN0aXZlUHJvcHMuaW5kZXhPZihvcHRpb25zLm5hbWUpIDwgMCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlYWN0aXZlUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcmVhY3RpdmVQcm9wc1tpXTtcbiAgICAgICAgdmFsW3Byb3BOYW1lXSA9IHRoaXMuc3VydmV5W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUodmFsKTtcbiAgICB9O1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NhdGlvbjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uID09IFwidG9wXCI7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RvcFxuICAgICAgICA/IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcbiAgICAgICAgOiB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tO1xuICAgIH1cbiAgICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuc3VydmV5LmNzcywgaXNUb3A6IHRoaXMuaXNUb3AgfVxuICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIE5vdGlmaWVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmllckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIG5vdGlmaWVyOiBOb3RpZmllcjtcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGlmaWVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBOb3RpZmllckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgZ2V0IG5vdGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm5vdGlmaWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllcjtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5ub3RpZmllci5hY3RpdmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubm90aWZpZXIuY3NzfT5cbiAgICAgICAgPHNwYW4+e3RoaXMubm90aWZpZXIubWVzc2FnZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPYmplY3RTZWxlY3Rvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMaXN0IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogT2JqZWN0U2VsZWN0b3JNb2RlbDtcbn1cbmNsYXNzIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpOiBPYmplY3RTZWxlY3Rvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLW9iamVjdC1zZWxlY3RvclwiPlxuICAgICAgICA8TGlzdCBtb2RlbD17dGhpcy5tb2RlbC5saXN0fT48L0xpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLW9iamVjdC1zZWxlY3RvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgdW53cmFwXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb24sXG4gIFBvcHVwLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUGFnZU5hdmlnYXRvclZpZXdNb2RlbCwgUGFnZXNDb250cm9sbGVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBwYWdlc0NvbnRyb2xsZXI6IFBhZ2VzQ29udHJvbGxlcjtcbiAgcGFnZUVkaXRNb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgcHJvcHMucGFnZXNDb250cm9sbGVyLFxuICAgICAgcHJvcHMucGFnZUVkaXRNb2RlXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBHbG9iYWxFdmVudEhhbmRsZXJzLCBldjogRXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5tb2RlbC5vbkNvbnRhaW5lclNjcm9sbChldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3RvclwiO1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUG9wdXBPcGVuZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3Rvci0tb3BlbmVkXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3sgZGlzcGxheTogdGhpcy5tb2RlbC52aXNpYmxlID8gXCJmbGV4XCIgOiBcIm5vbmVcIiB9fT5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVQYWdlU2VsZWN0b3IoKX1cbiAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fbmF2aWdhdG9yLWljb25cIlxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbn1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAge3RoaXMubW9kZWwuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtXG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBzdXJ2ZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKVswXTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uIGNyZWF0b3I9e3RoaXN9IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1N1cnZleVF1ZXN0aW9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZWRpdG9yLWNvbnRlbnRcIixcbiAgKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlQYWdlLCBJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5UmVzdWx0c1Byb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogU3VydmV5UmVzdWx0c01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVJlc3VsdHNQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBpZiAocHJvcHMuc3VydmV5KSB7XG4gICAgICB0aGlzLm1vZGVsID0gbmV3IFN1cnZleVJlc3VsdHNNb2RlbChwcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNUYWJsZVwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNUYWJsZVNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdEpzb25DbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNKc29uXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSkgPT4gPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2l0ZW0uaWR9IHJvdz17aXRlbX0gLz4pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgYmx1cnJlZEJ5RXNjYXBlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmJsdXJFZGl0b3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbk1vdXNlVXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGRvbmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLmRvbmUoZXZlbnQpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBlZGl0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSB0cnVlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ2xpY2soZXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNsYXNzTmFtZSh0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZU1vZGVsLnNldExvY1N0cmluZyh0aGlzLmxvY1N0cmluZyk7XG4gICAgfVxuICAgIGxldCBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmcuaGFzSHRtbCkge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuYmFzZU1vZGVsLmZvY3VzZWQgJiYgdGhpcy5iYXNlTW9kZWwuZWRpdEFzVGV4dCAmJiB0aGlzLmxvY1N0cmluZy50ZXh0IHx8IHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCB9O1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uIHN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24tLWVkaXRcIlxuICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9XG4gICAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udHJvbHNcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5lcnJvclRleHQgPyA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fZXJyb3JcIj57dGhpcy5lcnJvclRleHR9PC9zcGFuPiA6IFwiXCJ9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHtcbiAgQmFzZSxcbiAgUXVlc3Rpb24sXG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBJQ3JlYXRvck9wdGlvbnMsXG4gIENyZWF0b3JCYXNlLFxuICBJVGFiYmVkTWVudUl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFRhYmJlZE1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9UYWJiZWRNZW51XCI7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gXCIuL05vdGlmaWVyXCI7XG5pbXBvcnQgeyBTdmdCdW5kbGVDb21wb25lbnQgfSBmcm9tIFwiLi9TdmdCdW5kbGVcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBTdXJ2ZXlDcmVhdG9yO1xuICBzdHlsZT86IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0gc3R5bGU9e3RoaXMuc3R5bGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdmdSZWdpc3RyeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdCdW5kbGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PFNWR1NWR0VsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IFN2Z1JlZ2lzdHJ5Lmljb25zUmVuZGVyZWRIdG1sKCk7XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdmdTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfTtcbiAgICByZXR1cm4gPHN2ZyBzdHlsZT17c3ZnU3R5bGV9IGlkPVwic3YtaWNvbi1ob2xkZXItZ2xvYmFsLWNvbnRhaW5lclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pjwvc3ZnPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zdmctYnVuZGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdCdW5kbGVDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVDb250YWluZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgQWN0aW9uLFxuICBSZXNwb25zaXZpdHlNYW5hZ2VyLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBUYWJiZWRNZW51Q29udGFpbmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1hbmFnZXI6IFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKChpdGVtKSA9PiA8VGFiYmVkTWVudUl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnVcIj5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgXCIuc3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn1cblxuY2xhc3MgVGFiYmVkTWVudUl0ZW1XcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIGFueSxcbiAgYW55XG4+IHtcblxuICBwcml2YXRlIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lclwiO1xuICAgIGlmICh0aGlzLml0ZW0uY3NzKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLml0ZW0uY3NzO1xuICAgIH1cbiAgICBjc3MgKz0gKCF0aGlzLml0ZW0uaXNWaXNpYmxlID8gXCIgc3YtYWN0aW9uLS1oaWRkZW5cIiA6IFwiXCIpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gICAgICB7IGl0ZW06IHRoaXMuaXRlbSB9XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuaXRlbS5pZH0gY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHtjb21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyB7XG4gIGl0ZW06IEFjdGlvbjtcbn1cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIGlmIChpdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhaXRlbS5lbmFibGVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIGxldCB0aXRsZUNsYXNzTmFtZTogc3RyaW5nID1cbiAgICAgIFwic3ZjLXRleHQgc3ZjLXRhYmJlZC1tZW51LWl0ZW1fX3RleHQgc3ZjLXRleHQtLW5vcm1hbFwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgdGl0bGVDbGFzc05hbWUgKz0gXCIgc3ZjLXRleHQtLWJvbGRcIjtcblxuICAgIHJldHVybiAoYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gaXRlbS5hY3Rpb24oaXRlbSl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3NOYW1lfT57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRNZW51SXRlbUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuZXhwb3J0IGRlZmF1bHQgVGFiYmVkTWVudUNvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgICAgICB7cXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IEJhc2UsIFBhZ2VNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUG9wdXAsXG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVBhZ2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIFBhZ2VBZG9ybmVyLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlQWRvcm5lcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlQWRvcm5lcihcbiAgICAgIHRoaXMucHJvcHMuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucGFnZVxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwub25QYWdlU2VsZWN0ZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghIXRoaXMucm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMucm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1vZGVsICYmXG4gICAgICB0aGlzLm1vZGVsLmlzUGFnZUxpdmUgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZV9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzfVxuICAgICAgICBpZD17dGhpcy5wcm9wcy5wYWdlLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj4pXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8U3VydmV5UGFnZSBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9IHN1cnZleT17dGhpcy5wcm9wcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMucHJvcHMuY3JlYXRvcn0gY3NzPXt0aGlzLm1vZGVsLmNzc30+PC9TdXJ2ZXlQYWdlPik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwgPSB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWw7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYnRuXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24odGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICB9fVxuICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyU3RvcHBlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBpY29uTmFtZT17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFBvcHVwIG1vZGVsPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8L2J1dHRvbj4pfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcGFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYW5lbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgeyF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50ICYmIHRoaXMubW9kZWwuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgICAgIDwvYnV0dG9uPil9XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuXG4gICAgICB7c3VwZXIucmVuZGVyRm9vdGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1wYW5lbFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBjb21wb25lbnREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgIXRoaXMubW9kZWwuaXNEcmFnZ2VkO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYWxsb3dJbnRlcmFjdGlvbnMgPSB0aGlzLm1vZGVsLmVsZW1lbnRcbiAgICAgIC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWUgfHwgbnVsbH1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwiICsgdGhpcy5tb2RlbC5yb290Q3NzKCl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0b2dnbGVIb3ZlcmVkKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9uczogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBpZiAoIWFsbG93SW50ZXJhY3Rpb25zKSByZXR1cm4gPD57IGNvbnRlbnQgfXt0aGlzLnJlbmRlckZvb3RlcigpfTwvPjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3MoKX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcInN2Yy1xdWVzdGlvbl9fY29udGVudC1hY3Rpb25zXCIsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgeyhxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyB8fCBbXSkubWFwKFxuICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVyRm9vdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnByb3BzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJGb290ZXIsIHByb3BzKTtcbiAgfVxuKTtcblxuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubW9kZWwuYWxsb3dEcmFnZ2luZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1hcmVhXCJ9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMubW9kZWwub25Qb2ludGVyRG93bihldmVudClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1lbGVtZW50XCJ9XG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVySGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpbWFnZU1vZGVsKCk6IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuaW1hZ2VNb2RlbC5xdWVzdGlvblJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAge3N1cGVyLnJlbmRlckhlYWRlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmltYWdlTW9kZWwuY2hvb3NlRmlsZSh0aGlzLmltYWdlTW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLFxuICBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJhdGluZ01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnJhdGluZ01vZGVsO1xuICAgIHJldHVybiAoPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250cm9scyBzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHttb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLnJlbW92ZVRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5yZW1vdmVJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5hZGRUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgPC8+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZGdldE1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy13aWRnZXRfX2NvbnRlbnRcIn1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXdpZGdldC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBSb3dWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmludGVyZmFjZSBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBSb3dXcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFJvd1ZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFJvd1ZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5yb3csXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e1wic3ZjLXJvdy1cIiArIHRoaXMucHJvcHMucm93LmlkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlc31cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJvd1wiLFxuICAocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvd1dyYXBwZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImRlY2xhcmUgdmFyIFJlZmxlY3Q6YW55O1xuXG5leHBvcnQgdmFyIF9fZGVjb3JhdGUgPSBmdW5jdGlvbihcbiAgZGVjb3JhdG9yczogYW55LFxuICB0YXJnZXQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGRlc2M6IGFueVxuKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICByID1cbiAgICAgIGMgPCAzXG4gICAgICAgID8gdGFyZ2V0XG4gICAgICAgIDogZGVzYyA9PT0gbnVsbFxuICAgICAgICAgID8gKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSlcbiAgICAgICAgICA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICBpZiAoKGQgPSBkZWNvcmF0b3JzW2ldKSlcbiAgICAgICAgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5leHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG4vLyBpbXBvcnQgXCJAc3VydmV5L2NyZWF0b3Ivc3VydmV5LWNyZWF0b3ItY29yZS5jc3NcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL1N1cnZleUNyZWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1Jvd1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25IZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkZvb3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhbmVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9Mb2dvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkxpbmtWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVkaXRvckNvbnRlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSW1hZ2VJdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTWF0cml4Q2VsbFdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9SZXN1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94SXRlbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvQWRhcHRpdmVUb29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vVGFiYmVkTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05vdGlmaWVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1NpZGVCYXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uTGluZVNrZWxldG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vQWN0aW9uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU3RyaW5nRWRpdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0Rlc2lnbmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9FbWJlZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvckFjZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Mb2dpY1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvUHJldmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1N1cnZleVNpbXVsYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vZXZlbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vT2JqZWN0U2VsZWN0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Qcm9wZXJ0eUdyaWRcIjtcblxuZXhwb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBsb2NhbGl6YXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleUxvZ2ljLCBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBJU3VydmV5Q3JlYXRvck9wdGlvbnMsIElQcm9wZXJ0eUdyaWRFZGl0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgVG9vbGJveFRvb2xWaWV3TW9kZWwsIFByb3BlcnR5R3JpZEVkaXRvckNvbGxlY3Rpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7IiwiaW1wb3J0IHsgSVBvcnRhYmxlRHJhZ0V2ZW50LCBJUG9ydGFibGVNb3VzZUV2ZW50IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0TW91c2VFdmVudCBpbXBsZW1lbnRzIElQb3J0YWJsZU1vdXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSB7fVxuICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG4gIHByZXZlbnREZWZhdWx0KCkge1xuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBnZXQgY2FuY2VsQnViYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vcmV0dXJuIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgLy90aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7XG4gIH1cbiAgZ2V0IGN1cnJlbnRUYXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9XG4gIGdldCBjbGllbnRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WDtcbiAgfVxuICBnZXQgY2xpZW50WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRYO1xuICB9XG4gIGdldCBvZmZzZXRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3REcmFnRXZlbnQgZXh0ZW5kcyBSZWFjdE1vdXNlRXZlbnRcbiAgaW1wbGVtZW50cyBJUG9ydGFibGVEcmFnRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICBzdXBlcihldmVudCk7XG4gIH1cblxuICBnZXQgZGF0YVRyYW5zZmVyKCk6IERhdGFUcmFuc2ZlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuZGF0YVRyYW5zZmVyO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5SGVhZGVyXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBUYWJEZXNpZ25lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIH0gZnJvbSBcIi4uL1BhZ2VOYXZpZ2F0b3JcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuXG5pbnRlcmZhY2UgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUYWJEZXNpZ25lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkRlc2lnbmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUYWJEZXNpZ25lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmNyZWF0b3I7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZW55VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVueUNvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd1VwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmFsbG93Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AuYWRkKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLmFkZCh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLnJlbW92ZSh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5yZW1vdmUodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuYWRkRHJhZ0Ryb3BFdmVudHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jbGVhckRyYWdEcm9wRXZlbnRzKCk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMubW9kZWwsIHRoaXMubW9kZWwuc3VydmV5LCB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcl07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcmVkUGFnZXNDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFBhZ2VzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInBhZ2VzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlID0ge307XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkUGFnZXMgPSBbXTtcblxuICAgIGlmICh0aGlzLmNyZWF0b3IucGFnZUVkaXRNb2RlICE9PSBcImJ5cGFnZVwiKSB7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuY3JlYXRvci5zdXJ2ZXkucGFnZXM7XG5cbiAgICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF07XG4gICAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICAgIGNhY2hlZFBhZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlLCBpbmRleCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChjYWNoZWRQYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbC5zaG93TmV3UGFnZSkge1xuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2godGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLXBhZ2VcIiwgdGhpcy5tb2RlbC5uZXdQYWdlLmlkICsgXCItZ2hvc3QtbmV3LXBhZ2VcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlMkRpc3BsYXkgPSB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlci5wYWdlMkRpc3BsYXk7XG4gICAgICBsZXQgY2FjaGVkUGFnZSA9IHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF07XG4gICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UyRGlzcGxheSwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZFBhZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VcIn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlPXtwYWdlLm5hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3BhZ2UubmFtZX1cbiAgICAgICAga2V5PXtwYWdlLmlkICsgXCItXCIgKyBpbmRleH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJOZXdQYWdlKGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ISF0aGlzLm1vZGVsLm5ld1BhZ2UgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2VWOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1wYWdlXCIsIHsgc3VydmV5OiB0aGlzLmNyZWF0b3Iuc3VydmV5LCBwYWdlOiBwYWdlViwgY3JlYXRvcjogdGhpcy5jcmVhdG9yIH0pO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRlc2lnbmVyVGFiQ2xhc3NOYW1lID0gXCJzdmMtdGFiLWRlc2lnbmVyIFwiICsgdGhpcy5tb2RlbC5nZXRSb290Q3NzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmlzVG9vbGJveFZpc2libGUgPyBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3IgfSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Rlc2lnbmVyVGFiQ2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNsaWNrRGVzaWduZXIoKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLnNob3dQbGFjZWhvbGRlciA/IHRoaXMucmVuZGVyUGxhY2VIb2xkZXIoKSA6IHRoaXMucmVuZGVyVGFiQ29udGVudCgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclBsYWNlSG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyX19wbGFjZWhvbGRlci1jb250YWluZXJcIiBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtcIm5ld0dob3N0UGFnZVwifT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXRleHQgc3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbFwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXBhZ2VcIil9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cblxuICByZW5kZXJUYWJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0RGVzaWduZXJDc3MoKX0+XG4gICAgICAgIHshdGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlID8gbnVsbCA6XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8U3VydmV5SGVhZGVyIHN1cnZleT17c3VydmV5fT48L1N1cnZleUhlYWRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXk9e3N1cnZleX0gbG9jYXRpb249XCJ0b3BcIiAvPlxuICAgICAgICB7dGhpcy5nZXRSZW5kZXJlZFBhZ2VzKCl9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uXG4gICAgICAgICAgc3VydmV5PXtzdXJ2ZXl9XG4gICAgICAgICAgbG9jYXRpb249XCJib3R0b21cIlxuICAgICAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuY3JlYXRvci5zaG93UGFnZU5hdmlnYXRvciA/XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYi1kZXNpZ25lcl9fcGFnZS1uYXZpZ2F0b3JcIj48U3VydmV5UGFnZU5hdmlnYXRvclxuICAgICAgICAgIHBhZ2VzQ29udHJvbGxlcj17dGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXJ9IHBhZ2VFZGl0TW9kZT17dGhpcy5tb2RlbC5jcmVhdG9yLnBhZ2VFZGl0TW9kZX1cbiAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvcj48L2Rpdj5cbiAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1kZXNpZ25lclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgVGFiRGVzaWduZXJDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBFbWJlZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJFbWJlZENvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogRW1iZWRNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkVtYmVkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJFbWJlZENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBFbWJlZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy1lbWJlZC10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuc3VydmV5ID8gPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PiA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItZW1iZWRcIixcbiAgKHByb3BzOiBJVGFiRW1iZWRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkVtYmVkQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjZUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQWNlSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGFjZUVkaXRvcnJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuYWNlRWRpdG9yclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWNlSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW9kZWwuaW5pdChhY2UuZWRpdCh0aGlzLmFjZUVkaXRvcnJSZWYuY3VycmVudCBhcyBIVE1MRWxlbWVudCkpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19hY2UtZWRpdG9yXCJcbiAgICAgICAgICAgIHJlZj17dGhpcy5hY2VFZGl0b3JyUmVmfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItYWNlXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdmFyIGtleSA9IDE7XG4gICAgY29uc3QgdXNlckZyaWVuZGx5RXJyb3JzOiBhbnlbXSA9IHRoaXMubW9kZWwudXNlckZyaWVuZGx5RXJyb3JzO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB1c2VyRnJpZW5kbHlFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT48Yj5FcnJvcjogPC9iPjwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+e3VzZXJGcmllbmRseUVycm9yc1tpXX08L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWFyZWFcIlxuICAgICAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+XG4gICAgICAgICAgICAgICh0aGlzLm1vZGVsLnRleHQgPSBlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHRoaXMubW9kZWwuY2hlY2tLZXkoZSwgZSl9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuYXJpYUxhYmVsfVxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgIHtlcnJvcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fZXJycm9zX2J1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlRXJyb3JzKCl9PlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5lcnJvckJ1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3RoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyAmJiA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtZXJyb3JzXCI+e2Vycm9yc308L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLXRleHRhcmVhXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uIHN2Yy1idG5cIiArICgodGhpcy5tb2RlbC5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIXRoaXMubW9kZWwuZW5hYmxlZCkgPyBcIiBzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbi0tZGlzYWJsZWRcIiA6IFwiXCIpO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWMtYWRkLWJ1dHRvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlMb2dpY1VJIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbG9naWMgPSB0aGlzLm1vZGVsO1xuICAgIHZhciByb290Q2xhc3MgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW5kZXJWaWV3Q29udGVudCgpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17cm9vdENsYXNzfT57Y29udGVudH08L2Rpdj47XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJWaWV3Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbG9naWNUYWJDbGFzc05hbWUgPSBcInN2Yy1wbHVnaW4tdGFiX19jb250ZW50IHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQgXCIgKyAodGhpcy5tb2RlbC5oYXNJdGVtcyA/IFwiXCIgOiBcInN2Yy1sb2dpYy10YWJfX2VtcHR5XCIpO1xuICAgIGNvbnN0IGFkZExvZ2ljID0gIXRoaXMubW9kZWwucmVhZE9ubHkgPyA8VGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLmFkZE5ld0J1dHRvbn0gLz4gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2xvZ2ljVGFiQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLml0ZW1zU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5oYXNJdGVtcyA/IG51bGwgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtZW1wdHlcIiA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0XCI+e3RoaXMubW9kZWwuZW1wdHlUYWJQbGFjZUhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj4pfVxuICAgICAgICAgIHthZGRMb2dpY31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3IgfSBmcm9tIFwiLi9TdXJ2ZXlTaW11bGF0b3JcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHMgfSBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1wcmV2aWV3X190ZXN0LWFnYWluIHN2Yy1idG5cIjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXByZXZpZXctdGVzdC1hZ2FpblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGFiQ29udGVudENsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10ZXN0LXRhYl9fY29udGVudFwiICsgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUgPyBcIiBzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQtLXdpdGgtdG9vbGJhclwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJDb250ZW50Q2xhc3NOYW1lfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGx1Z2luLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxTdXJ2ZXlTaW11bGF0b3IgbW9kZWw9e3RoaXMubW9kZWwuc2ltdWxhdG9yfT48L1N1cnZleVNpbXVsYXRvcj5cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLnRlc3RBZ2FpbkFjdGlvbn0gLz4gOiBudWxsfVxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8U3VydmV5UmVzdWx0cyBzdXJ2ZXk9e3RoaXMubW9kZWwuc2ltdWxhdG9yLnN1cnZleX0gLz4gOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0Qm90dG9tVG9vbGJhcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBnZXRCb3R0b21Ub29sYmFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGVzdC10YWJfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwucGFnZXN9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdGVzdFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5U2ltdWxhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5U2ltdWxhdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbWFpblNpbXVsYXRvckNsYXNzID0gXCJzdmQtc2ltdWxhdG9yLW1haW5cIiArXG4gICAgICAodGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gXCIgc3ZkLXNpbXVsYXRvci1tYWluLS1kZXNrdG9wXCIgOiBcIlwiKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuc3VydmV5KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+PC9kaXY+O1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5oYXNGcmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzICsgXCIgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvck1haW5Dc3NDbGFzc31cbiAgICAgICAgICBvbktleURvd249e2UgPT4gdGhpcy5tb2RlbC50cnlUb1pvb20oZSwgZSl9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5hY3RpdmF0ZVpvb219XG4gICAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5kZWFjdGl2YXRlWm9vbX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBpZD1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIFwic3ZkLXNpbXVsYXRvci1mcmFtZSBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuY3NzQ2xhc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VIZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCIsXG4gICAgICA0NCxcbiAgICAgIDQ0XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdD86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWNhdGVnb3J5LmNvbGxhcHNlZCkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9IGlzQ29tcGFjdD17ZmFsc2V9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcihjYXRlZ29yeSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCIga2V5PXtjYXRlZ29yeS5uYW1lfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnk6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpY29uTmFtZSA9IGNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiYXJyb3ctZG93blwiIDogXCJhcnJvdy11cFwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIChjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCIgb25DbGljaz17ZSA9PiBjYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e2NhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIWNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXMoY2F0ZWdvcnkuaXRlbXMpIDogW107XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgdGhpcy5pdGVtLnRvb2x0aXAgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidG9vbGJveFwiKSArXG4gICAgICAgICAgXCIgaXRlbVwiXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCI+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
3854
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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QUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3RERjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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QzlELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7QUN0SUgsbUQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEseUQ7Ozs7Ozs7Ozs7O0FDQUEsaUU7Ozs7Ozs7Ozs7O0FDQUEsNkQiLCJmaWxlIjoic3VydmV5LWNyZWF0b3ItcmVhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN1cnZleUNyZWF0b3JcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiLCBcInN1cnZleS1jcmVhdG9yLWNvcmVcIiwgXCJzdXJ2ZXktcmVhY3QtdWlcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSwgcm9vdFtcIlN1cnZleUNyZWF0b3JDb3JlXCJdLCByb290W1wiU3VydmV5UmVhY3RcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9pbmRleC50c1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjbGFzc2VzID0gdGhpcy5wcm9wcy5jbGFzc2VzICsgXCIgc3ZjLWFjdGlvbi1idXR0b25cIjtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgY2xhc3NlcyArPSBcIiBzdmMtYWN0aW9uLWJ1dHRvbi0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLWRpc2FibGVkXCI7XG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtjbGFzc2VzfT57dGhpcy5wcm9wcy50ZXh0fTwvc3Bhbj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEltYWdlSXRlbVZhbHVlLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEltYWdlSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgcHJldmVudERyYWdIYW5kbGVyID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBpc05ldyA9ICF0aGlzLnByb3BzLnF1ZXN0aW9uLmlzSXRlbUluTGlzdCh0aGlzLnByb3BzLml0ZW0pO1xuICAgIGNvbnN0IGltYWdlU3R5bGUgPSB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfTtcblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGNvbnRlbnQgPSAoPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAoaXNOZXcgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlci0tZ2hvc3RcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMucHJldmVudERyYWdIYW5kbGVyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19naG9zdFwifSBzdHlsZT17aW1hZ2VTdHlsZX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2NvbnRlbnRcIn0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IGdldExvY1N0cmluZywgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCB9IGZyb20gXCJzcmMvZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBpdGVtOiBJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICBcInN2Yy1pdGVtLXZhbHVlLXdyYXBwZXJcIiArXG4gICAgICAgICAgKHRoaXMubW9kZWwuYWxsb3dBZGQgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnZ2luZyA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1kcmFnZ2luZ1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BHaG9zdCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1naG9zdFwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlRG93biA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlVXAgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZXVwXCIgOiBcIlwiKVxuICAgICAgICB9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlPXtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gdGhpcy5tb2RlbC5pdGVtLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWVfX2dob3N0XCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPntidXR0b259PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWl0ZW0tdmFsdWVfX2l0ZW1cIn0gb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBldmVudCl9Pnt0aGlzLnByb3BzLmVsZW1lbnR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsOiBMb2dvSW1hZ2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbChwcm9wcy5kYXRhLCBudWxsKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLm1vZGVsLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCkge1xuICAgICAgY29udGVudCA9IDw+XG4gICAgICAgIDxMb2dvSW1hZ2UgZGF0YT17dGhpcy5wcm9wcy5kYXRhLnN1cnZleX0+PC9Mb2dvSW1hZ2U+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRlbGV0ZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+IDogbnVsbH1cbiAgICAgIDwvPjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZS1wbGFjZWhvbGRlclwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+e3RoaXMubW9kZWwuY2hvb3NlTG9nb1BsYWNlaG9sZGVyfTwvZGl2PikgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2VcIj5cbiAgICAgICAgPGlucHV0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgdGFiSW5kZXg9ey0xfSBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCIgLz5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWxvZ28taW1hZ2VcIixcbiAgKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGNlbGw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsKFxuICAgICAgZGF0YS5jcmVhdG9yLFxuICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgZGF0YS5xdWVzdGlvbixcbiAgICAgIGRhdGEucm93LFxuICAgICAgZGF0YS5jb2x1bW4sXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGVEYXRhID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMubW9kZWwucm93ID0gZGF0YS5yb3c7XG4gICAgdGhpcy5tb2RlbC5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udHJvbHMgPSBudWxsO1xuICAgIGlmICghIXRoaXMubW9kZWwucXVlc3Rpb24pIHtcbiAgICAgIGNvbnRyb2xzID0gPGRpdiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmVkaXRRdWVzdGlvbih0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZWRpdFwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pfVxuICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGxcIn1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiAhdGhpcy5wcm9wcy5xdWVzdGlvbiAmJiB0aGlzLm1vZGVsLnNlbGVjdENvbnRleHQodGhpcy5tb2RlbCwgZSl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbC0tc2VsZWN0ZWRcIiArICh0aGlzLm1vZGVsLmlzU2VsZWN0ZWQgPyBcIiBzdmMtdmlzaWJsZVwiIDogXCJcIil9PjwvZGl2PlxuXG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAge2NvbnRyb2xzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtbWF0cml4LWNlbGxcIixcbiAgKHByb3BzOiBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIHByaXZhdGUgc2V0SGFuZGxlcigpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuaGFzRnVuYyh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5hZGQodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gIH1cbiAgICBwcml2YXRlIG9uUHJvcENoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlYWN0aXZlUHJvcHMgPSBbXG4gICAgICAgIFwic2hvd1Byb2dyZXNzQmFyXCIsXG4gICAgICAgIFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgICAgIFwiY3VycmVudFBhZ2VWYWx1ZVwiXG4gICAgICBdO1xuICAgICAgaWYgKHJlYWN0aXZlUHJvcHMuaW5kZXhPZihvcHRpb25zLm5hbWUpIDwgMCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlYWN0aXZlUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcmVhY3RpdmVQcm9wc1tpXTtcbiAgICAgICAgdmFsW3Byb3BOYW1lXSA9IHRoaXMuc3VydmV5W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUodmFsKTtcbiAgICB9O1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NhdGlvbjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uID09IFwidG9wXCI7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RvcFxuICAgICAgICA/IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcbiAgICAgICAgOiB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tO1xuICAgIH1cbiAgICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuc3VydmV5LmNzcywgaXNUb3A6IHRoaXMuaXNUb3AgfVxuICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIE5vdGlmaWVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmllckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIG5vdGlmaWVyOiBOb3RpZmllcjtcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGlmaWVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBOb3RpZmllckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgZ2V0IG5vdGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm5vdGlmaWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllcjtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5ub3RpZmllci5hY3RpdmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubm90aWZpZXIuY3NzfT5cbiAgICAgICAgPHNwYW4+e3RoaXMubm90aWZpZXIubWVzc2FnZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPYmplY3RTZWxlY3Rvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMaXN0IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogT2JqZWN0U2VsZWN0b3JNb2RlbDtcbn1cbmNsYXNzIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpOiBPYmplY3RTZWxlY3Rvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLW9iamVjdC1zZWxlY3RvclwiPlxuICAgICAgICA8TGlzdCBtb2RlbD17dGhpcy5tb2RlbC5saXN0fT48L0xpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLW9iamVjdC1zZWxlY3RvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgdW53cmFwXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb24sXG4gIFBvcHVwLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUGFnZU5hdmlnYXRvclZpZXdNb2RlbCwgUGFnZXNDb250cm9sbGVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBwYWdlc0NvbnRyb2xsZXI6IFBhZ2VzQ29udHJvbGxlcjtcbiAgcGFnZUVkaXRNb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgcHJvcHMucGFnZXNDb250cm9sbGVyLFxuICAgICAgcHJvcHMucGFnZUVkaXRNb2RlXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBHbG9iYWxFdmVudEhhbmRsZXJzLCBldjogRXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5tb2RlbC5vbkNvbnRhaW5lclNjcm9sbChldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3RvclwiO1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUG9wdXBPcGVuZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3Rvci0tb3BlbmVkXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3sgZGlzcGxheTogdGhpcy5tb2RlbC52aXNpYmxlID8gXCJmbGV4XCIgOiBcIm5vbmVcIiB9fT5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVQYWdlU2VsZWN0b3IoKX1cbiAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fbmF2aWdhdG9yLWljb25cIlxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbn1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAge3RoaXMubW9kZWwuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtXG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBzdXJ2ZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKVswXTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uIGNyZWF0b3I9e3RoaXN9IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1N1cnZleVF1ZXN0aW9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZWRpdG9yLWNvbnRlbnRcIixcbiAgKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlQYWdlLCBJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5UmVzdWx0c1Byb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogU3VydmV5UmVzdWx0c01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVJlc3VsdHNQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBpZiAocHJvcHMuc3VydmV5KSB7XG4gICAgICB0aGlzLm1vZGVsID0gbmV3IFN1cnZleVJlc3VsdHNNb2RlbChwcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNUYWJsZVwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNUYWJsZVNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdEpzb25DbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNKc29uXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSkgPT4gPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2l0ZW0uaWR9IHJvdz17aXRlbX0gLz4pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgYmx1cnJlZEJ5RXNjYXBlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmJsdXJFZGl0b3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbk1vdXNlVXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGRvbmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLmRvbmUoZXZlbnQpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBlZGl0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSB0cnVlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ2xpY2soZXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNsYXNzTmFtZSh0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZU1vZGVsLnNldExvY1N0cmluZyh0aGlzLmxvY1N0cmluZyk7XG4gICAgfVxuICAgIGxldCBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmcuaGFzSHRtbCkge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuYmFzZU1vZGVsLmZvY3VzZWQgJiYgdGhpcy5iYXNlTW9kZWwuZWRpdEFzVGV4dCAmJiB0aGlzLmxvY1N0cmluZy50ZXh0IHx8IHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCB9O1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uIHN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24tLWVkaXRcIlxuICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9XG4gICAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udHJvbHNcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5lcnJvclRleHQgPyA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fZXJyb3JcIj57dGhpcy5lcnJvclRleHR9PC9zcGFuPiA6IFwiXCJ9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHtcbiAgQmFzZSxcbiAgUXVlc3Rpb24sXG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBJQ3JlYXRvck9wdGlvbnMsXG4gIENyZWF0b3JCYXNlLFxuICBJVGFiYmVkTWVudUl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFRhYmJlZE1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9UYWJiZWRNZW51XCI7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gXCIuL05vdGlmaWVyXCI7XG5pbXBvcnQgeyBTdmdCdW5kbGVDb21wb25lbnQgfSBmcm9tIFwiLi9TdmdCdW5kbGVcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBTdXJ2ZXlDcmVhdG9yO1xuICBzdHlsZT86IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0gc3R5bGU9e3RoaXMuc3R5bGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdmdSZWdpc3RyeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdCdW5kbGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PFNWR1NWR0VsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IFN2Z1JlZ2lzdHJ5Lmljb25zUmVuZGVyZWRIdG1sKCk7XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdmdTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfTtcbiAgICByZXR1cm4gPHN2ZyBzdHlsZT17c3ZnU3R5bGV9IGlkPVwic3YtaWNvbi1ob2xkZXItZ2xvYmFsLWNvbnRhaW5lclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pjwvc3ZnPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zdmctYnVuZGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdCdW5kbGVDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVDb250YWluZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgQWN0aW9uLFxuICBSZXNwb25zaXZpdHlNYW5hZ2VyLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBUYWJiZWRNZW51Q29udGFpbmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1hbmFnZXI6IFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKChpdGVtKSA9PiA8VGFiYmVkTWVudUl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnVcIj5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgXCIuc3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn1cblxuY2xhc3MgVGFiYmVkTWVudUl0ZW1XcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIGFueSxcbiAgYW55XG4+IHtcblxuICBwcml2YXRlIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lclwiO1xuICAgIGlmICh0aGlzLml0ZW0uY3NzKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLml0ZW0uY3NzO1xuICAgIH1cbiAgICBjc3MgKz0gKCF0aGlzLml0ZW0uaXNWaXNpYmxlID8gXCIgc3YtYWN0aW9uLS1oaWRkZW5cIiA6IFwiXCIpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gICAgICB7IGl0ZW06IHRoaXMuaXRlbSB9XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuaXRlbS5pZH0gY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHtjb21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyB7XG4gIGl0ZW06IEFjdGlvbjtcbn1cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIGlmIChpdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhaXRlbS5lbmFibGVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIGxldCB0aXRsZUNsYXNzTmFtZTogc3RyaW5nID1cbiAgICAgIFwic3ZjLXRleHQgc3ZjLXRhYmJlZC1tZW51LWl0ZW1fX3RleHQgc3ZjLXRleHQtLW5vcm1hbFwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgdGl0bGVDbGFzc05hbWUgKz0gXCIgc3ZjLXRleHQtLWJvbGRcIjtcblxuICAgIHJldHVybiAoYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gaXRlbS5hY3Rpb24oaXRlbSl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3NOYW1lfT57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRNZW51SXRlbUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuZXhwb3J0IGRlZmF1bHQgVGFiYmVkTWVudUNvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgICAgICB7cXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IEJhc2UsIFBhZ2VNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUG9wdXAsXG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVBhZ2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIFBhZ2VBZG9ybmVyLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlQWRvcm5lcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlQWRvcm5lcihcbiAgICAgIHRoaXMucHJvcHMuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucGFnZVxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwub25QYWdlU2VsZWN0ZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghIXRoaXMucm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMucm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1vZGVsICYmXG4gICAgICB0aGlzLm1vZGVsLmlzUGFnZUxpdmUgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZV9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzfVxuICAgICAgICBpZD17dGhpcy5wcm9wcy5wYWdlLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj4pXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8U3VydmV5UGFnZSBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9IHN1cnZleT17dGhpcy5wcm9wcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMucHJvcHMuY3JlYXRvcn0gY3NzPXt0aGlzLm1vZGVsLmNzc30+PC9TdXJ2ZXlQYWdlPik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwgPSB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWw7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYnRuXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24odGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICB9fVxuICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyU3RvcHBlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBpY29uTmFtZT17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFBvcHVwIG1vZGVsPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8L2J1dHRvbj4pfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcGFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYW5lbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgeyF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50ICYmIHRoaXMubW9kZWwuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgICAgIDwvYnV0dG9uPil9XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuXG4gICAgICB7c3VwZXIucmVuZGVyRm9vdGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1wYW5lbFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBjb21wb25lbnREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgIXRoaXMubW9kZWwuaXNEcmFnZ2VkO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYWxsb3dJbnRlcmFjdGlvbnMgPSB0aGlzLm1vZGVsLmVsZW1lbnRcbiAgICAgIC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWUgfHwgbnVsbH1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwiICsgdGhpcy5tb2RlbC5yb290Q3NzKCl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0b2dnbGVIb3ZlcmVkKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9uczogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBpZiAoIWFsbG93SW50ZXJhY3Rpb25zKSByZXR1cm4gPD57IGNvbnRlbnQgfXt0aGlzLnJlbmRlckZvb3RlcigpfTwvPjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3MoKX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcInN2Yy1xdWVzdGlvbl9fY29udGVudC1hY3Rpb25zXCIsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgeyhxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyB8fCBbXSkubWFwKFxuICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVyRm9vdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnByb3BzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJGb290ZXIsIHByb3BzKTtcbiAgfVxuKTtcblxuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubW9kZWwuYWxsb3dEcmFnZ2luZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1hcmVhXCJ9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMubW9kZWwub25Qb2ludGVyRG93bihldmVudClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1lbGVtZW50XCJ9XG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVySGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpbWFnZU1vZGVsKCk6IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuaW1hZ2VNb2RlbC5xdWVzdGlvblJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAge3N1cGVyLnJlbmRlckhlYWRlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmltYWdlTW9kZWwuY2hvb3NlRmlsZSh0aGlzLmltYWdlTW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgcmF0aW5nTW9kZWwoKTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMucmF0aW5nTW9kZWw7XG4gICAgcmV0dXJuICg8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRyb2xzIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge21vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwucmVtb3ZlVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLnJlbW92ZUl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIHttb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLmFkZFRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5hZGRJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1hZGRfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250ZW50XCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkZ2V0TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXdpZGdldF9fY29udGVudFwifVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtd2lkZ2V0LXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFJvd1ZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuaW50ZXJmYWNlIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHJvdzogUXVlc3Rpb25Sb3dNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFJvd1dyYXBwZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUm93V3JhcHBlckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUm93Vmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUm93Vmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnJvdyxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17XCJzdmMtcm93LVwiICsgdGhpcy5wcm9wcy5yb3cuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcm93XCIsXG4gIChwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm93V3JhcHBlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiZGVjbGFyZSB2YXIgUmVmbGVjdDphbnk7XG5cbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uKFxuICBkZWNvcmF0b3JzOiBhbnksXG4gIHRhcmdldDogYW55LFxuICBrZXk6IGFueSxcbiAgZGVzYzogYW55XG4pIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgIHIgPVxuICAgICAgYyA8IDNcbiAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgOiBkZXNjID09PSBudWxsXG4gICAgICAgICAgPyAoZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpKVxuICAgICAgICAgIDogZGVzYyxcbiAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIGlmICgoZCA9IGRlY29yYXRvcnNbaV0pKVxuICAgICAgICByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPVxuICBPYmplY3RbXCJhc3NpZ25cIl0gfHxcbiAgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIgcCBpbiBzKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0YXJnZXRbcF0gPSBzW3BdO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XG4gIGZvciAodmFyIHAgaW4gYmFzZUNsYXNzKVxuICAgIGlmIChiYXNlQ2xhc3MuaGFzT3duUHJvcGVydHkocCkpIHRoaXNDbGFzc1twXSA9IGJhc2VDbGFzc1twXTtcbiAgZnVuY3Rpb24gX18oKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHRoaXNDbGFzcztcbiAgfVxuICB0aGlzQ2xhc3MucHJvdG90eXBlID1cbiAgICBiYXNlQ2xhc3MgPT09IG51bGxcbiAgICAgID8gT2JqZWN0LmNyZWF0ZShiYXNlQ2xhc3MpXG4gICAgICA6ICgoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSksIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn07XG4iLCJleHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcblZlcnNpb24gPSBgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWA7XG5cbi8vIGltcG9ydCBcIkBzdXJ2ZXkvY3JlYXRvci9zdXJ2ZXktY3JlYXRvci1jb3JlLmNzc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vU3VydmV5Q3JlYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUm93XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkhlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblJhdGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFuZWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL0xvZ29JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uTGlua1ZhbHVlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FbWJlZGRlZFN1cnZleVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRWRpdG9yQ29udGVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0l0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JbWFnZUl0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9NYXRyaXhDZWxsV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Jlc3VsdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hJdGVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9BZGFwdGl2ZVRvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9UYWJiZWRNZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTm90aWZpZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU2lkZUJhclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TdHJpbmdFZGl0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRGVzaWduZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0VtYmVkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yQWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yVGV4dGFyZWFcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0xvZ2ljXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9QcmV2aWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvU3VydmV5U2ltdWxhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9ldmVudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9PYmplY3RTZWxlY3RvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Byb3BlcnR5R3JpZFwiO1xuXG5leHBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIGxvY2FsaXphdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5TG9naWMsIFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IElTdXJ2ZXlDcmVhdG9yT3B0aW9ucywgSVByb3BlcnR5R3JpZEVkaXRvciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCwgUHJvcGVydHlHcmlkRWRpdG9yQ29sbGVjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjsiLCJpbXBvcnQgeyBJUG9ydGFibGVEcmFnRXZlbnQsIElQb3J0YWJsZU1vdXNlRXZlbnQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RNb3VzZUV2ZW50IGltcGxlbWVudHMgSVBvcnRhYmxlTW91c2VFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudCwgTW91c2VFdmVudD4pIHt9XG4gIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGdldCBjYW5jZWxCdWJibGUoKTogYm9vbGVhbiB7XG4gICAgLy9yZXR1cm4gdGhpcy5ldmVudC5jYW5jZWxCdWJibGU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNldCBjYW5jZWxCdWJibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvL3RoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LnRhcmdldDtcbiAgfVxuICBnZXQgY3VycmVudFRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIH1cbiAgZ2V0IGNsaWVudFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRYO1xuICB9XG4gIGdldCBjbGllbnRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WTtcbiAgfVxuICBnZXQgb2Zmc2V0WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFg7XG4gIH1cbiAgZ2V0IG9mZnNldFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRZO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdERyYWdFdmVudCBleHRlbmRzIFJlYWN0TW91c2VFdmVudFxuICBpbXBsZW1lbnRzIElQb3J0YWJsZURyYWdFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHN1cGVyKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBkYXRhVHJhbnNmZXIoKTogRGF0YVRyYW5zZmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5kYXRhVHJhbnNmZXI7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlIZWFkZXJcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIFRhYkRlc2lnbmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2VOYXZpZ2F0b3IgfSBmcm9tIFwiLi4vUGFnZU5hdmlnYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5cbmludGVyZmFjZSBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRhYkRlc2lnbmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRGVzaWduZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRhYkRlc2lnbmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuY3JlYXRvcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGRlbnlVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5kZW55Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuYWxsb3dDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5hZGQodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AuYWRkKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AucmVtb3ZlKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLnJlbW92ZSh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5hZGREcmFnRHJvcEV2ZW50cygpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNsZWFyRHJhZ0Ryb3BFdmVudHMoKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5tb2RlbCwgdGhpcy5tb2RlbC5zdXJ2ZXksIHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyZWRQYWdlc0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkUGFnZXMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicGFnZXNcIikge1xuICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyZWRQYWdlcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRvci5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jcmVhdG9yLnN1cnZleS5wYWdlcztcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXTtcbiAgICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsLnNob3dOZXdQYWdlKSB7XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2UyRGlzcGxheSA9IHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyLnBhZ2UyRGlzcGxheTtcbiAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXTtcbiAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTJEaXNwbGF5LCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICB9XG4gICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkUGFnZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZVwifVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXBhZ2U9e3BhZ2UubmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17cGFnZS5uYW1lfVxuICAgICAgICBrZXk9e3BhZ2UuaWQgKyBcIi1cIiArIGluZGV4fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlKHBhZ2UpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck5ld1BhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nID0gXCJcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHshIXRoaXMubW9kZWwubmV3UGFnZSA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLm1vZGVsLm5ld1BhZ2UpIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZVY6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXBhZ2VcIiwgeyBzdXJ2ZXk6IHRoaXMuY3JlYXRvci5zdXJ2ZXksIHBhZ2U6IHBhZ2VWLCBjcmVhdG9yOiB0aGlzLmNyZWF0b3IgfSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZGVzaWduZXJUYWJDbGFzc05hbWUgPSBcInN2Yy10YWItZGVzaWduZXIgXCIgKyB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuaXNUb29sYm94VmlzaWJsZSA/IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvciB9KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGVzaWduZXJUYWJDbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2xpY2tEZXNpZ25lcigpfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfY29udGVudFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9PlxuICAgICAgICB7dGhpcy5yZW5kZXJQbGFjZUhvbGRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci1wYWdlXCIpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlclBsYWNlSG9sZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci10ZXh0IHN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIj57dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9PC9zcGFuPjtcbiAgfVxuICByZW5kZXJUYWJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0RGVzaWduZXJDc3MoKX0+XG4gICAgICAgIHshdGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlID8gbnVsbCA6XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8U3VydmV5SGVhZGVyIHN1cnZleT17c3VydmV5fT48L1N1cnZleUhlYWRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXk9e3N1cnZleX0gbG9jYXRpb249XCJ0b3BcIiAvPlxuICAgICAgICB7dGhpcy5nZXRSZW5kZXJlZFBhZ2VzKCl9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uXG4gICAgICAgICAgc3VydmV5PXtzdXJ2ZXl9XG4gICAgICAgICAgbG9jYXRpb249XCJib3R0b21cIlxuICAgICAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuY3JlYXRvci5zaG93UGFnZU5hdmlnYXRvciA/XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYi1kZXNpZ25lcl9fcGFnZS1uYXZpZ2F0b3JcIj48U3VydmV5UGFnZU5hdmlnYXRvclxuICAgICAgICAgIHBhZ2VzQ29udHJvbGxlcj17dGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXJ9IHBhZ2VFZGl0TW9kZT17dGhpcy5tb2RlbC5jcmVhdG9yLnBhZ2VFZGl0TW9kZX1cbiAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvcj48L2Rpdj5cbiAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1kZXNpZ25lclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgVGFiRGVzaWduZXJDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBFbWJlZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJFbWJlZENvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogRW1iZWRNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkVtYmVkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJFbWJlZENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBFbWJlZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy1lbWJlZC10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuc3VydmV5ID8gPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PiA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItZW1iZWRcIixcbiAgKHByb3BzOiBJVGFiRW1iZWRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkVtYmVkQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjZUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQWNlSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGFjZUVkaXRvcnJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuYWNlRWRpdG9yclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWNlSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW9kZWwuaW5pdChhY2UuZWRpdCh0aGlzLmFjZUVkaXRvcnJSZWYuY3VycmVudCBhcyBIVE1MRWxlbWVudCkpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19hY2UtZWRpdG9yXCJcbiAgICAgICAgICAgIHJlZj17dGhpcy5hY2VFZGl0b3JyUmVmfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItYWNlXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdmFyIGtleSA9IDE7XG4gICAgY29uc3QgdXNlckZyaWVuZGx5RXJyb3JzOiBhbnlbXSA9IHRoaXMubW9kZWwudXNlckZyaWVuZGx5RXJyb3JzO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB1c2VyRnJpZW5kbHlFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT48Yj5FcnJvcjogPC9iPjwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+e3VzZXJGcmllbmRseUVycm9yc1tpXX08L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWFyZWFcIlxuICAgICAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+XG4gICAgICAgICAgICAgICh0aGlzLm1vZGVsLnRleHQgPSBlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHRoaXMubW9kZWwuY2hlY2tLZXkoZSwgZSl9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuYXJpYUxhYmVsfVxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgIHtlcnJvcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fZXJycm9zX2J1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlRXJyb3JzKCl9PlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5lcnJvckJ1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3RoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyAmJiA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtZXJyb3JzXCI+e2Vycm9yc308L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLXRleHRhcmVhXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uIHN2Yy1idG5cIiArICgodGhpcy5tb2RlbC5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIXRoaXMubW9kZWwuZW5hYmxlZCkgPyBcIiBzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbi0tZGlzYWJsZWRcIiA6IFwiXCIpO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWMtYWRkLWJ1dHRvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlMb2dpY1VJIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbG9naWMgPSB0aGlzLm1vZGVsO1xuICAgIHZhciByb290Q2xhc3MgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW5kZXJWaWV3Q29udGVudCgpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17cm9vdENsYXNzfT57Y29udGVudH08L2Rpdj47XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJWaWV3Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbG9naWNUYWJDbGFzc05hbWUgPSBcInN2Yy1wbHVnaW4tdGFiX19jb250ZW50IHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQgXCIgKyAodGhpcy5tb2RlbC5oYXNJdGVtcyA/IFwiXCIgOiBcInN2Yy1sb2dpYy10YWJfX2VtcHR5XCIpO1xuICAgIGNvbnN0IGFkZExvZ2ljID0gIXRoaXMubW9kZWwucmVhZE9ubHkgPyA8VGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLmFkZE5ld0J1dHRvbn0gLz4gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2xvZ2ljVGFiQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLml0ZW1zU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5oYXNJdGVtcyA/IG51bGwgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtZW1wdHlcIiA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0XCI+e3RoaXMubW9kZWwuZW1wdHlUYWJQbGFjZUhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj4pfVxuICAgICAgICAgIHthZGRMb2dpY31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3IgfSBmcm9tIFwiLi9TdXJ2ZXlTaW11bGF0b3JcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHMgfSBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1wcmV2aWV3X190ZXN0LWFnYWluIHN2Yy1idG5cIjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXByZXZpZXctdGVzdC1hZ2FpblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGFiQ29udGVudENsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10ZXN0LXRhYl9fY29udGVudFwiICsgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUgPyBcIiBzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQtLXdpdGgtdG9vbGJhclwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJDb250ZW50Q2xhc3NOYW1lfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGx1Z2luLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxTdXJ2ZXlTaW11bGF0b3IgbW9kZWw9e3RoaXMubW9kZWwuc2ltdWxhdG9yfT48L1N1cnZleVNpbXVsYXRvcj5cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLnRlc3RBZ2FpbkFjdGlvbn0gLz4gOiBudWxsfVxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8U3VydmV5UmVzdWx0cyBzdXJ2ZXk9e3RoaXMubW9kZWwuc2ltdWxhdG9yLnN1cnZleX0gLz4gOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0Qm90dG9tVG9vbGJhcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBnZXRCb3R0b21Ub29sYmFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGVzdC10YWJfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwucGFnZXN9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdGVzdFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5U2ltdWxhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5U2ltdWxhdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbWFpblNpbXVsYXRvckNsYXNzID0gXCJzdmQtc2ltdWxhdG9yLW1haW5cIiArXG4gICAgICAodGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gXCIgc3ZkLXNpbXVsYXRvci1tYWluLS1kZXNrdG9wXCIgOiBcIlwiKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuc3VydmV5KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+PC9kaXY+O1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5oYXNGcmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzICsgXCIgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvck1haW5Dc3NDbGFzc31cbiAgICAgICAgICBvbktleURvd249e2UgPT4gdGhpcy5tb2RlbC50cnlUb1pvb20oZSwgZSl9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5hY3RpdmF0ZVpvb219XG4gICAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5kZWFjdGl2YXRlWm9vbX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBpZD1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIFwic3ZkLXNpbXVsYXRvci1mcmFtZSBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuY3NzQ2xhc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VIZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCIsXG4gICAgICA0NCxcbiAgICAgIDQ0XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdD86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWNhdGVnb3J5LmNvbGxhcHNlZCkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9IGlzQ29tcGFjdD17ZmFsc2V9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcihjYXRlZ29yeSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCIga2V5PXtjYXRlZ29yeS5uYW1lfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnk6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpY29uTmFtZSA9IGNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiYXJyb3ctZG93blwiIDogXCJhcnJvdy11cFwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIChjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCIgb25DbGljaz17ZSA9PiBjYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e2NhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIWNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXMoY2F0ZWdvcnkuaXRlbXMpIDogW107XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgdGhpcy5pdGVtLnRvb2x0aXAgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidG9vbGJveFwiKSArXG4gICAgICAgICAgXCIgaXRlbVwiXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCI+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9