survey-react-ui 1.9.33 → 1.9.36

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 - Survey JavaScript library v1.9.33
2
+ * surveyjs - Survey JavaScript library v1.9.36
3
3
  * Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -1146,15 +1146,11 @@ var SurveyQuestionBooleanCheckbox = /** @class */ (function (_super) {
1146
1146
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("label", { className: itemClass },
1147
1147
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { ref: this.checkRef, type: "checkbox", name: this.question.name, value: this.question.checkedValue === null
1148
1148
  ? ""
1149
- : this.question.checkedValue, id: this.question.inputId, className: cssClasses.control, disabled: this.isDisplayMode, checked: this.question.checkedValue || false, onChange: this.handleOnChange, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-describedby": this.question.ariaDescribedBy }),
1149
+ : this.question.checkedValue, id: this.question.inputId, className: cssClasses.controlCheckbox, disabled: this.isDisplayMode, checked: this.question.checkedValue || false, onChange: this.handleOnChange, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-describedby": this.question.ariaDescribedBy }),
1150
1150
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.materialDecorator },
1151
1151
  this.question.svgIcon ?
1152
1152
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("svg", { className: cssClasses.itemDecorator },
1153
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("use", { xlinkHref: this.question.svgIcon })) :
1154
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("svg", { viewBox: "0 0 24 24", className: cssClasses.itemDecorator },
1155
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("rect", { className: cssClasses.uncheckedPath, x: "5", y: "10", width: "14", height: "4" }),
1156
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("polygon", { className: cssClasses.checkedPath, points: "19,10 14,10 14,5 10,5 10,10 5,10 5,14 10,14 10,19 14,19 14,14 19,14 " }),
1157
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("path", { className: cssClasses.indeterminatePath, d: "M22,0H2C0.9,0,0,0.9,0,2v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V2C24,0.9,23.1,0,22,0z M21,18L6,3h15V18z M3,6l15,15H3V6z" })),
1153
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("use", { xlinkHref: this.question.svgIcon })) : null,
1158
1154
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: "check" })),
1159
1155
  this.question.titleLocation === "hidden" && (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.question.getLabelCss(false) }, this.renderLocString(this.question.locDisplayLabel))))));
1160
1156
  };
@@ -1874,10 +1870,13 @@ var List = /** @class */ (function (_super) {
1874
1870
  _this.model.filteredText = e.target.value;
1875
1871
  }
1876
1872
  };
1873
+ var onKeyUp = function (e) {
1874
+ _this.model.goToItems(e);
1875
+ };
1877
1876
  return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: "sv-list__filter" },
1878
1877
  react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: "sv-list__filter-icon" },
1879
1878
  react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { iconName: "icon-search", size: "auto" })),
1880
- react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "text", className: "sv-list__input", placeholder: this.model.filteredTextPlaceholder, value: this.state.filteredText, onChange: onChange })));
1879
+ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "text", className: "sv-list__input", placeholder: this.model.filteredTextPlaceholder, value: this.state.filteredText, onKeyUp: onKeyUp, onChange: onChange })));
1881
1880
  }
1882
1881
  };
1883
1882
  return List;
@@ -3313,9 +3312,8 @@ __webpack_require__.r(__webpack_exports__);
3313
3312
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
3314
3313
  /* harmony import */ var _reactquestion_dropdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_dropdown */ "./src/react/reactquestion_dropdown.tsx");
3315
3314
  /* harmony import */ var _components_popup_popup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/popup/popup */ "./src/react/components/popup/popup.tsx");
3316
- /* harmony import */ var _utils_popup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/popup */ "./src/utils/popup.ts");
3317
- /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
3318
- /* harmony import */ var _components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/svg-icon/svg-icon */ "./src/react/components/svg-icon/svg-icon.tsx");
3315
+ /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
3316
+ /* harmony import */ var _components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/svg-icon/svg-icon */ "./src/react/components/svg-icon/svg-icon.tsx");
3319
3317
  var __extends = (undefined && undefined.__extends) || (function () {
3320
3318
  var extendStatics = function (d, b) {
3321
3319
  extendStatics = Object.setPrototypeOf ||
@@ -3338,7 +3336,6 @@ var __extends = (undefined && undefined.__extends) || (function () {
3338
3336
 
3339
3337
 
3340
3338
 
3341
-
3342
3339
  var SurveyQuestionDropdownSelect = /** @class */ (function (_super) {
3343
3340
  __extends(SurveyQuestionDropdownSelect, _super);
3344
3341
  function SurveyQuestionDropdownSelect(props) {
@@ -3347,7 +3344,7 @@ var SurveyQuestionDropdownSelect = /** @class */ (function (_super) {
3347
3344
  SurveyQuestionDropdownSelect.prototype.renderSelect = function (cssClasses) {
3348
3345
  var _this = this;
3349
3346
  var click = function (_, e) {
3350
- _utils_popup__WEBPACK_IMPORTED_MODULE_5__["PopupUtils"].updatePopupWidthBeforeShow(_this.question.popupModel, e);
3347
+ _this.question.onClick(e);
3351
3348
  };
3352
3349
  var selectElement = null;
3353
3350
  if (this.question.isReadOnly) {
@@ -3357,7 +3354,7 @@ var SurveyQuestionDropdownSelect = /** @class */ (function (_super) {
3357
3354
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", null, this.question.readOnlyText));
3358
3355
  }
3359
3356
  else {
3360
- var inputElement = Object(_reactSurvey__WEBPACK_IMPORTED_MODULE_6__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: this.question.inputId, className: this.question.getControlClass(), tabIndex: 0, onClick: function (event) { return click(null, event); },
3357
+ var inputElement = Object(_reactSurvey__WEBPACK_IMPORTED_MODULE_5__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: this.question.inputId, className: this.question.getControlClass(), tabIndex: 0, onClick: function (event) { return click(null, event); },
3361
3358
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3362
3359
  // @ts-ignore
3363
3360
  disabled: this.question.isInputReadOnly, required: this.question.isRequired, onChange: this.updateValueOnEvent, onInput: this.updateValueOnEvent, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-describedby": this.question.ariaDescribedBy },
@@ -3375,7 +3372,7 @@ var SurveyQuestionDropdownSelect = /** @class */ (function (_super) {
3375
3372
  return null;
3376
3373
  var style = { display: this.question.isEmpty() ? "none" : "" };
3377
3374
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.question.cssClasses.cleanButton, style: style, onClick: function (e) { _this.question.onClear(e); } },
3378
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_7__["SvgIcon"], { className: this.question.cssClasses.cleanButtonSvg, iconName: this.question.cssClasses.cleanButtonIconId, size: "auto" })));
3375
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_6__["SvgIcon"], { className: this.question.cssClasses.cleanButtonSvg, iconName: this.question.cssClasses.cleanButtonIconId, size: "auto" })));
3379
3376
  };
3380
3377
  return SurveyQuestionDropdownSelect;
3381
3378
  }(_reactquestion_dropdown__WEBPACK_IMPORTED_MODULE_3__["SurveyQuestionDropdown"]));
@@ -3993,7 +3990,7 @@ var SurveyPage = /** @class */ (function (_super) {
3993
3990
  var title = this.renderTitle();
3994
3991
  var description = this.renderDescription();
3995
3992
  var rows = this.renderRows(this.panelBase.cssClasses);
3996
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { ref: this.rootRef, className: this.panelBase.cssClasses.page.root },
3993
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { ref: this.rootRef, className: this.page.cssRoot },
3997
3994
  title,
3998
3995
  description,
3999
3996
  rows));
@@ -4656,8 +4653,8 @@ var Survey = /** @class */ (function (_super) {
4656
4653
  };
4657
4654
  Survey.prototype.renderError = function (key, error, cssClasses) {
4658
4655
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { key: key },
4659
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.icon, "aria-hidden": "true" }),
4660
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.item },
4656
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.icon || undefined, "aria-hidden": "true" }),
4657
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.item || undefined },
4661
4658
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_string_viewer__WEBPACK_IMPORTED_MODULE_4__["SurveyLocStringViewer"], { locStr: error.locText }))));
4662
4659
  };
4663
4660
  Survey.prototype.questionTitleLocation = function () {
@@ -5230,6 +5227,9 @@ var SurveyQuestion = /** @class */ (function (_super) {
5230
5227
  var errorsAboveQuestion = this.question.showErrorsAboveQuestion
5231
5228
  ? this.renderErrors(cssClasses, "")
5232
5229
  : null;
5230
+ var errorsBelowQuestion = this.question.showErrorsBelowQuestion
5231
+ ? this.renderErrors(cssClasses, "")
5232
+ : null;
5233
5233
  var rootStyle = {};
5234
5234
  if (!!question.paddingLeft)
5235
5235
  rootStyle["paddingLeft"] = question.paddingLeft;
@@ -5241,7 +5241,8 @@ var SurveyQuestion = /** @class */ (function (_super) {
5241
5241
  errorsAboveQuestion,
5242
5242
  headerTop,
5243
5243
  questionContent,
5244
- headerBottom)));
5244
+ headerBottom,
5245
+ errorsBelowQuestion)));
5245
5246
  };
5246
5247
  SurveyQuestion.prototype.wrapElement = function (element) {
5247
5248
  var survey = this.question.survey;
@@ -6070,7 +6071,7 @@ var SurveyQuestionDropdownBase = /** @class */ (function (_super) {
6070
6071
  function SurveyQuestionDropdownBase() {
6071
6072
  var _this = _super !== null && _super.apply(this, arguments) || this;
6072
6073
  _this.onClick = function (event) {
6073
- _this.question.onOpenedCallBack();
6074
+ !!_this.question.onOpenedCallBack && _this.question.onOpenedCallBack();
6074
6075
  };
6075
6076
  return _this;
6076
6077
  }
@@ -6119,7 +6120,15 @@ var SurveyQuestionDropdown = /** @class */ (function (_super) {
6119
6120
  var SurveyQuestionOptionItem = /** @class */ (function (_super) {
6120
6121
  __extends(SurveyQuestionOptionItem, _super);
6121
6122
  function SurveyQuestionOptionItem(props) {
6122
- return _super.call(this, props) || this;
6123
+ var _this = _super.call(this, props) || this;
6124
+ _this.state = { changed: 0 };
6125
+ if (!_this.item.locText)
6126
+ return _this;
6127
+ var self = _this;
6128
+ _this.item.locText.onChanged = function () {
6129
+ self.setState({ changed: self.state.changed + 1 });
6130
+ };
6131
+ return _this;
6123
6132
  }
6124
6133
  SurveyQuestionOptionItem.prototype.getStateElement = function () {
6125
6134
  return this.item;
@@ -6715,8 +6724,8 @@ var SurveyQuestionFile = /** @class */ (function (_super) {
6715
6724
  var preview = this.renderPreview();
6716
6725
  var fileInput = null;
6717
6726
  var fileDecorator = this.renderFileDecorator();
6718
- var clearButton = this.renderClearButton(this.question.cssClasses.removeButton);
6719
- var clearButtonBottom = this.renderClearButton(this.question.cssClasses.removeButtonBottom);
6727
+ var clearButton = this.renderClearButton(this.question.showRemoveButton);
6728
+ var clearButtonBottom = this.renderClearButton(this.question.showRemoveButtonBottom);
6720
6729
  var mobileFileNavigator = this.question.mobileFileNavigatorVisible ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_1__["SurveyActionBar"], { model: this.question.mobileFileNavigator })) : null;
6721
6730
  fileInput = (this.isDisplayMode ?
6722
6731
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { type: "file", disabled: this.isDisplayMode, className: !this.isDisplayMode ? this.question.cssClasses.fileInput : this.question.getReadOnlyFileCss(), id: this.question.inputId, ref: function (input) { return (_this.control = input); }, style: !this.isDisplayMode ? {} : { color: "transparent" }, onChange: !this.isDisplayMode ? this.question.doChange : null, multiple: this.question.allowMultiple, placeholder: this.question.title, accept: this.question.acceptedTypes })
@@ -6747,7 +6756,7 @@ var SurveyQuestionFile = /** @class */ (function (_super) {
6747
6756
  noFileChosen)));
6748
6757
  };
6749
6758
  SurveyQuestionFile.prototype.renderClearButton = function (className) {
6750
- return !this.question.isEmpty() && !this.isDisplayMode && !!className ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("button", { type: "button", onClick: this.question.doClean, className: className },
6759
+ return className ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("button", { type: "button", onClick: this.question.doClean, className: className },
6751
6760
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", null, this.question.cleanButtonCaption),
6752
6761
  (!!this.question.cssClasses.removeButtonIconId) ? react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { iconName: this.question.cssClasses.removeButtonIconId, size: "auto" }) : null)) : null;
6753
6762
  };
@@ -6758,7 +6767,7 @@ var SurveyQuestionFile = /** @class */ (function (_super) {
6758
6767
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: className },
6759
6768
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("a", { href: val.content, onClick: function (event) {
6760
6769
  _this.question.doDownloadFile(event, val);
6761
- }, title: val.name, download: val.name, style: { width: this.question.imageWidth + "px" } }, val.name)));
6770
+ }, title: val.name, download: val.name, style: { width: this.question.imageWidthRendered } }, val.name)));
6762
6771
  };
6763
6772
  SurveyQuestionFile.prototype.renderPreview = function () {
6764
6773
  var _this = this;
@@ -6954,7 +6963,7 @@ var SurveyQuestionMatrix = /** @class */ (function (_super) {
6954
6963
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.tableWrapper, ref: function (root) { return (_this.control = root); } },
6955
6964
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("fieldset", null,
6956
6965
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("legend", { "aria-label": this.question.locTitle.renderedHtml }),
6957
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("table", { className: cssClasses.root },
6966
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("table", { className: this.question.getTableCss() },
6958
6967
  header,
6959
6968
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("tbody", null, rows)))));
6960
6969
  };
@@ -7004,7 +7013,7 @@ var SurveyQuestionMatrixRow = /** @class */ (function (_super) {
7004
7013
  var rowsTD = null;
7005
7014
  if (this.question.hasRows) {
7006
7015
  var rowText = this.renderLocString(this.row.locText);
7007
- rowsTD = react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("td", { className: this.question.cssClasses.cell }, this.wrapCell({ row: this.row }, rowText, "row-header"));
7016
+ rowsTD = react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("td", { className: this.question.cssClasses.rowTextCell }, this.wrapCell({ row: this.row }, rowText, "row-header"));
7008
7017
  }
7009
7018
  var tds = this.generateTds();
7010
7019
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("tr", { className: this.row.rowClasses || undefined },
@@ -7208,7 +7217,7 @@ var SurveyQuestionMatrixDropdownBase = /** @class */ (function (_super) {
7208
7217
  ? { overflowX: "scroll" }
7209
7218
  : {};
7210
7219
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { style: divStyle, ref: function (root) { return (_this.control = root); } },
7211
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("table", { className: this.question.cssClasses.root },
7220
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("table", { className: this.question.getTableCss() },
7212
7221
  header,
7213
7222
  rows,
7214
7223
  footers)));
@@ -8806,7 +8815,7 @@ var SurveyQuestionSignaturePad = /** @class */ (function (_super) {
8806
8815
  var _this = this;
8807
8816
  var cssClasses = this.question.cssClasses;
8808
8817
  var clearButton = this.renderCleanButton();
8809
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.root, ref: function (root) { return (_this.control = root); }, style: { height: this.question.height, width: this.question.width } },
8818
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.root, ref: function (root) { return (_this.control = root); }, style: { height: this.question.signatureHeight, width: this.question.signatureWidth } },
8810
8819
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.placeholder, style: { display: this.question.needShowPlaceholder() ? "" : "none" } }, this.question.placeHolderText),
8811
8820
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", null,
8812
8821
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("canvas", { tabIndex: 0 })),
@@ -9245,147 +9254,6 @@ var settings = {
9245
9254
  };
9246
9255
 
9247
9256
 
9248
- /***/ }),
9249
-
9250
- /***/ "./src/utils/popup.ts":
9251
- /*!****************************!*\
9252
- !*** ./src/utils/popup.ts ***!
9253
- \****************************/
9254
- /*! exports provided: PopupUtils */
9255
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
9256
-
9257
- "use strict";
9258
- __webpack_require__.r(__webpack_exports__);
9259
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PopupUtils", function() { return PopupUtils; });
9260
- var PopupUtils = /** @class */ (function () {
9261
- function PopupUtils() {
9262
- }
9263
- PopupUtils.calculatePosition = function (targetRect, height, width, verticalPosition, horizontalPosition, showPointer) {
9264
- if (horizontalPosition == "center")
9265
- var left = (targetRect.left + targetRect.right - width) / 2;
9266
- else if (horizontalPosition == "left")
9267
- left = targetRect.left - width;
9268
- else
9269
- left = targetRect.right;
9270
- if (verticalPosition == "middle")
9271
- var top = (targetRect.top + targetRect.bottom - height) / 2;
9272
- else if (verticalPosition == "top")
9273
- top = targetRect.top - height;
9274
- else
9275
- top = targetRect.bottom;
9276
- if (showPointer) {
9277
- if (horizontalPosition != "center" && verticalPosition != "middle") {
9278
- if (verticalPosition == "top") {
9279
- top = top + targetRect.height;
9280
- }
9281
- else {
9282
- top = top - targetRect.height;
9283
- }
9284
- }
9285
- }
9286
- return { left: Math.round(left), top: Math.round(top) };
9287
- };
9288
- PopupUtils.updateVerticalDimensions = function (top, height, windowHeight) {
9289
- var result;
9290
- if (top < 0) {
9291
- result = { height: height + top, top: 0 };
9292
- }
9293
- else if (height + top > windowHeight) {
9294
- var newHeight = Math.min(height, windowHeight - top - PopupUtils.bottomIndent);
9295
- result = { height: newHeight, top: top };
9296
- }
9297
- return result;
9298
- };
9299
- PopupUtils.updateHorizontalDimensions = function (left, width, windowWidth, horizontalPosition) {
9300
- var newWidth = width, newLeft = left;
9301
- if (horizontalPosition === "center") {
9302
- if (left < 0) {
9303
- newLeft = 0;
9304
- newWidth = Math.min(width, windowWidth);
9305
- }
9306
- else if (width + left > windowWidth) {
9307
- newLeft = windowWidth - width;
9308
- newLeft = Math.max(newLeft, 0);
9309
- newWidth = Math.min(width, windowWidth);
9310
- }
9311
- }
9312
- if (horizontalPosition === "left") {
9313
- if (left < 0) {
9314
- newLeft = 0;
9315
- newWidth = Math.min(width, windowWidth);
9316
- }
9317
- }
9318
- if (horizontalPosition === "right") {
9319
- if (width + left > windowWidth) {
9320
- newWidth = windowWidth - left;
9321
- }
9322
- }
9323
- return { width: newWidth, left: newLeft };
9324
- };
9325
- PopupUtils.updateVerticalPosition = function (targetRect, height, verticalPosition, showPointer, windowHeight) {
9326
- var deltaTop = height - (targetRect.top + (showPointer ? targetRect.height : 0));
9327
- var deltaBottom = height +
9328
- targetRect.bottom -
9329
- (showPointer ? targetRect.height : 0) -
9330
- windowHeight;
9331
- if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == "top") {
9332
- verticalPosition = "bottom";
9333
- }
9334
- else if (deltaBottom > 0 &&
9335
- deltaTop <= 0 &&
9336
- verticalPosition == "bottom") {
9337
- verticalPosition = "top";
9338
- }
9339
- else if (deltaBottom > 0 && deltaTop > 0) {
9340
- verticalPosition = deltaTop < deltaBottom ? "top" : "bottom";
9341
- }
9342
- return verticalPosition;
9343
- };
9344
- PopupUtils.calculatePopupDirection = function (verticalPosition, horizontalPosition) {
9345
- var popupDirection;
9346
- if (horizontalPosition == "center" && verticalPosition != "middle") {
9347
- popupDirection = verticalPosition;
9348
- }
9349
- else if (horizontalPosition != "center") {
9350
- popupDirection = horizontalPosition;
9351
- }
9352
- return popupDirection;
9353
- };
9354
- //called when showPointer is true
9355
- PopupUtils.calculatePointerTarget = function (targetRect, top, left, verticalPosition, horizontalPosition, marginLeft, marginRight) {
9356
- if (marginLeft === void 0) { marginLeft = 0; }
9357
- if (marginRight === void 0) { marginRight = 0; }
9358
- var targetPos = {};
9359
- if (horizontalPosition != "center") {
9360
- targetPos.top = targetRect.top + targetRect.height / 2;
9361
- targetPos.left = targetRect[horizontalPosition];
9362
- }
9363
- else if (verticalPosition != "middle") {
9364
- targetPos.top = targetRect[verticalPosition];
9365
- targetPos.left = targetRect.left + targetRect.width / 2;
9366
- }
9367
- targetPos.left = Math.round(targetPos.left - left);
9368
- targetPos.top = Math.round(targetPos.top - top);
9369
- if (horizontalPosition == "left") {
9370
- targetPos.left -= marginLeft + marginRight;
9371
- }
9372
- if (horizontalPosition === "center") {
9373
- targetPos.left -= marginLeft;
9374
- }
9375
- return targetPos;
9376
- };
9377
- PopupUtils.updatePopupWidthBeforeShow = function (popupModel, e) {
9378
- if (!!e && !!e.target) {
9379
- popupModel.width = e.target.getBoundingClientRect().width;
9380
- }
9381
- popupModel.toggleVisibility();
9382
- };
9383
- PopupUtils.bottomIndent = 16;
9384
- return PopupUtils;
9385
- }());
9386
-
9387
-
9388
-
9389
9257
  /***/ }),
9390
9258
 
9391
9259
  /***/ "./src/utils/responsivity-manager.ts":
@@ -9547,7 +9415,7 @@ var VerticalResponsivityManager = /** @class */ (function (_super) {
9547
9415
  /*!****************************!*\
9548
9416
  !*** ./src/utils/utils.ts ***!
9549
9417
  \****************************/
9550
- /*! exports provided: unwrap, getSize, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults */
9418
+ /*! exports provided: unwrap, getSize, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClass */
9551
9419
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
9552
9420
 
9553
9421
  "use strict";
@@ -9574,6 +9442,7 @@ __webpack_require__.r(__webpack_exports__);
9574
9442
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "increaseHeightByContent", function() { return increaseHeightByContent; });
9575
9443
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOriginalEvent", function() { return getOriginalEvent; });
9576
9444
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventDefaults", function() { return preventDefaults; });
9445
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findParentByClass", function() { return findParentByClass; });
9577
9446
  /* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../settings */ "./src/settings.ts");
9578
9447
 
9579
9448
  function compareVersions(a, b) {
@@ -9796,6 +9665,16 @@ function isContainerVisible(el) {
9796
9665
  el.offsetHeight ||
9797
9666
  el.getClientRects().length);
9798
9667
  }
9668
+ function findParentByClass(element, className) {
9669
+ if (!!element) {
9670
+ if (element.classList.contains(className) || element.className.indexOf(className) !== -1) {
9671
+ return element;
9672
+ }
9673
+ else {
9674
+ return findParentByClass(element.parentElement, className);
9675
+ }
9676
+ }
9677
+ }
9799
9678
 
9800
9679
 
9801
9680
 
@@ -9836,4 +9715,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_core__;
9836
9715
 
9837
9716
  /******/ });
9838
9717
  });
