@tsi-developpement/tsi-shared-ui 1.7.9 → 1.7.10

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,7 +1,7 @@
1
1
  //#region example
2
2
  const templateSample = `
3
3
  <table style="border-collapse: collapse; font-family: Arial, sans-serif; border: 1px solid #000; width: 100%;">
4
- <tr>
4
+ <tr style="width: 100%;vertical-align: top;">
5
5
  <td style="padding: 10px; width: 33.33%;">
6
6
  <span style="font-weight: bold;">Property 4:</span>
7
7
  <span style="margin-left: 5px;">Value 4</span>
@@ -24,7 +24,7 @@ export const HtmlTemplates = {
24
24
  tableSTART: () => `<table style="border-collapse: collapse; font-family: Arial, sans-serif; border: 1px solid #000; width: 100%;"><tbody style="padding: 3px;display: block;">`,
25
25
  tableEND: () => `</tbody></table><table style="height: 5px;"><tr><td style="height: 5px;"> </td></tr></table>`,
26
26
  //row
27
- rowSTART: () => `<tr style="width: 100%;">`,
27
+ rowSTART: () => `<tr style="width: 100%;vertical-align: top;">`,
28
28
  rowEND: () => `</tr>`,
29
29
  //column
30
30
  columnSTART: (width) => `<td style="padding: 3px; width: ${width};">`,
@@ -37,4 +37,4 @@ export const HtmlTemplates = {
37
37
  spanValueEND: () => `</span>`,
38
38
  //#endregion
39
39
  };
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC10ZW1wbGF0ZS5jb25zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9jb25zdHMvaHRtbC10ZW1wbGF0ZS5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxpQkFBaUI7QUFDakIsTUFBTSxjQUFjLEdBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7U0FnQnZCLENBQUE7QUFDVCxpR0FBaUc7QUFDakcsWUFBWTtBQUVaLGlDQUFpQztBQUNqQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDM0IsT0FBTztJQUNQLFVBQVUsRUFBRyxHQUFHLEVBQUUsQ0FBQyw2SkFBNko7SUFDaEwsUUFBUSxFQUFHLEdBQUcsRUFBRSxDQUFDLDhGQUE4RjtJQUUvRyxLQUFLO0lBQ0wsUUFBUSxFQUFHLEdBQUcsRUFBRSxDQUFDLDJCQUEyQjtJQUM1QyxNQUFNLEVBQUcsR0FBRyxFQUFFLENBQUMsT0FBTztJQUV0QixRQUFRO0lBQ1IsV0FBVyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxtQ0FBbUMsS0FBSyxLQUFLO0lBQzdFLFNBQVMsRUFBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPO0lBRXpCLGVBQWU7SUFDZixpQkFBaUIsRUFBRyxHQUFHLEVBQUUsQ0FBQyxtREFBbUQ7SUFDN0UsZUFBZSxFQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVM7SUFFakMsWUFBWTtJQUNaLGNBQWMsRUFBRyxHQUFHLEVBQUUsQ0FBQyxrREFBa0Q7SUFDekUsWUFBWSxFQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVM7SUFDOUIsWUFBWTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8jcmVnaW9uIGV4YW1wbGVcclxuY29uc3QgdGVtcGxhdGVTYW1wbGUgOiBzdHJpbmcgPSBgXHJcbjx0YWJsZSBzdHlsZT1cImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgYm9yZGVyOiAxcHggc29saWQgIzAwMDsgd2lkdGg6IDEwMCU7XCI+XHJcbjx0cj5cclxuPHRkIHN0eWxlPVwicGFkZGluZzogMTBweDsgd2lkdGg6IDMzLjMzJTtcIj5cclxuICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlByb3BlcnR5IDQ6PC9zcGFuPlxyXG4gIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj5WYWx1ZSA0PC9zcGFuPlxyXG48L3RkPlxyXG48dGQgc3R5bGU9XCJwYWRkaW5nOiAxMHB4OyB3aWR0aDogMzMuMzMlO1wiPlxyXG4gIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+UHJvcGVydHkgNTo8L3NwYW4+XHJcbiAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPlZhbHVlIDU8L3NwYW4+XHJcbjwvdGQ+XHJcbjx0ZCBzdHlsZT1cInBhZGRpbmc6IDEwcHg7IHdpZHRoOiAzMy4zMyU7XCI+XHJcbiAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj5Qcm9wZXJ0eSA2Ojwvc3Bhbj5cclxuICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCI+VmFsdWUgNjwvc3Bhbj5cclxuPC90ZD5cclxuPC90cj5cclxuPC90YWJsZT5gXHJcbi8vbm90ZSA6IHUgY2FuIHRyeSB0aGlzIHNhbXBsZSBhdCBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvdHJ5aXQuYXNwP2ZpbGVuYW1lPXRyeWh0bWxfaW50cm9cclxuLy8jZW5kcmVnaW9uXHJcblxyXG4vLyNyZWdpb24gdXNlZnVsIGNvbnN0cyB0ZW1wbGF0ZXNcclxuZXhwb3J0IGNvbnN0IEh0bWxUZW1wbGF0ZXMgPSB7XHJcbiAgLy90YWJsZVxyXG4gIHRhYmxlU1RBUlQgOiAoKSA9PiBgPHRhYmxlIHN0eWxlPVwiYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBib3JkZXI6IDFweCBzb2xpZCAjMDAwOyB3aWR0aDogMTAwJTtcIj48dGJvZHkgc3R5bGU9XCJwYWRkaW5nOiAzcHg7ZGlzcGxheTogYmxvY2s7XCI+YCxcclxuICB0YWJsZUVORCA6ICgpID0+IGA8L3Rib2R5PjwvdGFibGU+PHRhYmxlIHN0eWxlPVwiaGVpZ2h0OiA1cHg7XCI+PHRyPjx0ZCBzdHlsZT1cImhlaWdodDogNXB4O1wiPiA8L3RkPjwvdHI+PC90YWJsZT5gLFxyXG5cclxuICAvL3Jvd1xyXG4gIHJvd1NUQVJUIDogKCkgPT4gYDx0ciBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPmAsXHJcbiAgcm93RU5EIDogKCkgPT4gYDwvdHI+YCxcclxuXHJcbiAgLy9jb2x1bW5cclxuICBjb2x1bW5TVEFSVDogKHdpZHRoOiBzdHJpbmcpID0+IGA8dGQgc3R5bGU9XCJwYWRkaW5nOiAzcHg7IHdpZHRoOiAke3dpZHRofTtcIj5gLFxyXG4gIGNvbHVtbkVORCA6ICgpID0+IGA8L3RkPmAsXHJcblxyXG4gIC8vcHJvcGVydHkgc3BhblxyXG4gIHNwYW5Qcm9wZXJ0eVNUQVJUIDogKCkgPT4gYDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogOXB0O1wiPmAsXHJcbiAgc3BhblByb3BlcnR5RU5EIDogKCkgPT4gYDwvc3Bhbj5gLFxyXG5cclxuICAvL3ZhbHVlIHNwYW5cclxuICBzcGFuVmFsdWVTVEFSVCA6ICgpID0+IGA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7IGZvbnQtc2l6ZTogOXB0O1wiPmAsXHJcbiAgc3BhblZhbHVlRU5EIDogKCkgPT4gYDwvc3Bhbj5gLFxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC10ZW1wbGF0ZS5jb25zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9jb25zdHMvaHRtbC10ZW1wbGF0ZS5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxpQkFBaUI7QUFDakIsTUFBTSxjQUFjLEdBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7U0FnQnZCLENBQUE7QUFDVCxpR0FBaUc7QUFDakcsWUFBWTtBQUVaLGlDQUFpQztBQUNqQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDM0IsT0FBTztJQUNQLFVBQVUsRUFBRyxHQUFHLEVBQUUsQ0FBQyw2SkFBNko7SUFDaEwsUUFBUSxFQUFHLEdBQUcsRUFBRSxDQUFDLDhGQUE4RjtJQUUvRyxLQUFLO0lBQ0wsUUFBUSxFQUFHLEdBQUcsRUFBRSxDQUFDLCtDQUErQztJQUNoRSxNQUFNLEVBQUcsR0FBRyxFQUFFLENBQUMsT0FBTztJQUV0QixRQUFRO0lBQ1IsV0FBVyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxtQ0FBbUMsS0FBSyxLQUFLO0lBQzdFLFNBQVMsRUFBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPO0lBRXpCLGVBQWU7SUFDZixpQkFBaUIsRUFBRyxHQUFHLEVBQUUsQ0FBQyxtREFBbUQ7SUFDN0UsZUFBZSxFQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVM7SUFFakMsWUFBWTtJQUNaLGNBQWMsRUFBRyxHQUFHLEVBQUUsQ0FBQyxrREFBa0Q7SUFDekUsWUFBWSxFQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVM7SUFDOUIsWUFBWTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8jcmVnaW9uIGV4YW1wbGVcclxuY29uc3QgdGVtcGxhdGVTYW1wbGUgOiBzdHJpbmcgPSBgXHJcbjx0YWJsZSBzdHlsZT1cImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgYm9yZGVyOiAxcHggc29saWQgIzAwMDsgd2lkdGg6IDEwMCU7XCI+XHJcbjx0ciBzdHlsZT1cIndpZHRoOiAxMDAlO3ZlcnRpY2FsLWFsaWduOiB0b3A7XCI+XHJcbjx0ZCBzdHlsZT1cInBhZGRpbmc6IDEwcHg7IHdpZHRoOiAzMy4zMyU7XCI+XHJcbiAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj5Qcm9wZXJ0eSA0Ojwvc3Bhbj5cclxuICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCI+VmFsdWUgNDwvc3Bhbj5cclxuPC90ZD5cclxuPHRkIHN0eWxlPVwicGFkZGluZzogMTBweDsgd2lkdGg6IDMzLjMzJTtcIj5cclxuICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlByb3BlcnR5IDU6PC9zcGFuPlxyXG4gIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj5WYWx1ZSA1PC9zcGFuPlxyXG48L3RkPlxyXG48dGQgc3R5bGU9XCJwYWRkaW5nOiAxMHB4OyB3aWR0aDogMzMuMzMlO1wiPlxyXG4gIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+UHJvcGVydHkgNjo8L3NwYW4+XHJcbiAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPlZhbHVlIDY8L3NwYW4+XHJcbjwvdGQ+XHJcbjwvdHI+XHJcbjwvdGFibGU+YFxyXG4vL25vdGUgOiB1IGNhbiB0cnkgdGhpcyBzYW1wbGUgYXQgaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL3RyeWl0LmFzcD9maWxlbmFtZT10cnlodG1sX2ludHJvXHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuLy8jcmVnaW9uIHVzZWZ1bCBjb25zdHMgdGVtcGxhdGVzXHJcbmV4cG9ydCBjb25zdCBIdG1sVGVtcGxhdGVzID0ge1xyXG4gIC8vdGFibGVcclxuICB0YWJsZVNUQVJUIDogKCkgPT4gYDx0YWJsZSBzdHlsZT1cImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgYm9yZGVyOiAxcHggc29saWQgIzAwMDsgd2lkdGg6IDEwMCU7XCI+PHRib2R5IHN0eWxlPVwicGFkZGluZzogM3B4O2Rpc3BsYXk6IGJsb2NrO1wiPmAsXHJcbiAgdGFibGVFTkQgOiAoKSA9PiBgPC90Ym9keT48L3RhYmxlPjx0YWJsZSBzdHlsZT1cImhlaWdodDogNXB4O1wiPjx0cj48dGQgc3R5bGU9XCJoZWlnaHQ6IDVweDtcIj4gPC90ZD48L3RyPjwvdGFibGU+YCxcclxuXHJcbiAgLy9yb3dcclxuICByb3dTVEFSVCA6ICgpID0+IGA8dHIgc3R5bGU9XCJ3aWR0aDogMTAwJTt2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPmAsXHJcbiAgcm93RU5EIDogKCkgPT4gYDwvdHI+YCxcclxuXHJcbiAgLy9jb2x1bW5cclxuICBjb2x1bW5TVEFSVDogKHdpZHRoOiBzdHJpbmcpID0+IGA8dGQgc3R5bGU9XCJwYWRkaW5nOiAzcHg7IHdpZHRoOiAke3dpZHRofTtcIj5gLFxyXG4gIGNvbHVtbkVORCA6ICgpID0+IGA8L3RkPmAsXHJcblxyXG4gIC8vcHJvcGVydHkgc3BhblxyXG4gIHNwYW5Qcm9wZXJ0eVNUQVJUIDogKCkgPT4gYDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogOXB0O1wiPmAsXHJcbiAgc3BhblByb3BlcnR5RU5EIDogKCkgPT4gYDwvc3Bhbj5gLFxyXG5cclxuICAvL3ZhbHVlIHNwYW5cclxuICBzcGFuVmFsdWVTVEFSVCA6ICgpID0+IGA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7IGZvbnQtc2l6ZTogOXB0O1wiPmAsXHJcbiAgc3BhblZhbHVlRU5EIDogKCkgPT4gYDwvc3Bhbj5gLFxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
@@ -439,10 +439,7 @@ export class TsiSearchComboComponent extends TsiInputBase {
439
439
  if (!this._bindChangeEmitted) {
440
440
  this._bindChangeEmitted = true;
441
441
  }
442
- let selectedElement = this.datasource.find(e => e.id == this.bind);
443
- if (selectedElement) {
444
- this.selectedLabelChange.emit(selectedElement.label);
445
- }
442
+ this._handleSelectedElementsLabelChange();
446
443
  }
447
444
  searchValueChanged(searchValue) {
448
445
  if (this.isFiltered && !this._isInputDatasource) {
@@ -795,6 +792,51 @@ export class TsiSearchComboComponent extends TsiInputBase {
795
792
  return false;
796
793
  return element.scrollWidth > element.clientWidth;
797
794
  }
795
+ /**
796
+ * Computes and emits the label corresponding to the currently selected element(s).
797
+ *
798
+ * This method inspects the current `bind` value and the `datasource` to determine
799
+ * the label(s) of the selected element(s). The behavior differs depending on whether
800
+ * the component is in single or multiple selection mode:
801
+ *
802
+ * - **Multiple selection (`multiple = true`)**
803
+ * - If exactly one element is selected, its label is emitted.
804
+ * - If multiple elements are selected, their labels are formatted as a string
805
+ * array representation: `["Label1", "Label2", ...]`.
806
+ *
807
+ * - **Single selection (`multiple = false`)**
808
+ * - The label of the selected element is emitted if it exists in the datasource.
809
+ *
810
+ * If a valid label is resolved, the method emits the result through
811
+ * the `selectedLabelChange` event emitter.
812
+ *
813
+ * @remarks
814
+ * - `bind` represents the selected id (single mode) or an array of ids (multiple mode).
815
+ * - `datasource` is expected to contain elements with at least `id` and `label` properties.
816
+ *
817
+ * @private
818
+ */
819
+ _handleSelectedElementsLabelChange() {
820
+ let selectionLabel = '';
821
+ if (this.multiple && Array.isArray(this.bind)) {
822
+ let selectedElements = this.datasource.filter(e => this.bind.includes(e.id));
823
+ if (selectedElements.length == 1) {
824
+ selectionLabel = selectedElements[0].label;
825
+ }
826
+ else if (selectedElements.length > 1) {
827
+ selectionLabel = `[${selectedElements.map(e => `"${e.label}"`).join(', ')}]`;
828
+ }
829
+ }
830
+ else {
831
+ let selectedElement = this.datasource.find(e => e.id == this.bind);
832
+ if (selectedElement) {
833
+ selectionLabel = selectedElement.label;
834
+ }
835
+ }
836
+ if (selectionLabel) {
837
+ this.selectedLabelChange.emit(selectionLabel);
838
+ }
839
+ }
798
840
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiSearchComboComponent, deps: [{ token: i1.EntityConfigurationService }, { token: i2.TsiModalService }, { token: i3.TsiNotificationService }, { token: i4.HttpClient }, { token: i5.LocalizePipe }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
799
841
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: { elementSourceUrl: "elementSourceUrl", listSourceUrl: "listSourceUrl", idField: ["id-field", "idField"], labelField: ["label-field", "labelField"], multiple: "multiple", sort: "sort", showClear: "showClear", reloadDataSource: "reloadDataSource", isFiltered: "isFiltered", selectedLabel: "selectedLabel", maxWidth: "maxWidth", businessClass: "businessClass", comboType: "comboType", statusMetadata: "statusMetadata", currentRowItem: "currentRowItem", datasource: "datasource", bind: "bind", maxSelectedLabels: "maxSelectedLabels", tooltipMaxDisplayedItems: "tooltipMaxDisplayedItems", showSearchButton: "showSearchButton", showAddButton: "showAddButton", showConsultButton: "showConsultButton", showUpdateButton: "showUpdateButton" }, outputs: { bindChange: "bindChange", dataSourceLoaded: "datasource-loaded", init: "init", isLoaded: "isLoaded", selectedLabelChange: "selectedLabelChange", onClick: "onClick", onSearchButtonClick: "onSearchButtonClick" }, host: { listeners: { "keydown.enter": "onEnterKey($event)" } }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"!multiple; else multiSelect\" class=\"flex\">\r\n <p-dropdown \r\n [options]=\"datasource\"\r\n [(ngModel)]=\"bind\"\r\n optionLabel=\"label\"\r\n optionValue=\"id\"\r\n [lazy]=\"!dataLoaded\"\r\n [loading]=\"!dataLoaded\"\r\n filterBy=\"label\" \r\n [filter]=\"true\" \r\n [autoDisplayFirst]=\"false\"\r\n [required]=\"isRequired\"\r\n [showClear]=\"showClear\" \r\n [disabled]=\"disabled\" \r\n (onChange)=\"bindValueChanged($event)\" \r\n (onHide)=\"onHide()\" (onShow)=\"onOpen()\" (onFilter)=\"searchValueChanged($event)\" (onClear)=\"clearSelectedValue()\" (onClick)=\"onSearchComboClick($event)\"\r\n [style]=\"{'max-width': maxWidth, 'width':'100%', 'height': '1.7rem'}\"\r\n [ngClass]=\"isAr ? 'p-dropdown-clear-iconAR': 'p-dropdown-clear-iconFR'\"\r\n [placeholder]=\"placeHolder\" \r\n class=\"{{myStyleClass}}\" \r\n styleClass=\"{{myStyleClass}} border-radius-7 {{validationStatusCssClass}}\" \r\n appendTo=\"body\">\r\n\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"dropdown-header flex gap-1 pt-2 px-2\">\r\n <Tsi-Button *ngIf=\"showSearchButton\" type=\"button\" icon=\"pi pi-search\" title=\"title-search-combo-Ouvrir\"\r\n styleClass=\"p-button-primary hover:shadow-6 h-2rem p-button-icon-only\" (click)=\"openSearchDialog()\">\r\n </Tsi-Button>\r\n\r\n <Tsi-Button *ngIf=\"showAddButton\" type=\"button\" icon=\"pi pi-plus\" title=\"title-search-combo-Ajouter\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" (click)=\"addElement()\">\r\n </Tsi-Button>\r\n\r\n <Tsi-Button *ngIf=\"showAdvancedSearchButton\" type=\"button\" icon=\"pi pi-sort-amount-down\"\r\n title=\"Lister les articles pivot\u00E9s\" styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"openAdvancedSearchComponent()\">\r\n </Tsi-Button>\r\n\r\n <Tsi-Button *ngIf=\"showConsultButton\" type=\"button\" icon=\"pi pi-eye\" title=\"title-search-combo-Consulter\"\r\n styleClass=\"p-button-primary hover:shadow-6 h-2rem p-button-icon-only\" (click)=\"consultElement()\">\r\n </Tsi-Button>\r\n\r\n <Tsi-Button *ngIf=\"showUpdateButton\" type=\"button\" icon=\"pi pi-pencil\" title=\"title-search-combo-update\"\r\n styleClass=\"p-button-primary hover:shadow-6 h-2rem p-button-icon-only\" (click)=\"updateElement()\">\r\n </Tsi-Button>\r\n\r\n </div>\r\n </ng-template>\r\n \r\n\r\n <ng-template pTemplate=\"empty\">\r\n <div class=\"flex align-items-center justify-content-center py-3 gap-2\">\r\n \r\n <ng-container *ngIf=\"!isApiError; else apiError\">\r\n\r\n <div\r\n *ngIf=\"isDatasourceEmpty && !isFiltering\"\r\n class=\"flex align-items-center gap-2 text-gray-500\">\r\n <i class=\"pi pi-info-circle\"></i>\r\n <span>{{ 'search_combo_no_element' | localize }}</span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"isNoResultAfterFilter\"\r\n class=\"flex align-items-center gap-2 text-gray-500\">\r\n <i class=\"pi pi-info-circle\"></i>\r\n <span>{{ 'search_combo_no_result' | localize }}</span>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-template #apiError>\r\n <i class=\"pi pi-exclamation-triangle text-orange-500\"></i>\r\n <span>\r\n {{ 'search_combo_load_error' | localize }}\r\n </span>\r\n </ng-template>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"selectedItem\" let-selectedOption>\r\n <div pTooltip=\"{{selectedOption.label}}\" tooltipPosition=\"top\" tooltipStyleClass=\"custom-tooltip\">\r\n <ng-container *ngIf=\"isStatusCombo && statusMetadata; else normalSelected\">\r\n <ng-container *ngIf=\"selectedOption && getStatusOption(selectedOption.label) as opt\">\r\n <span\r\n class=\"font-bold status-badge\"\r\n [style.background-color]=\"lightenColor(opt.colorHex)\"\r\n [style.color]=\"getReadableTextColor(opt.colorHex)\">\r\n {{ selectedOption.label }}\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #normalSelected>\r\n <span>{{ selectedOption.label }}</span>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template let-target pTemplate=\"item\">\r\n <div pTooltip=\"{{target.label}}\" tooltipPosition=\"top\" tooltipStyleClass=\"custom-tooltip\">\r\n\r\n <ng-container *ngIf=\"isStatusCombo && statusMetadata; else normalOption\">\r\n <ng-container *ngIf=\"getStatusOption(target.label) as opt\">\r\n <span\r\n class=\"font-bold status-badge\"\r\n [style.background-color]=\"lightenColor(opt.colorHex)\"\r\n [style.color]=\"getReadableTextColor(opt.colorHex)\"\r\n [style.padding-top]=\"'0.1rem'\"\r\n [style.padding-bottom]=\"'0.1rem'\"\r\n >\r\n {{target.label}}\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #normalOption>\r\n <span>{{target.label}}</span>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n </p-dropdown>\r\n\r\n <!-- Bubble Info -->\r\n <Tsi-Bubble-Info [infoText]=\"infoText\"></Tsi-Bubble-Info>\r\n\r\n</div>\r\n\r\n<ng-template #multiSelect>\r\n <p-multiSelect\r\n #multiSelectElement\r\n [options]=\"grouppedDataSource\"\r\n [group]=\"true\" \r\n [ngModel]=\"bind\"\r\n [optionLabel]=\"'label'\"\r\n [optionValue]=\"'id'\"\r\n [loading]=\"!dataLoaded\"\r\n [filterBy]=\"'label'\"\r\n [filter]=\"true\"\r\n [required]=\"isRequired\"\r\n [showClear]=\"showClear\"\r\n [disabled]=\"disabled\"\r\n [selectedItemsLabel]=\"'shared_component_multiselect_selected_items_count' | localize\"\r\n [maxSelectedLabels]=\"maxSelectedLabels\"\r\n [style]=\"{'max-width': maxWidth, 'width':'100%', 'height': '1.7rem'}\"\r\n [placeholder]=\"placeHolder\"\r\n [ngClass]=\"isAr ? 'p-dropdown-clear-iconAR': 'p-dropdown-clear-iconFR'\"\r\n class=\"{{myStyleClass}}\" \r\n styleClass=\"{{myStyleClass}} border-radius-7 {{validationStatusCssClass}}\"\r\n panelStyleClass=\"tsi-multiselect-panel\"\r\n appendTo=\"body\"\r\n (ngModelChange)=\"onMultiSelectModelChange($event)\"\r\n (onPanelShow)=\"onOpen()\"\r\n (onFilter)=\"searchValueChanged($event)\"\r\n (onClick)=\"onSearchComboClick($event)\"\r\n [pTooltip]=\"multiSelectElement?.selectedOptions?.length ? multiSelectTooltipContent : undefined\" tooltipPosition=\"bottom\">\r\n\r\n <ng-template pTemplate=\"item\" let-option>\r\n <div #labelRef class=\"tsi-multiselect-option-label\" tooltipPosition=\"bottom\" tooltipAppendTo=\"body\" [pTooltip]=\"isTextOverflowing(labelRef) ? option.label : null\">\r\n {{ option.label }}\r\n </div>\r\n </ng-template> \r\n </p-multiSelect>\r\n\r\n <ng-template #multiSelectTooltipContent>\r\n <div class=\"p-2\">\r\n <!-- If there are selected items -->\r\n <ng-container *ngIf=\"multiSelectElement?.selectedOptions?.length; else noItems\">\r\n\r\n <div class=\"font-semibold mb-1\">\r\n {{ 'shared_component_multiselect_selected_items_title' | localize }}\r\n ({{ multiSelectElement.selectedOptions.length }})\r\n </div>\r\n\r\n <ul class=\"m-0 pl-3\">\r\n <!-- Show only first 10 items -->\r\n <li *ngFor=\"let option of getTopSelectedOptions(multiSelectElement)\">\r\n {{ option.label }}\r\n </li>\r\n </ul>\r\n\r\n <!-- Show message if more than 10 -->\r\n <div *ngIf=\"multiSelectElement.selectedOptions.length > 10\" class=\"text-sm mt-1 text-gray-500\">\r\n {{ multiSelectElement.selectedOptions.length - 10 }}\r\n {{ 'shared_component_multiselect_selected_items_more_message' | localize }}\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- If no items selected -->\r\n <ng-template #noItems>\r\n <span class=\"text-sm text-500\">\r\n {{ 'shared_component_multiselect_selected_items_empty' | localize }}\r\n </span>\r\n </ng-template>\r\n\r\n </div>\r\n </ng-template>\r\n</ng-template>", styles: [".ng-select .ng-select-container .ng-value-container .ng-input>input{z-index:10!important}::ng-deep .p-icon-wrapper{align-items:center!important;justify-content:center!important}::ng-deep .p-dropdown-clear-icon{position:unset!important;top:unset!important;margin-top:unset!important}::ng-deep .p-dropdown-panel{max-width:30rem!important}::ng-deep .p-dropdown-clear-iconAR svg{left:0!important}::ng-deep .p-dropdown-clear-iconFR svg{right:2.5rem;left:auto}::ng-deep .custom-tooltip{max-width:300px;white-space:normal;word-wrap:break-word}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-width:max-content;width:100%;text-align:center;white-space:nowrap;border-radius:.4rem;font-weight:600;line-height:1.2;color:#fff;box-shadow:0 1px 2px #0000000d;transition:all .2s ease-in-out;cursor:default;transform-origin:top center;border-top-left-radius:inherit;border-bottom-right-radius:inherit}.status-badge:hover{transform:scale(1.06);box-shadow:0 2px 4px #0000001a;filter:brightness(1.2)}::ng-deep .tsi-component.p-multiselect .p-multiselect-label{padding:.25rem .75rem!important}.p-multiselect-panel .p-multiselect-items .p-multiselect-item{gap:.5rem}.tsi-multiselect-panel{max-width:25rem!important}.tsi-multiselect-panel .tsi-multiselect-option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i11.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i12.TsiBubbleInfoComponent, selector: "Tsi-Bubble-Info", inputs: ["infoText"] }, { kind: "component", type: i13.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "pipe", type: i14.LocalizePipe, name: "localize" }] }); }
800
842
  }
@@ -873,4 +915,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
873
915
  }], showUpdateButton: [{
874
916
  type: Input
875
917
  }] } });
876
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVL0UsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFlBQWlCO0lBNkI1RCxVQUFVLENBQUMsS0FBVTtRQUNuQixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtB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LE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQXNGRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHJ0bE1vZGVLZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2Fscy5jb25zdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgR3JpZFNlbGVjdGlvbk1vZGUsIE1vZGFsU2l6ZUVudW0gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IENvbWJvU3RhdHVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgU3RhdHVzTWV0YWRhdGFSZXNwb25zZSwgU3RhdHVzT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vZW50aXR5LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktYmFzZS90c2ktaW5wdXQtYmFzZS90c2ktaW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHdWlkIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvZ3VpZC5oZWxwZXInO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy90eXBlLXJlZ2lzdHJ5LmhlbHBlcic7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW1Hcm91cCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktU2VhcmNoLUNvbWJvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpU2VhcmNoQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBUc2lJbnB1dEJhc2U8YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2lzSW5wdXREYXRhc291cmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZ290dGVuRGF0YXNvdXJjZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9iaW5kPzogYW55O1xyXG4gIHByaXZhdGUgX2JpbmRDaGFuZ2VFbWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFJvd0l0ZW0/OiBhbnk7XHJcbiAgcHVibGljIGRhdGFMb2FkZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkPzogYW55O1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZmVyZW5jZT86IER5bmFtaWNEaWFsb2dSZWYgfCB1bmRlZmluZWQ7XHJcbiAgaXNBcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICogR3JvdXBlZCBkYXRhc291cmNlIGZvciB0aGUgTXVsdGlTZWxlY3QgY29tcG9uZW50LlxyXG4gKiBFYWNoIGdyb3VwIGNvbnRhaW5zIGEgbGFiZWwsIGEgdmFsdWUsIGFuZCBhbiBhcnJheSBvZiBpdGVtcy5cclxuICogXHJcbiAqIEV4YW1wbGUgc3RydWN0dXJlOlxyXG4gKiBbXHJcbiAqICAgeyBsYWJlbDogJ1NlbGVjdGVkIGl0ZW1zJywgdmFsdWU6ICdzZWxlY3RlZC1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9LFxyXG4gKiAgIHsgbGFiZWw6ICdBdmFpbGFibGUgaXRlbXMnLCB2YWx1ZTogJ2F2YWlsYWJsZS1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9XHJcbiAqIF1cclxuICovXHJcbiAgcHJvdGVjdGVkIGdyb3VwcGVkRGF0YVNvdXJjZTogU2VsZWN0SXRlbUdyb3VwW10gPSBbXTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgb25FbnRlcktleShldmVudDogYW55KSB7XHJcbiAgICAvLyBIYW5kbGUgdGhlIGVudGVyIGtleSBldmVudCBoZXJlXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5wdXRzXHJcbiAgQElucHV0KFwiZWxlbWVudFNvdXJjZVVybFwiKSBlbGVtZW50U291cmNlVXJsPzogc3RyaW5nO1xyXG4gIEBJbnB1dChcImxpc3RTb3VyY2VVcmxcIikgbGlzdFNvdXJjZVVybD86IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xyXG4gIEBJbnB1dChcImlkLWZpZWxkXCIpIGlkRmllbGQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KFwibGFiZWwtZmllbGRcIikgbGFiZWxGaWVsZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoXCJtdWx0aXBsZVwiKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dChcInNvcnRcIikgc29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJlbG9hZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpc0ZpbHRlcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjb21ib1R5cGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzTWV0YWRhdGE/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50Um93SXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSb3dJdGVtO1xyXG4gIH1cclxuXHJcbiAgc2V0IGN1cnJlbnRSb3dJdGVtKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRSb3dJdGVtID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBnZXQgZGF0YXNvdXJjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGFzb3VyY2UoZGF0YXNvdXJjZTogYW55W10pIHtcclxuICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpXHJcbiAgICAgIHRoaXMuX2lzSW5wdXREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dChcImJpbmRcIikgZ2V0IGJpbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmluZDtcclxuICB9XHJcblxyXG4gIHNldCBiaW5kKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9iaW5kID0gbnVsbDtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2JpbmQgPT09IHZhbHVlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fYmluZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbnB1dEZpZWxkID0gdmFsdWU7XHJcbiAgICBcclxuICAgIHRoaXMuX29uQmluZFNldCgpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbSBsYWJlbHMgdG8gZGlzcGxheSBkaXJlY3RseSBpbiB0aGUgTXVsdGlTZWxlY3QgaW5wdXQgZmllbGQuXHJcbiAqIElmIHRoZSB1c2VyIHNlbGVjdHMgbW9yZSB0aGFuIHRoaXMgbnVtYmVyLCB0aGUgY29tcG9uZW50IGNhbiBzaG93IGEgXCIrTlwiIG1lc3NhZ2UgaW5zdGVhZC5cclxuICogQHR5cGUge251bWJlcn1cclxuICogQGRlZmF1bHQgMVxyXG4gKi9cclxuICBASW5wdXQoKSBtYXhTZWxlY3RlZExhYmVsczogbnVtYmVyID0gMTtcclxuICBcclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gZGlzcGxheSBpbnNpZGUgdGhlIHRvb2x0aXAuXHJcbiAqIElmIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgdG9vbHRpcCBjYW4gZGlzcGxheSBhIFwiK04gbW9yZVwiIG1lc3NhZ2UuXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBkZWZhdWx0IDEwXHJcbiAqL1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtczogbnVtYmVyID0gMTA7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIGJpbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dChcImRhdGFzb3VyY2UtbG9hZGVkXCIpIGRhdGFTb3VyY2VMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvU3RhdHVzTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib1N0YXR1c01vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZExhYmVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9sb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgcHJvdGVjdGVkIF9jZFJlZj86IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgc3VwZXIoX2NkUmVmKVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBsaWZlY3ljbGUgaG9va3NcclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNTdGF0dXNDb21ibygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbWJvVHlwZSA9PT0gJ3N0YXR1cyc7XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDcwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBsZXQgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIHIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IociArICgyNTUgLSByKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGcgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoZyArICgyNTUgLSBnKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoYiArICgyNTUgLSBiKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuXHJcbiAgICBjb25zdCBuZXdIZXggPVxyXG4gICAgICAnIycgK1xyXG4gICAgICBbciwgZywgYl1cclxuICAgICAgICAubWFwKHggPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgICAuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0hleDtcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVGV4dENvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJ2JsYWNrJztcclxuXHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuXHJcbiAgICByZXR1cm4gYnJpZ2h0bmVzcyA+IDIzMCA/ICdibGFjaycgOiBgIyR7aGV4fWA7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNPcHRpb24odmFsdWU6IHN0cmluZyk6IFN0YXR1c09wdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNNZXRhZGF0YT8ub3B0aW9ucy5maW5kKG8gPT4gby50cmFuc2xhdGVkTGFiZWwgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmNoZWNrSWZBZHZhbmNlZFNlYXJjaENvbXBvbmVudEV4aXN0cygpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGVja0lmRm9ybU5hbWVFeGlzdHMoKTtcclxuICAgIHRoaXMuX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk7XHJcbiAgICB0aGlzLl9pbml0UmVsb2FkRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpO1xyXG4gICAgYXdhaXQgdGhpcy5faW5pdGlhbExvYWREYXRhKCk7XHJcbiAgICBcclxuICAgIGxldCBsYW5ndWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShydGxNb2RlS2V5cy5ydGxNb2RlRW5hYmxlZCk7XHJcbiAgICBcclxuICAgIGlmIChsYW5ndWUgJiYgSlNPTi5wYXJzZShsYW5ndWUpKSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IHRydWVcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQXIgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLm1heFdpZHRoICsgJ3JlbSc7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuICBASW5wdXQoKSBzaG93U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q29uc3VsdEJ1dHRvbj86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1VwZGF0ZUJ1dHRvbj86IGJvb2xlYW47XHJcbiAgc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBjaGVja0lmQWR2YW5jZWRTZWFyY2hDb21wb25lbnRFeGlzdHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG5cclxuICAgICAgbmV4dDogKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSAhIWVudGl0eT8uYWR2YW5jZWRTZWFyY2hDb21wb25lbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkZvcm1OYW1lRXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0FkZEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaGFzRm9ybSA9ICEhZW50aXR5Py5mb3JtTmFtZTtcclxuXHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic2hvd0FkZEJ1dHRvblwiLCB0aGlzLnNob3dBZGRCdXR0b24pXHJcblxyXG4gICAgICAgICAgaWYgKCFoYXNGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IHRoaXMuc2hvd0FkZEJ1dHRvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gdGhpcy5zaG93QWRkQnV0dG9uO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FkZEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dVcGRhdGVCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvcGVuQWR2YW5jZWRTZWFyY2hDb21wb25lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSAhIWVudGl0eT8uYWR2YW5jZWRTZWFyY2hDb21wb25lbnQ7XHJcbiAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICBpc0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlLlNpbmdsZSxcclxuICAgICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCxcclxuICAgICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KSwgY29uZik7XHJcblxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2VsZWN0ZWRQZXJzb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRQZXJzb24pIHtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmQgPSBzZWxlY3RlZFBlcnNvbjtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2VhcmNoRGlhbG9nKCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBpc0FkdmFuY2VkU2VhcmNoOiB0cnVlLCBzZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsIG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULCBjdXN0b21EYXRhOiBlbnRpdHkgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5Lmxpc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkubGlzdENvbXBvbmVudCksIGNvbmYpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2VsZWN0ZWRQZXJzb246IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUGVyc29uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kID0gc2VsZWN0ZWRQZXJzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEVsZW1lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7IG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIGN1c3RvbURhdGE6IGVudGl0eSB9LFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNhdmVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzYXZlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgc2F2ZWRFbGVtZW50ICE9PSBudWxsICYmICd1aWQnIGluIHNhdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kID0gc2F2ZWRFbGVtZW50Py51aWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzYXZlZEVsZW1lbnQgPT09ICdzdHJpbmcnICYmIEd1aWQuaXNWYWxpZChzYXZlZEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmQgPSBzYXZlZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0RhdGFzb3VyY2VFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFMb2FkZWQgJiYgKCF0aGlzLmRhdGFzb3VyY2UgfHwgdGhpcy5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzTG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICB1cGRhdGVFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJpbmQpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwiQXVjdW4gw6lsw6ltZW50IHPDqWxlY3Rpb25uw6kgcG91ciBsYSBtaXNlIMOgIGpvdXIuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuRURJVCxcclxuICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICBpZDogdGhpcy5iaW5kXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSwgY29uZik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRFbGVtZW50ID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkRWxlbWVudCAhPT0gbnVsbCAmJiAndWlkJyBpbiB1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZCA9IHVwZGF0ZWRFbGVtZW50LnVpZDtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB1cGRhdGVkRWxlbWVudCA9PT0gJ3N0cmluZycgJiYgR3VpZC5pc1ZhbGlkKHVwZGF0ZWRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZCA9IHVwZGF0ZWRFbGVtZW50O1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZENoYW5nZS5lbWl0KHRoaXMuYmluZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3VsdEVsZW1lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYmluZCkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJBdWN1biDDqWzDqW1lbnQgc8OpbGVjdGlvbm7DqSBwb3VyIGxhIGNvbnN1bHRhdGlvbi5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmZvcm1OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULFxyXG4gICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmJpbmRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFxyXG4gICAgICAgICAgVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcyBkJ2VudGl0w6kgOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgYmluZFZhbHVlQ2hhbmdlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmJpbmQgPSBldmVudC52YWx1ZTtcclxuICAgIGlmICh0aGlzLmJpbmQgIT09IG51bGwgJiYgdGhpcy5iaW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmJpbmRcclxuICAgIH1cclxuICAgIHRoaXMuYmluZENoYW5nZS5lbWl0KGV2ZW50LnZhbHVlKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2JpbmRDaGFuZ2VFbWl0dGVkKSB7XHJcbiAgICAgIHRoaXMuX2JpbmRDaGFuZ2VFbWl0dGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRFbGVtZW50OiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UuZmluZChlID0+IGUuaWQgPT0gdGhpcy5iaW5kKTtcclxuICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoc2VsZWN0ZWRFbGVtZW50LmxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlYXJjaFZhbHVlQ2hhbmdlZChzZWFyY2hWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkICYmICF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKHNlYXJjaFZhbHVlLmZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW4oKSB7XHJcbiAgICB0aGlzLmlzRmlsdGVyaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCB8fCB0eXBlb2YgdGhpcy5saXN0U291cmNlVXJsID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICB0aGlzLl9sb2FkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTm9SZXN1bHRBZnRlckZpbHRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCAmJlxyXG4gICAgICB0aGlzLmRhdGFzb3VyY2UubGVuZ3RoID09PSAwICYmXHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgJiZcclxuICAgICAgIXRoaXMuaGFzTG9hZEVycm9yXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25IaWRlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLmJpbmQgPSB0aGlzLl9zZWxlY3RlZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB1bmRlZmluZWRcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9sb2FkRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoa2V5d29yZDogc3RyaW5nID0gXCJcIikge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCwgdGhpcy5fZ2VuZXJhdGVIdHRwUGFyYW1zKGtleXdvcmQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCkge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSlcclxuICAgIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNMb2FkRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9odHRwQ2xpZW50LmdldCh1cmwsIHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgZGF0YXNvdXJjZScsIGVycm9yKTtcclxuICAgICAgICB0aGlzLmhhc0xvYWRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBcGlFcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFMb2FkZWQgJiYgdGhpcy5oYXNMb2FkRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpIHtcclxuICAgIC8vIG5vIF9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cyBmb3IgbXVsdGktc2VsZWN0XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmJpbmQgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuZGF0YXNvdXJjZS5zb21lKHggPT4geC5pZCA9PSB0aGlzLmJpbmQpO1xyXG5cclxuICAgIGlmIChleGlzdHMpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRCaW5kRWxlbWVudCgpIHtcclxuICAgIC8vIG5vIF9sb2FkQmluZEVsZW1lbnQgZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0VsZW1lbnRTb3VyY2VVcmxWYWxpZCgpIHx8ICF0aGlzLmJpbmQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2h0dHBDbGllbnQuZ2V0KHRoaXMuX2luaXRFbGVtZW50RW5kcG9pbnQoKSkpO1xyXG5cclxuICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgaWQ6IGRhdGFbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICBsYWJlbDogZGF0YVt0aGlzLmxhYmVsRmllbGRdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0YXNvdXJjZS5zb21lKHggPT4geC5pZCA9PT0gb3B0aW9uLmlkKSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBbLi4udGhpcy5kYXRhc291cmNlLCBvcHRpb25dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IG9wdGlvbi5pZDtcclxuICAgICAgdGhpcy5iaW5kID0gb3B0aW9uLmlkO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQob3B0aW9uLmxhYmVsKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlTG9hZGVkLmVtaXQoKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZWxlY3RlZCBlbGVtZW50JywgZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBhcmVGdW5jdGlvbigpOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGEsIGIpID0+IHtcclxuICAgICAgaWYgKGEubGFiZWwgPiBiLmxhYmVsKSB7IHJldHVybiAxOyB9XHJcbiAgICAgIGlmIChhLmxhYmVsIDwgYi5sYWJlbCkgeyByZXR1cm4gLTE7IH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0xpc3RTb3VyY2VVcmxWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5saXN0U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignbGlzdFNvdXJjZVVybCB1cmwgbm90IHByb3ZpZGVkJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VsZW1lbnRTb3VyY2VVcmxWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5lbGVtZW50U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignZWxlbWVudFNvdXJjZVVybCBub3QgZGVmaW5lZCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UGFyYW1ldGVyc1dpdGhEZWZhdWx0cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlkRmllbGQgPT0gdW5kZWZpbmVkIHx8IHRoaXMuaWRGaWVsZCA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLmlkRmllbGQgPSBcImlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGFiZWxGaWVsZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYWJlbEZpZWxkID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMubGFiZWxGaWVsZCA9IFwibGliZWxsZVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEVsZW1lbnRFbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuYmluZCkge1xyXG4gICAgICByZXR1cm4gZW5jb2RlVVJJKGAke3RoaXMuZWxlbWVudFNvdXJjZVVybH0vJHt0aGlzLmJpbmR9YCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcignbm8gYmluZCBpbnB1dCB3YXMgcHJvdmlkZWQsIGNhbm5vdCBjcmVhdGUgYmluZEVsZW1lbnRVcmwnKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMubGlzdFNvdXJjZVVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0xpc3Qgc291cmNlIFVSTCBub3QgcHJvdmlkZWQnKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICByZXR1cm4gZW5jb2RlVVJJKGAke3RoaXMubGlzdFNvdXJjZVVybH1gKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdGhpcy5saXN0U291cmNlVXJsID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBsZXQgdGVtcFVybCA9IHRoaXMubGlzdFNvdXJjZVVybCh0aGlzLmN1cnJlbnRSb3dJdGVtKVxyXG4gICAgICByZXR1cm4gZW5jb2RlVVJJKGAke3RlbXBVcmx9YClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXRpYWxMb2FkRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbG9hZEJpbmRFbGVtZW50KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb25CaW5kU2V0KCkge1xyXG5cclxuICAvKmlmICh0aGlzLmlzRmlsdGVyZWQgJiYgXHJcbiAgICAgICF0aGlzLl9iaW5kQ2hhbmdlRW1pdHRlZCAmJlxyXG4gICAgICAhdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgYWxlcnQoXCJfZGF0YXNvdXJjZS5sZW5ndGggPT09IDBcIik7XHJcbiAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICB9Ki9cclxuXHJcbiAgaWYgKCF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpO1xyXG4gIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEFsbERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRSZWxvYWREYXRhU291cmNlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMucmVsb2FkRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbG9hZERhdGFTb3VyY2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhICE9IG51bGwgJiYgZGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdFNvdXJjZVVybCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQWxsRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBfbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk6IHZvaWQge1xyXG4gICAgXHJcbiAgICBsZXQgdGVtcEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSkge1xyXG5cclxuICAgICAgdGhpcy5fZ290dGVuRGF0YXNvdXJjZS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgaWQ6IGVsZW1lbnRbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICAgIGxhYmVsOiBlbGVtZW50W3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0ZW1wQXJyYXkucHVzaChvYmopO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gdGVtcEFycmF5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0aGlzLl9kaXN0aW5jdEJ5SWQoWy4uLnRoaXMuZGF0YXNvdXJjZSwgLi4udGVtcEFycmF5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydCkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlLnNvcnQodGhpcy5fY29tcGFyZUZ1bmN0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHsgXHJcbiAgICAgIHRoaXMuX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlSHR0cFBhcmFtcyhrZXl3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCd2YWx1ZScsIGtleXdvcmQgPz8gJycpO1xyXG5cclxuICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zIH07XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaENvbWJvQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIE11bHRpU2VsZWN0IG1vZGVsIGNoYW5nZXMuXHJcbiAqIFVwZGF0ZXMgdGhlIGJvdW5kIHZhbHVlIGFuZCByZWNhbGN1bGF0ZXMgdGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgcHJvcGVyIHJlbmRlcmluZy5cclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IG5ld1ZhbHVlIC0gVGhlIG5ldyB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqL1xyXG4gIG9uTXVsdGlTZWxlY3RNb2RlbENoYW5nZShuZXdWYWx1ZTogb2JqZWN0KTogdm9pZCB7XHJcbiAgICBsZXQgbmV3VmFsdWVFdmVudDogYW55ID0ge1xyXG4gICAgICB2YWx1ZTogbmV3VmFsdWVcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQobmV3VmFsdWVFdmVudCk7XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgYSBkaXN0aW5jdCBhcnJheSBvZiBpdGVtcyBiYXNlZCBvbiB0aGVpciBgaWRgIHByb3BlcnR5LlxyXG4gKiBVc2VmdWwgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSB0aGUgZGF0YXNvdXJjZSBvciBzZWxlY3RlZCBpdGVtcyBsaXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheSAtIEFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBhbiBgaWRgIHByb3BlcnR5LlxyXG4gKiBAcmV0dXJucyB7YW55W119IEFycmF5IG9mIHVuaXF1ZSBpdGVtcyBieSBgaWRgLlxyXG4gKi9cclxuICBwcml2YXRlIF9kaXN0aW5jdEJ5SWQoYXJyYXk6IGFueVtdKTogYW55W11cclxuICB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgZGlzdGluY3QgPSBBcnJheS5mcm9tKFxyXG4gICAgICBuZXcgTWFwKGFycmF5Lm1hcChpdGVtID0+IFtpdGVtLmlkLCBpdGVtXSkpLnZhbHVlcygpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkaXN0aW5jdDtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIFRyYWNrQnkgZnVuY3Rpb24gZm9yIEFuZ3VsYXIgbmdGb3IgbG9vcHMuXHJcbiAqIEhlbHBzIEFuZ3VsYXIgZWZmaWNpZW50bHkgdHJhY2sgbGlzdCBpdGVtcyBieSBhIHVuaXF1ZSBpZGVudGlmaWVyLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHthbnl9IGl0ZW0gLSBJdGVtIG9iamVjdCBjb250YWluaW5nIGFuIGBpZGAuXHJcbiAqIEByZXR1cm5zIHthbnl9IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgaXRlbSAoaXRlbS5pZCkuXHJcbiAqL1xyXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyB0aGUgdG9wIE4gc2VsZWN0ZWQgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSB0b29sdGlwLlxyXG4gKiBMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyBzaG93biB0byBgdG9vbHRpcE1heERpc3BsYXllZEl0ZW1zYCBmb3IgcmVhZGFiaWxpdHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TXVsdGlTZWxlY3R9IG11bHRpU2VsZWN0IC0gUmVmZXJlbmNlIHRvIHRoZSBQcmltZU5HIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICogQHJldHVybnMge2FueVtdfSBBcnJheSBvZiBzZWxlY3RlZCBpdGVtcywgbGltaXRlZCB0byBgdG9vbHRpcE1heERpc3BsYXllZEl0ZW1zYC5cclxuICovXHJcbiAgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCk6IGFueVtdIHtcclxuICAgIGlmKCFtdWx0aVNlbGVjdCB8fCAhQXJyYXkuaXNBcnJheShtdWx0aVNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpIHx8IG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCAxKSByZXR1cm4gW107XHJcbiAgXHJcbiAgICByZXR1cm4gbXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zLnNsaWNlKDAsIHRoaXMudG9vbHRpcE1heERpc3BsYXllZEl0ZW1zKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgdGhlIE11bHRpU2VsZWN0IGRyb3Bkb3duLlxyXG4gKiBDcmVhdGVzIHR3byBncm91cHM6XHJcbiAqIDEuIFwiU2VsZWN0ZWQgaXRlbXNcIiDigJQgaXRlbXMgY3VycmVudGx5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxyXG4gKiAyLiBcIkF2YWlsYWJsZSBpdGVtc1wiIOKAlCBpdGVtcyBub3Qgc2VsZWN0ZWQgeWV0LlxyXG4gKlxyXG4gKiBUaGUgZ3JvdXBlZCBkYXRhc291cmNlIGFsbG93czpcclxuICogLSBTZWxlY3RlZCBpdGVtcyB0byBiZSBwaW5uZWQgb24gdG9wIGZvciBlYXN5IG1hbmFnZW1lbnQuXHJcbiAqIC0gQXZhaWxhYmxlIGl0ZW1zIHRvIHJlbWFpbiBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci5cclxuICogLSBNdWx0aS1sYW5ndWFnZSBzdXBwb3J0IHVzaW5nIHRoZSBgX2xvY2FsaXplYCBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBVcGRhdGVzIGB0aGlzLmdyb3VwcGVkRGF0YVNvdXJjZWAgd2l0aCB0aGUgbGF0ZXN0IGdyb3VwZWQgc3RydWN0dXJlLlxyXG4gKi9cclxuICBwcml2YXRlIGNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGxldCBncm91cHMgOiBTZWxlY3RJdGVtR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgIGxldCBpc0JpbmRWYWxpZEFycmF5IDogYm9vbGVhbiA9IHRoaXMuYmluZCAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmluZCkgJiYgdGhpcy5iaW5kLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IG5ldyBTZXQoaXNCaW5kVmFsaWRBcnJheSA/IHRoaXMuYmluZCA6IFtdKTtcclxuXHJcbiAgICAvLyBTZWxlY3RlZCBpdGVtc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiBzZWxlY3RlZElkcy5oYXMoaXRlbS5pZCkpO1xyXG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9ncm91cCcpLFxyXG4gICAgICAgIHZhbHVlOiAnc2VsZWN0ZWQtaXRlbXMnLFxyXG4gICAgICAgIGl0ZW1zOiBzZWxlY3RlZEl0ZW1zXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF2YWlsYWJsZSAobm90IHNlbGVjdGVkKSBpdGVtc1xyXG4gICAgY29uc3QgYXZhaWxhYmxlSXRlbXMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGl0ZW0gPT4gIXNlbGVjdGVkSWRzLmhhcyhpdGVtLmlkKSk7XHJcbiAgICBpZiAoYXZhaWxhYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X2F2YWlsYWJsZV9ncm91cCcpLFxyXG4gICAgICAgICAgdmFsdWU6ICdhdmFpbGFibGUtaXRlbXMnLFxyXG4gICAgICAgICAgaXRlbXM6IGF2YWlsYWJsZUl0ZW1zXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncm91cHBlZERhdGFTb3VyY2UgPSBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50J3MgY29udGVudCBvdmVyZmxvd3MgaXRzIHZpc2libGUgd2lkdGguXHJcbiAqIFVzZWQgdG8gY29uZGl0aW9uYWxseSBlbmFibGUgdG9vbHRpcCBvbmx5IHdoZW4gZWxsaXBzaXMgaXMgYXBwbGllZC5cclxuICovXHJcbiAgaXNUZXh0T3ZlcmZsb3dpbmcoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgKm5nSWY9XCIhbXVsdGlwbGU7IGVsc2UgbXVsdGlTZWxlY3RcIiBjbGFzcz1cImZsZXhcIj5cclxuICA8cC1kcm9wZG93biBcclxuICAgIFtvcHRpb25zXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJiaW5kXCJcclxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgb3B0aW9uVmFsdWU9XCJpZFwiXHJcbiAgICBbbGF6eV09XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBbbG9hZGluZ109XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBmaWx0ZXJCeT1cImxhYmVsXCIgXHJcbiAgICBbZmlsdGVyXT1cInRydWVcIiBcclxuICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCIgXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBcclxuICAgIChvbkNoYW5nZSk9XCJiaW5kVmFsdWVDaGFuZ2VkKCRldmVudClcIiBcclxuICAgIChvbkhpZGUpPVwib25IaWRlKClcIiAob25TaG93KT1cIm9uT3BlbigpXCIgKG9uRmlsdGVyKT1cInNlYXJjaFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwiY2xlYXJTZWxlY3RlZFZhbHVlKClcIiAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNBciA/ICdwLWRyb3Bkb3duLWNsZWFyLWljb25BUic6ICdwLWRyb3Bkb3duLWNsZWFyLWljb25GUidcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCIgXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwdC0yIHB4LTJcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRpdGxlPVwidGl0bGUtc2VhcmNoLWNvbWJvLU91dnJpclwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wbHVzXCIgdGl0bGU9XCJ0aXRsZS1zZWFyY2gtY29tYm8tQWpvdXRlclwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIlxyXG4gICAgICAgICAgdGl0bGU9XCJMaXN0ZXIgbGVzIGFydGljbGVzIHBpdm90w6lzXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWR2YW5jZWRTZWFyY2hDb21wb25lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93Q29uc3VsdEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCIgdGl0bGU9XCJ0aXRsZS1zZWFyY2gtY29tYm8tQ29uc3VsdGVyXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwiY29uc3VsdEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93VXBkYXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiB0aXRsZT1cInRpdGxlLXNlYXJjaC1jb21iby11cGRhdGVcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIChjbGljayk9XCJ1cGRhdGVFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTMgZ2FwLTJcIj5cclxuICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBcGlFcnJvcjsgZWxzZSBhcGlFcnJvclwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRhc291cmNlRW1wdHkgJiYgIWlzRmlsdGVyaW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdzZWFyY2hfY29tYm9fbm9fZWxlbWVudCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc05vUmVzdWx0QWZ0ZXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19yZXN1bHQnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXBpRXJyb3I+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1vcmFuZ2UtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICB7eyAnc2VhcmNoX2NvbWJvX2xvYWRfZXJyb3InIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtc2VsZWN0ZWRPcHRpb24+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3NlbGVjdGVkT3B0aW9uLmxhYmVsfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0b29sdGlwU3R5bGVDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsU2VsZWN0ZWRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZE9wdGlvbiAmJiBnZXRTdGF0dXNPcHRpb24oc2VsZWN0ZWRPcHRpb24ubGFiZWwpIGFzIG9wdFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCI+XHJcbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsU2VsZWN0ZWQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC10YXJnZXQgcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICA8ZGl2IHBUb29sdGlwPVwie3t0YXJnZXQubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RhdHVzT3B0aW9uKHRhcmdldC5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctdG9wXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7e3RhcmdldC5sYWJlbH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE9wdGlvbj5cclxuICAgICAgICAgIDxzcGFuPnt7dGFyZ2V0LmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtZHJvcGRvd24+XHJcblxyXG4gIDwhLS0gQnViYmxlIEluZm8gLS0+XHJcbiAgPFRzaS1CdWJibGUtSW5mbyBbaW5mb1RleHRdPVwiaW5mb1RleHRcIj48L1RzaS1CdWJibGUtSW5mbz5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtdWx0aVNlbGVjdD5cclxuICA8cC1tdWx0aVNlbGVjdFxyXG4gICAgI211bHRpU2VsZWN0RWxlbWVudFxyXG4gICAgW29wdGlvbnNdPVwiZ3JvdXBwZWREYXRhU291cmNlXCJcclxuICAgIFtncm91cF09XCJ0cnVlXCIgXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIFtvcHRpb25MYWJlbF09XCInbGFiZWwnXCJcclxuICAgIFtvcHRpb25WYWx1ZV09XCInaWQnXCJcclxuICAgIFtsb2FkaW5nXT1cIiFkYXRhTG9hZGVkXCJcclxuICAgIFtmaWx0ZXJCeV09XCInbGFiZWwnXCJcclxuICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19jb3VudCcgfCBsb2NhbGl6ZVwiXHJcbiAgICBbbWF4U2VsZWN0ZWRMYWJlbHNdPVwibWF4U2VsZWN0ZWRMYWJlbHNcIlxyXG4gICAgW3N0eWxlXT1cInsnbWF4LXdpZHRoJzogbWF4V2lkdGgsICd3aWR0aCc6JzEwMCUnLCAnaGVpZ2h0JzogJzEuN3JlbSd9XCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCJcclxuICAgIHBhbmVsU3R5bGVDbGFzcz1cInRzaS1tdWx0aXNlbGVjdC1wYW5lbFwiXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKG9uUGFuZWxTaG93KT1cIm9uT3BlbigpXCJcclxuICAgIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbcFRvb2x0aXBdPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA/IG11bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1vcHRpb24+XHJcbiAgICAgIDxkaXYgI2xhYmVsUmVmIGNsYXNzPVwidHNpLW11bHRpc2VsZWN0LW9wdGlvbi1sYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHRvb2x0aXBBcHBlbmRUbz1cImJvZHlcIiBbcFRvb2x0aXBdPVwiaXNUZXh0T3ZlcmZsb3dpbmcobGFiZWxSZWYpID8gb3B0aW9uLmxhYmVsIDogbnVsbFwiPlxyXG4gICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+ICBcclxuICA8L3AtbXVsdGlTZWxlY3Q+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPCEtLSBJZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoOyBlbHNlIG5vSXRlbXNcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfdGl0bGUnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICh7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSlcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHVsIGNsYXNzPVwibS0wIHBsLTNcIj5cclxuICAgICAgICAgIDwhLS0gU2hvdyBvbmx5IGZpcnN0IDEwIGl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0RWxlbWVudClcIj5cclxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gU2hvdyBtZXNzYWdlIGlmIG1vcmUgdGhhbiAxMCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxMFwiIGNsYXNzPVwidGV4dC1zbSBtdC0xIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgIHt7IG11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMTAgfX1cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX21vcmVfbWVzc2FnZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIElmIG5vIGl0ZW1zIHNlbGVjdGVkIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vSXRlbXM+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtNTAwXCI+XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19lbXB0eScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
918
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVL0UsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFlBQWlCO0lBNkI1RCxVQUFVLENBQUMsS0FBVTtRQUNuQixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtB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dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBydGxNb2RlS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbHMuY29uc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIEdyaWRTZWxlY3Rpb25Nb2RlLCBNb2RhbFNpemVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UsIFN0YXR1c09wdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0dXMvY29sb3Itc3RhdHVzJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWJhc2UvdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3VpZCB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL2d1aWQuaGVscGVyJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtR3JvdXAgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLVNlYXJjaC1Db21ibycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaVNlYXJjaENvbWJvQ29tcG9uZW50IGV4dGVuZHMgVHNpSW5wdXRCYXNlPGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9pc0lucHV0RGF0YXNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2dvdHRlbkRhdGFzb3VyY2U6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfYmluZD86IGFueTtcclxuICBwcml2YXRlIF9iaW5kQ2hhbmdlRW1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRSb3dJdGVtPzogYW55O1xyXG4gIHB1YmxpYyBkYXRhTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9zZWxlY3RlZD86IGFueTtcclxuICBwcml2YXRlIF9kaWFsb2dSZWZlcmVuY2U/OiBEeW5hbWljRGlhbG9nUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGlzQXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAqIEdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICogRWFjaCBncm91cCBjb250YWlucyBhIGxhYmVsLCBhIHZhbHVlLCBhbmQgYW4gYXJyYXkgb2YgaXRlbXMuXHJcbiAqIFxyXG4gKiBFeGFtcGxlIHN0cnVjdHVyZTpcclxuICogW1xyXG4gKiAgIHsgbGFiZWw6ICdTZWxlY3RlZCBpdGVtcycsIHZhbHVlOiAnc2VsZWN0ZWQtaXRlbXMnLCBpdGVtczogWy4uLl0gfSxcclxuICogICB7IGxhYmVsOiAnQXZhaWxhYmxlIGl0ZW1zJywgdmFsdWU6ICdhdmFpbGFibGUtaXRlbXMnLCBpdGVtczogWy4uLl0gfVxyXG4gKiBdXHJcbiAqL1xyXG4gIHByb3RlY3RlZCBncm91cHBlZERhdGFTb3VyY2U6IFNlbGVjdEl0ZW1Hcm91cFtdID0gW107XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxyXG4gIG9uRW50ZXJLZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gSGFuZGxlIHRoZSBlbnRlciBrZXkgZXZlbnQgaGVyZVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dChcImVsZW1lbnRTb3VyY2VVcmxcIikgZWxlbWVudFNvdXJjZVVybD86IHN0cmluZztcclxuICBASW5wdXQoXCJsaXN0U291cmNlVXJsXCIpIGxpc3RTb3VyY2VVcmw/OiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKTtcclxuICBASW5wdXQoXCJpZC1maWVsZFwiKSBpZEZpZWxkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dChcImxhYmVsLWZpZWxkXCIpIGxhYmVsRmllbGQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KFwibXVsdGlwbGVcIikgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoXCJzb3J0XCIpIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWxvYWREYXRhU291cmNlOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgaXNGaWx0ZXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZExhYmVsPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heFdpZHRoOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgY29tYm9UeXBlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY3VycmVudFJvd0l0ZW0oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Um93SXRlbTtcclxuICB9XHJcblxyXG4gIHNldCBjdXJyZW50Um93SXRlbSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9jdXJyZW50Um93SXRlbSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZ2V0IGRhdGFzb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRhc291cmNlKGRhdGFzb3VyY2U6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlID0gZGF0YXNvdXJjZTtcclxuXHJcbiAgICBpZiAodGhpcy5fZ290dGVuRGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKVxyXG4gICAgICB0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoXCJiaW5kXCIpIGdldCBiaW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JpbmQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYmluZCh2YWx1ZTogYW55KSB7XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fYmluZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gbnVsbDtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9iaW5kID09PSB2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2JpbmQgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZCA9IHZhbHVlO1xyXG4gICAgXHJcbiAgICB0aGlzLl9vbkJpbmRTZXQoKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW0gbGFiZWxzIHRvIGRpc3BsYXkgZGlyZWN0bHkgaW4gdGhlIE11bHRpU2VsZWN0IGlucHV0IGZpZWxkLlxyXG4gKiBJZiB0aGUgdXNlciBzZWxlY3RzIG1vcmUgdGhhbiB0aGlzIG51bWJlciwgdGhlIGNvbXBvbmVudCBjYW4gc2hvdyBhIFwiK05cIiBtZXNzYWdlIGluc3RlYWQuXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBkZWZhdWx0IDFcclxuICovXHJcbiAgQElucHV0KCkgbWF4U2VsZWN0ZWRMYWJlbHM6IG51bWJlciA9IDE7XHJcbiAgXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGRpc3BsYXkgaW5zaWRlIHRoZSB0b29sdGlwLlxyXG4gKiBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIHRvb2x0aXAgY2FuIGRpc3BsYXkgYSBcIitOIG1vcmVcIiBtZXNzYWdlLlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAZGVmYXVsdCAxMFxyXG4gKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXM6IG51bWJlciA9IDEwO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBiaW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoXCJkYXRhc291cmNlLWxvYWRlZFwiKSBkYXRhU291cmNlTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib1N0YXR1c01vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9TdGF0dXNNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRMYWJlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblNlYXJjaEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByb3RlY3RlZCBfY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICAgIHN1cGVyKF9jZFJlZilcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5fcmVsb2FkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzU3RhdHVzQ29tYm8oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21ib1R5cGUgPT09ICdzdGF0dXMnO1xyXG4gIH1cclxuXHJcbiAgbGlnaHRlbkNvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwZXJjZW50OiBudW1iZXIgPSA3MCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhleCkgcmV0dXJuICcnO1xyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG5cclxuICAgIGxldCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgbGV0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBsZXQgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHIgKyAoMjU1IC0gcikgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGcgKyAoMjU1IC0gZykgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGIgKyAoMjU1IC0gYikgKiBwZXJjZW50IC8gMTAwKSk7XHJcblxyXG4gICAgY29uc3QgbmV3SGV4ID1cclxuICAgICAgJyMnICtcclxuICAgICAgW3IsIGcsIGJdXHJcbiAgICAgICAgLm1hcCh4ID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpXHJcbiAgICAgICAgLmpvaW4oJycpO1xyXG5cclxuICAgIHJldHVybiBuZXdIZXg7XHJcbiAgfVxyXG5cclxuICBnZXRSZWFkYWJsZVRleHRDb2xvcihoZXg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhleCkgcmV0dXJuICdibGFjayc7XHJcblxyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPiAyMzAgPyAnYmxhY2snIDogYCMke2hleH1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzT3B0aW9uKHZhbHVlOiBzdHJpbmcpOiBTdGF0dXNPcHRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTWV0YWRhdGE/Lm9wdGlvbnMuZmluZChvID0+IG8udHJhbnNsYXRlZExhYmVsID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5jaGVja0lmQWR2YW5jZWRTZWFyY2hDb21wb25lbnRFeGlzdHMoKTtcclxuICAgIGF3YWl0IHRoaXMuY2hlY2tJZkZvcm1OYW1lRXhpc3RzKCk7XHJcbiAgICB0aGlzLl9pbml0UGFyYW1ldGVyc1dpdGhEZWZhdWx0cygpO1xyXG4gICAgdGhpcy5faW5pdFJlbG9hZERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTtcclxuICAgIGF3YWl0IHRoaXMuX2luaXRpYWxMb2FkRGF0YSgpO1xyXG4gICAgXHJcbiAgICBsZXQgbGFuZ3VlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocnRsTW9kZUtleXMucnRsTW9kZUVuYWJsZWQpO1xyXG4gICAgXHJcbiAgICBpZiAobGFuZ3VlICYmIEpTT04ucGFyc2UobGFuZ3VlKSkge1xyXG4gICAgICB0aGlzLmlzQXIgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0FyID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCArICdyZW0nO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0FkZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NvbnN1bHRCdXR0b24/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dVcGRhdGVCdXR0b24/OiBib29sZWFuO1xyXG4gIHNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgY2hlY2tJZkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50RXhpc3RzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuXHJcbiAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gISFlbnRpdHk/LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZGb3JtTmFtZUV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBZGRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dVcGRhdGVCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGhhc0Zvcm0gPSAhIWVudGl0eT8uZm9ybU5hbWU7XHJcblxyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcInNob3dBZGRCdXR0b25cIiwgdGhpcy5zaG93QWRkQnV0dG9uKVxyXG5cclxuICAgICAgICAgIGlmICghaGFzRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSB0aGlzLnNob3dBZGRCdXR0b247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IHRoaXMuc2hvd0FkZEJ1dHRvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dBZGRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gISFlbnRpdHk/LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCksIGNvbmYpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGVkUGVyc29uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUGVyc29uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kID0gc2VsZWN0ZWRQZXJzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblNlYXJjaERpYWxvZygpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSwgc2VsZWN0aW9uTW9kZTogR3JpZFNlbGVjdGlvbk1vZGUuU2luZ2xlLCBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCwgY3VzdG9tRGF0YTogZW50aXR5IH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5saXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5Lmxpc3RDb21wb25lbnQpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGVkUGVyc29uOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFBlcnNvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZCA9IHNlbGVjdGVkUGVyc29uO1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZENoYW5nZS5lbWl0KHRoaXMuYmluZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBjdXN0b21EYXRhOiBlbnRpdHkgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSwgY29uZik7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChzYXZlZEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2F2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYXZlZEVsZW1lbnQgPT09ICdvYmplY3QnICYmIHNhdmVkRWxlbWVudCAhPT0gbnVsbCAmJiAndWlkJyBpbiBzYXZlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZCA9IHNhdmVkRWxlbWVudD8udWlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2F2ZWRFbGVtZW50ID09PSAnc3RyaW5nJyAmJiBHdWlkLmlzVmFsaWQoc2F2ZWRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kID0gc2F2ZWRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNEYXRhc291cmNlRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkICYmICghdGhpcy5kYXRhc291cmNlIHx8IHRoaXMuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0xvYWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgdXBkYXRlRWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5iaW5kKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcIkF1Y3VuIMOpbMOpbWVudCBzw6lsZWN0aW9ubsOpIHBvdXIgbGEgbWlzZSDDoCBqb3VyLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkVESVQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYmluZFxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksIGNvbmYpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKCh1cGRhdGVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAodXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEVsZW1lbnQgIT09IG51bGwgJiYgJ3VpZCcgaW4gdXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmQgPSB1cGRhdGVkRWxlbWVudC51aWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdXBkYXRlZEVsZW1lbnQgPT09ICdzdHJpbmcnICYmIEd1aWQuaXNWYWxpZCh1cGRhdGVkRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmQgPSB1cGRhdGVkRWxlbWVudDtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN1bHRFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJpbmQpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwiQXVjdW4gw6lsw6ltZW50IHPDqWxlY3Rpb25uw6kgcG91ciBsYSBjb25zdWx0YXRpb24uXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCxcclxuICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICBpZDogdGhpcy5iaW5kXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihcclxuICAgICAgICAgIFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksXHJcbiAgICAgICAgICBjb25mXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3MgZCdlbnRpdMOpIDpcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIGJpbmRWYWx1ZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5iaW5kID0gZXZlbnQudmFsdWU7XHJcbiAgICBpZiAodGhpcy5iaW5kICE9PSBudWxsICYmIHRoaXMuYmluZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5iaW5kXHJcbiAgICB9XHJcbiAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdChldmVudC52YWx1ZSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9iaW5kQ2hhbmdlRW1pdHRlZCkge1xyXG4gICAgICB0aGlzLl9iaW5kQ2hhbmdlRW1pdHRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkRWxlbWVudHNMYWJlbENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoVmFsdWVDaGFuZ2VkKHNlYXJjaFZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQgJiYgIXRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoc2VhcmNoVmFsdWUuZmlsdGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3BlbigpIHtcclxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkIHx8IHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuX2xvYWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNOb1Jlc3VsdEFmdGVyRmlsdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkICYmXHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgdGhpcy5pc0ZpbHRlcmluZyAmJlxyXG4gICAgICAhdGhpcy5oYXNMb2FkRXJyb3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkhpZGUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuYmluZCA9IHRoaXMuX3NlbGVjdGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHVuZGVmaW5lZFxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX2xvYWREYXRhU291cmNlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkU2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZShrZXl3b3JkOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLl9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZERhdGEodXJsLCB0aGlzLl9nZW5lcmF0ZUh0dHBQYXJhbXMoa2V5d29yZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKSB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLl9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZERhdGEodXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEodXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKVxyXG4gICAge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmhhc0xvYWRFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwgcGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZ290dGVuRGF0YXNvdXJjZSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5fbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBkYXRhc291cmNlJywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuaGFzTG9hZEVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBpc0FwaUVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUxvYWRlZCAmJiB0aGlzLmhhc0xvYWRFcnJvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCkge1xyXG4gICAgLy8gbm8gX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzIGZvciBtdWx0aS1zZWxlY3RcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuYmluZCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5kYXRhc291cmNlLnNvbWUoeCA9PiB4LmlkID09IHRoaXMuYmluZCk7XHJcblxyXG4gICAgaWYgKGV4aXN0cykgcmV0dXJuO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2xvYWRCaW5kRWxlbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZEJpbmRFbGVtZW50KCkge1xyXG4gICAgLy8gbm8gX2xvYWRCaW5kRWxlbWVudCBmb3IgbXVsdGktc2VsZWN0XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCkgfHwgIXRoaXMuYmluZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5faHR0cENsaWVudC5nZXQodGhpcy5faW5pdEVsZW1lbnRFbmRwb2ludCgpKSk7XHJcblxyXG4gICAgICBpZiAoIWRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICBpZDogZGF0YVt0aGlzLmlkRmllbGRdLFxyXG4gICAgICAgIGxhYmVsOiBkYXRhW3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhc291cmNlLnNvbWUoeCA9PiB4LmlkID09PSBvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IFsuLi50aGlzLmRhdGFzb3VyY2UsIG9wdGlvbl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gb3B0aW9uLmlkO1xyXG4gICAgICB0aGlzLmJpbmQgPSBvcHRpb24uaWQ7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChvcHRpb24ubGFiZWwpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlbGVjdGVkIGVsZW1lbnQnLCBlcnJvcik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcGFyZUZ1bmN0aW9uKCk6IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyIHtcclxuICAgIHJldHVybiAoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5sYWJlbCA+IGIubGFiZWwpIHsgcmV0dXJuIDE7IH1cclxuICAgICAgaWYgKGEubGFiZWwgPCBiLmxhYmVsKSB7IHJldHVybiAtMTsgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTGlzdFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdsaXN0U291cmNlVXJsIHVybCBub3QgcHJvdmlkZWQnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdlbGVtZW50U291cmNlVXJsIG5vdCBkZWZpbmVkJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWRGaWVsZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5pZEZpZWxkID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaWRGaWVsZCA9IFwiaWRcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5sYWJlbEZpZWxkID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhYmVsRmllbGQgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gXCJsaWJlbGxlXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0RWxlbWVudEVuZHBvaW50KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5iaW5kKSB7XHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5lbGVtZW50U291cmNlVXJsfS8ke3RoaXMuYmluZH1gKTtcclxuICAgIH1cclxuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdubyBiaW5kIGlucHV0IHdhcyBwcm92aWRlZCwgY2Fubm90IGNyZWF0ZSBiaW5kRWxlbWVudFVybCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5saXN0U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTGlzdCBzb3VyY2UgVVJMIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5saXN0U291cmNlVXJsfWApO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGxldCB0ZW1wVXJsID0gdGhpcy5saXN0U291cmNlVXJsKHRoaXMuY3VycmVudFJvd0l0ZW0pXHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGVtcFVybH1gKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdGlhbExvYWREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vbkJpbmRTZXQoKSB7XHJcblxyXG4gIC8qaWYgKHRoaXMuaXNGaWx0ZXJlZCAmJiBcclxuICAgICAgIXRoaXMuX2JpbmRDaGFuZ2VFbWl0dGVkICYmXHJcbiAgICAgICF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBhbGVydChcIl9kYXRhc291cmNlLmxlbmd0aCA9PT0gMFwiKTtcclxuICAgIGF3YWl0IHRoaXMuX2xvYWRCaW5kRWxlbWVudCgpO1xyXG4gIH0qL1xyXG5cclxuICBpZiAoIXRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCk7XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQWxsRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFJlbG9hZERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZWxvYWREYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuX3JlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkRGF0YVNvdXJjZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEgIT0gdW5kZWZpbmVkICYmIGRhdGEgIT0gbnVsbCAmJiBkYXRhICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0U291cmNlVXJsID0gZGF0YTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGxEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgIF9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKTogdm9pZCB7XHJcbiAgICBcclxuICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UpKSB7XHJcblxyXG4gICAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICBpZDogZWxlbWVudFt0aGlzLmlkRmllbGRdLFxyXG4gICAgICAgICAgbGFiZWw6IGVsZW1lbnRbdGhpcy5sYWJlbEZpZWxkXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKG9iaik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0ZW1wQXJyYXk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IHRoaXMuX2Rpc3RpbmN0QnlJZChbLi4udGhpcy5kYXRhc291cmNlLCAuLi50ZW1wQXJyYXldKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0KSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2Uuc29ydCh0aGlzLl9jb21wYXJlRnVuY3Rpb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZUxvYWRlZC5lbWl0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkgeyBcclxuICAgICAgdGhpcy5fZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVIdHRwUGFyYW1zKGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3ZhbHVlJywga2V5d29yZCA/PyAnJyk7XHJcblxyXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMgfTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ29tYm9DbGljayhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2xpY2suZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogRXZlbnQgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgTXVsdGlTZWxlY3QgbW9kZWwgY2hhbmdlcy5cclxuICogVXBkYXRlcyB0aGUgYm91bmQgdmFsdWUgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZ3JvdXBlZCBkYXRhc291cmNlIGZvciBwcm9wZXIgcmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gbmV3VmFsdWUgLSBUaGUgbmV3IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICovXHJcbiAgb25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKG5ld1ZhbHVlOiBvYmplY3QpOiB2b2lkIHtcclxuICAgIGxldCBuZXdWYWx1ZUV2ZW50OiBhbnkgPSB7XHJcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChuZXdWYWx1ZUV2ZW50KTtcclxuXHJcbiAgICB0aGlzLmNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICogUmV0dXJucyBhIGRpc3RpbmN0IGFycmF5IG9mIGl0ZW1zIGJhc2VkIG9uIHRoZWlyIGBpZGAgcHJvcGVydHkuXHJcbiAqIFVzZWZ1bCB0byByZW1vdmUgZHVwbGljYXRlcyBmcm9tIHRoZSBkYXRhc291cmNlIG9yIHNlbGVjdGVkIGl0ZW1zIGxpc3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55W119IGFycmF5IC0gQXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFuIGBpZGAgcHJvcGVydHkuXHJcbiAqIEByZXR1cm5zIHthbnlbXX0gQXJyYXkgb2YgdW5pcXVlIGl0ZW1zIGJ5IGBpZGAuXHJcbiAqL1xyXG4gIHByaXZhdGUgX2Rpc3RpbmN0QnlJZChhcnJheTogYW55W10pOiBhbnlbXVxyXG4gIHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBkaXN0aW5jdCA9IEFycmF5LmZyb20oXHJcbiAgICAgIG5ldyBNYXAoYXJyYXkubWFwKGl0ZW0gPT4gW2l0ZW0uaWQsIGl0ZW1dKSkudmFsdWVzKClcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGRpc3RpbmN0O1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgQW5ndWxhciBuZ0ZvciBsb29wcy5cclxuICogSGVscHMgQW5ndWxhciBlZmZpY2llbnRseSB0cmFjayBsaXN0IGl0ZW1zIGJ5IGEgdW5pcXVlIGlkZW50aWZpZXIsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlLXJlbmRlcmluZy5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge2FueX0gaXRlbSAtIEl0ZW0gb2JqZWN0IGNvbnRhaW5pbmcgYW4gYGlkYC5cclxuICogQHJldHVybnMge2FueX0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBpdGVtIChpdGVtLmlkKS5cclxuICovXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0b3AgTiBzZWxlY3RlZCBvcHRpb25zIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAuXHJcbiAqIExpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNob3duIHRvIGB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXNgIGZvciByZWFkYWJpbGl0eS5cclxuICpcclxuICogQHBhcmFtIHtNdWx0aVNlbGVjdH0gbXVsdGlTZWxlY3QgLSBSZWZlcmVuY2UgdG8gdGhlIFByaW1lTkcgTXVsdGlTZWxlY3QgY29tcG9uZW50LlxyXG4gKiBAcmV0dXJucyB7YW55W119IEFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zLCBsaW1pdGVkIHRvIGB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXNgLlxyXG4gKi9cclxuICBnZXRUb3BTZWxlY3RlZE9wdGlvbnMobXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0KTogYW55W10ge1xyXG4gICAgaWYoIW11bHRpU2VsZWN0IHx8ICFBcnJheS5pc0FycmF5KG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucykgfHwgbXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA8IDEpIHJldHVybiBbXTtcclxuICBcclxuICAgIHJldHVybiBtdWx0aVNlbGVjdC5zZWxlY3RlZE9wdGlvbnMuc2xpY2UoMCwgdGhpcy50b29sdGlwTWF4RGlzcGxheWVkSXRlbXMpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZ3JvdXBlZCBkYXRhc291cmNlIGZvciB0aGUgTXVsdGlTZWxlY3QgZHJvcGRvd24uXHJcbiAqIENyZWF0ZXMgdHdvIGdyb3VwczpcclxuICogMS4gXCJTZWxlY3RlZCBpdGVtc1wiIOKAlCBpdGVtcyBjdXJyZW50bHkgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXHJcbiAqIDIuIFwiQXZhaWxhYmxlIGl0ZW1zXCIg4oCUIGl0ZW1zIG5vdCBzZWxlY3RlZCB5ZXQuXHJcbiAqXHJcbiAqIFRoZSBncm91cGVkIGRhdGFzb3VyY2UgYWxsb3dzOlxyXG4gKiAtIFNlbGVjdGVkIGl0ZW1zIHRvIGJlIHBpbm5lZCBvbiB0b3AgZm9yIGVhc3kgbWFuYWdlbWVudC5cclxuICogLSBBdmFpbGFibGUgaXRlbXMgdG8gcmVtYWluIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLlxyXG4gKiAtIE11bHRpLWxhbmd1YWdlIHN1cHBvcnQgdXNpbmcgdGhlIGBfbG9jYWxpemVgIHNlcnZpY2UuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFVwZGF0ZXMgYHRoaXMuZ3JvdXBwZWREYXRhU291cmNlYCB3aXRoIHRoZSBsYXRlc3QgZ3JvdXBlZCBzdHJ1Y3R1cmUuXHJcbiAqL1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgbGV0IGdyb3VwcyA6IFNlbGVjdEl0ZW1Hcm91cFtdID0gW107XHJcblxyXG4gICAgbGV0IGlzQmluZFZhbGlkQXJyYXkgOiBib29sZWFuID0gdGhpcy5iaW5kICYmIEFycmF5LmlzQXJyYXkodGhpcy5iaW5kKSAmJiB0aGlzLmJpbmQubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldChpc0JpbmRWYWxpZEFycmF5ID8gdGhpcy5iaW5kIDogW10pO1xyXG5cclxuICAgIC8vIFNlbGVjdGVkIGl0ZW1zXHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhc291cmNlLmZpbHRlcihpdGVtID0+IHNlbGVjdGVkSWRzLmhhcyhpdGVtLmlkKSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2dyb3VwJyksXHJcbiAgICAgICAgdmFsdWU6ICdzZWxlY3RlZC1pdGVtcycsXHJcbiAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXNcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXZhaWxhYmxlIChub3Qgc2VsZWN0ZWQpIGl0ZW1zXHJcbiAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiAhc2VsZWN0ZWRJZHMuaGFzKGl0ZW0uaWQpKTtcclxuICAgIGlmIChhdmFpbGFibGVJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3RfYXZhaWxhYmxlX2dyb3VwJyksXHJcbiAgICAgICAgICB2YWx1ZTogJ2F2YWlsYWJsZS1pdGVtcycsXHJcbiAgICAgICAgICBpdGVtczogYXZhaWxhYmxlSXRlbXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyb3VwcGVkRGF0YVNvdXJjZSA9IGdyb3VwcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQncyBjb250ZW50IG92ZXJmbG93cyBpdHMgdmlzaWJsZSB3aWR0aC5cclxuICogVXNlZCB0byBjb25kaXRpb25hbGx5IGVuYWJsZSB0b29sdGlwIG9ubHkgd2hlbiBlbGxpcHNpcyBpcyBhcHBsaWVkLlxyXG4gKi9cclxuICBpc1RleHRPdmVyZmxvd2luZyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gKiBDb21wdXRlcyBhbmQgZW1pdHMgdGhlIGxhYmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50KHMpLlxyXG4gKlxyXG4gKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgY3VycmVudCBgYmluZGAgdmFsdWUgYW5kIHRoZSBgZGF0YXNvdXJjZWAgdG8gZGV0ZXJtaW5lXHJcbiAqIHRoZSBsYWJlbChzKSBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudChzKS4gVGhlIGJlaGF2aW9yIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXJcclxuICogdGhlIGNvbXBvbmVudCBpcyBpbiBzaW5nbGUgb3IgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGU6XHJcbiAqXHJcbiAqIC0gKipNdWx0aXBsZSBzZWxlY3Rpb24gKGBtdWx0aXBsZSA9IHRydWVgKSoqXHJcbiAqICAgLSBJZiBleGFjdGx5IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkLCBpdHMgbGFiZWwgaXMgZW1pdHRlZC5cclxuICogICAtIElmIG11bHRpcGxlIGVsZW1lbnRzIGFyZSBzZWxlY3RlZCwgdGhlaXIgbGFiZWxzIGFyZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmdcclxuICogICAgIGFycmF5IHJlcHJlc2VudGF0aW9uOiBgW1wiTGFiZWwxXCIsIFwiTGFiZWwyXCIsIC4uLl1gLlxyXG4gKlxyXG4gKiAtICoqU2luZ2xlIHNlbGVjdGlvbiAoYG11bHRpcGxlID0gZmFsc2VgKSoqXHJcbiAqICAgLSBUaGUgbGFiZWwgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgZW1pdHRlZCBpZiBpdCBleGlzdHMgaW4gdGhlIGRhdGFzb3VyY2UuXHJcbiAqXHJcbiAqIElmIGEgdmFsaWQgbGFiZWwgaXMgcmVzb2x2ZWQsIHRoZSBtZXRob2QgZW1pdHMgdGhlIHJlc3VsdCB0aHJvdWdoXHJcbiAqIHRoZSBgc2VsZWN0ZWRMYWJlbENoYW5nZWAgZXZlbnQgZW1pdHRlci5cclxuICpcclxuICogQHJlbWFya3NcclxuICogLSBgYmluZGAgcmVwcmVzZW50cyB0aGUgc2VsZWN0ZWQgaWQgKHNpbmdsZSBtb2RlKSBvciBhbiBhcnJheSBvZiBpZHMgKG11bHRpcGxlIG1vZGUpLlxyXG4gKiAtIGBkYXRhc291cmNlYCBpcyBleHBlY3RlZCB0byBjb250YWluIGVsZW1lbnRzIHdpdGggYXQgbGVhc3QgYGlkYCBhbmQgYGxhYmVsYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RlZEVsZW1lbnRzTGFiZWxDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBsZXQgc2VsZWN0aW9uTGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy5iaW5kKSkge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoZSA9PiB0aGlzLmJpbmQuaW5jbHVkZXMoZS5pZCkpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09IDEpXHJcbiAgICAgIHtcclxuICAgICAgICBzZWxlY3Rpb25MYWJlbCA9IHNlbGVjdGVkRWxlbWVudHNbMF0ubGFiZWw7XHJcbiAgICAgIH0gICAgICBcclxuICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAxKVxyXG4gICAgICB7XHJcbiAgICAgICAgc2VsZWN0aW9uTGFiZWwgPSBgWyR7c2VsZWN0ZWRFbGVtZW50cy5tYXAoZSA9PiBgXCIke2UubGFiZWx9XCJgKS5qb2luKCcsICcpfV1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRWxlbWVudDogYW55ID0gdGhpcy5kYXRhc291cmNlLmZpbmQoZSA9PiBlLmlkID09IHRoaXMuYmluZCk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgc2VsZWN0aW9uTGFiZWwgPSBzZWxlY3RlZEVsZW1lbnQubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uTGFiZWwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoc2VsZWN0aW9uTGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgKm5nSWY9XCIhbXVsdGlwbGU7IGVsc2UgbXVsdGlTZWxlY3RcIiBjbGFzcz1cImZsZXhcIj5cclxuICA8cC1kcm9wZG93biBcclxuICAgIFtvcHRpb25zXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJiaW5kXCJcclxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgb3B0aW9uVmFsdWU9XCJpZFwiXHJcbiAgICBbbGF6eV09XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBbbG9hZGluZ109XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBmaWx0ZXJCeT1cImxhYmVsXCIgXHJcbiAgICBbZmlsdGVyXT1cInRydWVcIiBcclxuICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCIgXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBcclxuICAgIChvbkNoYW5nZSk9XCJiaW5kVmFsdWVDaGFuZ2VkKCRldmVudClcIiBcclxuICAgIChvbkhpZGUpPVwib25IaWRlKClcIiAob25TaG93KT1cIm9uT3BlbigpXCIgKG9uRmlsdGVyKT1cInNlYXJjaFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwiY2xlYXJTZWxlY3RlZFZhbHVlKClcIiAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNBciA/ICdwLWRyb3Bkb3duLWNsZWFyLWljb25BUic6ICdwLWRyb3Bkb3duLWNsZWFyLWljb25GUidcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCIgXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwdC0yIHB4LTJcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRpdGxlPVwidGl0bGUtc2VhcmNoLWNvbWJvLU91dnJpclwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wbHVzXCIgdGl0bGU9XCJ0aXRsZS1zZWFyY2gtY29tYm8tQWpvdXRlclwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIlxyXG4gICAgICAgICAgdGl0bGU9XCJMaXN0ZXIgbGVzIGFydGljbGVzIHBpdm90w6lzXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWR2YW5jZWRTZWFyY2hDb21wb25lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93Q29uc3VsdEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCIgdGl0bGU9XCJ0aXRsZS1zZWFyY2gtY29tYm8tQ29uc3VsdGVyXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwiY29uc3VsdEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93VXBkYXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiB0aXRsZT1cInRpdGxlLXNlYXJjaC1jb21iby11cGRhdGVcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIChjbGljayk9XCJ1cGRhdGVFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTMgZ2FwLTJcIj5cclxuICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBcGlFcnJvcjsgZWxzZSBhcGlFcnJvclwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRhc291cmNlRW1wdHkgJiYgIWlzRmlsdGVyaW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdzZWFyY2hfY29tYm9fbm9fZWxlbWVudCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc05vUmVzdWx0QWZ0ZXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19yZXN1bHQnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXBpRXJyb3I+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1vcmFuZ2UtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICB7eyAnc2VhcmNoX2NvbWJvX2xvYWRfZXJyb3InIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtc2VsZWN0ZWRPcHRpb24+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3NlbGVjdGVkT3B0aW9uLmxhYmVsfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0b29sdGlwU3R5bGVDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsU2VsZWN0ZWRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZE9wdGlvbiAmJiBnZXRTdGF0dXNPcHRpb24oc2VsZWN0ZWRPcHRpb24ubGFiZWwpIGFzIG9wdFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCI+XHJcbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsU2VsZWN0ZWQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC10YXJnZXQgcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICA8ZGl2IHBUb29sdGlwPVwie3t0YXJnZXQubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RhdHVzT3B0aW9uKHRhcmdldC5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctdG9wXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7e3RhcmdldC5sYWJlbH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE9wdGlvbj5cclxuICAgICAgICAgIDxzcGFuPnt7dGFyZ2V0LmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtZHJvcGRvd24+XHJcblxyXG4gIDwhLS0gQnViYmxlIEluZm8gLS0+XHJcbiAgPFRzaS1CdWJibGUtSW5mbyBbaW5mb1RleHRdPVwiaW5mb1RleHRcIj48L1RzaS1CdWJibGUtSW5mbz5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtdWx0aVNlbGVjdD5cclxuICA8cC1tdWx0aVNlbGVjdFxyXG4gICAgI211bHRpU2VsZWN0RWxlbWVudFxyXG4gICAgW29wdGlvbnNdPVwiZ3JvdXBwZWREYXRhU291cmNlXCJcclxuICAgIFtncm91cF09XCJ0cnVlXCIgXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIFtvcHRpb25MYWJlbF09XCInbGFiZWwnXCJcclxuICAgIFtvcHRpb25WYWx1ZV09XCInaWQnXCJcclxuICAgIFtsb2FkaW5nXT1cIiFkYXRhTG9hZGVkXCJcclxuICAgIFtmaWx0ZXJCeV09XCInbGFiZWwnXCJcclxuICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19jb3VudCcgfCBsb2NhbGl6ZVwiXHJcbiAgICBbbWF4U2VsZWN0ZWRMYWJlbHNdPVwibWF4U2VsZWN0ZWRMYWJlbHNcIlxyXG4gICAgW3N0eWxlXT1cInsnbWF4LXdpZHRoJzogbWF4V2lkdGgsICd3aWR0aCc6JzEwMCUnLCAnaGVpZ2h0JzogJzEuN3JlbSd9XCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCJcclxuICAgIHBhbmVsU3R5bGVDbGFzcz1cInRzaS1tdWx0aXNlbGVjdC1wYW5lbFwiXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKG9uUGFuZWxTaG93KT1cIm9uT3BlbigpXCJcclxuICAgIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbcFRvb2x0aXBdPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA/IG11bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1vcHRpb24+XHJcbiAgICAgIDxkaXYgI2xhYmVsUmVmIGNsYXNzPVwidHNpLW11bHRpc2VsZWN0LW9wdGlvbi1sYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHRvb2x0aXBBcHBlbmRUbz1cImJvZHlcIiBbcFRvb2x0aXBdPVwiaXNUZXh0T3ZlcmZsb3dpbmcobGFiZWxSZWYpID8gb3B0aW9uLmxhYmVsIDogbnVsbFwiPlxyXG4gICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+ICBcclxuICA8L3AtbXVsdGlTZWxlY3Q+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPCEtLSBJZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoOyBlbHNlIG5vSXRlbXNcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfdGl0bGUnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICh7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSlcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHVsIGNsYXNzPVwibS0wIHBsLTNcIj5cclxuICAgICAgICAgIDwhLS0gU2hvdyBvbmx5IGZpcnN0IDEwIGl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0RWxlbWVudClcIj5cclxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gU2hvdyBtZXNzYWdlIGlmIG1vcmUgdGhhbiAxMCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxMFwiIGNsYXNzPVwidGV4dC1zbSBtdC0xIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgIHt7IG11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMTAgfX1cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX21vcmVfbWVzc2FnZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIElmIG5vIGl0ZW1zIHNlbGVjdGVkIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vSXRlbXM+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtNTAwXCI+XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19lbXB0eScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==