9839
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY3VzdG9tLXdpZGdldC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZHJvcGRvd24tc2VsZWN0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9lbGVtZW50LWZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9mbG93LXBhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvaW1hZ2VwaWNrZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhbmVsLWJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yYXRpbmctZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9ucy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b20udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3R0aW1lcnBhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3NpZ25hdHVyZXBhZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLXZpZXdlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvdXRpbHMvcG9wdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvdXRpbHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7Ozs7Ozs7QUN2THRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3pMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxpRUFBYztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUM5REE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7Ozs7Ozs7O0FDbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUM3QjtBQUN5Qjs7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFRO0FBQ3VEO0FBQ1E7QUFDRztBQUNkO0FBQ2pCO0FBQ0Y7QUFDSTtBQUNTO0FBS3RCO0FBSVE7QUFJQTtBQUlDO0FBSUQ7QUFDaUM7QUFDRDtBQUlqQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ0o7QUFDWjtBQUNSO0FBQ2lC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QyxJQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxFQUFlO0lBQ3RDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO0FBQzdGLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEVBQWU7SUFDekMsT0FBTyxDQUFDLENBQUMsQ0FDUCxFQUFFLENBQUMsV0FBVztRQUNkLEVBQUUsQ0FBQyxZQUFZO1FBQ2YsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FDM0IsQ0FBQztBQUNKLENBQUM7QUF1QkM7Ozs7Ozs7Ozs7OztBQzdRRixtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RCIsImZpbGUiOiJzdXJ2ZXktcmVhY3QtdWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXJlYWN0LXVpXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXJlYWN0LXVpXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5UmVhY3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9yZWFjdC11aS50c1wiKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCB7IFN1cnZleU1vZGVsLCBNb2RlbCwgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbiIsIi8vIHJlYWN0XG5leHBvcnQgeyBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVwiO1xuZXhwb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHRpbWVycGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1zZWxlY3RcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4LFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvdyxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkh0bWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkZpbGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tY2hlY2tib3hcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tcmFkaW9cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRW1wdHkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9ucyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9uc1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmcgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmF0aW5nLWRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlXaW5kb3cgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3dcIjtcbmV4cG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuZXhwb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9lbGVtZW50LWZhY3RvcnlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIH0gZnJvbSBcIi4uL3JlYWN0L3NpZ25hdHVyZXBhZFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuZXhwb3J0IHsgTGlzdCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdFwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9uc1wiO1xuZXhwb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuZXhwb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5leHBvcnQgeyBMb2dvSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuZXhwb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvblwiO1xuXG5leHBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93XCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3NrZWxldG9uXCI7XG5cbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctdmlld2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLWVkaXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL3JlYWN0LXVpLW1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3JlLWV4cG9ydFwiOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLnN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5zdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbURlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy51bmNoZWNrZWRQYXRofVxuICAgICAgICAgICAgICAgICAgeD1cIjVcIlxuICAgICAgICAgICAgICAgICAgeT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTRcIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrZWRQYXRofVxuICAgICAgICAgICAgICAgICAgcG9pbnRzPVwiMTksMTAgMTQsMTAgMTQsNSAxMCw1IDEwLDEwIDUsMTAgNSwxNCAxMCwxNCAxMCwxOSAxNCwxOSAxNCwxNCAxOSwxNCBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbmRldGVybWluYXRlUGF0aH1cbiAgICAgICAgICAgICAgICAgIGQ9XCJNMjIsMEgyQzAuOSwwLDAsMC45LDAsMnYyMGMwLDEuMSwwLjksMiwyLDJoMjBjMS4xLDAsMi0wLjksMi0yVjJDMjQsMC45LDIzLjEsMCwyMiwweiBNMjEsMThMNiwzaDE1VjE4eiBNMyw2bDE1LDE1SDNWNnpcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclJhZGlvSXRlbSh2YWx1ZTogYW55LCBsb2NUZXh0OiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5nZXRSYWRpb0l0ZW1DbGFzcyhjc3NDbGFzc2VzLCB2YWx1ZSkgfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvTGFiZWwgfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lID0geyB0aGlzLnF1ZXN0aW9uLm5hbWUgfVxuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlIH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnkgPSB7IHRoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5IH1cbiAgICAgICAgICAgIGNoZWNrZWQgPSB7IHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLnZhbHVlIH1cbiAgICAgICAgICAgIGRpc2FibGVkID0geyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgICAgICBjbGFzc05hbWUgPSB7IGNzc0NsYXNzZXMuaXRlbUNvbnRyb2wgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZU9uQ2hhbmdlIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3I/XG4gICAgICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPXsgY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yIH0+XG4gICAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgKDxzdmcgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1SYWRpb0RlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+KTpudWxsfVxuICAgICAgICAgICAgPC9zcGFuPik6bnVsbH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0NvbnRyb2xMYWJlbCB9PlxuICAgICAgICAgICAgeyB0aGlzLnJlbmRlckxvY1N0cmluZyhsb2NUZXh0KSB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJhZGlvfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0ZpZWxkc2V0IH0+XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbShmYWxzZSwgdGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbSh0cnVlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSkgfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tcmFkaW9cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcInJhZGlvXCIsXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBjaGVja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2sgPSB0aGlzLmhhbmRsZU9uTGFiZWxDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljayA9IHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25LZXlEb3duID0gdGhpcy5oYW5kbGVPbktleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Cb29sZWFuTW9kZWw7XG4gIH1cbiAgLypcbiAgcHJpdmF0ZSBnZXQgYWxsb3dDbGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZTtcbiAgfVxuICAqL1xuICBwcml2YXRlIGRvQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRvQ2hlY2soZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKTtcbiAgfVxuICBoYW5kbGVPblN3aXRjaENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uU3dpdGNoQ2xpY2tNb2RlbChldmVudC5uYXRpdmVFdmVudCk7XG4gIH1cbiAgaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxuICBoYW5kbGVPbktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25LZXlEb3duQ29yZShldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sID0gZWw7XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IG9uS2V5RG93bj17dGhpcy5oYW5kbGVPbktleURvd259PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCBmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnN3aXRjaH0gb25DbGljaz17dGhpcy5oYW5kbGVPblN3aXRjaENsaWNrfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJ9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0RldGVybWluYXRlZCAmJiBjc3NDbGFzc2VzLnNsaWRlclRleHQgP1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlclRleHR9PnsgdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5nZXRDaGVja2VkTGFiZWwoKSkgfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyh0cnVlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcG9wdXAvcG9wdXBcIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biBleHRlbmRzIFN1cnZleUFjdGlvbkJhckl0ZW0ge1xyXG4gIHByaXZhdGUgdmlld01vZGVsOiBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbDtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG5ldyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCh0aGlzLml0ZW0pO1xyXG4gIH1cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHN1cGVyLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLml0ZW0ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbC5kaXNwb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQmFzZSwgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtUHJvcHMge1xyXG4gIGl0ZW06IEFjdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgLy9yZWZhY3RvclxyXG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvblJvb3RDc3MoKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gKFxyXG4gICAgICA8U3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPjwvU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcclxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gaWQ9e3RoaXMuaXRlbS5pZH0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICAgIHtzZXBhcmF0b3J9XHJcbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcclxuICBJQWN0aW9uQmFySXRlbVByb3BzLFxyXG4gIGFueVxyXG4+IHtcclxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIDw+e3RoaXMucmVuZGVySW5uZXJCdXR0b24oKX08Lz47XHJcbiAgfVxyXG5cclxuICByZW5kZXJUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uaGFzVGl0bGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdGl0bGVDbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKTtcclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3N9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPjtcclxuICB9XHJcblxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJUZXh0KCk7XHJcbiAgICBjb25zdCBzdmdJY29uID0gISF0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICBzaXplPXt0aGlzLml0ZW0uaWNvblNpemV9XHJcbiAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICkgOiBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7c3ZnSWNvbn1cclxuICAgICAgICB7dGV4dH1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW5uZXJCdXR0b24oKSB7XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGU7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gdGhpcy5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYnV0dG9uID0gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLml0ZW0uYWN0aW9uKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cclxuICAgICAgPlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICA8L2J1dHRvbj4sIG51bGwsIHsgcHJvY2Vzc0VzYzogZmFsc2UgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGBzdi1hY3Rpb24tYmFyLXNlcGFyYXRvciAke3RoaXMucHJvcHMuY3NzQ2xhc3Nlc31gO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L2Rpdj47XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgQWN0aW9uLFxuICBBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcblxuaW50ZXJmYWNlIElBY3Rpb25CYXJQcm9wcyB7XG4gIG1vZGVsOiBBY3Rpb25Db250YWluZXI8QWN0aW9uPjtcbiAgaGFuZGxlQ2xpY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhclByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYW5kbGVDbGljaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVDbGljayAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5oYW5kbGVDbGljayA6IHRydWU7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMubW9kZWwuaGFzQWN0aW9ucykge1xuICAgICAgdGhpcy5tb2RlbC5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGljayA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gOiB1bmRlZmluZWR9XG4gICAgICA+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKFxuICAgICAgKGl0ZW06IEFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QWN0aW9uIGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5QWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBTdXJ2ZXlBY3Rpb25CYXIsXG4gICAgKHByb3BzIGFzIGFueSkgYXMgSUFjdGlvbkJhclByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0SXRlbVByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG4gIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc0l0ZW1WaXNpYmxlKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgcGFkZGluZ0xlZnQ6IHRoaXMubW9kZWwuZ2V0SXRlbUluZGVudCh0aGlzLml0ZW0pLFxyXG4gICAgICBkaXNwbGF5OiBpc1Zpc2libGUgPyBudWxsIDogXCJub25lXCIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5tb2RlbC5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcclxuICAgIGlmICghdGhpcy5pdGVtLmNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpY29uID0gdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICBrZXk9ezF9XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1saXN0X19pdGVtLWljb25cIlxyXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgICAgIHNpemU9ezI0fVxyXG4gICAgICAgID48L1N2Z0ljb24+XHJcbiAgICAgICkgOiBudWxsO1xyXG4gICAgICBjb250ZW50LnB1c2goaWNvbik7XHJcbiAgICAgIGNvbnRlbnQucHVzaCg8c3BhbiBrZXk9ezJ9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZW50LnB1c2goUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnQsIHsgaXRlbTogdGhpcy5pdGVtLCBrZXk6IHRoaXMuaXRlbS5pZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGxpXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0SXRlbSh0aGlzLml0ZW0pO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjb250ZW50fVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlcmVkVGV4dDogdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgfHwgXCJcIlxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19jb250YWluZXJcIj5cclxuICAgICAgICB7dGhpcy5zZWFyY2hFbGVtZW50Q29udGVudCgpfVxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdFwiXHJcbiAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtc31cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckl0ZW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucztcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMaXN0SXRlbSBtb2RlbD17dGhpcy5tb2RlbH0gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9MaXN0SXRlbT5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRWxlbWVudENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwubmVlZEZpbHRlcikgcmV0dXJuIG51bGw7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWxpc3RfX2ZpbHRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3YtbGlzdF9fZmlsdGVyLWljb25cIn0+XHJcbiAgICAgICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1zZWFyY2hcIn1cclxuICAgICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L1N2Z0ljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2lucHV0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudCkge1xuICAgICAgcmV0dXJuICg8c3ZnIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdFbGVtZW50RGVjb3JhdG9yfSA+XG4gICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudH0+PC91c2U+XG4gICAgICA8L3N2Zz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25EcmFnfSAvPik7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25Sb3dSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3dVSSh0aGlzLnJvdyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByZW1vdmVSb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCl9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgID5cbiAgICAgICAge3JlbW92ZVJvd1RleHR9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSU1BdHJpeFJvd1Byb3BzIHtcbiAgbW9kZWw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcGFyZW50TWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU1BdHJpeFJvd1Byb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElNQXRyaXhSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBnZXQgcGFyZW50TWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcmVudE1hdHJpeDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvblBvaW50ZXJEb3duSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5wYXJlbnRNYXRyaXgub25Qb2ludGVyRG93bihldmVudC5uYXRpdmVFdmVudCwgdGhpcy5tb2RlbC5yb3cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIGNsYXNzTmFtZT17bW9kZWwuY2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3c9e21vZGVsLnJvdyAmJiBtb2RlbC5yb3cuaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm9uUG9pbnRlckRvd25IYW5kbGVyKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJvd1wiLFxuICAocHJvcHM6IElNQXRyaXhSb3dQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeFJvdywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLml0ZW0gJiYgdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb24pIHx8IHRoaXMucHJvcHMuZGF0YS5xdWVzdGlvbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGRUZXh0fT57dGhpcy5xdWVzdGlvbi5wYW5lbEFkZFRleHR9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9OZXh0UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxOZXh0VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtbmV4dC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbFByZXZUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcmV2LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJUG9wdXBQcm9wcyB7XG4gIG1vZGVsOiBQb3B1cE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUG9wdXBQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcG9wdXA6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUG9wdXBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUG9wdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKHRoaXMucHJvcHMubW9kZWwpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUYXJnZXRFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5wb3B1cC50YXJnZXRFbGVtZW50ID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5wb3B1cC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcywgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc05lZWRVcGRhdGUgPSBuZXh0UHJvcHMubW9kZWwgIT09IHRoaXMucG9wdXAubW9kZWw7XG4gICAgaWYoaXNOZWVkVXBkYXRlKSB7XG4gICAgICB0aGlzLnBvcHVwPy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICAgIHJldHVybiBpc05lZWRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMucG9wdXAubW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGNvbnN0IHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFBvcHVwQ29udGFpbmVyIG1vZGVsPXt0aGlzLnBvcHVwfT48L1BvcHVwQ29udGFpbmVyPixcbiAgICAgIHRoaXMucG9wdXAuY29udGFpbmVyXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT57cG9wdXBDb250YWluZXJ9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBvcHVwXCIsXG4gIChwcm9wczogSVBvcHVwUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cCwgcHJvcHMpO1xuICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgcHJldklzVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcbiAgfTtcbiAgZ2V0IG1vZGVsKCk6IFBvcHVwQmFzZVZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZSA9IChldjogYW55KSA9PiB7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZU9uU2hvd2luZygpO1xuICAgIH1cbiAgICB0aGlzLnByZXZJc1Zpc2libGUgPSB0aGlzLm1vZGVsLmlzVmlzaWJsZTtcbiAgfVxuICByZW5kZXJDb250YWluZXIoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubW9kZWwuc2hvd1BvaW50ZXIgPyB0aGlzLnJlbmRlclBvaW50ZXIoKSA6IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gISF0aGlzLm1vZGVsLnRpdGxlID8gdGhpcy5yZW5kZXJIZWFkZXIoKSA6IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMubW9kZWwuc2hvd0Zvb3RlciA/IHRoaXMucmVuZGVyRm9vdGVyKCkgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwudG9wLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5oZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwud2lkdGgsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9eyhldjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGlja0luc2lkZShldik7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3NoYWRvd1wiPlxuICAgICAgICAgIHtwb2ludGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktY29udGVudFwiPlxuICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUG9pbnRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktaGVhZGVyXCI+e3RoaXMubW9kZWwudGl0bGV9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudENvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWUsXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGVudFwiPntjb250ZW50Q29tcG9uZW50fTwvZGl2PjtcbiAgfVxuICByZW5kZXJDYW5jZWxCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWZvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2FuY2VsKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLm1vZGVsLmNhbmNlbEJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFwcGx5QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWFwcGx5XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYXBwbHkoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuYXBwbHlCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktZm9vdGVyXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckNhbmNlbEJ1dHRvbigpfVxuICAgICAgICB7dGhpcy5tb2RlbC5pc01vZGFsID8gdGhpcy5yZW5kZXJBcHBseUJ1dHRvbigpIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyQ29udGFpbmVyKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZChcInN2LXBvcHVwXCIpLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMubW9kZWwuaXNWaXNpYmxlID8gXCJcIiA6IFwibm9uZVwiLCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gIGNzc0NsYXNzPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgZGlzcGxheU1vZGU6IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiID0gXCJwb3B1cFwiXG4pIHtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuICAgICAgcG9wdXBWaWV3TW9kZWwudW5tb3VudFBvcHVwQ29udGFpbmVyKCk7XG4gICAgfSxcbiAgICB1bmRlZmluZWQsXG4gICAgY3NzQ2xhc3MsXG4gICAgdGl0bGUsXG4gICAgZGlzcGxheU1vZGVcbiAgKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uaW5uZXJDc3N9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5pdGVtLmRhdGEgJiYgdGhpcy5pdGVtLmRhdGEubW91c2VEb3dufVxuICAgICAgICBvbkNsaWNrPXt0aGlzLml0ZW0uYWN0aW9ufVxuICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnRpdGxlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW5hdi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnN1cnZleS5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJUZXh0fVxuICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogdGhpcy5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9fVxuICAgICAgPlxuICAgICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMuc3VydmV5fT48L1RpdGxlRWxlbWVudD5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0Rlc2NyaXB0aW9uID8gPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MuZGVzY3JpcHRpb259PntkZXNjcmlwdGlvbn08L2g1PiA6IG51bGwgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTG9nb0ltYWdlKGlzUmVuZGVyOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50XG4gICAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdi1zdmctaWNvblwiO1xuICAgIGlmKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUgP1xuICAgICAgICA8c3ZnIGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIj48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50LCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudDogSlNYLkVsZW1lbnQgPSA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e3RoaXMuZWxlbWVudH0gY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD47XG4gICAgaWYoIXRoaXMuZWxlbWVudC5oYXNUaXRsZUFjdGlvbnMpIHJldHVybiB0aXRsZUNvbnRlbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiPnt0aXRsZUNvbnRlbnR9PC9zcGFuPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCl9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJlbGVtZW50XCIsXG4gIFwidGl0bGUtYWN0aW9uc1wiLFxuICBcInN2LXRpdGxlLWFjdGlvbnNcIlxuKTtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZUFjdGlvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSVRpdGxlT3duZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlT3duZXIgPSB0aGlzLmVsZW1lbnQuZ2V0VGl0bGVPd25lcigpO1xuICAgIGlmKCF0aXRsZU93bmVyKVxuICAgICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLmVsZW1lbnQubG9jVGl0bGUpO1xuICAgIHZhciBzcGFucyA9IHRoaXMucmVuZGVyVGl0bGVTcGFucyh0aXRsZU93bmVyLCB0aGlzLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiA8PntzcGFuc308Lz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlU3BhbnMoZWxlbWVudDogSVRpdGxlT3duZXIsIGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgdmFyIGdldFNwYWNlU3BhbiA9IChrZXk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gZGF0YS1rZXk9e2tleX0ga2V5PXtrZXl9PlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIHNwYW5zID0gW107XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dE9uU3RhcnQpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbk51bWJlciA9IGVsZW1lbnQubm87XG4gICAgaWYgKHF1ZXN0aW9uTnVtYmVyKSB7XG4gICAgICBzcGFucy5wdXNoKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEta2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAga2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm51bWJlcn1cbiAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9fVxuICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICA+XG4gICAgICAgICAge3F1ZXN0aW9uTnVtYmVyfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJudW0tc3BcIikpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHNwYW5zLnB1c2goXG4gICAgICBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoZWxlbWVudC5sb2NUaXRsZSwgbnVsbCwgXCJxX3RpdGxlXCIpXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXF1aXJlVGV4dChcbiAgICBlbGVtZW50OiBJVGl0bGVPd25lcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBrZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCBjc3NDbGFzc2VzLnBhbmVsLnJlcXVpcmVkVGV4dH1cbiAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICA+XG4gICAgICAgIHtlbGVtZW50LnJlcXVpcmVkVGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vdGl0bGUtYWN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSAoXG4gICAgICA8VGl0bGVBY3Rpb25zXG4gICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgIGNzc0NsYXNzZXM9e2VsZW1lbnQuY3NzQ2xhc3Nlc31cbiAgICAgID48L1RpdGxlQWN0aW9ucz5cbiAgICApO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBsZXQgb25LZXlVcCA9IG51bGw7XG4gICAgaWYgKGVsZW1lbnQuaGFzVGl0bGVFdmVudHMpIHtcbiAgICAgIG9uS2V5VXAgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQubmF0aXZlRXZlbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBDdXN0b21UYWcgPSBlbGVtZW50LnRpdGxlVGFnTmFtZSBhcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21UYWdcbiAgICAgICAgY2xhc3NOYW1lPXtlbGVtZW50LmNzc1RpdGxlfVxuICAgICAgICBpZD17ZWxlbWVudC5hcmlhVGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFkaW9ncm91cFwiXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgfVxuICAgICAgICB0YWJJbmRleD17ZWxlbWVudC50aXRsZVRhYkluZGV4fVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtlbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgPlxuICAgICAgICB7dGl0bGVDb250ZW50fVxuICAgICAgPC9DdXN0b21UYWc+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDdXN0b21XaWRnZXQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy53aWRnZXRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcml2YXRlIF9hZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB2YXIgaXNEZWZhdWx0UmVuZGVyID1cbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0ICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGN1c3RvbVdpZGdldCA9IHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldDtcblxuICAgIGlmIChjdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9PlxuICAgICAgICAgIHt0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3aWRnZXQgPSBudWxsO1xuICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIpIHtcbiAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XG4gICAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xuICAgICAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+e3dpZGdldH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZHJvcGRvd25cIjtcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuaW1wb3J0IHsgUG9wdXBVdGlscyB9IGZyb20gXCIuLi91dGlscy9wb3B1cFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGljayA9IChfOiBhbnksIGU6IGFueSkgPT4ge1xuICAgICAgUG9wdXBVdGlscy51cGRhdGVQb3B1cFdpZHRoQmVmb3JlU2hvdyh0aGlzLnF1ZXN0aW9uLnBvcHVwTW9kZWwsIGUpO1xuICAgIH07XG5cbiAgICBsZXQgc2VsZWN0RWxlbWVudCA9IG51bGw7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBzZWxlY3RFbGVtZW50ID0gPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9IGRpc2FibGVkPlxuICAgICAgICA8ZGl2PnsgdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQgfTwvZGl2PlxuICAgICAgPC9kaXY+O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhdHRhY2hLZXkyY2xpY2soXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IGNsaWNrKG51bGwsIGV2ZW50KX1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZX0+eyB0aGlzLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dCB9PC9kaXY+XG4gICAgICAgICAge3RoaXMuY3JlYXRlQ2xlYXJCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+LCBudWxsLCB7IHByb2Nlc3NFc2M6IGZhbHNlIH0pO1xuXG4gICAgICBzZWxlY3RFbGVtZW50ID0gPD5cbiAgICAgICAge2lucHV0RWxlbWVudH1cbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLnF1ZXN0aW9uLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8Lz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjcmVhdGVDbGVhckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMucXVlc3Rpb24uc2hvd0NsZWFyQnV0dG9uIHx8ICF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b25JY29uSWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gXCJub25lXCI6IFwiXCIgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiB7IHRoaXMucXVlc3Rpb24ub25DbGVhcihlKTsgfX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2Z31cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkfVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWRyb3Bkb3duLXNlbGVjdFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0LCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFwiZHJvcGRvd25cIiwgXCJzZWxlY3RcIiwgXCJzdi1kcm9wZG93bi1zZWxlY3RcIik7IiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RFbGVtZW50RmFjdG9yeSA9IG5ldyBSZWFjdEVsZW1lbnRGYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgZWxlbWVudENyZWF0b3I6IChwcm9wczogYW55KSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiAhIXRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB8IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBjb25zdCB0aXRsZSA9IGVsZW1lbnQuaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9PjwvVGl0bGVFbGVtZW50PlxuICAgICkgOiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbGVtZW50LmNzc0hlYWRlcn0gb25DbGljaz17ZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuZWxlbWVudC5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRGVzY3JpcHRpb259PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Rmxvd1BhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgZmxvd1BhbmVsKCk6IEZsb3dQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbCBhcyBGbG93UGFuZWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9O1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBudWxsO1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24obmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKCk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIFt0aGlzLnJlbmRlckh0bWwoKV07XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgZ2V0Tm9kZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRJbmRleCsrO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIdG1sKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZmxvd1BhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMuZmxvd1BhbmVsLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBpZiAoIURPTVBhcnNlcikge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IGh0bWwgfTtcbiAgICAgIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yZW5kZXJlZEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKGRvYyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGVzKGRvbU5vZGVzOiBBcnJheTxOb2RlPik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbU5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMucmVuZGVyTm9kZShkb21Ob2Rlc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhcmVudE5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucmVuZGVyTm9kZXModGhpcy5nZXRDaGlsZERvbU5vZGVzKG5vZGUpKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpXG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShub2RlLnRleHRDb250ZW50KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcXVlc3Rpb25Cb2R5ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25cbiAgICAgICAgICBrZXk9e3F1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgZWxlbWVudD17cXVlc3Rpb259XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e3F1ZXN0aW9uQm9keX08L3NwYW4+O1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpIHtcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e25vZGUudGV4dENvbnRlbnR9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7bm9kZS50ZXh0Q29udGVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2hpbGREb21Ob2Rlcyhub2RlOiBOb2RlKTogQXJyYXk8Tm9kZT4ge1xuICAgIGNvbnN0IGRvbU5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCIjdGV4dFwiKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmLXBhbmVsXCIsIHsgc3R5bGU6IHN0eWxlIH0sIHJvd3MpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwiZmxvd3BhbmVsXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Rmxvd1BhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaW1hZ2VMaW5rO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKTtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5xdWVzdGlvbi50ZXh0IHx8IHRoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgLy9hbHQ9e2l0ZW0udGV4dCB8fCBpdGVtLnZhbHVlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8dmlkZW8gY29udHJvbHNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInlvdXR1YmVcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24uaW1hZ2VMaW5rfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1ucyA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKSA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IHRoaXMucXVlc3Rpb24ubmFtZSArIFwiLVwiICsgaXRlbS52YWx1ZTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSBhcyBJbWFnZUl0ZW1WYWx1ZSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEltYWdlSXRlbVZhbHVlLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gPFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gaXRlbT17aXRlbX0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbT47XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5pdGVtLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9jSW1hZ2VMaW5rY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rID8gdGhpcy5zdGF0ZS5sb2NJbWFnZUxpbmsgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWUuY29uY2F0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VyclZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgY3VyclZhbHVlLnNwbGljZSh0aGlzLnF1ZXN0aW9uLnZhbHVlLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBjdXJyVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpc0NoZWNrZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gcXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIHZhciB0ZXh0ID0gbnVsbDtcbiAgICBpZiAocXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmIChpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwgJiYgdGhpcy5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWQ9eyhldmVudDogYW55KSA9PiB7IHRoaXMucXVlc3Rpb25bXCJvbkNvbnRlbnRMb2FkZWRcIl0oaXRlbSwgZXZlbnQubmF0aXZlRXZlbnQpOyB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCAmJiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPXsoZXZlbnQ6IGFueSkgPT4geyB0aGlzLnF1ZXN0aW9uW1wib25Db250ZW50TG9hZGVkXCJdKGl0ZW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KTsgfX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCkge1xuICAgICAgbGV0IHN0eWxlOiBhbnkgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgIG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdFxuICAgICAgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2V9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb259PlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbklkfT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYWdlLnJvb3R9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAge3Jvd3N9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5wYWdlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFnZS5fc2hvd0Rlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhZ2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYWdlLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwsIFBhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4vcm93XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYW5lbEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ICE9PSBcImVsZW1lbnRzXCIgJiYgc3VwZXIuY2FuVXNlUHJvcEluU3RhdGUoa2V5KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3NzKCk7XG4gIH1cbiAgcHVibGljIGdldCBwYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmdldFBhbmVsQmFzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5zdXJ2ZXkgfHwgKCEhdGhpcy5wYW5lbEJhc2UgPyB0aGlzLnBhbmVsQmFzZS5zdXJ2ZXkgOiBudWxsKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmIChcbiAgICAgICEhcHJldlByb3BzLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgJiZcbiAgICAgIHByZXZQcm9wcy5wYWdlLm5hbWUgPT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLm5hbWVcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgaWYgKHRoaXMucGFuZWxCYXNlLmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsLCBlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhZ2UoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5wYW5lbEJhc2VcbiAgICAgICYmIHRoaXMucGFuZWxCYXNlLmlzVmlzaWJsZSAmJiAhIXRoaXMucGFuZWxCYXNlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZFJvd3NDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKGNzczogYW55KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJyb3dzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYW5lbEJhc2Uucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXTtcbiAgICAgIGlmICghcm93KSB7XG4gICAgICAgIHJvdyA9IHRoaXMuY3JlYXRlUm93KHF1ZXN0aW9uUm93c1tpXSwgY3NzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFJvd3NDYWNoZVtxdWVzdGlvblJvd3NbaV0uaWRdID0gcm93O1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSb3cocm93OiBRdWVzdGlvblJvd01vZGVsLCBjc3M6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVJvd1xuICAgICAgICBrZXk9e3Jvdy5pZH1cbiAgICAgICAgcm93PXtyb3d9XG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgY3NzPXtjc3N9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEVycm9ycyB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwsIGRvS2V5MkNsaWNrVXAsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LWhlYWRlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBwcml2YXRlIGhhc0JlZW5FeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgY29uc3QgZXJyb3JzID0gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5wYW5lbEJhc2V9XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLnBhbmVsLmlubmVyUGFkZGluZ0xlZnQsXG4gICAgICBkaXNwbGF5OiAhdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCA/IHVuZGVmaW5lZCA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgfHwgdGhpcy5oYXNCZWVuRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaGFzQmVlbkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJvd3M6IEpTWC5FbGVtZW50W10gPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgICBjb25zdCBjbGFzc05hbWU6IHN0cmluZyA9IHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFuZWwuY29udGVudDtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoc3R5bGUsIHJvd3MsIGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5nZXRDb250YWluZXJDc3MoKX1cbiAgICAgICAgb25Gb2N1cz17KHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwpLmZvY3VzSW59XG4gICAgICA+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCkge1xuICAgIGlmICghdGhpcy5wYW5lbC5oYXNUaXRsZSAmJiAhdGhpcy5wYW5lbC5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXt0aGlzLnBhbmVsfT48L1N1cnZleUVsZW1lbnRIZWFkZXI+O1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5wYW5lbC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwRWxlbWVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10sIGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJvdHRvbSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlkPXt0aGlzLnBhbmVsLmNvbnRlbnRJZH0+XG4gICAgICAgIHtyb3dzfVxuICAgICAgICB7Ym90dG9tfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UudGl0bGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLmRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhbmVsQmFzZS5sb2NEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBhbmVsLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb259Pnt0ZXh0fTwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJvdHRvbSgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZm9vdGVyVG9vbGJhciA9IHRoaXMucGFuZWwuZ2V0Rm9vdGVyVG9vbGJhcigpO1xuICAgIGlmICghZm9vdGVyVG9vbGJhci5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Zm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicGFuZWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVBhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCwgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb25SYXRpbmdNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdERyb3Bkb3dufT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwicmF0aW5nXCIsXG4gIFwiZHJvcGRvd25cIixcbiAgXCJzdi1yYXRpbmctZHJvcGRvd25cIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFBhZ2VNb2RlbCwgU3VydmV5RXJyb3IsIFN0eWxlc01hbmFnZXIsIHN1cnZleUNzcywgSGVscGVycywgZG9LZXkyQ2xpY2tVcCwgU3ZnUmVnaXN0cnksIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4vc3RyaW5nLXZpZXdlclwiO1xuaW1wb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi9yZWFjdHRpbWVycGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBkb0tleTJDbGlja0JsdXIsIGRvS2V5MkNsaWNrRG93biB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PlxuICBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgcHJpdmF0ZSBwcmV2aW91c0pTT04gPSB7fTtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwdWJsaWMgc3RhdGljIGdldCBjc3NUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjc3NUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIHByaXZhdGUgcm9vdE5vZGVJZDogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIElEIGF0dHJcbiAgcHJpdmF0ZSByb290Tm9kZUNsYXNzTmFtZTogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIGNsYXNzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2sgPSB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZVN1cnZleShwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkocHJvcHMsIHt9KTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJvb3ROb2RlSWQgPSBwcm9wcy5pZCB8fCBudWxsO1xuICAgIHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KSB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEpTT05DaGFuZ2VkKG5leHRQcm9wcykpIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5KG5leHRQcm9wcyk7XG4gICAgICB0aGlzLnVwZGF0ZVN1cnZleShuZXh0UHJvcHMsIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkodGhpcy5wcm9wcywgcHJldlByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RhcnRUaW1lckZyb21VSSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RvcFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIGRvUmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnN1cnZleVtcIm5lZWRSZW5kZXJJY29uc1wiXSkge1xuICAgICAgU3ZnUmVnaXN0cnkucmVuZGVySWNvbnMoKTtcbiAgICB9XG4gICAgbGV0IHJlbmRlclJlc3VsdDogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZGJlZm9yZVwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZEJlZm9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyTG9hZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN1cnZleSgpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEpTWC5FbGVtZW50ID0gPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3RoaXMuc3VydmV5fT48L1N1cnZleUhlYWRlcj47XG4gICAgY29uc3Qgb25TdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQ6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgbGV0IGN1c3RvbUhlYWRlcjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT1cInN2X2N1c3RvbV9oZWFkZXJcIiAvPjtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaGFzTG9nbykge1xuICAgICAgY3VzdG9tSGVhZGVyID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgcm9vdENzcyA9IHRoaXMuc3VydmV5LmdldFJvb3RDc3MoKTtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5yb290Tm9kZUNsYXNzTmFtZSA/IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgKyBcIiBcIiArIHJvb3RDc3MgOiByb290Q3NzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9e3RoaXMucm9vdE5vZGVJZH0gcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc30+XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgICAge2N1c3RvbUhlYWRlcn1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuY29udGFpbmVyfT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICB7cmVuZGVyUmVzdWx0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5kb1JlbmRlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuY3NzID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlVHJ5QWdhaW5DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UpIHJldHVybiBudWxsO1xuICAgIHZhciBjb21wbGV0ZWRTdGF0ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlKSB7XG4gICAgICB2YXIgdHJ5QWdhaW5CdXR0b24gPSBudWxsO1xuICAgICAgaWYgKHRoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlID09IFwiZXJyb3JcIikge1xuICAgICAgICB2YXIgYnRuVGV4dCA9IHRoaXMuc3VydmV5LmdldExvY2FsaXphdGlvblN0cmluZyhcInNhdmVBZ2FpbkJ1dHRvblwiKTtcbiAgICAgICAgdHJ5QWdhaW5CdXR0b24gPSAoXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPXtcImJ1dHRvblwifVxuICAgICAgICAgICAgdmFsdWU9e2J0blRleHR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnNhdmVBZ2FpbkJ1dHRvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlVHJ5QWdhaW5DbGlja31cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdmFyIGNzcyA9IHRoaXMuY3NzLnNhdmVEYXRhW3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlXTtcbiAgICAgIGNvbXBsZXRlZFN0YXRlID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Muc2F2ZURhdGEucm9vdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc30+XG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVUZXh0fTwvc3Bhbj5cbiAgICAgICAgICAgIHt0cnlBZ2FpbkJ1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmNvbXBsZXRlZENzc31cbiAgICAgICAgLz5cbiAgICAgICAge2NvbXBsZXRlZFN0YXRlfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMb2FkaW5nKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZExvYWRpbmdIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5ib2R5fSAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGFjdGl2ZVBhZ2UgPSB0aGlzLnN1cnZleS5hY3RpdmVQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLnN1cnZleS5hY3RpdmVQYWdlKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGlzU3RhcmluZyA9IHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZTtcbiAgICB2YXIgcGFnZUlkID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSA/IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UuaWQgOiBcIlwiO1xuICAgIHZhciB0b3BQcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3AgJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKHRydWUpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGJvdHRvbVByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSAmJiAhaXNTdGFyaW5nXG4gICAgICA/IHRoaXMucmVuZGVyUHJvZ3Jlc3MoZmFsc2UpXG4gICAgICA6IG51bGw7XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMuc3VydmV5LmJvZHlDc3M7XG4gICAgaWYgKCFhY3RpdmVQYWdlKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLmNzcy5ib2R5RW1wdHk7XG4gICAgICBhY3RpdmVQYWdlID0gdGhpcy5yZW5kZXJFbXB0eVN1cnZleSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17cGFnZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge3RvcFByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaW1lclBhbmVsKFwidG9wXCIpfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwidG9wXCIpfVxuICAgICAgICB7YWN0aXZlUGFnZX1cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcImJvdHRvbVwiKX1cbiAgICAgICAge2JvdHRvbVByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwiYm90dG9tXCIpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGltZXJQYW5lbChsb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgaWYodGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlUaW1lclBhbmVsIHRpbWVyTW9kZWw9e3RoaXMuc3VydmV5LnRpbWVyTW9kZWx9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2U6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVBhZ2VcbiAgICAgICAgc3VydmV5PXt0aGlzLnN1cnZleX1cbiAgICAgICAgcGFnZT17cGFnZX1cbiAgICAgICAgY3NzPXt0aGlzLmNzc31cbiAgICAgICAgY3JlYXRvcj17dGhpc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJvZ3Jlc3MoaXNUb3A6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLmNzcywgaXNUb3A6IGlzVG9wIH1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0aW9uKG5hdlBvc2l0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IFwiYm90aFwiICYmXG4gICAgICAodGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiIHx8XG4gICAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBuYXZQb3NpdGlvbilcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5zdXJ2ZXkubmF2aWdhdGlvbkJhcn0gLz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVtcHR5U3VydmV5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPHNwYW4+e3RoaXMuc3VydmV5LmVtcHR5U3VydmV5VGV4dH08L3NwYW4+O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIG5ld1Byb3BzID0ge307XG4gICAgdGhpcy5wcmV2aW91c0pTT04gPSB7fTtcbiAgICBpZiAobmV3UHJvcHMpIHtcbiAgICAgIGlmIChuZXdQcm9wcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnN1cnZleSA9IG5ld1Byb3BzLm1vZGVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld1Byb3BzLmpzb24pIHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzSlNPTiA9IG5ld1Byb3BzLmpzb247XG4gICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwobmV3UHJvcHMuanNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHMuY3NzKSB7XG4gICAgICB0aGlzLnN1cnZleS5jc3MgPSB0aGlzLmNzcztcbiAgICB9XG4gICAgdGhpcy5zZXRTdXJ2ZXlFdmVudHMoKTtcbiAgfVxuICBwcml2YXRlIGlzTW9kZWxKU09OQ2hhbmdlZChuZXdQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJtb2RlbFwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9PSBuZXdQcm9wc1tcIm1vZGVsXCJdO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wc1tcImpzb25cIl0pIHtcbiAgICAgIHJldHVybiAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1Byb3BzW1wianNvblwiXSwgdGhpcy5wcmV2aW91c0pTT04pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVN1cnZleShuZXdQcm9wczogYW55LCBvbGRQcm9wcz86IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIHJldHVybjtcbiAgICBvbGRQcm9wcyA9IG9sZFByb3BzIHx8IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdQcm9wcykge1xuICAgICAgaWYgKGtleSA9PSBcIm1vZGVsXCIgfHwga2V5ID09IFwiY2hpbGRyZW5cIiB8fCBrZXkgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09IFwiY3NzXCIpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWVyZ2VWYWx1ZXMobmV3UHJvcHMuY3NzLCB0aGlzLnN1cnZleS5nZXRDc3MoKSk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlTmF2aWdhdGlvbkNzc1wiXSgpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHVwZGF0ZTogMCB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZ1bmN0aW9uOiBhbnkgPSBudWxsO1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHVwZGF0ZTogc2VsZi5zdGF0ZS51cGRhdGUgKyAxIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5yZW1vdmUodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3MgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc1RvcDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5pc1RvcCA/IHt9IDogeyBtYXJnaW5Ub3A6IFwiMWVtXCIgfTtcbiAgICB2YXIgcHJvZ3Jlc3NTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3Byb2dyZXNzU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgICAgYXJpYS12YWx1ZW1heD17MTAwfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXBhZ2VzXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1xdWVzdGlvbnNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRRdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGxpc3RDb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLnN1cnZleSk7XG4gICAgdGhpcy5saXN0Q29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3ModHJ1ZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcn1cbiAgICAgICAgICAgIHJlZj17dGhpcy5saXN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3R9PlxuICAgICAgICAgICAgICB7dGhpcy5nZXRMaXN0RWxlbWVudHMoKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyhmYWxzZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudHMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgbGV0IGJ1dHRvbnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBidXR0b25zLnB1c2godGhpcy5yZW5kZXJMaXN0RWxlbWVudChwYWdlLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBidXR0b25zO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0RWxlbWVudChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBrZXk9e1wibGlzdGVsZW1lbnRcIiArIGluZGV4fVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpfVxuICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICB0aGlzLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICA/ICgpID0+IHRoaXMuY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlfVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9ufVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudENzcyhpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRMaXN0RWxlbWVudENzcyhpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrTGlzdEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNjcm9sbEJ1dHRvbkNzcyhpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyh0aGlzLnN0YXRlLmhhc1Njcm9sbGVyLCBpc0xlZnRTY3JvbGwpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudDogRWxlbWVudCxcbiAgICBpc0xlZnRTY3JvbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYoISFsaXN0Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYoISF0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzU2Nyb2xsZXI6IHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgsIH0pO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMud2luZG93LmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTAsXG4gICAgICBtYXhXaWR0aDogXCI2MCVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzUm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2x5cGhDbGFzc05hbWV9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMud2luZG93LmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NCb2R5fT57dGhpcy5kb1JlbmRlcigpfTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHN1cGVyLmNyZWF0ZVN1cnZleShuZXdQcm9wcyk7XG4gICAgdGhpcy53aW5kb3cgPSBuZXcgU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LWhlYWRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50O1xuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHJlbmRlclF1ZXN0aW9uQm9keShcbiAgICBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcixcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25cbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcXVlc3Rpb24uaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gcXVlc3Rpb24uY3VzdG9tV2lkZ2V0O1xuICAgIGlmICghY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUN1c3RvbVdpZGdldCBjcmVhdG9yPXtjcmVhdG9yfSBxdWVzdGlvbj17cXVlc3Rpb259IC8+O1xuICB9XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5hbWVcIiwgdGhpcy5xdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJlxuICAgICAgISF0aGlzLnF1ZXN0aW9uICYmXG4gICAgICAhIXRoaXMuY3JlYXRvciAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY29udGVudFN0eWxlID0ge1xuICAgICAgZGlzcGxheTogIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHF1ZXN0aW9uUmVuZGVyID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9wXCIpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Cb3R0b21cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJib3R0b21cIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgY29tbWVudCA9XG4gICAgICBxdWVzdGlvbiAmJiBxdWVzdGlvbi5oYXNDb21tZW50ID8gdGhpcy5yZW5kZXJDb21tZW50KGNzc0NsYXNzZXMpIDogbnVsbDtcbiAgICBjb25zdCBlcnJvcnNUb29sdGlwID1cbiAgICAgIHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9vbHRpcFwiKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGRlc2NyaXB0aW9uVW5kZXJJbnB1dCA9IHF1ZXN0aW9uLmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgPyB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uLmNzc0NvbnRlbnQgfHwgdW5kZWZpbmVkfVxuICAgICAgICBzdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3F1ZXN0aW9uUmVuZGVyfVxuICAgICAgICB7Y29tbWVudH1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgIHtkZXNjcmlwdGlvblVuZGVySW5wdXR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIocXVlc3Rpb24pO1xuICAgIHZhciBoZWFkZXJUb3AgPSBxdWVzdGlvbi5oYXNUaXRsZU9uTGVmdFRvcCA/IGhlYWRlciA6IG51bGw7XG4gICAgdmFyIGhlYWRlckJvdHRvbSA9IHF1ZXN0aW9uLmhhc1RpdGxlT25Cb3R0b20gPyBoZWFkZXIgOiBudWxsO1xuXG4gICAgY29uc3QgZXJyb3JzQWJvdmVRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yc0Fib3ZlUXVlc3Rpb25cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBRdWVzdGlvbkNvbnRlbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NEZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9uVGV4dH08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb21tZW50VGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jQ29tbWVudFRleHRcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvcm1Hcm91cH0+XG4gICAgICAgIDxkaXY+e2NvbW1lbnRUZXh0fTwvZGl2PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKGNzc0NsYXNzZXM6IGFueSwgbG9jYXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17bG9jYXRpb259XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJxdWVzdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb24sIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVycm9ycyBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4gIXByZXZTdGF0ZSA/IHsgZXJyb3I6IDAgfSA6IHsgZXJyb3I6IHByZXZTdGF0ZS5lcnJvciArIDEgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaGFzVmlzaWJsZUVycm9ycztcbiAgfVxuICBwcml2YXRlIHRvb2x0aXBNYW5hZ2VyOiBUb29sdGlwTWFuYWdlcjtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2NhdGlvbiA9PSBcInRvb2x0aXBcIikge1xuICAgICAgaWYgKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50ICYmICF0aGlzLnRvb2x0aXBNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIodGhpcy50b29sdGlwUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlciAmJiAhdGhpcy50b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkaXNwb3NlVG9vbHRpcE1hbmFnZXIoKSB7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5kaXNwb3NlKCk7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IFwiZXJyb3JcIiArIGk7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdG9yLnJlbmRlckVycm9yKGtleSwgdGhpcy5lbGVtZW50LmVycm9yc1tpXSwgdGhpcy5jc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZWxlbWVudC5jc3NFcnJvcn1cbiAgICAgICAgaWQ9e3RoaXMuaWR9XG4gICAgICAgIHJlZj17dGhpcy50b29sdGlwUmVmfVxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1Dc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHsgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uQm90dG9tXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciByZW5kZXJlZFF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cmVuZGVyZWRRdWVzdGlvbn1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQ7XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHByb3RlY3RlZCBjZWxsUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2VsbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgdmFyIGVycm9yc1Rvb2x0aXAgPSB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoXCJ0b29sdGlwXCIpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICByZWY9e3RoaXMuY2VsbFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9XG4gICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17dGhpcy5nZXRIZWFkZXJUZXh0KCl9XG4gICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmNlbGwuZ2V0VGl0bGUoKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh0aGlzLnByb3BzLmNlbGwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jZWxsUXVlc3Rpb25XcmFwcGVyfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgKX1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLFxuICBCdXR0b25Hcm91cEl0ZW1Nb2RlbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2l0ZW1zfTwvZGl2PjtcbiAgfVxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoXG4gICAgICAoaXRlbTogQnV0dG9uR3JvdXBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QnV0dG9uR3JvdXBJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgPjwvU3VydmV5QnV0dG9uR3JvdXBJdGVtPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUJ1dHRvbkdyb3VwSXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBtb2RlbDogQnV0dG9uR3JvdXBJdGVtTW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBCdXR0b25Hcm91cEl0ZW1Nb2RlbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLml0ZW0sIHRoaXMuaW5kZXgpO1xuICB9XG4gIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIGdldCBpdGVtKCk6IEJ1dHRvbkdyb3VwSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMucmVuZGVySWNvbigpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLnJlbmRlckNhcHRpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MubGFiZWx9XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7aW5wdXR9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5kZWNvcmF0b3J9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHtjYXB0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySWNvbigpIHtcbiAgICBpZiAoISF0aGlzLm1vZGVsLmljb25OYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuaWNvbn1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICBzaXplPXt0aGlzLm1vZGVsLmljb25TaXplIHx8IDI0fVxuICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcklucHV0KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5jb250cm9sfVxuICAgICAgICBpZD17dGhpcy5tb2RlbC5pZH1cbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgbmFtZT17dGhpcy5tb2RlbC5uYW1lfVxuICAgICAgICBjaGVja2VkPXt0aGlzLm1vZGVsLnNlbGVjdGVkfVxuICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC52YWx1ZX1cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vbkNoYW5nZSgpO1xuICAgICAgICB9fVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLm1vZGVsLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5tb2RlbC5oYXNFcnJvcnN9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMubW9kZWwuZGVzY3JpYmVkQnl9XG4gICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNhcHRpb24oKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNob3dDYXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgY2FwdGlvbiA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubW9kZWwuY2FwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY2FwdGlvbn1cbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICA+XG4gICAgICAgIHtjYXB0aW9ufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuLy8gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIHByb3BzID0+IHtcbi8vICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgcHJvcHMpO1xuLy8gfSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcbmltcG9ydCB7IEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxmaWVsZHNldFxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9XG4gICAgICAgIHJlZj17KGZpZWxkc2V0KSA9PiAodGhpcy5jb250cm9sID0gZmllbGRzZXQpfVxuICAgICAgPlxuICAgICAgICA8bGVnZW5kIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9e1wic3YtaGlkZGVuXCJ9PjwvbGVnZW5kPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyB0aGlzLmdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzT3RoZXIgJiYgdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLnF1ZXN0aW9uLm90aGVySXRlbSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNIZWFkSXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmhlYWRJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9oXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRGb290ZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzRm9vdEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5mb290SXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1fZlwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5nZXRIZWFkZXIoKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdE11bHRpQ29sdW1ufT5cbiAgICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0Rm9vdGVyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGNpID09PSAwICYmIGlpID09PSAwLFxuICAgICAgICAgIGNzc0NsYXNzZXMsXG4gICAgICAgICAgXCJcIiArIGNpICsgaWlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZW5kZXJlZEl0ZW1zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XG4gICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgcmVuZGVyZWRJdGVtcy5wdXNoKHJlbmRlcmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZEl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IGFueSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleDogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIHRleHRTdHlsZT17dGhpcy50ZXh0U3R5bGV9XG4gICAgICAgIGlzRmlyc3Q9e2lzRmlyc3R9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHRTdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRmlyc3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0ZpcnN0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHZhciBuZXdWYWx1ZSA9IFtdLmNvbmNhdCh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgfHwgW10pO1xuICAgIHZhciBpbmRleCA9IG5ld1ZhbHVlLmluZGV4T2YodGhpcy5pdGVtLnZhbHVlKTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLml0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBzZWxlY3RBbGxDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnRvZ2dsZVNlbGVjdEFsbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtICYmICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5pdGVtKTtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChpc0NoZWNrZWQsIG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5wdXRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsOy8veyBtYXJnaW5SaWdodDogXCIzcHhcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDaGVja2JveChcbiAgICBpc0NoZWNrZWQ6IGJvb2xlYW4sXG4gICAgb3RoZXJJdGVtOiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlkID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKTtcbiAgICB2YXIgdGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5pdGVtLmxvY1RleHQpIDogXCJcIjtcbiAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICBsZXQgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBvbkl0ZW1DaGFuZ2VkID1cbiAgICAgIHRoaXMuaXRlbSA9PSB0aGlzLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgPyB0aGlzLnNlbGVjdEFsbENoYW5nZWRcbiAgICAgICAgOiB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xuXG4gICAgdmFyIGxvY1RleHQ6IGFueSA9IHRoaXMuaXRlbS5sb2NUZXh0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17bGFiZWxDbGFzc30gYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5nZXRBcmlhSXRlbUxhYmVsKHRoaXMuaXRlbSl9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZSAhPSBcInNlbGVjdGFsbFwiID8gdGhpcy5pdGVtLnZhbHVlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuaW5wdXRTdHlsZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uSXRlbUNoYW5nZWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciA/XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz46XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9PlxuICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICB7b3RoZXJJdGVtfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ2hlY2tib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQsIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21tZW50TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG9uQmx1ciA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlID8gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgOiBudWxsO1xuICAgIHZhciBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucXVlc3Rpb24udXBkYXRlRWxlbWVudCgpO1xuICAgIH07XG4gICAgdmFyIHBsYWNlSG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlSG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jbGFzc05hbWV9XG4gICAgICAgIGRpc2FibGVkPXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWFkT25seT17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVmPXsodGV0eGFyZWEpID0+ICh0aGlzLmNvbnRyb2wgPSB0ZXR4YXJlYSl9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHsgdGhpcy5xdWVzdGlvbi5vbktleURvd24oZXZlbnQpOyB9fVxuICAgICAgICBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9XG4gICAgICAgIHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHRoaXMucXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5vdGhlckNzcyB8fCB0aGlzLmNzc0NsYXNzZXMuY29tbWVudDtcbiAgICBsZXQgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbW1lbnQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShldmVudCk7XG4gICAgfTtcbiAgICBsZXQgc3RhdGVDb21tZW50OiBzdHJpbmcgPSAhIXRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLmNvbW1lbnQgOiB1bmRlZmluZWQ7XG4gICAgaWYoc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgJiYgc3RhdGVDb21tZW50LnRyaW0oKSAhPT0gcXVlc3Rpb24uY29tbWVudCkge1xuICAgICAgc3RhdGVDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICB9XG4gICAgbGV0IGNvbW1lbnQgPSBzdGF0ZUNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHN0YXRlQ29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcblxuICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pntjb21tZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgdmFsdWU9e2NvbW1lbnR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIG1heExlbmd0aD17cXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtxdWVzdGlvbi5jb21tZW50T3JPdGhlclBsYWNlSG9sZGVyfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17KGUpID0+IHsgcXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpOyBoYW5kbGVPbkNoYW5nZShlKTsgfSB9XG4gICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBxdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17cXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17cXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DdXN0b20gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgaWYoISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgcmVzLnB1c2godGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgICAgdGhpcy5jcmVhdG9yLFxuICAgICAgdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb25cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbH1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgPjwvU3VydmV5UGFuZWw+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY3VzdG9tXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgcHJvcHMpO1xufSk7XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tcG9zaXRlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCxcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi9iYXNlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZTxUIGV4dGVuZHMgUXVlc3Rpb24+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFQ+IHtcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbk9wZW5lZENhbGxCYWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTZWxlY3QoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSB0aGlzLmlzRGlzcGxheU1vZGUgPyAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICA8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX0gZGlzYWJsZWQ+eyB0aGlzLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dCB9PC9kaXY+KTpcbiAgICAgICg8c2VsZWN0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICAgcmVmPXsoc2VsZWN0KSA9PiAodGhpcy5jb250cm9sID0gc2VsZWN0KX1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9PlxuICAgICAgICB7IHRoaXMucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uID8gKDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj4pIDogbnVsbCB9XG4gICAgICAgIHsgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoKGl0ZW06IEl0ZW1WYWx1ZSwgaTogbnVtYmVyKSA9PiA8U3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGtleT17XCJpdGVtXCIgKyBpfSBpdGVtPXtpdGVtfS8+KSB9XG4gICAgICA8L3NlbGVjdD4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAge3NlbGVjdEVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgPyB0aGlzLnJlbmRlck90aGVyKGNzc0NsYXNzZXMpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8b3B0aW9uIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9IGRpc2FibGVkPXshdGhpcy5pdGVtLmlzRW5hYmxlZH0+XG4gICAgICAgIHt0aGlzLml0ZW0udGV4dH1cbiAgICAgIDwvb3B0aW9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IEJhc2UsIEFycmF5Q2hhbmdlcywgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UCwgUz4ge1xuICBwdWJsaWMgc3RhdGljIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChsb2NTdHIucmVuZGVyQXMsIHtcbiAgICAgIGxvY1N0cjogbG9jU3RyLnJlbmRlckFzRGF0YSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleToga2V5LFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIHByaXZhdGUgX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGFsbG93Q29tcG9uZW50VXBkYXRlKCkge1xuICAgIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbnlDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOmFueSwgbmV4dFN0YXRlOmFueSk6Ym9vbGVhbiB7XG4gICAgaWYodGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbmRlcigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKDEpO1xuICAgIHZhciByZXMgPSB0aGlzLnJlbmRlckVsZW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKC0xKTtcblxuICAgIHJlcyA9IHRoaXMud3JhcEVsZW1lbnQocmVzKTtcblxuICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdGF0ZUVsczogQXJyYXk8YW55PiA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50cygpO1xuICAgIGZvcihsZXQgc3RhdGVFbCBvZiBzdGF0ZUVscykge1xuICAgICAgaWYoc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA+IDApIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudHMoKTogQmFzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBzdGFydEVuZFJlbmRlcmluZyh2YWw6IG51bWJlcikge1xuICAgIHZhciBzdGF0ZUVsczogQXJyYXk8YW55PiA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50cygpO1xuICAgIGZvcihsZXQgc3RhdGVFbCBvZiBzdGF0ZUVscykge1xuICAgICAgaWYgKCFzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nKSBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID0gMDtcbiAgICAgIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgKz0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNoYW5nZWRTdGF0ZVByb3BOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFlbCA/IFtlbF0gOiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcobG9jU3RyLCBzdHlsZSk7XG4gIH1cbiAgcHJpdmF0ZSBjYW5NYWtlUmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhdGVFbGVtZW50ICYmICEhc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaDtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudFJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSkge1xuICAgIGlmICghdGhpcy5jYW5NYWtlUmVhY3Qoc3RhdGVFbGVtZW50KSkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9IChhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIGhhc2g6IGFueSxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmIChoYXNoW2tleV0gIT09IHZhbCkge1xuICAgICAgICBoYXNoW2tleV0gPSB2YWw7XG4gICAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCF0aGlzLmNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQpKSByZXR1cm47XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9ICgpID0+IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb250cm9sOiBIVE1MRWxlbWVudDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQodGhpcy5jb250cm9sKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5jb250cm9sO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbkJhc2UoKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEVsZW1lbnRzKCk6IEJhc2VbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXN0aW9uQmFzZV07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgISF0aGlzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcHMuaXNEaXNwbGF5TW9kZSB8fFxuICAgICAgKCEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgdGhpcy5xdWVzdGlvbkJhc2UuaXNJbnB1dFJlYWRPbmx5KSB8fCBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IGFueSxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudCxcbiAgICByZWFzb246IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbkJhc2VcbiAgICAgIC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgVCBleHRlbmRzIFF1ZXN0aW9uXG4+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgPSB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFQ7XG4gIH1cbiAgdXBkYXRlVmFsdWVPbkV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbkJhc2UudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghIXRoaXMuY29udHJvbCkge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlQ29yZSgpO1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLmdldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRW1wdHkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FbXB0eU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FbXB0eU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiAvPjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZW1wdHlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRW1wdHksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9XG4gICAgICAgIHJlZj17KGRpdikgPT4gKHRoaXMuY29udHJvbCA9IGRpdil9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmZvcm1hdGVkVmFsdWV9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJleHByZXNzaW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0UXVlc3Rpb25GYWN0b3J5ID0gbmV3IFJlYWN0UXVlc3Rpb25GYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25GaWxlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkZpbGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRmlsZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMucmVuZGVyUHJldmlldygpO1xuICAgIHZhciBmaWxlSW5wdXQgPSBudWxsO1xuICAgIHZhciBmaWxlRGVjb3JhdG9yID0gdGhpcy5yZW5kZXJGaWxlRGVjb3JhdG9yKCk7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25cbiAgICApO1xuICAgIHZhciBjbGVhckJ1dHRvbkJvdHRvbSA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogbnVsbH1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICB7bW9iaWxlRmlsZU5hdmlnYXRvcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZSAmJiAhIWNsYXNzTmFtZT8gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5xdWVzdGlvbi5kb0NsZWFufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuPnt0aGlzLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZVNpZ24oY2xhc3NOYW1lOiBzdHJpbmcsIHZhbDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFjbGFzc05hbWUgfHwgIXZhbC5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZShldmVudCwgdmFsKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPXt2YWwubmFtZX1cbiAgICAgICAgICBkb3dubG9hZD17dmFsLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZhbC5uYW1lfVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcmV2aWV3KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlIHx8ICF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzUHJldmlld1Zpc2libGUoaW5kZXgpID8gdW5kZWZpbmVkIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZT8oXG4gICAgICAgICAgICAgIDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfT48L1N2Z0ljb24+XG4gICAgICAgICAgICApOm51bGwpfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0IHx8IHVuZGVmaW5lZH0+e3ByZXZpZXdzfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25IdG1sIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkh0bWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSHRtbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fVxuICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkh0bWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Um93TW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHJvd3NDaGFuZ2VkOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyByb3dzQ2hhbmdlZDogc2VsZi5zdGF0ZS5yb3dzQ2hhbmdlZCArIDEgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3NUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0ZCAvPiA6IG51bGw7XG4gICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGx9IGtleT17a2V5fT5cbiAgICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IGNvbHVtbjogY29sdW1uIH0sIGNvbHVtVGV4dCwgXCJjb2x1bW4taGVhZGVyXCIpfVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInJvdy1cIiArIHJvdy5uYW1lICsgXCItXCIgKyBpO1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhSb3dcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICBpc0ZpcnN0PXtpID09IDB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaGVhZGVyID0gIXRoaXMucXVlc3Rpb24uc2hvd0hlYWRlciA/IG51bGwgOiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICB7cm93c1RIfVxuICAgICAgICAgIHtoZWFkZXJzfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXJ9XG4gICAgICAgIHJlZj17cm9vdCA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfSAvPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChjZWxsOiBhbnksIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByZWFzb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3c7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByb3dzVEQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzUm93cykge1xuICAgICAgdmFyIHJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnJvdy5sb2NUZXh0KTtcbiAgICAgIHJvd3NURCA9IDx0ZCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAge3RoaXMud3JhcENlbGwoeyByb3c6IHRoaXMucm93IH0sIHJvd1RleHQsIFwicm93LWhlYWRlclwiKX1cbiAgICAgIDwvdGQ+O1xuICAgIH1cblxuICAgIHZhciB0ZHMgPSB0aGlzLmdlbmVyYXRlVGRzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBjbGFzc05hbWU9e3RoaXMucm93LnJvd0NsYXNzZXMgfHwgdW5kZWZpbmVkfT5cbiAgICAgICAge3Jvd3NURH1cbiAgICAgICAge3Rkc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlVGRzKCkge1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICB2YXIgcm93ID0gdGhpcy5yb3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZCA9IG51bGw7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInZhbHVlXCIgKyBpO1xuXG4gICAgICAvL3ZhciBpc0NoZWNrZWQgPSBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpO1xuICAgICAgdmFyIGlzQ2hlY2tlZCA9IHJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XG4gICAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pO1xuICAgICAgdmFyIGlucHV0SWQgPSB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHJvdy5uYW1lICsgXCJfXCIgKyBpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzQ2VsbFRleHQpIHtcbiAgICAgICAgdmFyIGdldEhhbmRsZXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHlcbiAgICAgICAgICA/IChjb2x1bW46IGFueSkgPT4gKCkgPT4gdGhpcy5jZWxsQ2xpY2socm93LCBjb2x1bW4pXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgICAgICBvbkNsaWNrPXtnZXRIYW5kbGVyID8gZ2V0SGFuZGxlcihjb2x1bW4pIDogbnVsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdy5uYW1lLCBjb2x1bW4pXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPXtpbnB1dElkfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbVZhbHVlfVxuICAgICAgICAgICAgICAgIG5hbWU9e3Jvdy5mdWxsTmFtZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y29sdW1uLnZhbHVlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXshdGhpcy5xdWVzdGlvbi5pc01vYmlsZSA/IHsgZGlzcGxheTogXCJub25lXCIgfSA6IHVuZGVmaW5lZCB9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXNwb25zaXZlVGl0bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhjb2x1bW4ubG9jVGV4dCl9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICAvL0NyZWF0ZSByZW5kZXJlZCB0YWJsZSBpbiBjb250cnVjdG9yIGFuZCBub3Qgb24gcmVuZGVyaW5nXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgcm93Q291bnRlcjogIXByZXZTdGF0ZSA/IDAgOiBwcmV2U3RhdGUucm93Q291bnRlciArIDEgfTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlT25DYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZURpdigpO1xuICB9XG4gIHJlbmRlclRhYmxlRGl2KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIoKTtcbiAgICB2YXIgZm9vdGVycyA9IHRoaXMucmVuZGVyRm9vdGVyKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLnNob3dIb3Jpem9udGFsU2Nyb2xsXG4gICAgICA/ICh7IG92ZXJmbG93WDogXCJzY3JvbGxcIiB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gICAgICA6ICh7fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZGl2U3R5bGV9IHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX0+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtyb3dzfVxuICAgICAgICAgIHtmb290ZXJzfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dIZWFkZXIpIHJldHVybiBudWxsO1xuICAgIHZhciBoZWFkZXJzOiBhbnlbXSA9IFtdO1xuICAgIHZhciBjZWxscyA9IHRhYmxlLmhlYWRlclJvdy5jZWxscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtblN0eWxlOiBhbnkgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgICB9XG4gICAgICB2YXIgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckNlbGxDb250ZW50KGNlbGwsIFwiY29sdW1uLWhlYWRlclwiLCB7fSk7XG4gICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgIDx0aFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgc3R5bGU9e2NvbHVtblN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPntoZWFkZXJzfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93Rm9vdGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcm93ID0gdGhpcy5yZW5kZXJSb3coXG4gICAgICBcImZvb3RlclwiLFxuICAgICAgdGFibGUuZm9vdGVyUm93LFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgKTtcbiAgICByZXR1cm4gPHRmb290Pntyb3d9PC90Zm9vdD47XG4gIH1cbiAgcmVuZGVyUm93cygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgcmVuZGVyZWRSb3dzID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJSb3cocmVuZGVyZWRSb3dzW2ldLmlkLCByZW5kZXJlZFJvd3NbaV0sIGNzc0NsYXNzZXMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPHRib2R5Pntyb3dzfTwvdGJvZHk+O1xuICB9XG4gIHJlbmRlclJvdyhcbiAgICBrZXlWYWx1ZTogYW55LFxuICAgIHJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG1hdHJpeHJvdyA9IFtdO1xuICAgIHZhciBjZWxscyA9IHJvdy5jZWxscztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeHJvdy5wdXNoKHRoaXMucmVuZGVyQ2VsbChjZWxsc1tpXSwgaSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICB2YXIga2V5ID0gXCJyb3dcIiArIGtleVZhbHVlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxNYXRyaXhSb3cgbW9kZWw9e3Jvd30gcGFyZW50TWF0cml4PXt0aGlzLnF1ZXN0aW9ufT57bWF0cml4cm93fTwvTWF0cml4Um93PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gXCJjZWxsXCIgKyBpbmRleDtcbiAgICBpZiAoY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsXG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgaXRlbUNzcz17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBjZWxsPXtjZWxsfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGxldCByZWFzb24gPSBjZWxsLmhhc1RpdGxlID8gXCJyb3ctaGVhZGVyXCIgOiBcIlwiO1xuICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgcmVhc29uLCBjc3NDbGFzc2VzKTtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIGNvbFNwYW49e2NlbGwuY29sU3BhbnN9XG4gICAgICA+XG4gICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDb250ZW50KFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY2VsbENvbnRlbnQgPSBudWxsO1xuICAgIHZhciByZXF1aXJlZFNwYWNlID0gbnVsbDtcbiAgICB2YXIgcmVxdWlyZWRUZXh0ID0gbnVsbDtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNUaXRsZSkge1xuICAgICAgcmVhc29uID0gXCJyb3ctaGVhZGVyXCI7XG4gICAgICBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNlbGwubG9jVGl0bGUpO1xuICAgICAgaWYgKGNlbGwucmVxdWlyZWRUZXh0KSB7XG4gICAgICAgIHJlcXVpcmVkU3BhY2UgPSA8c3Bhbj4mbmJzcDs8L3NwYW4+O1xuICAgICAgICByZXF1aXJlZFRleHQgPSA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY2VsbFJlcXVpcmVkVGV4dH0+e2NlbGwucmVxdWlyZWRUZXh0fTwvc3Bhbj47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9ICg8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGl0ZW09e3sgZGF0YTogeyByb3c6IGNlbGwucm93LCBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9IH19Lz5cbiAgICAgIDwvPik7XG4gICAgfVxuICAgIGlmIChjZWxsLmlzQWN0aW9uc0NlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbFxuICAgICAgICAgIG1vZGVsPXtjZWxsLml0ZW0uZ2V0RGF0YSgpfVxuICAgICAgICA+PC9TdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICB7cmVxdWlyZWRTcGFjZX1cbiAgICAgICAge3JlcXVpcmVkVGV4dH1cbiAgICAgIDwvPlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMud3JhcENlbGwoY2VsbCwgcmVhZHlDZWxsLCByZWFzb24pO1xuICB9XG59XG5cbmNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsfSBoYW5kbGVDbGljaz17ZmFsc2V9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBjZWxsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcSA9IHN1cGVyLmdldFF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhcSkgcmV0dXJuIHE7XG4gICAgcmV0dXJuICEhdGhpcy5jZWxsID8gdGhpcy5jZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICBpZiAoXG4gICAgICBlbCAmJlxuICAgICAgdGhpcy5jZWxsICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleSAmJlxuICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCJcbiAgICApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICBodG1sRWxlbWVudDogZWwsXG4gICAgICAgIHJvdzogdGhpcy5jZWxsLnJvdyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmNlbGwuY2VsbC5jb2x1bW4sXG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkubWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHRoaXMucXVlc3Rpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUgJiZcbiAgICAgICghdGhpcy5jZWxsLmlzQ2hvaWNlIHx8IHRoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHN1cGVyLmdldENlbGxTdHlsZSgpO1xuICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCB8fCAhIXRoaXMuY2VsbC5taW5XaWR0aCkge1xuICAgICAgaWYgKCFyZXMpIHJlcyA9IHt9O1xuICAgICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoKSByZXMud2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICBpZiAoISF0aGlzLmNlbGwubWluV2lkdGgpIHJlcy5taW5XaWR0aCA9IHRoaXMuY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLmhlYWRlcnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0Nob2ljZSlcbiAgICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgICBpZiAodGhpcy5jZWxsLmlzQ2hlY2tib3gpIHJldHVybiB0aGlzLnJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYWRpb2dyb3VwQnV0dG9uKCk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ2hlY2tib3hCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGlzRmlyc3Q9e3RoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlfVxuICAgICAgICBpbmRleD17dGhpcy5jZWxsLmNob2ljZUluZGV4LnRvU3RyaW5nKCl9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaXNDaGVja2VkPXt0aGlzLmNlbGwucXVlc3Rpb24udmFsdWUgPT09IHRoaXMuY2VsbC5pdGVtLnZhbHVlfVxuICAgICAgICBpc0Rpc2FibGVkPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhdGhpcy5jZWxsLml0ZW0uaXNFbmFibGVkfVxuICAgICAgICBoaWRlQ2FwdGlvbj17dHJ1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzaG93VGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlO1xuICAgIHZhciBtYWluRGl2ID0gc2hvd1RhYmxlXG4gICAgICA/IHRoaXMucmVuZGVyVGFibGVEaXYoKVxuICAgICAgOiB0aGlzLnJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXMpfVxuICAgICAgICB7bWFpbkRpdn1cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPblRvcCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPbkJvdHRvbSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb1Jvd3NDb250ZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0VtcHR5Um93c1RleHQpO1xuICAgIGNvbnN0IHRleHREaXY6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dH0+e3RleHR9PC9kaXY+O1xuICAgIGNvbnN0IGJ0bjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzLCB0cnVlKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbn0+XG4gICAgICAgIHt0ZXh0RGl2fVxuICAgICAgICB7YnRufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uKFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpc0VtcHR5U2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhZGRSb3dUZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0FkZFJvd1RleHQpO1xuICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICg8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0QWRkUm93QnV0dG9uQ3NzKGlzRW1wdHlTZWN0aW9uKX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMucXVlc3Rpb24uaXNEZXNpZ25Nb2RlID8gdW5kZWZpbmVkIDogdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrXG4gICAgICB9XG4gICAgPlxuICAgICAge2FkZFJvd1RleHR9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICBpc0VtcHR5U2VjdGlvbiA/IGFkZEJ1dHRvbiA6IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmZvb3Rlcn0+e2FkZEJ1dHRvbn08L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgU3VydmV5RWxlbWVudEVycm9ycywgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xuICAgIHZhciByb3dzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCh0aGlzLnJlbmRlclJvdyhpLCB0YWJsZVJvd3NbaV0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDx0Ym9keT57cm93c308L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3coXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKSB7XG4gICAgdmFyIGtleTogc3RyaW5nID0gXCJpdGVtXCIgKyByb3dJbmRleDtcbiAgICB2YXIgdGRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHRkcy5wdXNoKFxuICAgICAgICA8dGQga2V5PXtcIml0ZW1cIiArIGl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9PlxuICAgICAgICAgIDxTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBpdGVtPXtpdGVtfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9PjwvU3VydmV5TXVsdGlwbGVUZXh0SXRlbT5cbiAgICAgICAgPC90ZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dHIga2V5PXtrZXl9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb3d9PlxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIFt0aGlzLml0ZW0sIHRoaXMuaXRlbS5lZGl0b3JdO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuICg8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1MYWJlbENzcyhpdGVtKX0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVRpdGxlfT5cbiAgICAgICAgPFRpdGxlQ29udGVudCBlbGVtZW50PXtpdGVtLmVkaXRvcn0gY3NzQ2xhc3Nlcz17aXRlbS5lZGl0b3IuY3NzQ2xhc3Nlc30+PC9UaXRsZUNvbnRlbnQ+XG4gICAgICA8L3NwYW4+XG4gICAgICA8U3VydmV5TXVsdGlwbGVUZXh0SXRlbUVkaXRvclxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpdGVtQ3NzPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKX1cbiAgICAgICAgcXVlc3Rpb249e2l0ZW0uZWRpdG9yfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICAge3RoaXMucmVuZGVySXRlbVRvb2x0aXBFcnJvcihpdGVtLCBjc3NDbGFzc2VzKX1cbiAgICA8L2xhYmVsPik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbVRvb2x0aXBFcnJvcihpdGVtOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmVkaXRvci5pc0Vycm9yc01vZGVUb29sdGlwID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e1widG9vbHRpcFwifVxuICAgICAgICBpZD17aXRlbS5lZGl0b3IuaWQgKyBcIl9lcnJvcnNcIn1cbiAgICAgIC8+XG4gICAgKTogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5TXVsdGlwbGVUZXh0SXRlbUVkaXRvciBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuaXRlbUNzc30+e3RoaXMucmVuZGVyQ29udGVudCgpfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgcGFuZWxDb3VudGVyOiAwIH0pO1xuICAgIGNvbnN0IHNlbGY6IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljID0gdGhpcztcbiAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcGFuZWxDb3VudGVyOiB0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5wYW5lbENvdW50ZXIgKyAxIDogMSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcGFuZWxzID0gW107XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24ucGFuZWxzW2ldO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3BhbmVsLmlkfVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWw7XG4gICAgICAgIHBhbmVscy5wdXNoKFxuICAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cbiAgICAgICAgICAgIGtleT17dGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXh9XG4gICAgICAgICAgICBlbGVtZW50PXtwYW5lbH1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdXG4gICAgICA/IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZUb3A6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnJlbmRlck5hdmlnYXRvcigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2Qm90dG9tOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc0JvdHRvbVNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGNvbnN0IG5hdlYyID0gdGhpcy5yZW5kZXJOYXZpZ2F0b3JWMigpO1xuICAgIGNvbnN0IG5vRW50cmllc1BsYWNlaG9sZGVyID0gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICB7bm9FbnRyaWVzUGxhY2Vob2xkZXJ9XG4gICAgICAgIHtuYXZUb3B9XG4gICAgICAgIHtwYW5lbHN9XG4gICAgICAgIHtuYXZCb3R0b219XG4gICAgICAgIHtidG5BZGR9XG4gICAgICAgIHtuYXZWMn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXSkge1xuICAgICAgaWYodGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyAmJiB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyA/IHRoaXMucmVuZGVyUmFuZ2UoKSA6IG51bGw7XG4gICAgY29uc3QgYnRuUHJldjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJQcmV2QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuTmV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJOZXh0QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuQWRkOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NDbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvZ3Jlc3NDbGFzc30+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgY2xlYXI6IFwiYm90aFwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NDb250YWluZXJ9PlxuICAgICAgICAgICAge2J0blByZXZ9XG4gICAgICAgICAgICB7cmFuZ2V9XG4gICAgICAgICAgICB7YnRuTmV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YnRuQWRkfVxuICAgICAgICAgIHt0aGlzLnJlbmRlclByb2dyZXNzVGV4dCgpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJQcm9ncmVzc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRyZXJQcmV2QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZXJOZXh0QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyUmFuZ2UoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQmFyfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnByb2dyZXNzIH19XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRvclYyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5wYW5lbENvdW50ID09PSAwIHx8IHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyAmJiAhdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZyA/IHRoaXMucmVuZGVyUmFuZ2UoKSA6IG51bGw7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcn0+XG4gICAgICA8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPlxuICAgICAge3JhbmdlfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5xdWVzdGlvbi5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5nZXRTaG93Tm9FbnRyaWVzUGxhY2Vob2xkZXIoKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0VudHJpZXNQbGFjZWhvbGRlcn0+XG4gICAgICAgICAgPHNwYW4+e3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTm9FbnRyaWVzVGV4dCl9PC9zcGFuPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0gZXh0ZW5kcyBTdXJ2ZXlQYW5lbCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUGFuZWxSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbiA/ICh0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIHJldHVybiAhIXN1cnZleSA/IHN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIGhhbmRsZU9uUGFuZWxSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVQYW5lbFVJKHRoaXMuaW5kZXgpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3QgcGFuZWw6IEpTWC5FbGVtZW50ID0gc3VwZXIucmVuZGVyKCk7XG4gICAgY29uc3QgcmVtb3ZlQnV0dG9uOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQnV0dG9uKCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLmluZGV4IDwgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50IC0gMSA/XG4gICAgICAoPGhyIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvcn0gLz4pIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UGFuZWxXcmFwcGVyQ3NzKCl9PlxuICAgICAgICAgIHtwYW5lbH1cbiAgICAgICAgICB7cmVtb3ZlQnV0dG9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3NlcGFyYXRvcn1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY2FuUmVtb3ZlUGFuZWwgfHxcbiAgICAgICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5wYW5lbC5pc0NvbGxhcHNlZClcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UGFuZWxSZW1vdmVCdXR0b25Dc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2t9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmVUZXh0fVxuICAgICAgICA+e3RoaXMucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0fTwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfVxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBjbGVhckJ1dHRvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY2FuU2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgICBjbGVhckJ1dHRvbiA9IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuY29udHJvbCA9IGZpZWxkc2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc090aGVyICYmIHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5xdWVzdGlvbi5vdGhlckl0ZW0pID8gdGhpcy5yZW5kZXJPdGhlcihjc3NDbGFzc2VzKSA6IG51bGx9XG4gICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rm9vdGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0Zvb3RJdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZm9vdEl0ZW1zLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtX2ZcIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdE11bHRpQ29sdW1ufT5cbiAgICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0Rm9vdGVyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBjaSArIGlpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGNpICsgaWkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoY3NzQ2xhc3NlczogYW55KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtID0gdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIGl0ZW1zLnB1c2gocmVuZGVyZWRJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7Ly97IGRpc3BsYXk6IFwiaW5saW5lXCIsIHBvc2l0aW9uOiBcInN0YXRpY1wiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGlzQ2hlY2tlZD17dmFsdWUgPT09IGl0ZW0udmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA6IFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NoZWNrZWQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uICYmICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCwgdGhpcy50ZXh0U3R5bGUpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG4gICAgdmFyIGNvbnRyb2xMYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLmlzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y29udHJvbExhYmVsQ2xhc3N9PlxuICAgICAgICAgICAge2l0ZW1UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtLCBwcm9wcyk7XG59KTtcblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFua2luZ01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYW5raW5nTW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJvb3RDbGFzc31cbiAgICAgICAgcmVmPXsocm9vdCkgPT4gKHRoaXMuY29udHJvbCA9IHJvb3QpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5nZXRJdGVtcygpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmtpbmdDaG9pY2VzID0gdGhpcy5xdWVzdGlvbi5yYW5raW5nQ2hvaWNlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmtpbmdDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gcmFua2luZ0Nob2ljZXNbaV07XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZUtleWRvd24uY2FsbCh0aGlzLnF1ZXN0aW9uLCBldmVudCwgaXRlbSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVQb2ludGVyRG93bi5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBpOiBudW1iZXIsXG4gICAgaGFuZGxlS2V5ZG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4gICAgaGFuZGxlUG9pbnRlckRvd246IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpdGVtQ2xhc3M6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25SYW5raW5nTW9kZWxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGtleTogc3RyaW5nID0gaXRlbS52YWx1ZSArIFwiLVwiICsgaSArIFwiLWl0ZW1cIjtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGl0ZW0ubG9jVGV4dCk7XG4gICAgY29uc3QgaW5kZXggPSBpO1xuICAgIGNvbnN0IGluZGV4VGV4dDogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXROdW1iZXJCeUluZGV4KGkpO1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGluZGV4VGV4dD17aW5kZXhUZXh0fVxuICAgICAgICBoYW5kbGVLZXlkb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgICBoYW5kbGVQb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1DbGFzcz17aXRlbUNsYXNzfVxuICAgICAgICBxdWVzdGlvbj17cXVlc3Rpb259XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4VGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZUtleWRvd24oKTogKGV2ZW50OiBhbnkpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUtleWRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBoYW5kbGVQb2ludGVyRG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlUG9pbnRlckRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1DbGFzcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ2xhc3N9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgICBvblBvaW50ZXJEb3duPXt0aGlzLmhhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbT17dGhpcy5pbmRleH1cbiAgICAgID5cbiAgICAgICAgPGRpdiB0YWJJbmRleD17LTF9IHN0eWxlPXt7IG91dGxpbmU6IFwibm9uZVwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0Tm9kZX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJ9PlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTZcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uSG92ZXJDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAyQzYgMC45IDYuOSAwIDggMEM5LjEgMCAxMCAwLjkgMTAgMkMxMCAzLjEgOS4xIDQgOCA0QzYuOSA0IDYgMy4xIDYgMlpNMiAwQzAuOSAwIDAgMC45IDAgMkMwIDMuMSAwLjkgNCAyIDRDMy4xIDQgNCAzLjEgNCAyQzQgMC45IDMuMSAwIDIgMFpNOCA2QzYuOSA2IDYgNi45IDYgOEM2IDkuMSA2LjkgMTAgOCAxMEM5LjEgMTAgMTAgOS4xIDEwIDhDMTAgNi45IDkuMSA2IDggNlpNMiA2QzAuOSA2IDAgNi45IDAgOEMwIDkuMSAwLjkgMTAgMiAxMEMzLjEgMTAgNCA5LjEgNCA4QzQgNi45IDMuMSA2IDIgNlpNOCAxMkM2LjkgMTIgNiAxMi45IDYgMTRDNiAxNS4xIDYuOSAxNiA4IDE2QzkuMSAxNiAxMCAxNS4xIDEwIDE0QzEwIDEyLjkgOS4xIDEyIDggMTJaTTIgMTJDMC45IDEyIDAgMTIuOSAwIDE0QzAgMTUuMSAwLjkgMTYgMiAxNkMzLjEgMTYgNCAxNS4xIDQgMTRDNCAxMi45IDMuMSAxMiAyIDEyWlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uRm9jdXNDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTlWMTVINFYxOUgwTDUgMjRMMTAgMTlINlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleH0+e3RoaXMuaW5kZXhUZXh0fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9Pnt0aGlzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYW5raW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVuZGVyZWRSYXRpbmdJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhdGluZ01vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBtaW5UZXh0ID0gdGhpcy5xdWVzdGlvbi5taW5SYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIG1heFRleHQgPSB0aGlzLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmF0aW5nUm9vdENzc30gcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX0+XG4gICAgICAgIDxmaWVsZHNldCByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgICAgeyEhdGhpcy5xdWVzdGlvbi5oYXNNaW5MYWJlbCA/IDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5taW5UZXh0fT57bWluVGV4dH08L3NwYW4+OiBudWxsfVxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUmF0ZUl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIGl0ZW0sIGksIGNzc0NsYXNzZXMpKX1cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01heExhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1heFRleHR9PnttYXhUZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IFJlbmRlcmVkUmF0aW5nSXRlbSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGl0ZW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0uaXRlbVZhbHVlKX0+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtdmlzdWFsbHloaWRkZW5cIlxuICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJbnB1dElkKGluZGV4KX1cbiAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9XG4gICAgICAgICAgb25DaGFuZ2U9eygpPT57fX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGV4dH0+e2l0ZW1UZXh0fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYXRpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFxuICBRdWVzdGlvblRleHRNb2RlbFxuPiB7XG4gIHByaXZhdGUgX2lzV2FpdGluZ0ZvckVudGVyID0gZmFsc2U7XG4gIC8vY29udHJvbFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIC8vdGhpcy5jb250cm9sUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IGlucHV0Q2xhc3MgPSAodGhpcy5xdWVzdGlvbiBhcyBRdWVzdGlvblRleHRNb2RlbCkuZ2V0Q29udHJvbENsYXNzKCk7XG4gICAgdmFyIG9uS2V5RG93biA9IG51bGw7XG4gICAgdmFyIG9uS2V5VXAgPSBudWxsO1xuICAgIHZhciBvbkNvbXBvc2l0aW9uVXBkYXRlID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgb25LZXlEb3duID0gKGU6IGFueSkgPT4gKHRoaXMuX2lzV2FpdGluZ0ZvckVudGVyID0gZS5rZXlDb2RlID09PSAyMjkpO1xuICAgICAgb25LZXlVcCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciB8fCBlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgICAgdGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGUgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9zdXJ2ZXlqcy9zdXJ2ZXktbGlicmFyeS9pc3N1ZXMvMzM4NFxuICAgICAgb25LZXlVcCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgcGxhY2VIb2xkZXIgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2VIb2xkZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57dGhpcy5xdWVzdGlvbi52YWx1ZX08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgY2xhc3NOYW1lPXtpbnB1dENsYXNzfVxuICAgICAgICB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX1cbiAgICAgICAgLy9yZWY9e3RoaXMuY29udHJvbFJlZn1cbiAgICAgICAgcmVmPXsoaW5wdXQpID0+ICh0aGlzLmNvbnRyb2wgPSBpbnB1dCl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0U3R5bGV9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgbWluPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWlufVxuICAgICAgICBtYXg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNYXh9XG4gICAgICAgIHN0ZXA9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRTdGVwfVxuICAgICAgICBzaXplPXt0aGlzLnF1ZXN0aW9uLmlucHV0U2l6ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyfVxuICAgICAgICBsaXN0PXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvQ29tcGxldGV9XG4gICAgICAgIG9uQmx1cj17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgb25LZXlVcD17b25LZXlVcH1cbiAgICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU9e29uQ29tcG9zaXRpb25VcGRhdGV9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVlc3Rpb24uZGF0YUxpc3RJZCA/XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgeyB0aGlzLnJlbmRlcklucHV0KCkgfVxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJEYXRhTGlzdCgpIH1cbiAgICAgICAgPC9kaXY+OlxuICAgICAgICB0aGlzLnJlbmRlcklucHV0KClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyRGF0YUxpc3QoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0O1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvcHRpb25zLnB1c2goPG9wdGlvbiBrZXk9e1wiaXRlbVwiK2l9IHZhbHVlPXtpdGVtc1tpXX0+PC9vcHRpb24+KTtcbiAgICB9XG4gICAgcmV0dXJuIDxkYXRhbGlzdCBpZD17dGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkfT57b3B0aW9uc308L2RhdGFsaXN0PjtcbiAgfVxuICAvLyBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgLy8gICB0aGlzLmNvbnRyb2wgPSB0aGlzLmNvbnRyb2xSZWYuY3VycmVudDtcbiAgLy8gICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIC8vIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uVGV4dCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgU3VydmV5V2luZG93TW9kZWwsIFN1cnZleUVsZW1lbnQsIFF1ZXN0aW9uUm93TW9kZWwsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFJvdyhzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcm93OiBRdWVzdGlvblJvd01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93KTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdyk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93LFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBFbGVtZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0UXVlc3Rpb25Db250ZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwSXRlbVZhbHVlKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBpdGVtOiBJdGVtVmFsdWUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwTWF0cml4Q2VsbChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgcmVhc29uOiBzdHJpbmcgPSBcImNlbGxcIik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCByZWFzb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIHJlYXNvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbCxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInJlYWN0XCI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVRpbWVyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5VGltZXJQYW5lbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy50aW1lck1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGltZXJNb2RlbCgpOiBTdXJ2ZXlUaW1lck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lck1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnRpbWVyTW9kZWwuc3VydmV5LmdldENzcygpLnRpbWVyUm9vdH0+e3RoaXMudGltZXJNb2RlbC50ZXh0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUNzcygpIHtcbiAgICB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucm93ICYmICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLmNyZWF0b3IgJiYgdGhpcy5yb3cudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlbGVtZW50cyA9IG51bGw7XG4gICAgZWxlbWVudHMgPSB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGNzcyA9IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzVmFsdWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3MucXVlc3Rpb25XcmFwcGVyfVxuICAgICAgICAgIHN0eWxlPXsoZWxlbWVudCBhcyBhbnkpLnJvb3RTdHlsZX1cbiAgICAgICAgICBkYXRhLWtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBrZXk9e2lubmVyRWxlbWVudC5rZXl9XG4gICAgICAgICAgb25Gb2N1cz17KGVsZW1lbnQgYXMgUXVlc3Rpb24pLmZvY3VzSW59XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yb3cuaXNOZWVkUmVuZGVyID8gaW5uZXJFbGVtZW50IDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGNzczogdGhpcy5jc3MsIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXt0aGlzLnJvdy5nZXRSb3dDc3MoKX0gPlxuICAgICAgICB7ZWxlbWVudHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBjb25zdCB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFJvdyhzdXJ2ZXksIGNvbnRlbnQsIHRoaXMucm93KTtcbiAgICByZXR1cm4gd3JhcHBlciB8fCBjb250ZW50O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwgJiYgIXRoaXMucm93LmlzTmVlZFJlbmRlcikge1xuICAgICAgdmFyIHJvd0NvbnRhaW5lckRpdiA9IGVsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93LnN0YXJ0TGF6eVJlbmRlcmluZyhyb3dDb250YWluZXJEaXYpO1xuICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG5leHRQcm9wcy5yb3cgIT09IHRoaXMucm93KSB7XG4gICAgICBuZXh0UHJvcHMucm93LmlzTmVlZFJlbmRlciA9IHRoaXMucm93LmlzTmVlZFJlbmRlcjtcbiAgICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5yb3cuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB0aGlzLnJvdy5pc05lZWRSZW5kZXIgPSAhdGhpcy5yb3cuaXNMYXp5UmVuZGVyaW5nKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgZWxlbWVudEluZGV4PzogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudEluZGV4ID8gXCItXCIgKyBlbGVtZW50SW5kZXggOiAwO1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQuZ2V0VHlwZSgpO1xuICAgIGlmICghUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5pc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlKSkge1xuICAgICAgZWxlbWVudFR5cGUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHtcbiAgICAgIGtleTogZWxlbWVudC5uYW1lICsgaW5kZXgsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgc3VydmV5OiB0aGlzLnN1cnZleSxcbiAgICAgIGNzczogdGhpcy5jc3MsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhbkJ1dHRvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9IHN0eWxlPXt7IGhlaWdodDogdGhpcy5xdWVzdGlvbi5oZWlnaHQsIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLndpZHRoIH19PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpID8gXCJcIiA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5wbGFjZUhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxjYW52YXMgdGFiSW5kZXg9ezB9PjwvY2FudmFzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNsZWFuQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighdGhpcy5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b24pIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2xzfT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbn1cbiAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZCA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+IDogPHNwYW4+4pyWPC9zcGFuPn1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLmxvY1N0ci50ZXh0ID0gZXZlbnQudGFyZ2V0LmlubmVyVGV4dDtcclxuICB9O1xyXG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xyXG4gICAgaWYoISFwcmV2UHJvcHMubG9jU3RyKSB7XHJcbiAgICAgIHByZXZQcm9wcy5sb2NTdHIub25DaGFuZ2VkID0gKCkgPT4ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgaXNSZW5kZXJpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSByZWFjdE9uU3RyQ2hhbmdlZCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9ICgpID0+IHtcclxuICAgICAgaWYodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdHJFbCA9IHRoaXMucmVuZGVyU3RyaW5nKCk7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICByZXR1cm4gc3RyRWw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCByZW5kZXJTdHJpbmcoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2LXN0cmluZy12aWV3ZXJcIiBzdHlsZT17dGhpcy5zdHlsZX0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3Ytc3RyaW5nLXZpZXdlclwiIHN0eWxlPXt0aGlzLnN0eWxlfT57dGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sfTwvc3Bhbj47XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcclxuICBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgU3VydmV5SlMgY29tcGFyYXRvci4gQnkgZGVmYXVsdCB3ZSB0cmltIHN0cmluZ3MgYW5kIGNvbXBhcmUgdGhlbSBhcyBjYXNlIGluc2Vuc2l0aXZlLiBUbyBjaGFuZ2UgdGhlIGJlaGF2aW9yIHlvdSBjYW4gdXNlIGZvbGxvd2luZyBjb2RlOlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLnRyaW1TdHJpbmdzID0gZmFsc2U7IC8vXCJhYmMgXCIgd2lsbCBub3QgZXF1YWwgdG8gXCJhYmNcIi4gVGhleSBhcmUgZXF1YWwgYnkgZGVmYXVsdC5cbiAgICogc2V0dGluZ3MuY29tcGFyYXRvci5jYXNlU2Vuc2l0aXZlID0gdHJ1ZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcIkFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKi9cbiAgY29tcGFyYXRvcjoge1xuICAgIHRyaW1TdHJpbmdzOiB0cnVlLFxuICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBmYWxzZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBVVEMgZnVjdGlvbnMsIGZvciBleGFtcGxlIHNldFVUQ0hvdXJzIGluc2lkZSBvdXIgZnVuY3Rpb25zLCBsaWtlIHRvZGF5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgc2V0SG91cnMgZnVuY3Rpb24sIHdpdGggbG9jYWwgZGF0ZVxuICAgKi9cbiAgdXNlTG9jYWxUaW1lWm9uZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyB7cXVlc3Rpb25OYW1lfSArIHtjb21tZW50UHJlZml4fS5cbiAgICogVGhlIGRlZmF1bHRcbiAgICovXG4gIGNvbW1lbnRQcmVmaXg6IFwiLUNvbW1lbnRcIixcbiAgLyoqXG4gICAqIEVuY29kZSBwYXJhbWV0ZXIgb24gY2FsbGluZyByZXN0ZnVsIHdlYiBBUElcbiAgICovXG4gIHdlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzOiB0cnVlLFxuICAvKipcbiAgICogQ2FjaGUgdGhlIHJlc3VsdCBmb3IgY2hvaWNlcyBnZXR0aW5nIGZyb20gd2ViIHNlcnZpY2VzLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gZGlzYWJsZSB0aGUgY2FjaGluZy5cbiAgICovXG4gIHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDogdHJ1ZSxcbiAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDtcbiAgfSxcbiAgc2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwodmFsOiBib29sZWFuKSB7XG4gICAgc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsID0gdmFsO1xuICB9LFxuICAvKipcbiAgICogU3VydmV5SlMgd2ViIHNlcnZpY2UgQVBJIHVybFxuICAgKi9cbiAgc3VydmV5U2VydmljZVVybDogXCJodHRwczovL2FwaS5zdXJ2ZXlqcy5pby9wdWJsaWMvdjEvU3VydmV5XCIsXG4gIC8qKlxuICAgKiBzZXBhcmF0b3IgdGhhdCBjYW4gYWxsb3cgdG8gc2V0IHZhbHVlIGFuZCB0ZXh0IG9mIEl0ZW1WYWx1ZSBvYmplY3QgaW4gb25lIHN0cmluZyBhczogXCJ2YWx1ZXx0ZXh0XCJcbiAgICovXG4gIGl0ZW1WYWx1ZVNlcGFyYXRvcjogXCJ8XCIsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIGluc3RhbmNlIGFsd2F5cyBhcyBvYmplY3QgZXZlbiBpZiB0ZXh0IHByb3BlcnR5IGlzIGVtcHR5XG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZSg1KTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IDV9LCBpbnN0ZWFkIG9mIDUgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNlcmlhbGl6ZSBpdGVtdmFsdWUgdGV4dCBwcm9wZXJ0eSwgZXZlbiBpZiBpdCBpcyBlbXB0eSBvciBlcXVhbHMgdG8gdmFsdWVcbiAgICogY29uc3QgaXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKFwiaXRlbTFcIik7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiBpdGVtMSwgdGV4dDogXCJpdGVtMVwifSwgaW5zdGVhZCBvZiBcIml0ZW0xXCIgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZVRleHQ6IGZhbHNlLFxuICAvKipcbiAgICogZGVmYXVsdCBsb2NhbGUgbmFtZSBmb3IgbG9jYWxpemFibGUgc3RyaW5ncyB0aGF0IHVzZXMgZHVyaW5nIHNlcmlhbGl6YXRpb24sIHtcImRlZmF1bHRcIjogXCJNeSB0ZXh0XCIsIFwiZGVcIjogXCJNZWluIFRleHRcIn1cbiAgICovXG4gIGRlZmF1bHRMb2NhbGVOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgcm93IG5hbWUgZm9yIG1hdHJpeCAoc2luZ2xlIGNob2ljZSlcbiAgICovXG4gIG1hdHJpeERlZmF1bHRSb3dOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgY2VsbCB0eXBlIGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlc1xuICAgKi9cbiAgbWF0cml4RGVmYXVsdENlbGxUeXBlOiBcImRyb3Bkb3duXCIsXG4gIC8qKlxuICAgKiBUb3RhbCB2YWx1ZSBwb3N0Zml4IGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlcy4gVGhlIHRvdGFsIHZhbHVlIHN0b3JlcyBhczoge21hdHJpeE5hbWV9ICsge3Bvc3RmaXh9XG4gICAqL1xuICBtYXRyaXhUb3RhbFZhbHVlUG9zdEZpeDogXCItdG90YWxcIixcbiAgLyoqXG4gICAqIE1heGltdW0gcm93IGNvdW50IGluIGR5bmFtaWMgbWF0cml4XG4gICAqL1xuICBtYXRyaXhNYXhpbXVtUm93Q291bnQ6IDEwMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvd0NvdW50IHRoYXQgcmV0dXJucyBpbiBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0IGZ1bmN0aW9uXG4gICAqL1xuICBtYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uOiAxLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIHJlbmRlciBtYXRyaXggZHluYW1pYyByZW1vdmUgYWN0aW9uIGFzIGJ1dHRvbi5cbiAgICogSXQgaXMgcmVuZGVyZWQgYXMgaWNvbiBpbiBuZXcgdGhlbWVzIChcImRlZmF1bHRWMlwiKSBieSBkZWZhdWx0LlxuICAgKi9cbiAgbWF0cml4UmVuZGVyUmVtb3ZlQXNJY29uOiB0cnVlLFxuICAvKipcbiAgICogTWF4aW11bSBwYW5lbCBjb3VudCBpbiBkeW5hbWljIHBhbmVsXG4gICAqL1xuICBwYW5lbE1heGltdW1QYW5lbENvdW50OiAxMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJhdGUgdmFsdWUgY291bnQgaW4gcmF0aW5nIHF1ZXN0aW9uXG4gICAqL1xuICByYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnQ6IDIwLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgcXVlc3Rpb24gd2hpbGUgY2hvaWNlcyBhcmUgZ2V0dGluZyBmcm9tIHRoZSB3ZWIgc2VydmljZVxuICAgKi9cbiAgZGlzYWJsZU9uR2V0dGluZ0Nob2ljZXNGcm9tV2ViOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGFsd2F5cyBzZXJpYWxpemUgdGhlIGxvY2FsaXphdGlvbiBzdHJpbmcgYXMgb2JqZWN0IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgZm9yIGRlZmF1bHQgbG9jYWxlLiBJbnN0ZWFkIG9mIHN0cmluZyBcIk15U3RyXCIgc2VyaWFsaXplIGFzIHtkZWZhdWx0OiBcIk15U3RyXCJ9XG4gICAqL1xuICBzZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlEZXNjcmlwdGlvbkluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gZXhlY3V0ZSB0aGUgY29tcGxldGUgdHJpZ2dlciBvbiB2YWx1ZSBjaGFuZ2UgaW5zdGVhZCBvZiBvbiBuZXh0IHBhZ2UuXG4gICAqL1xuICBleGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZXhlY3V0ZSB0aGUgc2tpcCB0cmlnZ2VyIG9uIG5leHQgcGFnZSBpbnN0ZWFkIG9mIG9uIHZhbHVlIGNoYW5nZS5cbiAgICovXG4gIGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW0NvbW1lbnRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIC0gQSAndGV4dGFyZWEnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb250ZXh0bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwiaW5wdXRcIiAoZGVmYXVsdCkgLSBBbiAnaW5wdXQnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seVRleHRSZW5kZXJNb2RlOiBcImlucHV0XCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcImluaXRpYWxcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIGltYWdlcGlja2VyOiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBsZXNzIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWluRGF0ZTogXCJcIixcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4RGF0ZTogXCJcIixcbiAgc2hvd01vZGFsOiA8XG4gICAgKFxuICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgICAgIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgICAgIGNzc0NsYXNzPzogc3RyaW5nLFxuICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICBkaXNwbGF5TW9kZT86IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiXG4gICAgKSA9PiB2b2lkXG4gICAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gIHNob3dEZWZhdWx0SXRlbXNJbkNyZWF0b3JWMjogdHJ1ZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgY3VzdG9tIGljb25zLlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZXBsYWNlIFN1cnZleUpTIGRlZmF1bHQgaWNvbnMgKGRpc3BsYXllZCBpbiBVSSBlbGVtZW50cyBvZiBTdXJ2ZXlKUyBMaWJyYXJ5IG9yIENyZWF0b3IpIHdpdGggeW91ciBjdXN0b20gaWNvbnMuXG4gICAqIEZvciBldmVyeSBkZWZhdWx0IGljb24gdG8gcmVwbGFjZSwgYWRkIGEga2V5L3ZhbHVlIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IGljb24ncyBuYW1lIGFzIGEga2V5IGFuZCB0aGUgbmFtZSBvZiB5b3VyIGN1c3RvbSBpY29uIGFzIGEgdmFsdWUuXG4gICAqIEZvciBleGFtcGxlOiBTdXJ2ZXkuc2V0dGluZ3MuY3VzdG9tSWNvbnNbXCJpY29uLXJlZG9cIl0gPSBcIm15LW93bi1yZWRvLWljb25cIlxuICAgKi9cbiAgY3VzdG9tSWNvbnM6IHt9LFxuICB0aXRsZVRhZ3M6IHtcbiAgICBzdXJ2ZXk6IFwiaDNcIixcbiAgICBwYWdlOiBcImg0XCIsXG4gICAgcGFuZWw6IFwiaDRcIixcbiAgICBxdWVzdGlvbjogXCJoNVwiLFxuICB9XG59O1xuIiwiZXhwb3J0IHR5cGUgVmVydGljYWxQb3NpdGlvbiA9IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJtaWRkbGVcIjtcbmV4cG9ydCB0eXBlIEhvcml6b250YWxQb3NpdGlvbiA9IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJjZW50ZXJcIjtcbmV4cG9ydCBpbnRlcmZhY2UgSVBvc2l0aW9uIHtcbiAgbGVmdD86IG51bWJlciB8IHN0cmluZztcbiAgdG9wPzogbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOdW1iZXJQb3NpdGlvbiBleHRlbmRzIElQb3NpdGlvbiB7XG4gIGxlZnQ/OiBudW1iZXI7XG4gIHRvcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXBVdGlscyB7XG4gIHB1YmxpYyBzdGF0aWMgYm90dG9tSW5kZW50ID0gMTY7XG5cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbixcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhblxuICApOiBJTnVtYmVyUG9zaXRpb24ge1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIilcbiAgICAgIHZhciBsZWZ0ID0gKHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3QucmlnaHQgLSB3aWR0aCkgLyAyO1xuICAgIGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PSBcImxlZnRcIikgbGVmdCA9IHRhcmdldFJlY3QubGVmdCAtIHdpZHRoO1xuICAgIGVsc2UgbGVmdCA9IHRhcmdldFJlY3QucmlnaHQ7XG5cbiAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcIm1pZGRsZVwiKVxuICAgICAgdmFyIHRvcCA9ICh0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuYm90dG9tIC0gaGVpZ2h0KSAvIDI7XG4gICAgZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKSB0b3AgPSB0YXJnZXRSZWN0LnRvcCAtIGhlaWdodDtcbiAgICBlbHNlIHRvcCA9IHRhcmdldFJlY3QuYm90dG9tO1xuXG4gICAgaWYgKHNob3dQb2ludGVyKSB7XG4gICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3AgPSB0b3AgLSB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxlZnQ6IE1hdGgucm91bmQobGVmdCksIHRvcDogTWF0aC5yb3VuZCh0b3ApIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcbiAgICB0b3A6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aW5kb3dIZWlnaHQ6IG51bWJlclxuICApIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0b3AgPCAwKSB7XG4gICAgICByZXN1bHQgPSB7IGhlaWdodDogaGVpZ2h0ICsgdG9wLCB0b3A6IDAgfTtcbiAgICB9IGVsc2UgaWYgKGhlaWdodCArIHRvcCA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgbGV0IG5ld0hlaWdodCA9IE1hdGgubWluKGhlaWdodCwgd2luZG93SGVpZ2h0IC0gdG9wIC0gUG9wdXBVdGlscy5ib3R0b21JbmRlbnQpO1xuICAgICAgcmVzdWx0ID0geyBoZWlnaHQ6IG5ld0hlaWdodCwgdG9wOiB0b3AgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlSG9yaXpvbnRhbERpbWVuc2lvbnMoXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgd2luZG93V2lkdGg6IG51bWJlcixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICBsZXQgbmV3V2lkdGggPSB3aWR0aCwgbmV3TGVmdCA9IGxlZnQ7XG5cbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09PSBcImNlbnRlclwiKSB7XG4gICAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4od2lkdGgsIHdpbmRvd1dpZHRoKTtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGggKyBsZWZ0ID4gd2luZG93V2lkdGgpIHtcbiAgICAgICAgbmV3TGVmdCA9IHdpbmRvd1dpZHRoIC0gd2lkdGg7XG4gICAgICAgIG5ld0xlZnQgPSBNYXRoLm1heChuZXdMZWZ0LCAwKTtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLm1pbih3aWR0aCwgd2luZG93V2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4od2lkdGgsIHdpbmRvd1dpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICBpZiAod2lkdGggKyBsZWZ0ID4gd2luZG93V2lkdGgpIHtcbiAgICAgICAgbmV3V2lkdGggPSB3aW5kb3dXaWR0aCAtIGxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IG5ld1dpZHRoLCBsZWZ0OiBuZXdMZWZ0IH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsUG9zaXRpb24oXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIHNob3dQb2ludGVyOiBib29sZWFuLFxuICAgIHdpbmRvd0hlaWdodDogbnVtYmVyXG4gICk6IFZlcnRpY2FsUG9zaXRpb24ge1xuICAgIGxldCBkZWx0YVRvcCA9XG4gICAgICBoZWlnaHQgLSAodGFyZ2V0UmVjdC50b3AgKyAoc2hvd1BvaW50ZXIgPyB0YXJnZXRSZWN0LmhlaWdodCA6IDApKTtcbiAgICBsZXQgZGVsdGFCb3R0b20gPVxuICAgICAgaGVpZ2h0ICtcbiAgICAgIHRhcmdldFJlY3QuYm90dG9tIC1cbiAgICAgIChzaG93UG9pbnRlciA/IHRhcmdldFJlY3QuaGVpZ2h0IDogMCkgLVxuICAgICAgd2luZG93SGVpZ2h0O1xuICAgIGlmIChkZWx0YVRvcCA+IDAgJiYgZGVsdGFCb3R0b20gPD0gMCAmJiB2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBcImJvdHRvbVwiO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkZWx0YUJvdHRvbSA+IDAgJiZcbiAgICAgIGRlbHRhVG9wIDw9IDAgJiZcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPT0gXCJib3R0b21cIlxuICAgICkge1xuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFwidG9wXCI7XG4gICAgfSBlbHNlIGlmIChkZWx0YUJvdHRvbSA+IDAgJiYgZGVsdGFUb3AgPiAwKSB7XG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gZGVsdGFUb3AgPCBkZWx0YUJvdHRvbSA/IFwidG9wXCIgOiBcImJvdHRvbVwiO1xuICAgIH1cbiAgICByZXR1cm4gdmVydGljYWxQb3NpdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlUG9wdXBEaXJlY3Rpb24oXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICB2YXIgcG9wdXBEaXJlY3Rpb246IHN0cmluZztcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICBwb3B1cERpcmVjdGlvbiA9IHZlcnRpY2FsUG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsUG9zaXRpb24gIT0gXCJjZW50ZXJcIikge1xuICAgICAgcG9wdXBEaXJlY3Rpb24gPSBob3Jpem9udGFsUG9zaXRpb247XG4gICAgfVxuICAgIHJldHVybiBwb3B1cERpcmVjdGlvbjtcbiAgfVxuXG4gIC8vY2FsbGVkIHdoZW4gc2hvd1BvaW50ZXIgIGlzIHRydWVcbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb2ludGVyVGFyZ2V0KFxuICAgIHRhcmdldFJlY3Q6IENsaWVudFJlY3QsXG4gICAgdG9wOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb24sXG4gICAgaG9yaXpvbnRhbFBvc2l0aW9uOiBIb3Jpem9udGFsUG9zaXRpb24sXG4gICAgbWFyZ2luTGVmdDogbnVtYmVyID0gMCxcbiAgICBtYXJnaW5SaWdodDogbnVtYmVyID0gMFxuICApIHtcbiAgICB2YXIgdGFyZ2V0UG9zOiBJTnVtYmVyUG9zaXRpb24gPSB7fTtcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIpIHtcbiAgICAgIHRhcmdldFBvcy50b3AgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdFtob3Jpem9udGFsUG9zaXRpb25dO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdFt2ZXJ0aWNhbFBvc2l0aW9uXTtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0ICsgdGFyZ2V0UmVjdC53aWR0aCAvIDI7XG4gICAgfVxuICAgIHRhcmdldFBvcy5sZWZ0ID0gTWF0aC5yb3VuZCh0YXJnZXRQb3MubGVmdCAtIGxlZnQpO1xuICAgIHRhcmdldFBvcy50b3AgPSBNYXRoLnJvdW5kKHRhcmdldFBvcy50b3AgLSB0b3ApO1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJsZWZ0XCIpIHtcbiAgICAgIHRhcmdldFBvcy5sZWZ0IC09IG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICB9XG4gICAgaWYoaG9yaXpvbnRhbFBvc2l0aW9uID09PSBcImNlbnRlclwiKSB7XG4gICAgICB0YXJnZXRQb3MubGVmdCAtPSBtYXJnaW5MZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0UG9zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVQb3B1cFdpZHRoQmVmb3JlU2hvdyhwb3B1cE1vZGVsOiBhbnksIGU6IGFueSkge1xuICAgIGlmICghIWUgJiYgISFlLnRhcmdldCkge1xuICAgICAgcG9wdXBNb2RlbC53aWR0aCA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cbiAgICBwb3B1cE1vZGVsLnRvZ2dsZVZpc2liaWxpdHkoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnNcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcbmltcG9ydCB7IGlzQ29udGFpbmVyVmlzaWJsZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBJRGltZW5zaW9ucyB7XG4gIHNjcm9sbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBtaW5EaW1lbnNpb25Db25zdCA9IDU2O1xuICBwcml2YXRlIHNlcGFyYXRvclNpemUgPSAxNztcbiAgcHJpdmF0ZSBzZXBhcmF0b3JBZGRDb25zdCA9IDE7XG4gIHByaXZhdGUgcGFkZGluZ1NpemVDb25zdCA9IDg7XG4gIHByb3RlY3RlZCByZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IHRydWU7XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChcbiAgICBlbHQ6IEVsZW1lbnRcbiAgKSA9PiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUuYmluZCh3aW5kb3cpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSA0OCxcbiAgKSB7XG5cbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gKGlzUmVzZXRJbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYoaXNSZXNldEluaXRpYWxpemVkKVxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMucHJvY2VzcygpOyB9LCAxKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiBlbGVtZW50LnNjcm9sbFdpZHRoLFxuICAgICAgb2Zmc2V0OiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uOiBBY3Rpb24pIHtcbiAgICBsZXQgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgIGlmKGN1cnJlbnRBY3Rpb24uaWNvblNpemUgJiYgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCkge1xuICAgICAgbWluRGltZW5zaW9uQ29uc3QgPSAyICogY3VycmVudEFjdGlvbi5pY29uU2l6ZSArIHRoaXMucGFkZGluZ1NpemVDb25zdDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICA/IG1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgOiBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0l0ZW1zU2l6ZXMoKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMubW9kZWwuYWN0aW9ucztcbiAgICB0aGlzLmNvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pdGVtc1NlbGVjdG9yKVxuICAgICAgLmZvckVhY2goKGl0ZW06IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50QWN0aW9uID0gYWN0aW9uc1tpbmRleF07XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWluRGltZW5zaW9uID0gdGhpcy5jYWxjTWluRGltZW5zaW9uKGN1cnJlbnRBY3Rpb24pO1xuICAgICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb250YWluZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbnRhaW5lclZpc2libGUodGhpcy5jb250YWluZXIpO1xuICB9XG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lclZpc2libGUgJiYgIXRoaXMubW9kZWwuaXNSZXNwb25zaXZlbmVzc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldEFjdGlvbnNNb2RlKFwibGFyZ2VcIik7XG4gICAgICAgIHRoaXMuY2FsY0l0ZW1zU2l6ZXMoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZWwuZml0KHRoaXMuZ2V0QXZhaWxhYmxlU3BhY2UoKSwgdGhpcy5kb3RzSXRlbVNpemUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCEhdGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgZXh0ZW5kcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCxcbiAgICBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIGRvdHNJdGVtU2l6ZT86IG51bWJlcixcbiAgICBtaW5EaW1lbnNpb24gPSA0MFxuICApIHtcbiAgICBzdXBlcihjb250YWluZXIsIG1vZGVsLCBpdGVtc1NlbGVjdG9yLCBkb3RzSXRlbVNpemUpO1xuICAgIHRoaXMubWluRGltZW5zaW9uQ29uc3QgPSBtaW5EaW1lbnNpb247XG4gICAgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoKTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG9mZnNldDogdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlOiBudW1iZXIgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRIZWlnaHQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vLi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzcmMvYmFzZVwiO1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IHJlZ0V4U3RyaXAwOiBSZWdFeHAgPSAvKFxcLjArKSskLztcbiAgY29uc3Qgc2VnbWVudHNBOiBzdHJpbmdbXSA9IGEucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBzZWdtZW50c0I6IHN0cmluZ1tdID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc2VnbWVudHNBLmxlbmd0aCwgc2VnbWVudHNCLmxlbmd0aCk7XG4gIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGRpZmY6IG51bWJlciA9XG4gICAgICBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgIGlmIChkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCEhc2V0dGluZ3MgJiYgISFzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYylcbiAgICByZXR1cm4gc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMobWVzc2FnZSk7XG4gIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVCcm93c2VyKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGNvbnN0IG9sZEllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIGNvbnN0IGVsZXZlbkllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIGNvbnN0IGVkZ2U6IG51bWJlciA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICB9XG4gIHJldHVybiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBieXRlU3RyaW5nOiBzdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBiNjREYXRhXG4gICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuXG4gICAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBhYjogQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIGNvbnN0IGJiOiBCbG9iID0gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlQmxvYlwiXVxuICAgICkge1xuICAgICAgKDxhbnk+d2luZG93Lm5hdmlnYXRvcilbXCJtc1NhdmVPck9wZW5CbG9iXCJdKGJiLCBmaWxlTmFtZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHsgfVxufVxuZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm9yaWVudGF0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0aHJlc2hvbGQ6IG51bWJlciA9IDBcbik6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRSZWN0OiBET01SZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qgdmlld0hlaWdodDogbnVtYmVyID0gTWF0aC5tYXgoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgKTtcbiAgY29uc3QgdG9wV2luOiBudW1iZXIgPSAtdGhyZXNob2xkO1xuICBjb25zdCBib3R0b21XaW46IG51bWJlciA9IHZpZXdIZWlnaHQgKyB0aHJlc2hvbGQ7XG4gIGNvbnN0IHRvcEVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3A7XG4gIGNvbnN0IGJvdHRvbUVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC5ib3R0b207XG5cbiAgY29uc3QgbWF4VG9wOiBudW1iZXIgPSBNYXRoLm1heCh0b3BXaW4sIHRvcEVsKTtcbiAgY29uc3QgbWluQm90dG9tOiBudW1iZXIgPSBNYXRoLm1pbihib3R0b21XaW4sIGJvdHRvbUVsKTtcbiAgcmV0dXJuIG1heFRvcCA8PSBtaW5Cb3R0b207XG59XG5cbmZ1bmN0aW9uIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQoaWQ6IHN0cmluZykge1xuICBpZiAoIWRvY3VtZW50KSByZXR1cm47XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGNvbnN0IHNjcm9sbGFibGVFbCA9IGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsKTtcbiAgaWYgKCEhc2Nyb2xsYWJsZUVsKSB7XG4gICAgc2Nyb2xsYWJsZUVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2Nyb2xsXCIpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpY29uTmFtZSkgcmV0dXJuIGljb25OYW1lO1xuICB2YXIgcHJveHlOYW1lID0gKDxhbnk+c2V0dGluZ3MuY3VzdG9tSWNvbnMpW2ljb25OYW1lXTtcbiAgcmV0dXJuICEhcHJveHlOYW1lID8gcHJveHlOYW1lIDogaWNvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN2ZyhcbiAgc2l6ZTogbnVtYmVyIHwgc3RyaW5nLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgaWNvbk5hbWU6IHN0cmluZyxcbiAgc3ZnRWxlbTogYW55XG4pIHtcbiAgaWYgKCFzdmdFbGVtKSByZXR1cm47XG4gIGlmIChzaXplICE9PSBcImF1dG9cIikge1xuICAgIHN2Z0VsZW0uc3R5bGUud2lkdGggPSAoc2l6ZSB8fCB3aWR0aCB8fCAxNikgKyBcInB4XCI7XG4gICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSAoc2l6ZSB8fCBoZWlnaHQgfHwgMTYpICsgXCJweFwiO1xuICB9XG4gIGNvbnN0IG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgY29uc3QgcmVhbEljb25OYW1lID0gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWUpO1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIFwieGxpbms6aHJlZlwiLFxuICAgIFwiI1wiICsgcmVhbEljb25OYW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3Qga2V5Rm9jdXNlZENsYXNzTmFtZSA9IFwic3YtZm9jdXNlZC0tYnkta2V5XCI7XG5mdW5jdGlvbiBkb0tleTJDbGlja0JsdXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybjtcbiAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGtleUZvY3VzZWRDbGFzc05hbWUpO1xufVxuXG5mdW5jdGlvbiBkb0tleTJDbGlja1VwKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBjb25zdCBjaGFyOiBudW1iZXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGlmIChjaGFyID09PSA5KSB7XG4gICAgaWYgKCEhZWxlbWVudC5jbGFzc0xpc3QgJiYgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGtleUZvY3VzZWRDbGFzc05hbWUpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsZW1lbnQuY2xpY2spIGVsZW1lbnQuY2xpY2soKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnByb2Nlc3NFc2MgJiYgY2hhciA9PT0gMjcpIHtcbiAgICBpZiAoZWxlbWVudC5ibHVyKSBlbGVtZW50LmJsdXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZG9LZXkyQ2xpY2tEb3duKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGFyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFsxMywgMzJdO1xuICBpZiAob3B0aW9ucy5wcm9jZXNzRXNjKSB7XG4gICAgc3VwcG9ydGVkQ29kZXMucHVzaCgyNyk7XG4gIH1cbiAgaWYgKHN1cHBvcnRlZENvZGVzLmluZGV4T2YoY2hhcikgIT09IC0xKSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBnZXRDb21wdXRlZFN0eWxlPzogKGVsdDogRWxlbWVudCkgPT4gYW55KSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBpZiAoIWdldENvbXB1dGVkU3R5bGUpIGdldENvbXB1dGVkU3R5bGUgPSAoZWx0OiBFbGVtZW50KSA9PiB7IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbHQpOyB9O1xuXG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAoZWxlbWVudC5zY3JvbGxIZWlnaHQgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpKSArIFwicHhcIjtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsRXZlbnQoZXZlbnQ6IGFueSkge1xuICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbn1cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhldmVudDogYW55KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gY2xhc3Nlc1RvU2VsZWN0b3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZSA9IC9cXHMqPyhbXFx3LV0rKVxccyo/L2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShyZSwgXCIuJDFcIik7XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRXaWR0aChlbDogSFRNTEVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZ2V0Q29tcHV0ZWRTdHlsZSA/IE51bWJlci5wYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZWwpLndpZHRoKSA6IGVsLm9mZnNldFdpZHRoO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lclZpc2libGUoZWw6IEhUTUxFbGVtZW50KSB7XG4gIHJldHVybiAhIShcbiAgICBlbC5vZmZzZXRXaWR0aCB8fFxuICAgIGVsLm9mZnNldEhlaWdodCB8fFxuICAgIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEVsZW1lbnRXaWR0aCxcbiAgaXNDb250YWluZXJWaXNpYmxlLFxuICBjbGFzc2VzVG9TZWxlY3RvcixcbiAgY29tcGFyZVZlcnNpb25zLFxuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZGV0ZWN0SUVCcm93c2VyLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGlzTW9iaWxlLFxuICBpc0VsZW1lbnRWaXNpYmxlLFxuICBmaW5kU2Nyb2xsYWJsZVBhcmVudCxcbiAgc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZCxcbiAgY3JlYXRlU3ZnLFxuICBkb0tleTJDbGlja0JsdXIsXG4gIGRvS2V5MkNsaWNrVXAsXG4gIGRvS2V5MkNsaWNrRG93bixcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==
9718
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY3VzdG9tLXdpZGdldC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZHJvcGRvd24tc2VsZWN0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9lbGVtZW50LWZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9mbG93LXBhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvaW1hZ2VwaWNrZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhbmVsLWJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3BhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yYXRpbmctZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9ucy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b20udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3R0aW1lcnBhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3NpZ25hdHVyZXBhZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLXZpZXdlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvdXRpbHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7Ozs7Ozs7QUN2THRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3pMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxpRUFBYztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUM5REE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7Ozs7Ozs7O0FDbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUM3QjtBQUN5Qjs7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFRO0FBQ3VEO0FBQ1E7QUFDRztBQUNkO0FBQ2pCO0FBQ0Y7QUFDSTtBQUNTO0FBS3RCO0FBSVE7QUFJQTtBQUlDO0FBSUQ7QUFDaUM7QUFDRDtBQUlqQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ0o7QUFDWjtBQUNSO0FBQ2lCO0FBQ047QUFDRDtBQUMwQjtBQUNSO0FBQ0Y7QUFDRjtBQUNuQjtBQUNjO0FB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LFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDNUQ7S0FDRjtBQUNILENBQUM7QUF3QkM7Ozs7Ozs7Ozs7OztBQ3hSRixtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RCIsImZpbGUiOiJzdXJ2ZXktcmVhY3QtdWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXJlYWN0LXVpXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXJlYWN0LXVpXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5UmVhY3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9yZWFjdC11aS50c1wiKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCB7IFN1cnZleU1vZGVsLCBNb2RlbCwgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbiIsIi8vIHJlYWN0XG5leHBvcnQgeyBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVwiO1xuZXhwb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHRpbWVycGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1zZWxlY3RcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4LFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvdyxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkh0bWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkZpbGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tY2hlY2tib3hcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tcmFkaW9cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRW1wdHkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9ucyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9uc1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmcgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmF0aW5nLWRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlXaW5kb3cgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3dcIjtcbmV4cG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuZXhwb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9lbGVtZW50LWZhY3RvcnlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIH0gZnJvbSBcIi4uL3JlYWN0L3NpZ25hdHVyZXBhZFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuZXhwb3J0IHsgTGlzdCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdFwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9uc1wiO1xuZXhwb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuZXhwb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5leHBvcnQgeyBMb2dvSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuZXhwb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvblwiO1xuXG5leHBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93XCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3NrZWxldG9uXCI7XG5cbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctdmlld2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLWVkaXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL3JlYWN0LXVpLW1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3JlLWV4cG9ydFwiOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sQ2hlY2tib3h9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uc3ZnSWNvbiA/XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLnN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICA8L3N2Zz46bnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclJhZGlvSXRlbSh2YWx1ZTogYW55LCBsb2NUZXh0OiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5nZXRSYWRpb0l0ZW1DbGFzcyhjc3NDbGFzc2VzLCB2YWx1ZSkgfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvTGFiZWwgfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lID0geyB0aGlzLnF1ZXN0aW9uLm5hbWUgfVxuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlIH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnkgPSB7IHRoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5IH1cbiAgICAgICAgICAgIGNoZWNrZWQgPSB7IHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLnZhbHVlIH1cbiAgICAgICAgICAgIGRpc2FibGVkID0geyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgICAgICBjbGFzc05hbWUgPSB7IGNzc0NsYXNzZXMuaXRlbUNvbnRyb2wgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZU9uQ2hhbmdlIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3I/XG4gICAgICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPXsgY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yIH0+XG4gICAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgKDxzdmcgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1SYWRpb0RlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+KTpudWxsfVxuICAgICAgICAgICAgPC9zcGFuPik6bnVsbH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0NvbnRyb2xMYWJlbCB9PlxuICAgICAgICAgICAgeyB0aGlzLnJlbmRlckxvY1N0cmluZyhsb2NUZXh0KSB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJhZGlvfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0ZpZWxkc2V0IH0+XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbShmYWxzZSwgdGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbSh0cnVlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSkgfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tcmFkaW9cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcInJhZGlvXCIsXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBjaGVja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2sgPSB0aGlzLmhhbmRsZU9uTGFiZWxDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljayA9IHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25LZXlEb3duID0gdGhpcy5oYW5kbGVPbktleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Cb29sZWFuTW9kZWw7XG4gIH1cbiAgLypcbiAgcHJpdmF0ZSBnZXQgYWxsb3dDbGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZTtcbiAgfVxuICAqL1xuICBwcml2YXRlIGRvQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRvQ2hlY2soZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKTtcbiAgfVxuICBoYW5kbGVPblN3aXRjaENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uU3dpdGNoQ2xpY2tNb2RlbChldmVudC5uYXRpdmVFdmVudCk7XG4gIH1cbiAgaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxuICBoYW5kbGVPbktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25LZXlEb3duQ29yZShldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sID0gZWw7XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IG9uS2V5RG93bj17dGhpcy5oYW5kbGVPbktleURvd259PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCBmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnN3aXRjaH0gb25DbGljaz17dGhpcy5oYW5kbGVPblN3aXRjaENsaWNrfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJ9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0RldGVybWluYXRlZCAmJiBjc3NDbGFzc2VzLnNsaWRlclRleHQgP1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlclRleHR9PnsgdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5nZXRDaGVja2VkTGFiZWwoKSkgfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyh0cnVlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcG9wdXAvcG9wdXBcIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biBleHRlbmRzIFN1cnZleUFjdGlvbkJhckl0ZW0ge1xyXG4gIHByaXZhdGUgdmlld01vZGVsOiBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbDtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG5ldyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCh0aGlzLml0ZW0pO1xyXG4gIH1cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHN1cGVyLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLml0ZW0ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbC5kaXNwb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQmFzZSwgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtUHJvcHMge1xyXG4gIGl0ZW06IEFjdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgLy9yZWZhY3RvclxyXG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvblJvb3RDc3MoKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gKFxyXG4gICAgICA8U3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPjwvU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcclxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gaWQ9e3RoaXMuaXRlbS5pZH0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICAgIHtzZXBhcmF0b3J9XHJcbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcclxuICBJQWN0aW9uQmFySXRlbVByb3BzLFxyXG4gIGFueVxyXG4+IHtcclxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIDw+e3RoaXMucmVuZGVySW5uZXJCdXR0b24oKX08Lz47XHJcbiAgfVxyXG5cclxuICByZW5kZXJUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uaGFzVGl0bGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdGl0bGVDbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKTtcclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3N9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPjtcclxuICB9XHJcblxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJUZXh0KCk7XHJcbiAgICBjb25zdCBzdmdJY29uID0gISF0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICBzaXplPXt0aGlzLml0ZW0uaWNvblNpemV9XHJcbiAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICkgOiBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7c3ZnSWNvbn1cclxuICAgICAgICB7dGV4dH1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW5uZXJCdXR0b24oKSB7XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGU7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gdGhpcy5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYnV0dG9uID0gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLml0ZW0uYWN0aW9uKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cclxuICAgICAgPlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICA8L2J1dHRvbj4sIG51bGwsIHsgcHJvY2Vzc0VzYzogZmFsc2UgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGBzdi1hY3Rpb24tYmFyLXNlcGFyYXRvciAke3RoaXMucHJvcHMuY3NzQ2xhc3Nlc31gO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L2Rpdj47XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgQWN0aW9uLFxuICBBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcblxuaW50ZXJmYWNlIElBY3Rpb25CYXJQcm9wcyB7XG4gIG1vZGVsOiBBY3Rpb25Db250YWluZXI8QWN0aW9uPjtcbiAgaGFuZGxlQ2xpY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhclByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYW5kbGVDbGljaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVDbGljayAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5oYW5kbGVDbGljayA6IHRydWU7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMubW9kZWwuaGFzQWN0aW9ucykge1xuICAgICAgdGhpcy5tb2RlbC5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGljayA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gOiB1bmRlZmluZWR9XG4gICAgICA+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKFxuICAgICAgKGl0ZW06IEFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QWN0aW9uIGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5QWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBTdXJ2ZXlBY3Rpb25CYXIsXG4gICAgKHByb3BzIGFzIGFueSkgYXMgSUFjdGlvbkJhclByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0SXRlbVByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG4gIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc0l0ZW1WaXNpYmxlKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgcGFkZGluZ0xlZnQ6IHRoaXMubW9kZWwuZ2V0SXRlbUluZGVudCh0aGlzLml0ZW0pLFxyXG4gICAgICBkaXNwbGF5OiBpc1Zpc2libGUgPyBudWxsIDogXCJub25lXCIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5tb2RlbC5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcclxuICAgIGlmICghdGhpcy5pdGVtLmNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpY29uID0gdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICBrZXk9ezF9XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1saXN0X19pdGVtLWljb25cIlxyXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgICAgIHNpemU9ezI0fVxyXG4gICAgICAgID48L1N2Z0ljb24+XHJcbiAgICAgICkgOiBudWxsO1xyXG4gICAgICBjb250ZW50LnB1c2goaWNvbik7XHJcbiAgICAgIGNvbnRlbnQucHVzaCg8c3BhbiBrZXk9ezJ9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZW50LnB1c2goUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnQsIHsgaXRlbTogdGhpcy5pdGVtLCBrZXk6IHRoaXMuaXRlbS5pZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGxpXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0SXRlbSh0aGlzLml0ZW0pO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjb250ZW50fVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlcmVkVGV4dDogdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgfHwgXCJcIlxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19jb250YWluZXJcIj5cclxuICAgICAgICB7dGhpcy5zZWFyY2hFbGVtZW50Q29udGVudCgpfVxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdFwiXHJcbiAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtc31cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckl0ZW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucztcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMaXN0SXRlbSBtb2RlbD17dGhpcy5tb2RlbH0gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9MaXN0SXRlbT5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRWxlbWVudENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwubmVlZEZpbHRlcikgcmV0dXJuIG51bGw7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgb25LZXlVcCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsLmdvVG9JdGVtcyhlKTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWxpc3RfX2ZpbHRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3YtbGlzdF9fZmlsdGVyLWljb25cIn0+XHJcbiAgICAgICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1zZWFyY2hcIn1cclxuICAgICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L1N2Z0ljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2lucHV0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25LZXlVcD17b25LZXlVcH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudCkge1xuICAgICAgcmV0dXJuICg8c3ZnIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdFbGVtZW50RGVjb3JhdG9yfSA+XG4gICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudH0+PC91c2U+XG4gICAgICA8L3N2Zz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25EcmFnfSAvPik7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25Sb3dSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3dVSSh0aGlzLnJvdyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByZW1vdmVSb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCl9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgID5cbiAgICAgICAge3JlbW92ZVJvd1RleHR9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSU1BdHJpeFJvd1Byb3BzIHtcbiAgbW9kZWw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcGFyZW50TWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU1BdHJpeFJvd1Byb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElNQXRyaXhSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBnZXQgcGFyZW50TWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcmVudE1hdHJpeDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvblBvaW50ZXJEb3duSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5wYXJlbnRNYXRyaXgub25Qb2ludGVyRG93bihldmVudC5uYXRpdmVFdmVudCwgdGhpcy5tb2RlbC5yb3cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIGNsYXNzTmFtZT17bW9kZWwuY2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3c9e21vZGVsLnJvdyAmJiBtb2RlbC5yb3cuaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm9uUG9pbnRlckRvd25IYW5kbGVyKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJvd1wiLFxuICAocHJvcHM6IElNQXRyaXhSb3dQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeFJvdywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLml0ZW0gJiYgdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb24pIHx8IHRoaXMucHJvcHMuZGF0YS5xdWVzdGlvbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGRUZXh0fT57dGhpcy5xdWVzdGlvbi5wYW5lbEFkZFRleHR9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9OZXh0UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxOZXh0VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtbmV4dC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbFByZXZUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcmV2LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJUG9wdXBQcm9wcyB7XG4gIG1vZGVsOiBQb3B1cE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUG9wdXBQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcG9wdXA6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUG9wdXBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUG9wdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKHRoaXMucHJvcHMubW9kZWwpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUYXJnZXRFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5wb3B1cC50YXJnZXRFbGVtZW50ID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5wb3B1cC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcywgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc05lZWRVcGRhdGUgPSBuZXh0UHJvcHMubW9kZWwgIT09IHRoaXMucG9wdXAubW9kZWw7XG4gICAgaWYoaXNOZWVkVXBkYXRlKSB7XG4gICAgICB0aGlzLnBvcHVwPy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICAgIHJldHVybiBpc05lZWRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMucG9wdXAubW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGNvbnN0IHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFBvcHVwQ29udGFpbmVyIG1vZGVsPXt0aGlzLnBvcHVwfT48L1BvcHVwQ29udGFpbmVyPixcbiAgICAgIHRoaXMucG9wdXAuY29udGFpbmVyXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT57cG9wdXBDb250YWluZXJ9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBvcHVwXCIsXG4gIChwcm9wczogSVBvcHVwUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cCwgcHJvcHMpO1xuICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgcHJldklzVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcbiAgfTtcbiAgZ2V0IG1vZGVsKCk6IFBvcHVwQmFzZVZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZSA9IChldjogYW55KSA9PiB7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZU9uU2hvd2luZygpO1xuICAgIH1cbiAgICB0aGlzLnByZXZJc1Zpc2libGUgPSB0aGlzLm1vZGVsLmlzVmlzaWJsZTtcbiAgfVxuICByZW5kZXJDb250YWluZXIoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubW9kZWwuc2hvd1BvaW50ZXIgPyB0aGlzLnJlbmRlclBvaW50ZXIoKSA6IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gISF0aGlzLm1vZGVsLnRpdGxlID8gdGhpcy5yZW5kZXJIZWFkZXIoKSA6IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMubW9kZWwuc2hvd0Zvb3RlciA/IHRoaXMucmVuZGVyRm9vdGVyKCkgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwudG9wLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5oZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwud2lkdGgsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9eyhldjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGlja0luc2lkZShldik7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3NoYWRvd1wiPlxuICAgICAgICAgIHtwb2ludGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktY29udGVudFwiPlxuICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUG9pbnRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktaGVhZGVyXCI+e3RoaXMubW9kZWwudGl0bGV9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudENvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWUsXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGVudFwiPntjb250ZW50Q29tcG9uZW50fTwvZGl2PjtcbiAgfVxuICByZW5kZXJDYW5jZWxCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWZvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2FuY2VsKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLm1vZGVsLmNhbmNlbEJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFwcGx5QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWFwcGx5XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYXBwbHkoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuYXBwbHlCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktZm9vdGVyXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckNhbmNlbEJ1dHRvbigpfVxuICAgICAgICB7dGhpcy5tb2RlbC5pc01vZGFsID8gdGhpcy5yZW5kZXJBcHBseUJ1dHRvbigpIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyQ29udGFpbmVyKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZChcInN2LXBvcHVwXCIpLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMubW9kZWwuaXNWaXNpYmxlID8gXCJcIiA6IFwibm9uZVwiLCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gIGNzc0NsYXNzPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgZGlzcGxheU1vZGU6IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiID0gXCJwb3B1cFwiXG4pIHtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuICAgICAgcG9wdXBWaWV3TW9kZWwudW5tb3VudFBvcHVwQ29udGFpbmVyKCk7XG4gICAgfSxcbiAgICB1bmRlZmluZWQsXG4gICAgY3NzQ2xhc3MsXG4gICAgdGl0bGUsXG4gICAgZGlzcGxheU1vZGVcbiAgKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uaW5uZXJDc3N9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5pdGVtLmRhdGEgJiYgdGhpcy5pdGVtLmRhdGEubW91c2VEb3dufVxuICAgICAgICBvbkNsaWNrPXt0aGlzLml0ZW0uYWN0aW9ufVxuICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnRpdGxlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW5hdi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnN1cnZleS5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJUZXh0fVxuICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogdGhpcy5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9fVxuICAgICAgPlxuICAgICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMuc3VydmV5fT48L1RpdGxlRWxlbWVudD5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0Rlc2NyaXB0aW9uID8gPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MuZGVzY3JpcHRpb259PntkZXNjcmlwdGlvbn08L2g1PiA6IG51bGwgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTG9nb0ltYWdlKGlzUmVuZGVyOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50XG4gICAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdi1zdmctaWNvblwiO1xuICAgIGlmKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUgP1xuICAgICAgICA8c3ZnIGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIj48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50LCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudDogSlNYLkVsZW1lbnQgPSA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e3RoaXMuZWxlbWVudH0gY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD47XG4gICAgaWYoIXRoaXMuZWxlbWVudC5oYXNUaXRsZUFjdGlvbnMpIHJldHVybiB0aXRsZUNvbnRlbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiPnt0aXRsZUNvbnRlbnR9PC9zcGFuPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCl9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJlbGVtZW50XCIsXG4gIFwidGl0bGUtYWN0aW9uc1wiLFxuICBcInN2LXRpdGxlLWFjdGlvbnNcIlxuKTtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZUFjdGlvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSVRpdGxlT3duZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlT3duZXIgPSB0aGlzLmVsZW1lbnQuZ2V0VGl0bGVPd25lcigpO1xuICAgIGlmKCF0aXRsZU93bmVyKVxuICAgICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLmVsZW1lbnQubG9jVGl0bGUpO1xuICAgIHZhciBzcGFucyA9IHRoaXMucmVuZGVyVGl0bGVTcGFucyh0aXRsZU93bmVyLCB0aGlzLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiA8PntzcGFuc308Lz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlU3BhbnMoZWxlbWVudDogSVRpdGxlT3duZXIsIGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgdmFyIGdldFNwYWNlU3BhbiA9IChrZXk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gZGF0YS1rZXk9e2tleX0ga2V5PXtrZXl9PlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIHNwYW5zID0gW107XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dE9uU3RhcnQpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbk51bWJlciA9IGVsZW1lbnQubm87XG4gICAgaWYgKHF1ZXN0aW9uTnVtYmVyKSB7XG4gICAgICBzcGFucy5wdXNoKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEta2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAga2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm51bWJlcn1cbiAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9fVxuICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICA+XG4gICAgICAgICAge3F1ZXN0aW9uTnVtYmVyfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJudW0tc3BcIikpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHNwYW5zLnB1c2goXG4gICAgICBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoZWxlbWVudC5sb2NUaXRsZSwgbnVsbCwgXCJxX3RpdGxlXCIpXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXF1aXJlVGV4dChcbiAgICBlbGVtZW50OiBJVGl0bGVPd25lcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBrZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCBjc3NDbGFzc2VzLnBhbmVsLnJlcXVpcmVkVGV4dH1cbiAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICA+XG4gICAgICAgIHtlbGVtZW50LnJlcXVpcmVkVGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vdGl0bGUtYWN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSAoXG4gICAgICA8VGl0bGVBY3Rpb25zXG4gICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgIGNzc0NsYXNzZXM9e2VsZW1lbnQuY3NzQ2xhc3Nlc31cbiAgICAgID48L1RpdGxlQWN0aW9ucz5cbiAgICApO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBsZXQgb25LZXlVcCA9IG51bGw7XG4gICAgaWYgKGVsZW1lbnQuaGFzVGl0bGVFdmVudHMpIHtcbiAgICAgIG9uS2V5VXAgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQubmF0aXZlRXZlbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBDdXN0b21UYWcgPSBlbGVtZW50LnRpdGxlVGFnTmFtZSBhcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21UYWdcbiAgICAgICAgY2xhc3NOYW1lPXtlbGVtZW50LmNzc1RpdGxlfVxuICAgICAgICBpZD17ZWxlbWVudC5hcmlhVGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFkaW9ncm91cFwiXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgfVxuICAgICAgICB0YWJJbmRleD17ZWxlbWVudC50aXRsZVRhYkluZGV4fVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtlbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgPlxuICAgICAgICB7dGl0bGVDb250ZW50fVxuICAgICAgPC9DdXN0b21UYWc+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDdXN0b21XaWRnZXQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy53aWRnZXRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcml2YXRlIF9hZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB2YXIgaXNEZWZhdWx0UmVuZGVyID1cbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0ICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGN1c3RvbVdpZGdldCA9IHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldDtcblxuICAgIGlmIChjdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9PlxuICAgICAgICAgIHt0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3aWRnZXQgPSBudWxsO1xuICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIpIHtcbiAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XG4gICAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xuICAgICAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+e3dpZGdldH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZHJvcGRvd25cIjtcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGljayA9IChfOiBhbnksIGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5vbkNsaWNrKGUpO1xuICAgIH07XG5cbiAgICBsZXQgc2VsZWN0RWxlbWVudCA9IG51bGw7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBzZWxlY3RFbGVtZW50ID0gPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9IGRpc2FibGVkPlxuICAgICAgICA8ZGl2PnsgdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQgfTwvZGl2PlxuICAgICAgPC9kaXY+O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhdHRhY2hLZXkyY2xpY2soXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IGNsaWNrKG51bGwsIGV2ZW50KX1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZX0+eyB0aGlzLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dCB9PC9kaXY+XG4gICAgICAgICAge3RoaXMuY3JlYXRlQ2xlYXJCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+LCBudWxsLCB7IHByb2Nlc3NFc2M6IGZhbHNlIH0pO1xuXG4gICAgICBzZWxlY3RFbGVtZW50ID0gPD5cbiAgICAgICAge2lucHV0RWxlbWVudH1cbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLnF1ZXN0aW9uLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8Lz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjcmVhdGVDbGVhckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMucXVlc3Rpb24uc2hvd0NsZWFyQnV0dG9uIHx8ICF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b25JY29uSWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gXCJub25lXCI6IFwiXCIgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiB7IHRoaXMucXVlc3Rpb24ub25DbGVhcihlKTsgfX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2Z31cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkfVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWRyb3Bkb3duLXNlbGVjdFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0LCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFwiZHJvcGRvd25cIiwgXCJzZWxlY3RcIiwgXCJzdi1kcm9wZG93bi1zZWxlY3RcIik7IiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RFbGVtZW50RmFjdG9yeSA9IG5ldyBSZWFjdEVsZW1lbnRGYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgZWxlbWVudENyZWF0b3I6IChwcm9wczogYW55KSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiAhIXRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB8IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBjb25zdCB0aXRsZSA9IGVsZW1lbnQuaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9PjwvVGl0bGVFbGVtZW50PlxuICAgICkgOiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbGVtZW50LmNzc0hlYWRlcn0gb25DbGljaz17ZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuZWxlbWVudC5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRGVzY3JpcHRpb259PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Rmxvd1BhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgZmxvd1BhbmVsKCk6IEZsb3dQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbCBhcyBGbG93UGFuZWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9O1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBudWxsO1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24obmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKCk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIFt0aGlzLnJlbmRlckh0bWwoKV07XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgZ2V0Tm9kZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRJbmRleCsrO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIdG1sKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZmxvd1BhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMuZmxvd1BhbmVsLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBpZiAoIURPTVBhcnNlcikge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IGh0bWwgfTtcbiAgICAgIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yZW5kZXJlZEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKGRvYyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGVzKGRvbU5vZGVzOiBBcnJheTxOb2RlPik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbU5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMucmVuZGVyTm9kZShkb21Ob2Rlc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhcmVudE5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucmVuZGVyTm9kZXModGhpcy5nZXRDaGlsZERvbU5vZGVzKG5vZGUpKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpXG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShub2RlLnRleHRDb250ZW50KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcXVlc3Rpb25Cb2R5ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25cbiAgICAgICAgICBrZXk9e3F1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgZWxlbWVudD17cXVlc3Rpb259XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e3F1ZXN0aW9uQm9keX08L3NwYW4+O1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpIHtcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e25vZGUudGV4dENvbnRlbnR9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7bm9kZS50ZXh0Q29udGVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2hpbGREb21Ob2Rlcyhub2RlOiBOb2RlKTogQXJyYXk8Tm9kZT4ge1xuICAgIGNvbnN0IGRvbU5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCIjdGV4dFwiKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmLXBhbmVsXCIsIHsgc3R5bGU6IHN0eWxlIH0sIHJvd3MpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwiZmxvd3BhbmVsXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Rmxvd1BhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaW1hZ2VMaW5rO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKTtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5xdWVzdGlvbi50ZXh0IHx8IHRoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgLy9hbHQ9e2l0ZW0udGV4dCB8fCBpdGVtLnZhbHVlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8dmlkZW8gY29udHJvbHNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInlvdXR1YmVcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24uaW1hZ2VMaW5rfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1ucyA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKSA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IHRoaXMucXVlc3Rpb24ubmFtZSArIFwiLVwiICsgaXRlbS52YWx1ZTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSBhcyBJbWFnZUl0ZW1WYWx1ZSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEltYWdlSXRlbVZhbHVlLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gPFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gaXRlbT17aXRlbX0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbT47XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5pdGVtLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9jSW1hZ2VMaW5rY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rID8gdGhpcy5zdGF0ZS5sb2NJbWFnZUxpbmsgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWUuY29uY2F0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VyclZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgY3VyclZhbHVlLnNwbGljZSh0aGlzLnF1ZXN0aW9uLnZhbHVlLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBjdXJyVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpc0NoZWNrZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gcXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIHZhciB0ZXh0ID0gbnVsbDtcbiAgICBpZiAocXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmIChpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwgJiYgdGhpcy5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWQ9eyhldmVudDogYW55KSA9PiB7IHRoaXMucXVlc3Rpb25bXCJvbkNvbnRlbnRMb2FkZWRcIl0oaXRlbSwgZXZlbnQubmF0aXZlRXZlbnQpOyB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCAmJiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPXsoZXZlbnQ6IGFueSkgPT4geyB0aGlzLnF1ZXN0aW9uW1wib25Db250ZW50TG9hZGVkXCJdKGl0ZW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KTsgfX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCkge1xuICAgICAgbGV0IHN0eWxlOiBhbnkgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgIG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdFxuICAgICAgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2V9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb259PlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbklkfT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5wYWdlLmNzc1Jvb3R9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAge3Jvd3N9XG4gICAgICA8L2RpdiA+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFnZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuc3VydmV5IHx8ICghIXRoaXMucGFuZWxCYXNlID8gdGhpcy5wYW5lbEJhc2Uuc3VydmV5IDogbnVsbClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoXG4gICAgICAhIXByZXZQcm9wcy5wYWdlICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhIXRoaXMuc3VydmV5LmN1cnJlbnRQYWdlICYmXG4gICAgICBwcmV2UHJvcHMucGFnZS5uYW1lID09PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5uYW1lXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLnBhbmVsQmFzZS5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCwgZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMucGFuZWxCYXNlXG4gICAgICAmJiB0aGlzLnBhbmVsQmFzZS5pc1Zpc2libGUgJiYgISF0aGlzLnBhbmVsQmFzZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRSb3dzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVuZGVyUm93cyhjc3M6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicm93c1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlID0ge307XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1oZWFkZXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgcHJpdmF0ZSBoYXNCZWVuRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIGNvbnN0IGVycm9ycyA9IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5wYW5lbC5pbm5lclBhZGRpbmdMZWZ0LFxuICAgICAgZGlzcGxheTogIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgPyB1bmRlZmluZWQgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkIHx8IHRoaXMuaGFzQmVlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmhhc0JlZW5FeHBhbmRlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3dzOiBKU1guRWxlbWVudFtdID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmNvbnRlbnQ7XG4gICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KHN0eWxlLCByb3dzLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZ2V0Q29udGFpbmVyQ3NzKCl9XG4gICAgICAgIG9uRm9jdXM9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5mb2N1c0lufVxuICAgICAgPlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwuaGFzVGl0bGUgJiYgIXRoaXMucGFuZWwuaGFzRGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUVsZW1lbnRIZWFkZXIgZWxlbWVudD17dGhpcy5wYW5lbH0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucGFuZWwuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBib3R0b206IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCb3R0b20oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBpZD17dGhpcy5wYW5lbC5jb250ZW50SWR9PlxuICAgICAgICB7cm93c31cbiAgICAgICAge2JvdHRvbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLnRpdGxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5kZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYW5lbEJhc2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbC5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb3R0b20oKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPSB0aGlzLnBhbmVsLmdldEZvb3RlclRvb2xiYXIoKTtcbiAgICBpZiAoIWZvb3RlclRvb2xiYXIuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2Zvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3REcm9wZG93bn0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LXJhdGluZy1kcm9wZG93blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duLCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcInJhdGluZ1wiLFxuICBcImRyb3Bkb3duXCIsXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBQYWdlTW9kZWwsIFN1cnZleUVycm9yLCBTdHlsZXNNYW5hZ2VyLCBzdXJ2ZXlDc3MsIEhlbHBlcnMsIGRvS2V5MkNsaWNrVXAsIFN2Z1JlZ2lzdHJ5LCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXJcIjtcbmltcG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4vcmVhY3R0aW1lcnBhbmVsXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgZG9LZXkyQ2xpY2tCbHVyLCBkb0tleTJDbGlja0Rvd24gfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT5cbiAgaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XG4gIHByaXZhdGUgcHJldmlvdXNKU09OID0ge307XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcHVibGljIHN0YXRpYyBnZXQgY3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlDc3MuY3VycmVudFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgY3NzVHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgU3R5bGVzTWFuYWdlci5hcHBseVRoZW1lKHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcblxuICBwcml2YXRlIHJvb3ROb2RlSWQ6IHN0cmluZzsgLy8gcm9vdCBkb20gbm9kZSBJRCBhdHRyXG4gIHByaXZhdGUgcm9vdE5vZGVDbGFzc05hbWU6IHN0cmluZzsgLy8gcm9vdCBkb20gbm9kZSBjbGFzc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrID0gdGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jcmVhdGVTdXJ2ZXkocHJvcHMpO1xuICAgIHRoaXMudXBkYXRlU3VydmV5KHByb3BzLCB7fSk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yb290Tm9kZUlkID0gcHJvcHMuaWQgfHwgbnVsbDtcbiAgICB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSkge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzTW9kZWxKU09OQ2hhbmdlZChuZXh0UHJvcHMpKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleShuZXh0UHJvcHMpO1xuICAgICAgdGhpcy51cGRhdGVTdXJ2ZXkobmV4dFByb3BzLCB7fSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlU3VydmV5KHRoaXMucHJvcHMsIHByZXZQcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyU3VydmV5KGVsKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIH1cbiAgfVxuICBkb1JlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5zdXJ2ZXlbXCJuZWVkUmVuZGVySWNvbnNcIl0pIHtcbiAgICAgIFN2Z1JlZ2lzdHJ5LnJlbmRlckljb25zKCk7XG4gICAgfVxuICAgIGxldCByZW5kZXJSZXN1bHQ6IEpTWC5FbGVtZW50O1xuICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRiZWZvcmVcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwibG9hZGluZ1wiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckxvYWRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJTdXJ2ZXkoKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBKU1guRWxlbWVudCA9IDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXt0aGlzLnN1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+O1xuICAgIGNvbnN0IG9uU3VibWl0ID0gZnVuY3Rpb24gKGV2ZW50OiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTEZvcm1FbGVtZW50Pikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIGxldCBjdXN0b21IZWFkZXI6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9XCJzdl9jdXN0b21faGVhZGVyXCIgLz47XG4gICAgaWYgKHRoaXMuc3VydmV5Lmhhc0xvZ28pIHtcbiAgICAgIGN1c3RvbUhlYWRlciA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RDc3MgPSB0aGlzLnN1cnZleS5nZXRSb290Q3NzKCk7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyByb290Q3NzIDogcm9vdENzcztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9SZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNzcyA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZVRyeUFnYWluQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmRvQ29tcGxldGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgdmFyIHRyeUFnYWluQnV0dG9uID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBhY3RpdmVQYWdlID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpc1N0YXJpbmcgPSB0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2U7XG4gICAgdmFyIHBhZ2VJZCA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UgPyB0aGlzLnN1cnZleS5hY3RpdmVQYWdlLmlkIDogXCJcIjtcbiAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20gJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghYWN0aXZlUGFnZSkge1xuICAgICAgY2xhc3NOYW1lID0gdGhpcy5jc3MuYm9keUVtcHR5O1xuICAgICAgYWN0aXZlUGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3BhZ2VJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHt0b3BQcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcInRvcFwiKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcInRvcFwiKX1cbiAgICAgICAge2FjdGl2ZVBhZ2V9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmKHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Ub3ApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5VGltZXJQYW5lbCB0aW1lck1vZGVsPXt0aGlzLnN1cnZleS50aW1lck1vZGVsfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYWdlXG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIGNyZWF0b3I9e3RoaXN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5jc3MsIGlzVG9wOiBpc1RvcCB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbihuYXZQb3NpdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBcImJvdGhcIiAmJlxuICAgICAgKHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcIm5vbmVcIiB8fFxuICAgICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gbmF2UG9zaXRpb24pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMuc3VydmV5Lm5hdmlnYXRpb25CYXJ9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbXB0eVN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuPnt0aGlzLnN1cnZleS5lbXB0eVN1cnZleVRleHR9PC9zcGFuPjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHRoaXMucHJldmlvdXNKU09OID0ge307XG4gICAgaWYgKG5ld1Byb3BzKSB7XG4gICAgICBpZiAobmV3UHJvcHMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXdQcm9wcy5tb2RlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdQcm9wcy5qc29uKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0pTT04gPSBuZXdQcm9wcy5qc29uO1xuICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKCk7XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzLmNzcykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3NzID0gdGhpcy5jc3M7XG4gICAgfVxuICAgIHRoaXMuc2V0U3VydmV5RXZlbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc01vZGVsSlNPTkNoYW5nZWQobmV3UHJvcHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIW5ld1Byb3BzW1wibW9kZWxcIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleSAhPT0gbmV3UHJvcHNbXCJtb2RlbFwiXTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJqc29uXCJdKSB7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdQcm9wc1tcImpzb25cIl0sIHRoaXMucHJldmlvdXNKU09OKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSwgb2xkUHJvcHM/OiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSByZXR1cm47XG4gICAgb2xkUHJvcHMgPSBvbGRQcm9wcyB8fCB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChrZXkgPT0gXCJtb2RlbFwiIHx8IGtleSA9PSBcImNoaWxkcmVuXCIgfHwga2V5ID09IFwianNvblwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PSBcImNzc1wiKSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1lcmdlVmFsdWVzKG5ld1Byb3BzLmNzcywgdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZU5hdmlnYXRpb25Dc3NcIl0oKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlbXCJ1cGRhdGVFbGVtZW50Q3NzXCJdKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1Byb3BzW2tleV0gPT09IG9sZFByb3BzW2tleV0pIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleS5pbmRleE9mKFwib25cIikgPT0gMCAmJiB0aGlzLnN1cnZleVtrZXldICYmIHRoaXMuc3VydmV5W2tleV0uYWRkKSB7XG4gICAgICAgIGlmICghIW9sZFByb3BzW2tleV0pIHtcbiAgICAgICAgICB0aGlzLnN1cnZleVtrZXldLnJlbW92ZShvbGRQcm9wc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1cnZleVtrZXldLmFkZChuZXdQcm9wc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0gPSBuZXdQcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0U3VydmV5RXZlbnRzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvdW50ZXIgPVxuICAgICAgICAhIXNlbGYuc3RhdGUgJiYgISFzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCA/IHNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkIDogMDtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBtb2RlbENoYW5nZWQ6IGNvdW50ZXIgKyAxIH0pO1xuICAgIH07XG4gICAgdGhpcy5zdXJ2ZXkub25QYXJ0aWFsU2VuZC5hZGQoKHNlbmRlcikgPT4ge1xuICAgICAgaWYgKCEhc2VsZi5zdGF0ZSkge1xuICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy9JU3VydmV5Q3JlYXRvclxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICAhcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nIHx8IHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyRXJyb3IoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZXJyb3I6IFN1cnZleUVycm9yLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYga2V5PXtrZXl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaWNvbiB8fCB1bmRlZmluZWR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtIHx8IHVuZGVmaW5lZH0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHVwZGF0ZTogMCB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZ1bmN0aW9uOiBhbnkgPSBudWxsO1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHVwZGF0ZTogc2VsZi5zdGF0ZS51cGRhdGUgKyAxIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5yZW1vdmUodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3MgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc1RvcDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5pc1RvcCA/IHt9IDogeyBtYXJnaW5Ub3A6IFwiMWVtXCIgfTtcbiAgICB2YXIgcHJvZ3Jlc3NTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3Byb2dyZXNzU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgICAgYXJpYS12YWx1ZW1heD17MTAwfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXBhZ2VzXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1xdWVzdGlvbnNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRRdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGxpc3RDb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLnN1cnZleSk7XG4gICAgdGhpcy5saXN0Q29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3ModHJ1ZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcn1cbiAgICAgICAgICAgIHJlZj17dGhpcy5saXN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3R9PlxuICAgICAgICAgICAgICB7dGhpcy5nZXRMaXN0RWxlbWVudHMoKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyhmYWxzZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudHMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgbGV0IGJ1dHRvbnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBidXR0b25zLnB1c2godGhpcy5yZW5kZXJMaXN0RWxlbWVudChwYWdlLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBidXR0b25zO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0RWxlbWVudChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBrZXk9e1wibGlzdGVsZW1lbnRcIiArIGluZGV4fVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpfVxuICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICB0aGlzLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICA/ICgpID0+IHRoaXMuY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlfVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9ufVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudENzcyhpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRMaXN0RWxlbWVudENzcyhpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrTGlzdEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNjcm9sbEJ1dHRvbkNzcyhpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyh0aGlzLnN0YXRlLmhhc1Njcm9sbGVyLCBpc0xlZnRTY3JvbGwpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudDogRWxlbWVudCxcbiAgICBpc0xlZnRTY3JvbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYoISFsaXN0Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYoISF0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzU2Nyb2xsZXI6IHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgsIH0pO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMud2luZG93LmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTAsXG4gICAgICBtYXhXaWR0aDogXCI2MCVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzUm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2x5cGhDbGFzc05hbWV9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMud2luZG93LmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NCb2R5fT57dGhpcy5kb1JlbmRlcigpfTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHN1cGVyLmNyZWF0ZVN1cnZleShuZXdQcm9wcyk7XG4gICAgdGhpcy53aW5kb3cgPSBuZXcgU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LWhlYWRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50O1xuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHJlbmRlclF1ZXN0aW9uQm9keShcbiAgICBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcixcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25cbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcXVlc3Rpb24uaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gcXVlc3Rpb24uY3VzdG9tV2lkZ2V0O1xuICAgIGlmICghY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUN1c3RvbVdpZGdldCBjcmVhdG9yPXtjcmVhdG9yfSBxdWVzdGlvbj17cXVlc3Rpb259IC8+O1xuICB9XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5hbWVcIiwgdGhpcy5xdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJlxuICAgICAgISF0aGlzLnF1ZXN0aW9uICYmXG4gICAgICAhIXRoaXMuY3JlYXRvciAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY29udGVudFN0eWxlID0ge1xuICAgICAgZGlzcGxheTogIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHF1ZXN0aW9uUmVuZGVyID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9wXCIpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Cb3R0b21cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJib3R0b21cIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgY29tbWVudCA9XG4gICAgICBxdWVzdGlvbiAmJiBxdWVzdGlvbi5oYXNDb21tZW50ID8gdGhpcy5yZW5kZXJDb21tZW50KGNzc0NsYXNzZXMpIDogbnVsbDtcbiAgICBjb25zdCBlcnJvcnNUb29sdGlwID1cbiAgICAgIHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9vbHRpcFwiKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGRlc2NyaXB0aW9uVW5kZXJJbnB1dCA9IHF1ZXN0aW9uLmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgPyB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uLmNzc0NvbnRlbnQgfHwgdW5kZWZpbmVkfVxuICAgICAgICBzdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3F1ZXN0aW9uUmVuZGVyfVxuICAgICAgICB7Y29tbWVudH1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgIHtkZXNjcmlwdGlvblVuZGVySW5wdXR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIocXVlc3Rpb24pO1xuICAgIHZhciBoZWFkZXJUb3AgPSBxdWVzdGlvbi5oYXNUaXRsZU9uTGVmdFRvcCA/IGhlYWRlciA6IG51bGw7XG4gICAgdmFyIGhlYWRlckJvdHRvbSA9IHF1ZXN0aW9uLmhhc1RpdGxlT25Cb3R0b20gPyBoZWFkZXIgOiBudWxsO1xuXG4gICAgY29uc3QgZXJyb3JzQWJvdmVRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yc0Fib3ZlUXVlc3Rpb25cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGVycm9yc0JlbG93UXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvcnNCZWxvd1F1ZXN0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiXCIpXG4gICAgICA6IG51bGw7XG5cbiAgICBsZXQgcm9vdFN0eWxlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAoISFxdWVzdGlvbi5wYWRkaW5nTGVmdCkgcm9vdFN0eWxlW1wicGFkZGluZ0xlZnRcIl0gPSBxdWVzdGlvbi5wYWRkaW5nTGVmdDtcbiAgICBpZiAoISFxdWVzdGlvbi5wYWRkaW5nUmlnaHQpXG4gICAgICByb290U3R5bGVbXCJwYWRkaW5nUmlnaHRcIl0gPSBxdWVzdGlvbi5wYWRkaW5nUmlnaHQ7XG5cbiAgICBsZXQgcXVlc3Rpb25Db250ZW50ID0gdGhpcy53cmFwUXVlc3Rpb25Db250ZW50KHRoaXMucmVuZGVyUXVlc3Rpb25Db250ZW50KCkpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgICAgaWQ9e3F1ZXN0aW9uLmlkfVxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uZ2V0Um9vdENzcygpfVxuICAgICAgICAgIHN0eWxlPXtyb290U3R5bGV9XG4gICAgICAgICAgcm9sZT17cXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17cXVlc3Rpb24uaGFzVGl0bGUgPyBxdWVzdGlvbi5hcmlhVGl0bGVJZCA6IG51bGx9XG4gICAgICAgID5cbiAgICAgICAgICB7ZXJyb3JzQWJvdmVRdWVzdGlvbn1cbiAgICAgICAgICB7aGVhZGVyVG9wfVxuICAgICAgICAgIHtxdWVzdGlvbkNvbnRlbnR9XG4gICAgICAgICAge2hlYWRlckJvdHRvbX1cbiAgICAgICAgICB7ZXJyb3JzQmVsb3dRdWVzdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwRWxlbWVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCB3cmFwUXVlc3Rpb25Db250ZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzRGVzY3JpcHRpb259PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21tZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29tbWVudFRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0NvbW1lbnRUZXh0XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb3JtR3JvdXB9PlxuICAgICAgICA8ZGl2Pntjb21tZW50VGV4dH08L2Rpdj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPFN1cnZleUVsZW1lbnRIZWFkZXIgZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5RWxlbWVudEhlYWRlcj47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhjc3NDbGFzc2VzOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicXVlc3Rpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFcnJvcnMgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgdGhpcy50b29sdGlwUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlkO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuICFwcmV2U3RhdGUgPyB7IGVycm9yOiAwIH0gOiB7IGVycm9yOiBwcmV2U3RhdGUuZXJyb3IgKyAxIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc1Zpc2libGVFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXI7XG4gIHByaXZhdGUgdG9vbHRpcFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKHRoaXMucHJvcHMubG9jYXRpb24gPT0gXCJ0b29sdGlwXCIpIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuY3VycmVudCAmJiAhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gbmV3IFRvb2x0aXBNYW5hZ2VyKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIgJiYgIXRoaXMudG9vbHRpcFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBcImVycm9yXCIgKyBpO1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRvci5yZW5kZXJFcnJvcihrZXksIHRoaXMuZWxlbWVudC5lcnJvcnNbaV0sIHRoaXMuY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRXJyb3J9XG4gICAgICAgIGlkPXt0aGlzLmlkfVxuICAgICAgICByZWY9e3RoaXMudG9vbHRpcFJlZn1cbiAgICAgID5cbiAgICAgICAge2Vycm9yc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoKSB7IH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dFcnJvcnMoKSA/IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17ZXJyb3JzTG9jYXRpb259XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgZXJyb3JzTG9jYXRpb24gPSB0aGlzLmNyZWF0b3IucXVlc3Rpb25FcnJvckxvY2F0aW9uKCk7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMucmVuZGVyRXJyb3JzKGVycm9yc0xvY2F0aW9uKTtcbiAgICB2YXIgZXJyb3JzVG9wID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPblRvcFxuICAgICAgPyBlcnJvcnNcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPbkJvdHRvbVxuICAgICAgPyBlcnJvcnNcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgcmVuZGVyZWRRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3JlbmRlcmVkUXVlc3Rpb259XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50O1xuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KHRoaXMuY3JlYXRvciwgdGhpcy5xdWVzdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcm90ZWN0ZWQgY2VsbFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxUYWJsZUNlbGxFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNlbGxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmdldENlbGxTdHlsZSgpO1xuICAgIHZhciBlcnJvcnNUb29sdGlwID0gdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKFwidG9vbHRpcFwiKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgcmVmPXt0aGlzLmNlbGxSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfVxuICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e3RoaXMuZ2V0SGVhZGVyVGV4dCgpfVxuICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy5jZWxsLmdldFRpdGxlKCl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMud3JhcENlbGwodGhpcy5wcm9wcy5jZWxsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY2VsbFF1ZXN0aW9uV3JhcHBlcn0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICl9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBnZXQgaXRlbSgpOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGljb24gPSB0aGlzLnJlbmRlckljb24oKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5yZW5kZXJDYXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmxhYmVsfVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2lucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuZGVjb3JhdG9yfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7Y2FwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckljb24oKSB7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmljb259XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgc2l6ZT17dGhpcy5tb2RlbC5pY29uU2l6ZSB8fCAyNH1cbiAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY29udHJvbH1cbiAgICAgICAgaWQ9e3RoaXMubW9kZWwuaWR9XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIG5hbWU9e3RoaXMubW9kZWwubmFtZX1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5tb2RlbC5zZWxlY3RlZH1cbiAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudmFsdWV9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwub25DaGFuZ2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5tb2RlbC5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMubW9kZWwuaGFzRXJyb3JzfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLm1vZGVsLmRlc2NyaWJlZEJ5fVxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDYXB0aW9uKCkge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93Q2FwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNhcHRpb24gPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1vZGVsLmNhcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNhcHRpb259XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7Y2FwdGlvbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbi8vIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBwcm9wcyA9PiB7XG4vLyAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbi8vIH0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuY29udHJvbCA9IGZpZWxkc2V0KX1cbiAgICAgID5cbiAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc090aGVyICYmIHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5xdWVzdGlvbi5vdGhlckl0ZW0pID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbH1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzSGVhZEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5oZWFkSXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1faFwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rm9vdGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0Zvb3RJdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZm9vdEl0ZW1zLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtX2ZcIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaXMuZ2V0SGVhZGVyKCl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RNdWx0aUNvbHVtbn0+XG4gICAgICAgICAge3RoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEZvb3RlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBhbnksXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpZCA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSk7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvbiA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KSA6IFwiXCI7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgbGV0IGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9XG4gICAgICB0aGlzLml0ZW0gPT0gdGhpcy5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgID8gdGhpcy5zZWxlY3RBbGxDaGFuZ2VkXG4gICAgICAgIDogdGhpcy5oYW5kbGVPbkNoYW5nZTtcblxuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWUgIT0gXCJzZWxlY3RhbGxcIiA/IHRoaXMuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvbkJsdXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogbnVsbDtcbiAgICB2YXIgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY2xhc3NOYW1lfVxuICAgICAgICBkaXNhYmxlZD17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVhZE9ubHk9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlZj17KHRldHhhcmVhKSA9PiAodGhpcy5jb250cm9sID0gdGV0eGFyZWEpfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlcn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7IHRoaXMucXVlc3Rpb24ub25LZXlEb3duKGV2ZW50KTsgfX1cbiAgICAgICAgY29scz17dGhpcy5xdWVzdGlvbi5jb2xzfVxuICAgICAgICByb3dzPXt0aGlzLnF1ZXN0aW9uLnJvd3N9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiB0aGlzLnF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb247XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMucHJvcHMub3RoZXJDc3MgfHwgdGhpcy5jc3NDbGFzc2VzLmNvbW1lbnQ7XG4gICAgbGV0IGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50OiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gICAgICBxdWVzdGlvbi5vbkNvbW1lbnRDaGFuZ2UoZXZlbnQpO1xuICAgIH07XG4gICAgbGV0IHN0YXRlQ29tbWVudDogc3RyaW5nID0gISF0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5jb21tZW50IDogdW5kZWZpbmVkO1xuICAgIGlmKHN0YXRlQ29tbWVudCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlQ29tbWVudC50cmltKCkgIT09IHF1ZXN0aW9uLmNvbW1lbnQpIHtcbiAgICAgIHN0YXRlQ29tbWVudCA9IHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgfVxuICAgIGxldCBjb21tZW50ID0gc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgPyBzdGF0ZUNvbW1lbnQgOiBxdWVzdGlvbi5jb21tZW50IHx8IFwiXCI7XG5cbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57Y29tbWVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBtYXhMZW5ndGg9e3F1ZXN0aW9uLmdldE90aGVyc01heExlbmd0aCgpfVxuICAgICAgICBwbGFjZWhvbGRlcj17cXVlc3Rpb24uY29tbWVudE9yT3RoZXJQbGFjZUhvbGRlcn1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU9uQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9eyhlKSA9PiB7IHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShlKTsgaGFuZGxlT25DaGFuZ2UoZSk7IH0gfVxuICAgICAgICBvbklucHV0PXsoZSkgPT4gcXVlc3Rpb24ub25Db21tZW50SW5wdXQoZSl9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3F1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3F1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBxdWVzdGlvbi5yZXNpemVTdHlsZSB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25DdXN0b21Nb2RlbCwgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ3VzdG9tIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ3VzdG9tTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgY29uc3QgcmVzID0gc3VwZXIuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGlmKCEhdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keShcbiAgICAgIHRoaXMuY3JlYXRvcixcbiAgICAgIHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWx9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgc3VydmV5PXt0aGlzLnF1ZXN0aW9uLnN1cnZleX1cbiAgICAgID48L1N1cnZleVBhbmVsPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImN1c3RvbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DdXN0b20sIHByb3BzKTtcbn0pO1xuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbXBvc2l0ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21wb3NpdGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQsXG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxUPiB7XG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICEhdGhpcy5xdWVzdGlvbi5vbk9wZW5lZENhbGxCYWNrICYmIHRoaXMucXVlc3Rpb24ub25PcGVuZWRDYWxsQmFjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyZWRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyZWRWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy5pc0Rpc3BsYXlNb2RlID8gKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9IGRpc2FibGVkPnsgdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQgfTwvZGl2Pik6XG4gICAgICAoPHNlbGVjdFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9XG4gICAgICAgIHJlZj17KHNlbGVjdCkgPT4gKHRoaXMuY29udHJvbCA9IHNlbGVjdCl9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvQ29tcGxldGV9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfT5cbiAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbiA/ICg8b3B0aW9uIHZhbHVlPVwiXCI+e3RoaXMucXVlc3Rpb24ub3B0aW9uc0NhcHRpb259PC9vcHRpb24+KSA6IG51bGwgfVxuICAgICAgICB7IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKChpdGVtOiBJdGVtVmFsdWUsIGk6IG51bWJlcikgPT4gPFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBrZXk9e1wiaXRlbVwiICsgaX0gaXRlbT17aXRlbX0vPikgfVxuICAgICAgPC9zZWxlY3Q+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2VsZWN0V3JhcHBlcn0+XG4gICAgICAgIHtzZWxlY3RFbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcbiAgICAgID8gdGhpcy5yZW5kZXJPdGhlcihjc3NDbGFzc2VzKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBzZWxlY3QgPSB0aGlzLnJlbmRlclNlbGVjdChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdH0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuXG4gICAgaWYgKCF0aGlzLml0ZW0ubG9jVGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXRlbS5sb2NUZXh0Lm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPG9wdGlvbiB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfSBkaXNhYmxlZD17IXRoaXMuaXRlbS5pc0VuYWJsZWR9PlxuICAgICAgICB7dGhpcy5pdGVtLnRleHR9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBBcnJheUNoYW5nZXMsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRCYXNlPFAsIFM+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFAsIFM+IHtcbiAgcHVibGljIHN0YXRpYyByZW5kZXJMb2NTdHJpbmcoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBzdHlsZTogYW55ID0gbnVsbCxcbiAgICBrZXk/OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQobG9jU3RyLnJlbmRlckFzLCB7XG4gICAgICBsb2NTdHI6IGxvY1N0ci5yZW5kZXJBc0RhdGEsXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBrZXk6IGtleSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBwcml2YXRlIF9hbGxvd0NvbXBvbmVudFVwZGF0ZSA9IHRydWU7XG4gIHByb3RlY3RlZCBhbGxvd0NvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSA9IHRydWU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBkZW55Q29tcG9uZW50VXBkYXRlKCkge1xuICAgIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlID0gZmFsc2U7XG4gIH1cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczphbnksIG5leHRTdGF0ZTphbnkpOmJvb2xlYW4ge1xuICAgIGlmKHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlKSB7XG4gICAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jYW5SZW5kZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygxKTtcbiAgICB2YXIgcmVzID0gdGhpcy5yZW5kZXJFbGVtZW50KCk7XG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygtMSk7XG5cbiAgICByZXMgPSB0aGlzLndyYXBFbGVtZW50KHJlcyk7XG5cbiAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1JlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICB2YXIgc3RhdGVFbHM6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlbmRlcmVkRWxlbWVudHMoKTtcbiAgICBmb3IobGV0IHN0YXRlRWwgb2Ygc3RhdGVFbHMpIHtcbiAgICAgIGlmKHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEVsZW1lbnRzKCk6IEJhc2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICB9XG4gIHByaXZhdGUgc3RhcnRFbmRSZW5kZXJpbmcodmFsOiBudW1iZXIpIHtcbiAgICB2YXIgc3RhdGVFbHM6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlbmRlcmVkRWxlbWVudHMoKTtcbiAgICBmb3IobGV0IHN0YXRlRWwgb2Ygc3RhdGVFbHMpIHtcbiAgICAgIGlmICghc3RhdGVFbC5yZWFjdFJlbmRlcmluZykgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA9IDA7XG4gICAgICBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nICs9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjaGFuZ2VkU3RhdGVQcm9wTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudFJlYWN0KGVsc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50KCk7XG4gICAgcmV0dXJuICEhZWwgPyBbZWxdIDogW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHByb3BzLmlzRGlzcGxheU1vZGUgfHwgZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKGxvY1N0ciwgc3R5bGUpO1xuICB9XG4gIHByaXZhdGUgY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0YXRlRWxlbWVudCAmJiAhIXN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2g7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudCkpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSBoYXNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgdmFsW1wib25BcnJheUNoYW5nZWRcIl0gPSAoYXJyYXlDaGFuZ2VzOiBBcnJheUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICBoYXNoOiBhbnksXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIHZhbDogYW55XG4gICAgKSA9PiB7XG4gICAgICBpZiAoaGFzaFtrZXldICE9PSB2YWwpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdmFsO1xuICAgICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudFJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSkge1xuICAgIGlmICghdGhpcy5jYW5NYWtlUmVhY3Qoc3RhdGVFbGVtZW50KSkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSB1bmRlZmluZWQ7XG4gICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICB2YXIgdmFsOiBhbnkgPSBoYXNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgdmFsW1wib25BcnJheUNoYW5nZWRcIl0gPSAoKSA9PiB7fTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlFbGVtZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29udHJvbDogSFRNTEVsZW1lbnQ7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KHRoaXMuY29udHJvbCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuY29udHJvbDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5hZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb25CYXNlKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRFbGVtZW50cygpOiBCYXNlW10ge1xuICAgIHJldHVybiBbdGhpcy5xdWVzdGlvbkJhc2VdO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb25CYXNlICYmICEhdGhpcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLmlzRGlzcGxheU1vZGUgfHxcbiAgICAgICghIXRoaXMucXVlc3Rpb25CYXNlICYmIHRoaXMucXVlc3Rpb25CYXNlLmlzSW5wdXRSZWFkT25seSkgfHwgZmFsc2VcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChcbiAgICBjZWxsOiBhbnksXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnQsXG4gICAgcmVhc29uOiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb25CYXNlXG4gICAgICAuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFQgZXh0ZW5kcyBRdWVzdGlvblxuPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50ID0gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBUO1xuICB9XG4gIHVwZGF0ZVZhbHVlT25FdmVudCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSwgZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUNvcmUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5nZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRW1wdHlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRW1wdHlNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgLz47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtcHR5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkVtcHR5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fVxuICAgICAgICByZWY9eyhkaXYpID0+ICh0aGlzLmNvbnRyb2wgPSBkaXYpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5mb3JtYXRlZFZhbHVlfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZXhwcmVzc2lvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RRdWVzdGlvbkZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyUXVlc3Rpb24oXG4gICAgcXVlc3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25DcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV0gPSBxdWVzdGlvbkNyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GaWxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkZpbGVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHByZXZpZXcgPSB0aGlzLnJlbmRlclByZXZpZXcoKTtcbiAgICB2YXIgZmlsZUlucHV0ID0gbnVsbDtcbiAgICB2YXIgZmlsZURlY29yYXRvciA9IHRoaXMucmVuZGVyRmlsZURlY29yYXRvcigpO1xuICAgIHZhciBjbGVhckJ1dHRvbiA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLnNob3dSZW1vdmVCdXR0b25cbiAgICApO1xuICAgIHZhciBjbGVhckJ1dHRvbkJvdHRvbSA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLnNob3dSZW1vdmVCdXR0b25Cb3R0b21cbiAgICApO1xuXG4gICAgbGV0IG1vYmlsZUZpbGVOYXZpZ2F0b3IgPSB0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3JWaXNpYmxlPyg8U3VydmV5QWN0aW9uQmFyIG1vZGVsID0ge3RoaXMucXVlc3Rpb24ubW9iaWxlRmlsZU5hdmlnYXRvcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+KTpudWxsO1xuICAgIGZpbGVJbnB1dCA9IChcbiAgICAgIHRoaXMuaXNEaXNwbGF5TW9kZSA/XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIG11bHRpcGxlPXt0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgICAgIDpcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVJbnB1dCA6IHRoaXMucXVlc3Rpb24uZ2V0UmVhZE9ubHlGaWxlQ3NzKCl9XG4gICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICByZWY9e2lucHV0ID0+ICh0aGlzLmNvbnRyb2wgPSBpbnB1dCl9XG4gICAgICAgICAgc3R5bGU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB7fSA6IHsgY29sb3I6IFwidHJhbnNwYXJlbnRcIiB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5kb0NoYW5nZSA6IG51bGx9XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIG11bHRpcGxlPXt0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGV9XG4gICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUaXRsZX1cbiAgICAgICAgICBhY2NlcHQ9e3RoaXMucXVlc3Rpb24uYWNjZXB0ZWRUeXBlc31cbiAgICAgICAgLz5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5maWxlUm9vdENzc30+XG4gICAgICAgIHtmaWxlSW5wdXR9XG4gICAgICAgIHtmaWxlRGVjb3JhdG9yfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICAgIHtwcmV2aWV3fVxuICAgICAgICB7Y2xlYXJCdXR0b25Cb3R0b219XG4gICAgICAgIHttb2JpbGVGaWxlTmF2aWdhdG9yfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZURlY29yYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb25Dc3MgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IG5vRmlsZUNob3NlbiA9IG51bGw7XG4gICAgbGV0IGNob29zZUZpbGUgPSBudWxsO1xuICAgIGNob29zZUZpbGUgPSAoXG4gICAgICA8bGFiZWxcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDaG9vc2VGaWxlQ3NzKCl9XG4gICAgICAgIGh0bWxGb3I9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufVxuICAgICAgPlxuICAgICAgICA8c3Bhbj57dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj46IG51bGwgfVxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgbm9GaWxlQ2hvc2VuID0gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW59PlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb259XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRGaWxlRGVjb3JhdG9yQ3NzKCl9XG4gICAgICAgIG9uRHJvcD17dGhpcy5xdWVzdGlvbi5vbkRyb3B9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMucXVlc3Rpb24ub25EcmFnT3Zlcn1cbiAgICAgICAgb25EcmFnTGVhdmU9e3RoaXMucXVlc3Rpb24ub25EcmFnTGVhdmV9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdBcmVhUGxhY2Vob2xkZXJ9Pnt0aGlzLnF1ZXN0aW9uLmRyYWdBcmVhUGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLndyYXBwZXJ9PlxuICAgICAgICAgIHtjaG9vc2VGaWxlfVxuICAgICAgICAgIHtub0ZpbGVDaG9zZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXJCdXR0b24oY2xhc3NOYW1lOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSA/IChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMucXVlc3Rpb24uZG9DbGVhbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8c3Bhbj57dGhpcy5xdWVzdGlvbi5jbGVhbkJ1dHRvbkNhcHRpb259PC9zcGFuPlxuICAgICAgICB7KCEhdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj46IG51bGwgfVxuICAgICAgPC9idXR0b24+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVTaWduKGNsYXNzTmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighY2xhc3NOYW1lIHx8ICF2YWwubmFtZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9e3ZhbC5jb250ZW50fVxuICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZG9Eb3dubG9hZEZpbGUoZXZlbnQsIHZhbCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT17dmFsLm5hbWV9XG4gICAgICAgICAgZG93bmxvYWQ9e3ZhbC5uYW1lfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGhSZW5kZXJlZCB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZhbC5uYW1lfVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcmV2aWV3KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlIHx8ICF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzUHJldmlld1Zpc2libGUoaW5kZXgpID8gdW5kZWZpbmVkIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZT8oXG4gICAgICAgICAgICAgIDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfT48L1N2Z0ljb24+XG4gICAgICAgICAgICApOm51bGwpfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0IHx8IHVuZGVmaW5lZH0+e3ByZXZpZXdzfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25IdG1sIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkh0bWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSHRtbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fVxuICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkh0bWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Um93TW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHJvd3NDaGFuZ2VkOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyByb3dzQ2hhbmdlZDogc2VsZi5zdGF0ZS5yb3dzQ2hhbmdlZCArIDEgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3NUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0ZCAvPiA6IG51bGw7XG4gICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGx9IGtleT17a2V5fT5cbiAgICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IGNvbHVtbjogY29sdW1uIH0sIGNvbHVtVGV4dCwgXCJjb2x1bW4taGVhZGVyXCIpfVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInJvdy1cIiArIHJvdy5uYW1lICsgXCItXCIgKyBpO1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhSb3dcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICBpc0ZpcnN0PXtpID09IDB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaGVhZGVyID0gIXRoaXMucXVlc3Rpb24uc2hvd0hlYWRlciA/IG51bGwgOiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICB7cm93c1RIfVxuICAgICAgICAgIHtoZWFkZXJzfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXJ9XG4gICAgICAgIHJlZj17cm9vdCA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfSAvPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0VGFibGVDc3MoKX0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChjZWxsOiBhbnksIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByZWFzb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3c7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByb3dzVEQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzUm93cykge1xuICAgICAgdmFyIHJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnJvdy5sb2NUZXh0KTtcbiAgICAgIHJvd3NURCA9IDx0ZCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb3dUZXh0Q2VsbH0+XG4gICAgICAgIHt0aGlzLndyYXBDZWxsKHsgcm93OiB0aGlzLnJvdyB9LCByb3dUZXh0LCBcInJvdy1oZWFkZXJcIil9XG4gICAgICA8L3RkPjtcbiAgICB9XG5cbiAgICB2YXIgdGRzID0gdGhpcy5nZW5lcmF0ZVRkcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8dHIgY2xhc3NOYW1lPXt0aGlzLnJvdy5yb3dDbGFzc2VzIHx8IHVuZGVmaW5lZH0+XG4gICAgICAgIHtyb3dzVER9XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVRkcygpIHtcbiAgICB2YXIgdGRzID0gW107XG4gICAgdmFyIHJvdyA9IHRoaXMucm93O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGQgPSBudWxsO1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJ2YWx1ZVwiICsgaTtcblxuICAgICAgLy92YXIgaXNDaGVja2VkID0gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKTtcbiAgICAgIHZhciBpc0NoZWNrZWQgPSByb3cudmFsdWUgPT0gY29sdW1uLnZhbHVlO1xuICAgICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKTtcbiAgICAgIHZhciBpbnB1dElkID0gdGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyByb3cubmFtZSArIFwiX1wiICsgaTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0NlbGxUZXh0KSB7XG4gICAgICAgIHZhciBnZXRIYW5kbGVyID0gIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5XG4gICAgICAgICAgPyAoY29sdW1uOiBhbnkpID0+ICgpID0+IHRoaXMuY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICAgICAgb25DbGljaz17Z2V0SGFuZGxlciA/IGdldEhhbmRsZXIoY29sdW1uKSA6IG51bGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3cubmFtZSwgY29sdW1uKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD17aW5wdXRJZH1cbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1WYWx1ZX1cbiAgICAgICAgICAgICAgICBuYW1lPXtyb3cuZnVsbE5hbWV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NvbHVtbi52YWx1ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17IXRoaXMucXVlc3Rpb24uaXNNb2JpbGUgPyB7IGRpc3BsYXk6IFwibm9uZVwiIH0gOiB1bmRlZmluZWQgfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsUmVzcG9uc2l2ZVRpdGxlfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0ZHMucHVzaCh0ZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRkcztcbiAgfVxuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZVxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICBRdWVzdGlvblxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy9DcmVhdGUgcmVuZGVyZWQgdGFibGUgaW4gY29udHJ1Y3RvciBhbmQgbm90IG9uIHJlbmRlcmluZ1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlKHByZXZTdGF0ZTogYW55ID0gbnVsbCkge1xuICAgIHJldHVybiB7IHJvd0NvdW50ZXI6ICFwcmV2U3RhdGUgPyAwIDogcHJldlN0YXRlLnJvd0NvdW50ZXIgKyAxIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuZ2V0U3RhdGUodGhpcy5zdGF0ZSkpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGVEaXYoKTtcbiAgfVxuICByZW5kZXJUYWJsZURpdigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgdmFyIGZvb3RlcnMgPSB0aGlzLnJlbmRlckZvb3RlcigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5zaG93SG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFRhYmxlQ3NzKCl9PlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAge3Jvd3N9XG4gICAgICAgICAge2Zvb3RlcnN9XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGhlYWRlcnM6IGFueVtdID0gW107XG4gICAgdmFyIGNlbGxzID0gdGFibGUuaGVhZGVyUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1uU3R5bGU6IGFueSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIsIHt9KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoXG4gICAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBzdHlsZT17Y29sdW1uU3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+e2hlYWRlcnN9PC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dGb290ZXIpIHJldHVybiBudWxsO1xuICAgIHZhciByb3cgPSB0aGlzLnJlbmRlclJvdyhcbiAgICAgIFwiZm9vdGVyXCIsXG4gICAgICB0YWJsZS5mb290ZXJSb3csXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICApO1xuICAgIHJldHVybiA8dGZvb3Q+e3Jvd308L3Rmb290PjtcbiAgfVxuICByZW5kZXJSb3dzKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlclJvdyhyZW5kZXJlZFJvd3NbaV0uaWQsIHJlbmRlcmVkUm93c1tpXSwgY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8dGJvZHk+e3Jvd3N9PC90Ym9keT47XG4gIH1cbiAgcmVuZGVyUm93KFxuICAgIGtleVZhbHVlOiBhbnksXG4gICAgcm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbWF0cml4cm93ID0gW107XG4gICAgdmFyIGNlbGxzID0gcm93LmNlbGxzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4cm93LnB1c2godGhpcy5yZW5kZXJDZWxsKGNlbGxzW2ldLCBpLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHZhciBrZXkgPSBcInJvd1wiICsga2V5VmFsdWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPE1hdHJpeFJvdyBtb2RlbD17cm93fSBwYXJlbnRNYXRyaXg9e3RoaXMucXVlc3Rpb259PnttYXRyaXhyb3d9PC9NYXRyaXhSb3c+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcImNlbGxcIiArIGluZGV4O1xuICAgIGlmIChjZWxsLmhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGxcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBpdGVtQ3NzPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGNlbGw9e2NlbGx9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHJlYXNvbiA9IGNlbGwuaGFzVGl0bGUgPyBcInJvdy1oZWFkZXJcIiA6IFwiXCI7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCByZWFzb24sIGNzc0NsYXNzZXMpO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e2NlbGxTdHlsZX1cbiAgICAgICAgY29sU3Bhbj17Y2VsbC5jb2xTcGFuc31cbiAgICAgID5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbENvbnRlbnQoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICByZWFzb246IHN0cmluZyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjZWxsQ29udGVudCA9IG51bGw7XG4gICAgdmFyIHJlcXVpcmVkU3BhY2UgPSBudWxsO1xuICAgIHZhciByZXF1aXJlZFRleHQgPSBudWxsO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuICAgIGlmIChjZWxsLmhhc1RpdGxlKSB7XG4gICAgICByZWFzb24gPSBcInJvdy1oZWFkZXJcIjtcbiAgICAgIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY2VsbC5sb2NUaXRsZSk7XG4gICAgICBpZiAoY2VsbC5yZXF1aXJlZFRleHQpIHtcbiAgICAgICAgcmVxdWlyZWRTcGFjZSA9IDxzcGFuPiZuYnNwOzwvc3Bhbj47XG4gICAgICAgIHJlcXVpcmVkVGV4dCA9IDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jZWxsUmVxdWlyZWRUZXh0fT57Y2VsbC5yZXF1aXJlZFRleHR9PC9zcGFuPjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNlbGwuaXNEcmFnSGFuZGxlckNlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gaXRlbT17eyBkYXRhOiB7IHJvdzogY2VsbC5yb3csIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH0gfX0vPlxuICAgICAgPC8+KTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaXNBY3Rpb25zQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsXG4gICAgICAgICAgbW9kZWw9e2NlbGwuaXRlbS5nZXREYXRhKCl9XG4gICAgICAgID48L1N1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGw+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNQYW5lbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICAgIGtleT17Y2VsbC5wYW5lbC5pZH1cbiAgICAgICAgICBlbGVtZW50PXtjZWxsLnBhbmVsfVxuICAgICAgICAgIHN1cnZleT17dGhpcy5xdWVzdGlvbi5zdXJ2ZXl9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjZWxsQ29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCByZWFkeUNlbGwgPSAoXG4gICAgICA8PlxuICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIHtyZXF1aXJlZFNwYWNlfVxuICAgICAgICB7cmVxdWlyZWRUZXh0fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNlbGwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2VsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBxID0gc3VwZXIuZ2V0UXVlc3Rpb24oKTtcbiAgICBpZiAoISFxKSByZXR1cm4gcTtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgIGlmIChcbiAgICAgIGVsICYmXG4gICAgICB0aGlzLmNlbGwgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24gJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmXG4gICAgICBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIlxuICAgICkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSAmJlxuICAgICAgKCF0aGlzLmNlbGwuaXNDaG9pY2UgfHwgdGhpcy5jZWxsLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0gc3VwZXIuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKSB7XG4gICAgICBpZiAoIXJlcykgcmVzID0ge307XG4gICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGgpIHJlcy53aWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgIGlmICghIXRoaXMuY2VsbC5taW5XaWR0aCkgcmVzLm1pbldpZHRoID0gdGhpcy5jZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jZWxsLmlzQ2hvaWNlKVxuICAgICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICAgIGlmICh0aGlzLmNlbGwuaXNDaGVja2JveCkgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaXNGaXJzdD17dGhpcy5jZWxsLmlzRmlyc3RDaG9pY2V9XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBpc0NoZWNrZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi52YWx1ZSA9PT0gdGhpcy5jZWxsLml0ZW0udmFsdWV9XG4gICAgICAgIGlzRGlzYWJsZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLmNlbGwuaXRlbS5pc0VuYWJsZWR9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25Sb3dBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5tYXRyaXguYWRkUm93VUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNob3dUYWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93VGFibGU7XG4gICAgdmFyIG1haW5EaXYgPSBzaG93VGFibGVcbiAgICAgID8gdGhpcy5yZW5kZXJUYWJsZURpdigpXG4gICAgICA6IHRoaXMucmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHttYWluRGl2fVxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uVG9wKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uQm90dG9tKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uQm90dG9tKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jRW1wdHlSb3dzVGV4dCk7XG4gICAgY29uc3QgdGV4dERpdjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NUZXh0fT57dGV4dH08L2Rpdj47XG4gICAgY29uc3QgYnRuOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMsIHRydWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NTZWN0aW9ufT5cbiAgICAgICAge3RleHREaXZ9XG4gICAgICAgIHtidG59XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGlzRW1wdHlTZWN0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3MoaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICBvbkNsaWNrPXtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0Rlc2lnbk1vZGUgPyB1bmRlZmluZWQgOiB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2tcbiAgICAgIH1cbiAgICA+XG4gICAgICB7YWRkUm93VGV4dH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pY29uQWRkfSAvPlxuICAgIDwvYnV0dG9uPik7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZm9vdGVyfT57YWRkQnV0dG9ufTwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KGksIHRhYmxlUm93c1tpXSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvdyhcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApIHtcbiAgICB2YXIga2V5OiBzdHJpbmcgPSBcIml0ZW1cIiArIHJvd0luZGV4O1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGl0ZW09e2l0ZW19IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlNdWx0aXBsZVRleHRJdGVtPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpIHtcbiAgICByZXR1cm4gW3RoaXMuaXRlbSwgdGhpcy5pdGVtLmVkaXRvcl07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKDxsYWJlbCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUxhYmVsQ3NzKGl0ZW0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGl0bGV9PlxuICAgICAgICA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfSBjc3NDbGFzc2VzPXtpdGVtLmVkaXRvci5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yXG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1Dc3M9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpfVxuICAgICAgICBxdWVzdGlvbj17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgICB7dGhpcy5yZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW0sIGNzc0NsYXNzZXMpfVxuICAgIDwvbGFiZWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZWRpdG9yLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBwYW5lbENvdW50ZXI6IDAgfSk7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYW5lbENvdW50ZXI6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnBhbmVsQ291bnRlciArIDEgOiAxLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBwYW5lbHMgPSBbXTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24ucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5xdWVzdGlvbi5wYW5lbHNbaV07XG4gICAgICAgIHBhbmVscy5wdXNoKFxuICAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cbiAgICAgICAgICAgIGtleT17cGFuZWwuaWR9XG4gICAgICAgICAgICBlbGVtZW50PXtwYW5lbH1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbDtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17dGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXh9XG4gICAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnRuQWRkOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl1cbiAgICAgID8gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdlRvcDogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZCb3R0b206IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzQm90dG9tU2hvd2luZ1xuICAgICAgPyB0aGlzLnJlbmRlck5hdmlnYXRvcigpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgY29uc3QgbmF2VjIgPSB0aGlzLnJlbmRlck5hdmlnYXRvclYyKCk7XG4gICAgY29uc3Qgbm9FbnRyaWVzUGxhY2Vob2xkZXIgPSB0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIHtub0VudHJpZXNQbGFjZWhvbGRlcn1cbiAgICAgICAge25hdlRvcH1cbiAgICAgICAge3BhbmVsc31cbiAgICAgICAge25hdkJvdHRvbX1cbiAgICAgICAge2J0bkFkZH1cbiAgICAgICAge25hdlYyfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdKSB7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmIHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUmFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBjb25zdCBidG5QcmV2OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZHJlclByZXZCdXR0b24oKTtcbiAgICBjb25zdCBidG5OZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZHJlck5leHRCdXR0b24oKTtcbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKTtcbiAgICBjb25zdCBwcm9ncmVzc0NsYXNzOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RvcFxuICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCb3R0b207XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9ncmVzc0NsYXNzfT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBjbGVhcjogXCJib3RoXCIgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICB7YnRuUHJldn1cbiAgICAgICAgICAgIHtyYW5nZX1cbiAgICAgICAgICAgIHtidG5OZXh0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtidG5BZGR9XG4gICAgICAgICAge3RoaXMucmVuZGVyUHJvZ3Jlc3NUZXh0KCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclByb2dyZXNzVGV4dCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZHJlclByZXZCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlck5leHRCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJSYW5nZSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3N9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24ucHJvZ3Jlc3MgfX1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yVjIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgPT09IDAgfHwgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmICF0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyfT5cbiAgICAgIDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+XG4gICAgICB7cmFuZ2V9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlckJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnF1ZXN0aW9uLmZvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlcigpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRW50cmllc1BsYWNlaG9sZGVyfT5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NOb0VudHJpZXNUZXh0KX08L3NwYW4+XG4gICAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUGFuZWxSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uID8gKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkodGhpcy5pbmRleCk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYW5lbDogSlNYLkVsZW1lbnQgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb25zdCByZW1vdmVCdXR0b246IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCdXR0b24oKTtcbiAgICBjb25zdCBzZXBhcmF0b3I6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMuaW5kZXggPCB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxID9cbiAgICAgICg8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPikgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKX0+XG4gICAgICAgICAge3BhbmVsfVxuICAgICAgICAgIHtyZW1vdmVCdXR0b259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2VwYXJhdG9yfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCB8fFxuICAgICAgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkKVxuICAgIClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFJlbW92ZUJ1dHRvbkNzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUGFuZWxSZW1vdmVDbGlja31cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZVRleHR9XG4gICAgICAgID57dGhpcy5xdWVzdGlvbi5wYW5lbFJlbW92ZVRleHR9PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9XG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJwYW5lbGR5bmFtaWNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b24pIHtcbiAgICAgIGNsZWFyQnV0dG9uID0gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uY2xlYXJWYWx1ZSgpfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxmaWVsZHNldFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKX1cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIHJlZj17KGZpZWxkc2V0KSA9PiAodGhpcy5jb250cm9sID0gZmllbGRzZXQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyB0aGlzLmdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzT3RoZXIgJiYgdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLnF1ZXN0aW9uLm90aGVySXRlbSkgPyB0aGlzLnJlbmRlck90aGVyKGNzc0NsYXNzZXMpIDogbnVsbH1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGb290ZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzRm9vdEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5mb290SXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1fZlwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICAgIHt0aGlzLmdldENvbHVtbnMoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRGb290ZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbnMoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY29sdW1ucy5tYXAoKGNvbHVtbjogYW55LCBjaTogbnVtYmVyKSA9PiB7XG4gICAgICB2YXIgaXRlbXMgPSBjb2x1bW4ubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcIml0ZW1cIiArIGNpICsgaWksIGl0ZW0sIHZhbHVlLCBjc3NDbGFzc2VzLCBcIlwiICsgY2kgKyBpaSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICB2YWx1ZTogYW55LFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleDogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIHRleHRTdHlsZT17dGhpcy50ZXh0U3R5bGV9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgaXNDaGVja2VkPXt2YWx1ZSA9PT0gaXRlbS52YWx1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIDogXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gJiYgISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpdGVtVGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0LCB0aGlzLnRleHRTdHlsZSlcbiAgICAgIDogXCJcIjtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuaXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjb250cm9sTGFiZWxDbGFzc30+XG4gICAgICAgICAgICB7aXRlbVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0sIHByb3BzKTtcbn0pO1xuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFua2luZ01vZGVsLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYW5raW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhbmtpbmdNb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucm9vdENsYXNzfVxuICAgICAgICByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLmdldEl0ZW1zKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgY29uc3QgcmFua2luZ0Nob2ljZXMgPSB0aGlzLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFua2luZ0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSByYW5raW5nQ2hvaWNlc1tpXTtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGksXG4gICAgICAgICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlS2V5ZG93bi5jYWxsKHRoaXMucXVlc3Rpb24sIGV2ZW50LCBpdGVtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZVBvaW50ZXJEb3duLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIGk6IG51bWJlcixcbiAgICBoYW5kbGVLZXlkb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBoYW5kbGVQb2ludGVyRG93bjogKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQsXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGl0ZW1DbGFzczogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblJhbmtpbmdNb2RlbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBpdGVtLnZhbHVlICsgXCItXCIgKyBpICsgXCItaXRlbVwiO1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICBjb25zdCBpbmRleCA9IGk7XG4gICAgY29uc3QgaW5kZXhUZXh0OiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaSk7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgaW5kZXhUZXh0PXtpbmRleFRleHR9XG4gICAgICAgIGhhbmRsZUtleWRvd249e2hhbmRsZUtleWRvd259XG4gICAgICAgIGhhbmRsZVBvaW50ZXJEb3duPXtoYW5kbGVQb2ludGVyRG93bn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXRlbUNsYXNzPXtpdGVtQ2xhc3N9XG4gICAgICAgIHF1ZXN0aW9uPXtxdWVzdGlvbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXhUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXhUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlS2V5ZG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5ZG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZVBvaW50ZXJEb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVQb2ludGVyRG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1DbGFzc31cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICAgIG9uUG9pbnRlckRvd249e3RoaXMuaGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtcmFua2luZy1pdGVtPXt0aGlzLmluZGV4fVxuICAgICAgPlxuICAgICAgICA8ZGl2IHRhYkluZGV4PXstMX0gc3R5bGU9e3sgb3V0bGluZTogXCJub25lXCIgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtSWNvbkNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxNlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Ib3ZlckNzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAyNFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Gb2N1c0NzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA1TDUgMEwwIDVINFY5SDZWNUgxMFpcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4fT57dGhpcy5pbmRleFRleHR9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbH0+e3RoaXMudGV4dH08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYW5raW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZW5kZXJlZFJhdGluZ0l0ZW0gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DbGljayA9IHRoaXMuaGFuZGxlT25DbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYXRpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmF0aW5nTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhldmVudC50YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01pblJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgbWF4VGV4dCA9IHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yYXRpbmdSb290Q3NzfSByZWY9eyhkaXYpID0+ICh0aGlzLmNvbnRyb2wgPSBkaXYpfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01pbkxhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1pblRleHR9PnttaW5UZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVuZGVyZWRSYXRlSXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLnJlbmRlckl0ZW0oXCJ2YWx1ZVwiICsgaSwgaXRlbSwgaSwgY3NzQ2xhc3NlcykpfVxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWF4TGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF4VGV4dH0+e21heFRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogUmVuZGVyZWRSYXRpbmdJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbS5pdGVtVmFsdWUpfT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi12aXN1YWxseWhpZGRlblwiXG4gICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldElucHV0SWQoaW5kZXgpfVxuICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja31cbiAgICAgICAgICBvbkNoYW5nZT17KCk9Pnt9fVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UZXh0fT57aXRlbVRleHR9PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgcHJpdmF0ZSBfaXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcbiAgICB2YXIgb25LZXlEb3duID0gbnVsbDtcbiAgICB2YXIgb25LZXlVcCA9IG51bGw7XG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICBvbktleURvd24gPSAoZTogYW55KSA9PiAodGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgICB0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb25Db21wb3NpdGlvblVwZGF0ZSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy8zMzg0XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3N9XG4gICAgICAgIHR5cGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUeXBlfVxuICAgICAgICAvL3JlZj17dGhpcy5jb250cm9sUmVmfVxuICAgICAgICByZWY9eyhpbnB1dCkgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgc3R5bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRTdHlsZX1cbiAgICAgICAgbWF4TGVuZ3RoPXt0aGlzLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpfVxuICAgICAgICBtaW49e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNaW59XG4gICAgICAgIG1heD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1heH1cbiAgICAgICAgc3RlcD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFN0ZXB9XG4gICAgICAgIHNpemU9e3RoaXMucXVlc3Rpb24uaW5wdXRTaXplfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJ9XG4gICAgICAgIGxpc3Q9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgb25CbHVyPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgb25Db21wb3NpdGlvblVwZGF0ZT17b25Db21wb3NpdGlvblVwZGF0ZX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkID9cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7IHRoaXMucmVuZGVySW5wdXQoKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlckRhdGFMaXN0KCkgfVxuICAgICAgICA8L2Rpdj46XG4gICAgICAgIHRoaXMucmVuZGVySW5wdXQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGlzdCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQpIHJldHVybiBudWxsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMucXVlc3Rpb24uZGF0YUxpc3Q7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgb3B0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbnMucHVzaCg8b3B0aW9uIGtleT17XCJpdGVtXCIraX0gdmFsdWU9e2l0ZW1zW2ldfT48L29wdGlvbj4pO1xuICAgIH1cbiAgICByZXR1cm4gPGRhdGFsaXN0IGlkPXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9PntvcHRpb25zfTwvZGF0YWxpc3Q+O1xuICB9XG4gIC8vIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAvLyAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbFJlZi5jdXJyZW50O1xuICAvLyAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgLy8gfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwidGV4dFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgU3VydmV5RWxlbWVudCwgUXVlc3Rpb25Sb3dNb2RlbCwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIHtcbiAgcHVibGljIHN0YXRpYyB3cmFwUm93KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByb3c6IFF1ZXN0aW9uUm93TW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRSb3dXcmFwcGVyQ29tcG9uZW50TmFtZShyb3cpO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudERhdGEocm93KTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICByb3csXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcEVsZW1lbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRRdWVzdGlvbkNvbnRlbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBJdGVtVmFsdWUoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UsIGl0ZW06IEl0ZW1WYWx1ZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lKGl0ZW0sIHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW0sIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBpdGVtLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBNYXRyaXhDZWxsKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCByZWFzb246IHN0cmluZyA9IFwiY2VsbFwiKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIHJlYXNvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgcmVhc29uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxsLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxufVxuXG5TdXJ2ZXlNb2RlbC5wbGF0Zm9ybSA9IFwicmVhY3RcIjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5VGltZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUaW1lclBhbmVsIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aW1lck1vZGVsKCk6IFN1cnZleVRpbWVyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC5zdXJ2ZXkuZ2V0Q3NzKCkudGltZXJSb290fT57dGhpcy50aW1lck1vZGVsLnRleHR9PC9kaXY+O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgfVxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ3NzKCkge1xuICAgIHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoZWxlbWVudCBhcyBRdWVzdGlvbikuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3cgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMuY3JlYXRvciAmJiB0aGlzLnJvdy52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGVsZW1lbnRzID0gbnVsbDtcbiAgICBlbGVtZW50cyA9IHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgICAgY29uc3QgY3NzID0gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5xdWVzdGlvbldyYXBwZXJ9XG4gICAgICAgICAgc3R5bGU9eyhlbGVtZW50IGFzIGFueSkucm9vdFN0eWxlfVxuICAgICAgICAgIGRhdGEta2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIGtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBvbkZvY3VzPXsoZWxlbWVudCBhcyBRdWVzdGlvbikuZm9jdXNJbn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJvdy5pc05lZWRSZW5kZXIgPyBpbm5lckVsZW1lbnQgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHsgZWxlbWVudDogZWxlbWVudCwgY3NzOiB0aGlzLmNzcywgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucm93LmdldFJvd0NzcygpfSA+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwUm93KHN1cnZleSwgY29udGVudCwgdGhpcy5yb3cpO1xuICAgIHJldHVybiB3cmFwcGVyIHx8IGNvbnRlbnQ7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCAmJiAhdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gZWw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdik7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAobmV4dFByb3BzLnJvdyAhPT0gdGhpcy5yb3cpIHtcbiAgICAgIG5leHRQcm9wcy5yb3cuaXNOZWVkUmVuZGVyID0gdGhpcy5yb3cuaXNOZWVkUmVuZGVyO1xuICAgICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzdG9wTGF6eVJlbmRlcmluZygpIHtcbiAgICB0aGlzLnJvdy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIHRoaXMucm93LmlzTmVlZFJlbmRlciA9ICF0aGlzLnJvdy5pc0xhenlSZW5kZXJpbmcoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBlbGVtZW50SW5kZXg/OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50SW5kZXggPyBcIi1cIiArIGVsZW1lbnRJbmRleCA6IDA7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC5nZXRUeXBlKCk7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGUpKSB7XG4gICAgICBlbGVtZW50VHlwZSA9IFwicXVlc3Rpb25cIjtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZSwge1xuICAgICAga2V5OiBlbGVtZW50Lm5hbWUgKyBpbmRleCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICBzdXJ2ZXk6IHRoaXMuc3VydmV5LFxuICAgICAgY3NzOiB0aGlzLmNzcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFuQnV0dG9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX0gc3R5bGU9e3sgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnNpZ25hdHVyZUhlaWdodCwgd2lkdGg6IHRoaXMucXVlc3Rpb24uc2lnbmF0dXJlV2lkdGggfX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogdGhpcy5xdWVzdGlvbi5uZWVkU2hvd1BsYWNlaG9sZGVyKCkgPyBcIlwiIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnBsYWNlSG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGNhbnZhcyB0YWJJbmRleD17MH0+PC9jYW52YXM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2xlYW5CdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uY2xlYXJWYWx1ZSgpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj4gOiA8c3Bhbj7inJY8L3NwYW4+fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubG9jU3RyLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xyXG4gIH07XHJcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvY1N0ci5oYXNIdG1sKSB7XHJcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXHJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cclxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlfVxyXG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cclxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbklucHV0fVxyXG4gICAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgIGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIlxyXG4gICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cclxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XHJcbiAgICAgID5cclxuICAgICAgICB7dGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXHJcbiAgTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nVmlld2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBsb2NTdHIoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBpZighIXByZXZQcm9wcy5sb2NTdHIpIHtcclxuICAgICAgcHJldlByb3BzLmxvY1N0ci5vbkNoYW5nZWQgPSAoKSA9PiB7fTtcclxuICAgIH1cclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1JlbmRlcmluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuIG51bGw7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHN0ckVsID0gdGhpcy5yZW5kZXJTdHJpbmcoKTtcclxuICAgIHRoaXMuaXNSZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgIHJldHVybiBzdHJFbDtcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlbmRlclN0cmluZygpOiBKU1guRWxlbWVudCB7XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3Ytc3RyaW5nLXZpZXdlclwiIHN0eWxlPXt0aGlzLnN0eWxlfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcclxuICAgIH1cclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHZhbHVlIHRvIGZhbHNlLCBpZiB5b3Ugd2FudCB0byBoYXZlIFVUQyBmdWN0aW9ucywgZm9yIGV4YW1wbGUgc2V0VVRDSG91cnMgaW5zaWRlIG91ciBmdW5jdGlvbnMsIGxpa2UgdG9kYXkuXG4gICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBzZXRIb3VycyBmdW5jdGlvbiwgd2l0aCBsb2NhbCBkYXRlXG4gICAqL1xuICB1c2VMb2NhbFRpbWVab25lOiB0cnVlLFxuICAvKipcbiAgICogVGhlIHByZWZpeCB0aGF0IHVzZXMgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIGNvbW1lbnQsIGFzIHtxdWVzdGlvbk5hbWV9ICsge2NvbW1lbnRQcmVmaXh9LlxuICAgKiBUaGUgZGVmYXVsdFxuICAgKi9cbiAgY29tbWVudFByZWZpeDogXCItQ29tbWVudFwiLFxuICAvKipcbiAgICogRW5jb2RlIHBhcmFtZXRlciBvbiBjYWxsaW5nIHJlc3RmdWwgd2ViIEFQSVxuICAgKi9cbiAgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM6IHRydWUsXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgcmVzdWx0IGZvciBjaG9pY2VzIGdldHRpbmcgZnJvbSB3ZWIgc2VydmljZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBkaXNhYmxlIHRoZSBjYWNoaW5nLlxuICAgKi9cbiAgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsOiB0cnVlLFxuICBnZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9LFxuICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWwgPSB2YWw7XG4gIH0sXG4gIC8qKlxuICAgKiBTdXJ2ZXlKUyB3ZWIgc2VydmljZSBBUEkgdXJsXG4gICAqL1xuICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIixcbiAgLyoqXG4gICAqIHNlcGFyYXRvciB0aGF0IGNhbiBhbGxvdyB0byBzZXQgdmFsdWUgYW5kIHRleHQgb2YgSXRlbVZhbHVlIG9iamVjdCBpbiBvbmUgc3RyaW5nIGFzOiBcInZhbHVlfHRleHRcIlxuICAgKi9cbiAgaXRlbVZhbHVlU2VwYXJhdG9yOiBcInxcIixcbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNlcmlhbGl6ZSBpdGVtdmFsdWUgaW5zdGFuY2UgYWx3YXlzIGFzIG9iamVjdCBldmVuIGlmIHRleHQgcHJvcGVydHkgaXMgZW1wdHlcbiAgICogY29uc3QgaXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKDUpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogNX0sIGluc3RlYWQgb2YgNSBieSBkZWZhdWx0LlxuICAgKi9cbiAgaXRlbVZhbHVlQWx3YXlzU2VyaWFsaXplQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSB0ZXh0IHByb3BlcnR5LCBldmVuIGlmIGl0IGlzIGVtcHR5IG9yIGVxdWFscyB0byB2YWx1ZVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoXCJpdGVtMVwiKTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IGl0ZW0xLCB0ZXh0OiBcIml0ZW0xXCJ9LCBpbnN0ZWFkIG9mIFwiaXRlbTFcIiBieSBkZWZhdWx0LlxuICAgKi9cbiAgaXRlbVZhbHVlQWx3YXlzU2VyaWFsaXplVGV4dDogZmFsc2UsXG4gIC8qKlxuICAgKiBkZWZhdWx0IGxvY2FsZSBuYW1lIGZvciBsb2NhbGl6YWJsZSBzdHJpbmdzIHRoYXQgdXNlcyBkdXJpbmcgc2VyaWFsaXphdGlvbiwge1wiZGVmYXVsdFwiOiBcIk15IHRleHRcIiwgXCJkZVwiOiBcIk1laW4gVGV4dFwifVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZU5hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCByb3cgbmFtZSBmb3IgbWF0cml4IChzaW5nbGUgY2hvaWNlKVxuICAgKi9cbiAgbWF0cml4RGVmYXVsdFJvd05hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCBjZWxsIHR5cGUgZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Q2VsbFR5cGU6IFwiZHJvcGRvd25cIixcbiAgLyoqXG4gICAqIFRvdGFsIHZhbHVlIHBvc3RmaXggZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzLiBUaGUgdG90YWwgdmFsdWUgc3RvcmVzIGFzOiB7bWF0cml4TmFtZX0gKyB7cG9zdGZpeH1cbiAgICovXG4gIG1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4OiBcIi10b3RhbFwiLFxuICAvKipcbiAgICogTWF4aW11bSByb3cgY291bnQgaW4gZHluYW1pYyBtYXRyaXhcbiAgICovXG4gIG1hdHJpeE1heGltdW1Sb3dDb3VudDogMTAwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcm93Q291bnQgdGhhdCByZXR1cm5zIGluIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgZnVuY3Rpb25cbiAgICovXG4gIG1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb246IDEsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gcmVuZGVyIG1hdHJpeCBkeW5hbWljIHJlbW92ZSBhY3Rpb24gYXMgYnV0dG9uLlxuICAgKiBJdCBpcyByZW5kZXJlZCBhcyBpY29uIGluIG5ldyB0aGVtZXMgKFwiZGVmYXVsdFYyXCIpIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBtYXRyaXhSZW5kZXJSZW1vdmVBc0ljb246IHRydWUsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHBhbmVsIGNvdW50IGluIGR5bmFtaWMgcGFuZWxcbiAgICovXG4gIHBhbmVsTWF4aW11bVBhbmVsQ291bnQ6IDEwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcmF0ZSB2YWx1ZSBjb3VudCBpbiByYXRpbmcgcXVlc3Rpb25cbiAgICovXG4gIHJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudDogMjAsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBxdWVzdGlvbiB3aGlsZSBjaG9pY2VzIGFyZSBnZXR0aW5nIGZyb20gdGhlIHdlYiBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWI6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNlcmlhbGl6ZSB0aGUgbG9jYWxpemF0aW9uIHN0cmluZyBhcyBvYmplY3QgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBmb3IgZGVmYXVsdCBsb2NhbGUuIEluc3RlYWQgb2Ygc3RyaW5nIFwiTXlTdHJcIiBzZXJpYWxpemUgYXMge2RlZmF1bHQ6IFwiTXlTdHJcIn1cbiAgICovXG4gIHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBleGVjdXRlIHRoZSBjb21wbGV0ZSB0cmlnZ2VyIG9uIHZhbHVlIGNoYW5nZSBpbnN0ZWFkIG9mIG9uIG5leHQgcGFnZS5cbiAgICovXG4gIGV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBleGVjdXRlIHRoZSBza2lwIHRyaWdnZXIgb24gbmV4dCBwYWdlIGluc3RlYWQgb2Ygb24gdmFsdWUgY2hhbmdlLlxuICAgKi9cbiAgZXhlY3V0ZVNraXBUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ6IHRydWUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbQ29tbWVudF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25jb21tZW50bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwidGV4dGFyZWFcIiAoZGVmYXVsdCkgLSBBICd0ZXh0YXJlYScgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIENvbW1lbnQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICogXCJkaXZcIiAtIEEgJ2RpdicgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIENvbW1lbnQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHJlYWRPbmx5Q29tbWVudFJlbmRlck1vZGU6IFwidGV4dGFyZWFcIixcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtUZXh0XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbnRleHRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJpbnB1dFwiIChkZWZhdWx0KSAtIEFuICdpbnB1dCcgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIFRleHQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICogXCJkaXZcIiAtIEEgJ2RpdicgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIFRleHQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHJlYWRPbmx5VGV4dFJlbmRlck1vZGU6IFwiaW5wdXRcIixcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24sIHNldCB5b3VyIGZ1bmN0aW9uLCBpZiB5b3Ugd2FudCB0byBzaG93IHlvdXIgb3duIGRpYWxvZyBjb25maXJtIHdpbmRvdyBpbnN0ZWFkIG9mIHN0YW5kYXJkIGJyb3dzZXIgd2luZG93LlxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgY29uZmlybUFjdGlvbkZ1bmM6IGZ1bmN0aW9uIChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWF4V2lkdGg6IFwiaW5pdGlhbFwiLFxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB0ZWxscyBob3cgbWFueSB0aW1lcyBzdXJ2ZXkgcmUtcnVuIGV4cHJlc3Npb25zIG9uIHZhbHVlIGNoYW5nZXMgZHVyaW5nIGNvbmRpdGlvbiBydW5uaW5nLiBXZSBuZWVkIGl0IHRvIGF2b2lkIHJlY3Vyc2lvbnMgaW4gdGhlIGV4cHJlc3Npb25zXG4gICAqL1xuICBtYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZDogMTAsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCB0aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIiBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZTogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCBoaWRlTnVtYmVyID0gdHJ1ZSBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSBudW1iZXIgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHJvd3MgYXJlIHJlbmRlcmVkIG5vIG1hdHRlcnMgd2h3dGhlciB0aGV5IGFyZSB2aXNpYmxlLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBsYXp5Um93c1JlbmRlcmluZzogZmFsc2UsXG4gIGxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3c6IDMsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGl0ZW1zIGFyZSBvcmRlcmVkIGluIHJvd3MuXG4gICAqIFNldCBpdCBcImNvbHVtblwiLCBhbmQgaXRlbXMgd2lsbCBiZSBvcmRlcmVkIGluIGNvbHVtbnMuXG4gICAqL1xuICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIFN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGVzLiBZb3UgY2FuIG1vZGlmeSB0aGlzIHZhcmlhYmxlIHRvIGFkZCB2YWxpZGF0b3JzIGZvciBuZXcgcXVlc3Rpb24gdHlwZXMgb3IgYWRkL3JlbW92ZSBmb3IgZXhpc3RpbmcgcXVlc3Rpb24gdHlwZXMuXG4gICAqL1xuICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiB7XG4gICAgcXVlc3Rpb246IFtcImV4cHJlc3Npb25cIl0sXG4gICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgIHRleHQ6IFtcIm51bWVyaWNcIiwgXCJ0ZXh0XCIsIFwicmVnZXhcIiwgXCJlbWFpbFwiXSxcbiAgICBjaGVja2JveDogW1wiYW5zd2VyY291bnRcIl0sXG4gICAgaW1hZ2VwaWNrZXI6IFtcImFuc3dlcmNvdW50XCJdLFxuICB9LFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGxlc3MgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtaW5EYXRlOiBcIlwiLFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtYXhEYXRlOiBcIlwiLFxuICBzaG93TW9kYWw6IDxcbiAgICAoXG4gICAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgICBkYXRhOiBhbnksXG4gICAgICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICAgICAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICAgICAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgIGRpc3BsYXlNb2RlPzogXCJwb3B1cFwiIHwgXCJvdmVybGF5XCJcbiAgICApID0+IHZvaWRcbiAgICA+dW5kZWZpbmVkLFxuICBzdXBwb3J0Q3JlYXRvclYyOiBmYWxzZSxcbiAgc2hvd0RlZmF1bHRJdGVtc0luQ3JlYXRvclYyOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBjdXN0b20gaWNvbnMuXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlcGxhY2UgU3VydmV5SlMgZGVmYXVsdCBpY29ucyAoZGlzcGxheWVkIGluIFVJIGVsZW1lbnRzIG9mIFN1cnZleUpTIExpYnJhcnkgb3IgQ3JlYXRvcikgd2l0aCB5b3VyIGN1c3RvbSBpY29ucy5cbiAgICogRm9yIGV2ZXJ5IGRlZmF1bHQgaWNvbiB0byByZXBsYWNlLCBhZGQgYSBrZXkvdmFsdWUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgaWNvbidzIG5hbWUgYXMgYSBrZXkgYW5kIHRoZSBuYW1lIG9mIHlvdXIgY3VzdG9tIGljb24gYXMgYSB2YWx1ZS5cbiAgICogRm9yIGV4YW1wbGU6IFN1cnZleS5zZXR0aW5ncy5jdXN0b21JY29uc1tcImljb24tcmVkb1wiXSA9IFwibXktb3duLXJlZG8taWNvblwiXG4gICAqL1xuICBjdXN0b21JY29uczoge30sXG4gIHRpdGxlVGFnczoge1xuICAgIHN1cnZleTogXCJoM1wiLFxuICAgIHBhZ2U6IFwiaDRcIixcbiAgICBwYW5lbDogXCJoNFwiLFxuICAgIHF1ZXN0aW9uOiBcImg1XCIsXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVyc1wiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgaXNDb250YWluZXJWaXNpYmxlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHByaXZhdGUgc2VwYXJhdG9yU2l6ZSA9IDE3O1xuICBwcml2YXRlIHNlcGFyYXRvckFkZENvbnN0ID0gMTtcbiAgcHJpdmF0ZSBwYWRkaW5nU2l6ZUNvbnN0ID0gODtcbiAgcHJvdGVjdGVkIHJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gdHJ1ZTtcblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZTogKFxuICAgIGVsdDogRWxlbWVudFxuICApID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgcHJpdmF0ZSBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkb3RzSXRlbVNpemU6IG51bWJlciA9IDQ4LFxuICApIHtcblxuICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSAoaXNSZXNldEluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZihpc1Jlc2V0SW5pdGlhbGl6ZWQpXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgZWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5wcm9jZXNzKCk7IH0sIDEpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4gdGhpcy5wcm9jZXNzKCkpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IGVsZW1lbnQuc2Nyb2xsV2lkdGgsXG4gICAgICBvZmZzZXQ6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2UgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldFdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjTWluRGltZW5zaW9uKGN1cnJlbnRBY3Rpb246IEFjdGlvbikge1xuICAgIGxldCBtaW5EaW1lbnNpb25Db25zdCA9IHRoaXMubWluRGltZW5zaW9uQ29uc3Q7XG4gICAgaWYoY3VycmVudEFjdGlvbi5pY29uU2l6ZSAmJiB0aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0KSB7XG4gICAgICBtaW5EaW1lbnNpb25Db25zdCA9IDIgKiBjdXJyZW50QWN0aW9uLmljb25TaXplICsgdGhpcy5wYWRkaW5nU2l6ZUNvbnN0O1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEFjdGlvbi5jYW5TaHJpbmtcbiAgICAgID8gbWluRGltZW5zaW9uQ29uc3QgK1xuICAgICAgKGN1cnJlbnRBY3Rpb24ubmVlZFNlcGFyYXRvciA/IHRoaXMuc2VwYXJhdG9yU2l6ZSA6IDApXG4gICAgICA6IGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjSXRlbXNTaXplcygpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5tb2RlbC5hY3Rpb25zO1xuICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpXG4gICAgICAuZm9yRWFjaCgoaXRlbTogSFRNTERpdkVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRBY3Rpb24gPSBhY3Rpb25zW2luZGV4XTtcbiAgICAgICAgY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb24gPSB0aGlzLmNhbGNJdGVtU2l6ZShpdGVtKTtcbiAgICAgICAgY3VycmVudEFjdGlvbi5taW5EaW1lbnNpb24gPSB0aGlzLmNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbik7XG4gICAgICB9KTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0NvbnRhaW5lclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ29udGFpbmVyVmlzaWJsZSh0aGlzLmNvbnRhaW5lcik7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyVmlzaWJsZSAmJiAhdGhpcy5tb2RlbC5pc1Jlc3BvbnNpdmVuZXNzRGlzYWJsZWQpIHtcbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0QWN0aW9uc01vZGUoXCJsYXJnZVwiKTtcbiAgICAgICAgdGhpcy5jYWxjSXRlbXNTaXplcygpO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlbC5maXQodGhpcy5nZXRBdmFpbGFibGVTcGFjZSgpLCB0aGlzLmRvdHNJdGVtU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICBpZiAoISF0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciBleHRlbmRzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgZG90c0l0ZW1TaXplPzogbnVtYmVyLFxuICAgIG1pbkRpbWVuc2lvbiA9IDQwXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gICAgdGhpcy5taW5EaW1lbnNpb25Db25zdCA9IG1pbkRpbWVuc2lvbjtcbiAgICB0aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldEhlaWdodDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi8uLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInNyYy9iYXNlXCI7XG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMoYTogYW55LCBiOiBhbnkpIHtcbiAgY29uc3QgcmVnRXhTdHJpcDA6IFJlZ0V4cCA9IC8oXFwuMCspKyQvO1xuICBjb25zdCBzZWdtZW50c0E6IHN0cmluZ1tdID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IHNlZ21lbnRzQjogc3RyaW5nW10gPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3QgbGVuOiBudW1iZXIgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcbiAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgZGlmZjogbnVtYmVyID1cbiAgICAgIHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHJldHVybiBkaWZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VnbWVudHNBLmxlbmd0aCAtIHNlZ21lbnRzQi5sZW5ndGg7XG59XG5mdW5jdGlvbiBjb25maXJtQWN0aW9uKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoISFzZXR0aW5ncyAmJiAhIXNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKVxuICAgIHJldHVybiBzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYyhtZXNzYWdlKTtcbiAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG59XG5mdW5jdGlvbiBkZXRlY3RJRUJyb3dzZXIoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgY29uc3Qgb2xkSWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJNU0lFIFwiKTtcbiAgY29uc3QgZWxldmVuSWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgcmV0dXJuIG9sZEllID4gLTEgfHwgZWxldmVuSWUgPiAtMTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFT3JFZGdlKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJNU0lFIFwiKTtcbiAgICBjb25zdCB0cmlkZW50OiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gICAgY29uc3QgZWRnZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIkVkZ2UvXCIpO1xuICAgICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlID0gZWRnZSA+IDAgfHwgdHJpZGVudCA+IDAgfHwgbXNpZSA+IDA7XG4gIH1cbiAgcmV0dXJuICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlO1xufVxuZnVuY3Rpb24gbG9hZEZpbGVGcm9tQmFzZTY0KGI2NERhdGE6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGJ5dGVTdHJpbmc6IHN0cmluZyA9IGF0b2IoYjY0RGF0YS5zcGxpdChcIixcIilbMV0pO1xuXG4gICAgLy8gc2VwYXJhdGUgb3V0IHRoZSBtaW1lIGNvbXBvbmVudFxuICAgIGNvbnN0IG1pbWVTdHJpbmc6IHN0cmluZyA9IGI2NERhdGFcbiAgICAgIC5zcGxpdChcIixcIilbMF1cbiAgICAgIC5zcGxpdChcIjpcIilbMV1cbiAgICAgIC5zcGxpdChcIjtcIilbMF07XG5cbiAgICAvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGFiOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgY29uc3QgaWE6IFVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG4gICAgY29uc3QgYmI6IEJsb2IgPSBuZXcgQmxvYihbYWJdLCB7IHR5cGU6IG1pbWVTdHJpbmcgfSk7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgd2luZG93Lm5hdmlnYXRvciAmJlxuICAgICAgKDxhbnk+d2luZG93Lm5hdmlnYXRvcilbXCJtc1NhdmVCbG9iXCJdXG4gICAgKSB7XG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZU9yT3BlbkJsb2JcIl0oYmIsIGZpbGVOYW1lKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikgeyB9XG59XG5mdW5jdGlvbiBpc01vYmlsZSgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHRocmVzaG9sZDogbnVtYmVyID0gMFxuKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudFJlY3Q6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB2aWV3SGVpZ2h0OiBudW1iZXIgPSBNYXRoLm1heChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgIHdpbmRvdy5pbm5lckhlaWdodFxuICApO1xuICBjb25zdCB0b3BXaW46IG51bWJlciA9IC10aHJlc2hvbGQ7XG4gIGNvbnN0IGJvdHRvbVdpbjogbnVtYmVyID0gdmlld0hlaWdodCArIHRocmVzaG9sZDtcbiAgY29uc3QgdG9wRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LnRvcDtcbiAgY29uc3QgYm90dG9tRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcblxuICBjb25zdCBtYXhUb3A6IG51bWJlciA9IE1hdGgubWF4KHRvcFdpbiwgdG9wRWwpO1xuICBjb25zdCBtaW5Cb3R0b206IG51bWJlciA9IE1hdGgubWluKGJvdHRvbVdpbiwgYm90dG9tRWwpO1xuICByZXR1cm4gbWF4VG9wIDw9IG1pbkJvdHRvbTtcbn1cblxuZnVuY3Rpb24gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChpZDogc3RyaW5nKSB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybjtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgY29uc3Qgc2Nyb2xsYWJsZUVsID0gZmluZFNjcm9sbGFibGVQYXJlbnQoZWwpO1xuICBpZiAoISFzY3JvbGxhYmxlRWwpIHtcbiAgICBzY3JvbGxhYmxlRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJzY3JvbGxcIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWljb25OYW1lKSByZXR1cm4gaWNvbk5hbWU7XG4gIHZhciBwcm94eU5hbWUgPSAoPGFueT5zZXR0aW5ncy5jdXN0b21JY29ucylbaWNvbk5hbWVdO1xuICByZXR1cm4gISFwcm94eU5hbWUgPyBwcm94eU5hbWUgOiBpY29uTmFtZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnKFxuICBzaXplOiBudW1iZXIgfCBzdHJpbmcsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBpY29uTmFtZTogc3RyaW5nLFxuICBzdmdFbGVtOiBhbnlcbikge1xuICBpZiAoIXN2Z0VsZW0pIHJldHVybjtcbiAgaWYgKHNpemUgIT09IFwiYXV0b1wiKSB7XG4gICAgc3ZnRWxlbS5zdHlsZS53aWR0aCA9IChzaXplIHx8IHdpZHRoIHx8IDE2KSArIFwicHhcIjtcbiAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gIH1cbiAgY29uc3Qgbm9kZTogYW55ID0gc3ZnRWxlbS5jaGlsZE5vZGVzWzBdO1xuICBjb25zdCByZWFsSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlTlMoXG4gICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgXCJ4bGluazpocmVmXCIsXG4gICAgXCIjXCIgKyByZWFsSWNvbk5hbWVcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPih2YWx1ZTogVCB8ICgoKSA9PiBUKSk6IFQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICg8KCkgPT4gVD52YWx1ZSkoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6ZSh2YWx1ZTogYW55KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlICsgXCJweFwiO1xuICB9XG4gIGlmICghIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGFzdFN5bWJvbDogc3RyaW5nID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG4gICAgaWYgKChsYXN0U3ltYm9sID49IFwiMFwiICYmIGxhc3RTeW1ib2wgPD0gXCI5XCIpIHx8IGxhc3RTeW1ib2wgPT0gXCIuXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG51bTogbnVtYmVyID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBcIlwiICsgbnVtICsgXCJweFwiO1xuICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5jb25zdCBrZXlGb2N1c2VkQ2xhc3NOYW1lID0gXCJzdi1mb2N1c2VkLS1ieS1rZXlcIjtcbmZ1bmN0aW9uIGRvS2V5MkNsaWNrQmx1cihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrVXAoZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGNvbnN0IGNoYXI6IG51bWJlciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgaWYgKGNoYXIgPT09IDkpIHtcbiAgICBpZiAoISFlbGVtZW50LmNsYXNzTGlzdCAmJiAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoa2V5Rm9jdXNlZENsYXNzTmFtZSkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChrZXlGb2N1c2VkQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2hhciA9PT0gMTMgfHwgY2hhciA9PT0gMzIpIHtcbiAgICBpZiAoZWxlbWVudC5jbGljaykgZWxlbWVudC5jbGljaygpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYyAmJiBjaGFyID09PSAyNykge1xuICAgIGlmIChlbGVtZW50LmJsdXIpIGVsZW1lbnQuYmx1cigpO1xuICB9XG59XG5mdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNoYXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGNvbnN0IHN1cHBvcnRlZENvZGVzID0gWzEzLCAzMl07XG4gIGlmIChvcHRpb25zLnByb2Nlc3NFc2MpIHtcbiAgICBzdXBwb3J0ZWRDb2Rlcy5wdXNoKDI3KTtcbiAgfVxuICBpZiAoc3VwcG9ydGVkQ29kZXMuaW5kZXhPZihjaGFyKSAhPT0gLTEpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGdldENvbXB1dGVkU3R5bGU/OiAoZWx0OiBFbGVtZW50KSA9PiBhbnkpIHtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGlmICghZ2V0Q29tcHV0ZWRTdHlsZSkgZ2V0Q29tcHV0ZWRTdHlsZSA9IChlbHQ6IEVsZW1lbnQpID0+IHsgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCk7IH07XG5cbiAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IChlbGVtZW50LnNjcm9sbEhlaWdodCArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkpICsgXCJweFwiO1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxFdmVudChldmVudDogYW55KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xufVxuZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGV2ZW50OiBhbnkpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5mdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlID0gL1xccyo/KFtcXHctXSspXFxzKj8vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlLCBcIi4kMVwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFdpZHRoKGVsOiBIVE1MRWxlbWVudCkge1xuICByZXR1cm4gISFnZXRDb21wdXRlZFN0eWxlID8gTnVtYmVyLnBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShlbCkud2lkdGgpIDogZWwub2Zmc2V0V2lkdGg7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGFpbmVyVmlzaWJsZShlbDogSFRNTEVsZW1lbnQpIHtcbiAgcmV0dXJuICEhKFxuICAgIGVsLm9mZnNldFdpZHRoIHx8XG4gICAgZWwub2Zmc2V0SGVpZ2h0IHx8XG4gICAgZWwuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGhcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZFBhcmVudEJ5Q2xhc3MoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nKTogRWxlbWVudCB7XG4gIGlmICghIWVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSB8fCBlbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKGNsYXNzTmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbmRQYXJlbnRCeUNsYXNzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0RWxlbWVudFdpZHRoLFxuICBpc0NvbnRhaW5lclZpc2libGUsXG4gIGNsYXNzZXNUb1NlbGVjdG9yLFxuICBjb21wYXJlVmVyc2lvbnMsXG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkZXRlY3RJRUJyb3dzZXIsXG4gIGxvYWRGaWxlRnJvbUJhc2U2NCxcbiAgaXNNb2JpbGUsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIGZpbmRTY3JvbGxhYmxlUGFyZW50LFxuICBzY3JvbGxFbGVtZW50QnlDaGlsZElkLFxuICBjcmVhdGVTdmcsXG4gIGRvS2V5MkNsaWNrQmx1cixcbiAgZG9LZXkyQ2xpY2tVcCxcbiAgZG9LZXkyQ2xpY2tEb3duLFxuICBnZXRJY29uTmFtZUZyb21Qcm94eSxcbiAgaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQsXG4gIGdldE9yaWdpbmFsRXZlbnQsXG4gIHByZXZlbnREZWZhdWx0cyxcbiAgZmluZFBhcmVudEJ5Q2xhc3Ncbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==