gamma-app-controller 1.1.9 → 1.1.12

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.
Files changed (31) hide show
  1. package/esm2020/lib/application-controller/application-controller.module.mjs +10 -4
  2. package/esm2020/lib/application-controller/application-dataset-call.service.mjs +19 -4
  3. package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +19 -4
  4. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-json/create-dataset-json.component.mjs +1 -1
  5. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +5 -5
  6. package/esm2020/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.mjs +6 -5
  7. package/esm2020/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.mjs +5 -5
  8. package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +12 -7
  9. package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +25 -6
  10. package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +28 -7
  11. package/esm2020/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +50 -26
  12. package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +3 -8
  13. package/esm2020/lib/application-controller/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +154 -26
  14. package/esm2020/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +124 -2
  15. package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +5 -5
  16. package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +9 -21
  17. package/esm2020/lib/application-controller/support-components/dash-today-previous/dash-today-previous.component.mjs +1 -2
  18. package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +36 -4
  19. package/esm2020/lib/application-controller/support-components/single-card/single-card.component.mjs +274 -0
  20. package/fesm2015/gamma-app-controller.mjs +799 -169
  21. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  22. package/fesm2020/gamma-app-controller.mjs +795 -168
  23. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  24. package/lib/application-controller/application-controller.module.d.ts +12 -11
  25. package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +1 -0
  26. package/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +13 -3
  27. package/lib/application-controller/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +4 -0
  28. package/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +4 -0
  29. package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +11 -0
  30. package/lib/application-controller/support-components/single-card/single-card.component.d.ts +59 -0
  31. package/package.json +1 -1
@@ -19,6 +19,7 @@ import * as i14 from "../../support-components/table-with-bar/table-with-bar.com
19
19
  import * as i15 from "../../shared/loader/loader.component";
20
20
  import * as i16 from "../../common-header/common-header.component";
21
21
  import * as i17 from "../../support-components/dash-today-previous/dash-today-previous.component";
22
+ import * as i18 from "../../support-components/single-card/single-card.component";
22
23
  export class CreateCompViewComponent {
23
24
  constructor(toastr, commonService, service, kpiService, router, activatedRoute, environment) {
24
25
  this.toastr = toastr;
@@ -218,7 +219,12 @@ export class CreateCompViewComponent {
218
219
  };
219
220
  const filter = filterdata.find(f => f.hasOwnProperty(mapping.localColumn));
220
221
  if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
221
- resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
222
+ if (mapping.formatter && mapping.formatter !== "") {
223
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
224
+ }
225
+ else {
226
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
227
+ }
222
228
  }
223
229
  if (filter) {
224
230
  if (mapping.defaultValue === "") {
@@ -231,7 +237,12 @@ export class CreateCompViewComponent {
231
237
  resultObj.value = value;
232
238
  }
233
239
  if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
234
- resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
240
+ if (mapping.formatter && mapping.formatter !== "") {
241
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
242
+ }
243
+ else {
244
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
245
+ }
235
246
  }
236
247
  }
237
248
  }
@@ -259,7 +270,12 @@ export class CreateCompViewComponent {
259
270
  dataset.config.queryConfig.mapedFilters.forEach((filter) => {
260
271
  let datecolumn = filter.serverColumn.toLowerCase();
261
272
  if (datecolumn.includes('date') && typeof filter.dataType === 'string') {
262
- serviceJson[filter.serverColumn] = moment(filter.defaultValue, "YYYYMMDD").format(this.environment.dataFormat);
273
+ if (filter.formatter && filter.formatter !== "") {
274
+ serviceJson[filter.serverColumn] = moment(filter.defaultValue, "YYYY-MM-DD").format(filter.formatter);
275
+ }
276
+ else {
277
+ serviceJson[filter.serverColumn] = moment(filter.defaultValue, "YYYY-MM-DD").format(this.environment.dataFormat);
278
+ }
263
279
  }
264
280
  else {
265
281
  serviceJson[filter.serverColumn] = filter.defaultValue;
@@ -542,7 +558,12 @@ export class CreateCompViewComponent {
542
558
  value: mapping.defaultValue
543
559
  };
544
560
  if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
545
- resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
561
+ if (mapping.formatter && mapping.formatter !== "") {
562
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
563
+ }
564
+ else {
565
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
566
+ }
546
567
  }
547
568
  result.push(resultObj);
548
569
  });
@@ -550,10 +571,10 @@ export class CreateCompViewComponent {
550
571
  }
551
572
  }
552
573
  CreateCompViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateCompViewComponent, deps: [{ token: i1.ToastrService }, { token: i2.CommonService }, { token: i3.ApplicationContentService }, { token: i4.kpicommonService }, { token: i5.Router }, { token: i5.ActivatedRoute }, { token: APP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
553
- CreateCompViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateCompViewComponent, selector: "app-create-comp-view", inputs: { kpiTreeData: "kpiTreeData", isHeader: "isHeader", selectedViewId: "selectedViewId" }, ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\"\n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n <ng-container\n *ngIf=\"componentName == 'GammaGeoChartComponent' && componentName != 'GammaTableWithPercentageComponent'\">\n <!-- <app-gamma-geo-chart></app-gamma-geo-chart> -->\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i9.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.GeoMapComponent, selector: "app-geo-map", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i12.DashChartComponent, selector: "app-dash-chart", inputs: ["datasetmodal"], outputs: ["getChartConfigOutPut"] }, { kind: "component", type: i13.DashTableComponent, selector: "app-dash-table", inputs: ["datasetmodal"], outputs: ["getTableConfigOutPut"] }, { kind: "component", type: i14.TableWithBarComponent, selector: "app-table-with-bar", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i15.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i16.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }, { kind: "component", type: i17.DashTodayPreviousComponent, selector: "lib-dash-today-previous", inputs: ["datasetmodal"], outputs: ["gettodayPreviousConfigOutPut"] }] });
574
+ CreateCompViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateCompViewComponent, selector: "app-create-comp-view", inputs: { kpiTreeData: "kpiTreeData", isHeader: "isHeader", selectedViewId: "selectedViewId" }, ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\"\n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n <ng-container\n *ngIf=\"componentName == 'GammaGeoChartComponent' && componentName != 'GammaTableWithPercentageComponent'\">\n <!-- <app-gamma-geo-chart></app-gamma-geo-chart> -->\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammSingleNumberCardComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammaTodayPreviousComponent'\">\n <lib-single-card [datasetmodal]=\"dataSourceModal\"\n (getSingleCardConfigOutPut)=\"getEmitNewOtherSetCongig($event)\">\n </lib-single-card>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i9.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.GeoMapComponent, selector: "app-geo-map", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i12.DashChartComponent, selector: "app-dash-chart", inputs: ["datasetmodal"], outputs: ["getChartConfigOutPut"] }, { kind: "component", type: i13.DashTableComponent, selector: "app-dash-table", inputs: ["datasetmodal"], outputs: ["getTableConfigOutPut"] }, { kind: "component", type: i14.TableWithBarComponent, selector: "app-table-with-bar", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i15.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i16.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }, { kind: "component", type: i17.DashTodayPreviousComponent, selector: "lib-dash-today-previous", inputs: ["datasetmodal"], outputs: ["gettodayPreviousConfigOutPut"] }, { kind: "component", type: i18.SingleCardComponent, selector: "lib-single-card", inputs: ["datasetmodal"], outputs: ["getSingleCardConfigOutPut"] }] });
554
575
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateCompViewComponent, decorators: [{
555
576
  type: Component,
556
- args: [{ selector: 'app-create-comp-view', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\"\n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n <ng-container\n *ngIf=\"componentName == 'GammaGeoChartComponent' && componentName != 'GammaTableWithPercentageComponent'\">\n <!-- <app-gamma-geo-chart></app-gamma-geo-chart> -->\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
577
+ args: [{ selector: 'app-create-comp-view', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\"\n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n <ng-container\n *ngIf=\"componentName == 'GammaGeoChartComponent' && componentName != 'GammaTableWithPercentageComponent'\">\n <!-- <app-gamma-geo-chart></app-gamma-geo-chart> -->\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammSingleNumberCardComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammaTodayPreviousComponent'\">\n <lib-single-card [datasetmodal]=\"dataSourceModal\"\n (getSingleCardConfigOutPut)=\"getEmitNewOtherSetCongig($event)\">\n </lib-single-card>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
557
578
  }], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i2.CommonService }, { type: i3.ApplicationContentService }, { type: i4.kpicommonService }, { type: i5.Router }, { type: i5.ActivatedRoute }, { type: undefined, decorators: [{
558
579
  type: Inject,
559
580
  args: [APP_ENVIRONMENT]
@@ -565,4 +586,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
565
586
  type: Input,
566
587
  args: ['selectedViewId']
567
588
  }] } });
568
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEQsTUFBTSxPQUFPLHVCQUF1QjtJQWdEbEMsWUFDVSxNQUFxQixFQUN0QixhQUE0QixFQUMzQixPQUFrQyxFQUNsQyxVQUE0QixFQUM1QixNQUFjLEVBQ2QsY0FBOEIsRUFDTCxXQUFnQjtRQU56QyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDTCxnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQTlDbkQsb0JBQWUsR0FBUSxFQUFFLENB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QXZEZCx1QkFBdUIsNEpDaEJwQyxpc05BMEdBOzJGRDFGYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCOzswQkEyRDdCLE1BQU07MkJBQUMsZUFBZTs0Q0F0RGhCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBNkJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUYsY0FBYztzQkFEakIsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9rcGktc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLWNvbXAtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtY29tcC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbXBWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkga3BpVHJlZURhdGE6IGFueVxuICBpc0xvYWRlcjogYm9vbGVhbjtcbiAgaXNHZW5lcmF0ZTogYm9vbGVhbjtcbiAgaXNDcmVhdGVOZXdWaWV3OiBib29sZWFuO1xuICBpc0twaVNlbGVjdGVkOiBib29sZWFuO1xuICBpc0twaUNvbmZpZ1NlbGVjdGVkOiBib29sZWFuO1xuICBhcGlDb25maWdEYXRhOiBhbnk7XG4gIHNpbmdsZURhdGFTZXRDb25maWc6IGFueTtcbiAgc2VsZWN0ZWREYXRhU2V0OiBhbnkgPSB7fTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnk7XG5cbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICBpc0R1cGxpZGF0ZVZpZXc6IGJvb2xlYW47XG4gIGlzRmlsdGVySW5wdXRzOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkRGF0YVNldE9uZWRpdDogYW55ID0ge307XG4gIHNlbGVjdGVkVmlld1R5cGU6IGFueTtcbiAgY3JlYXRDb21wVmlld09iamVjdDogYW55ID0ge307XG4gIGNvbXBvbmVudE5hbWVzT3RoZXJzID0gW1xuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJUb2RheSB2cyBQcmV2aW91cyBEYXkgXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiVGFibGUgVmlldyB3aXRoIHBlcmNlbnRhZ2VcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlNpbmdsZSBOdW1iZXIgQ2FyZFwiIH0sXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFHZW9DaGFydENvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJHZW8gQ2hhcnRcIiB9XG4gIF1cbiAgY29tcG9uZW50TmFtZTogYW55O1xuXG4gIGRlZmF1bHRTdGFydERhdGU7XG4gIGRlZmF1bHRFbmREYXRlO1xuICBpbnB1dFZpZXdJZDogYW55O1xuXG4gIEBJbnB1dCgpIGlzSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCdzZWxlY3RlZFZpZXdJZCcpXG4gIHNldCBzZWxlY3RlZFZpZXdJZCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFZpZXdJZCA9IHZhbHVlO1xuICAgICAgdGhpcy5nZXREYXRhU2V0KCk7XG4gICAgfVxuXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2U6IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuXG4gICkge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMzAnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgXCJ2aWV3TGFiZWxcIjogXCJcIixcbiAgICAgIFwidmlld1R5cGVcIjogdGhpcy5zZWxlY3RlZFZpZXdUeXBlXG4gICAgfVxuXG5cbiAgICB0aGlzLmdldERhdGFTZXQoKTtcblxuICB9XG4gIGdldFZpZXdUeXBlKGUpIHtcbiAgICB0aGlzLmlzS3BpQ29uZmlnU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzS3BpU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICB9XG5cblxuICBnZXREYXRhU2V0KCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgbGV0IHZpZXdJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3ZpZXdJZCddO1xuICAgICAgICBsZXQgY29udGVudFR5cGUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydjb250ZW50VHlwZSddO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgPT0gXCJjbG9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5pc0R1cGxpZGF0ZVZpZXcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmlld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnB1dFZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodGhpcy5pbnB1dFZpZXdJZCk7XG4gICAgICAgIH1cblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFZpZXdCeUlkKHZpZXdJZCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlnKHZpZXdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gZGF0YS52aWV3VHlwZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YS5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcblxuICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgIT09ICdzcWxRdWVyeScpIHtcbiAgICAgICAgLy8gICB0aGlzLmNyZWF0ZU5ld1ZpZXcoKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldERhdGFTZXROYW1lKGRhdGFzZXRJZCkge1xuICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YXNldElkKTtcbiAgICBpZiAoZm91bmRPYmplY3QpIHtcbiAgICAgIHJldHVybiBmb3VuZE9iamVjdC5kYXRhc2V0TmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhU2V0RGV0YWlscyhldmVudCkge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZXZlbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInF1ZXJ5YnVpbGRlclwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJwbGFpbmpzb25cIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzcWxRdWVyeVwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0S3BpU2luZ2xlQ29uZmlnKGV2ZW50KSB7XG4gICAgdGhpcy5zaW5nbGVEYXRhU2V0Q29uZmlnID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5pc0twaUNvbmZpZ1NlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdlbmVyYXRlRGF0YVNldCgpIHtcblxuICB9XG5cbiAgZ2V0RGF0YVNldEZvck1vbmdvKGRhdGFzZXQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCBhcGlKc29uT2JqZWN0ID0ge1xuICAgICAgcmVxdWVzdElkOiBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQsXG4gICAgfTtcbiAgICBpZiAoZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzICYmIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFwaUpzb25PYmplY3QsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtb25fY29uZmlnID0gdGhpcy5rcGlTZXJ2aWNlLmdldEFsbFNldmljZUFwaUpzb24oYXBpSnNvbk9iamVjdCk7XG4gICAgdGhpcy5zZXJ2aWNlLmdldERhdGEobW9uX2NvbmZpZywgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JJbXBhbGEoZGF0YXNldCkge1xuICAgIGxldCByZXF1ZXN0ID0gZGF0YXNldC5jb25maWcucXVlcnlDb25maWc7XG4gICAgdGhpcy5kYXRhU291cmNlTW9kYWwgPSB7fTtcbiAgICBsZXQgdHJhbnNmb3JtZWRPYmplY3Q6IGFueSA9IHt9O1xuICAgIGZvciAobGV0IGl0ZW0gb2YgcmVxdWVzdC5yZXFGaWVsZHMpIHtcbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xuICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuICAgICAgaWYgKGtleSA9PT0gJ3N0YXJ0RGF0ZScpIHtcbiAgICAgICAgdHJhbnNmb3JtZWRPYmplY3QucmVjb3JkRGF0ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtZWRPYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ21lYXN1cmVzJ10gPSByZXF1ZXN0Lm1lYXN1cmVzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG5cbiAgICAvLyB0cmFuc2Zvcm1lZE9iamVjdFsnZmlsdGVycyddID0gcmVxdWVzdC5tYXBlZEZpbHRlcnM7XG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoW10sIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcblxuICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydzb3J0ZXJzJ10gPSByZXF1ZXN0LnNvcnRlcnM7XG4gICAgdHJhbnNmb3JtZWRPYmplY3RbXCJwYWdpbmF0aW9uUmVxdWlyZWRcIl0gPSBmYWxzZTtcbiAgICBjb25zb2xlLmxvZyh0cmFuc2Zvcm1lZE9iamVjdCk7XG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMudHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMocmVxdWVzdC5jb2x1bW5zKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnZGF0YXNldCddO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydjb2x1bW5EYXRhJ10gPSBjb2x1bW5EYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH1cbiAgICB9KVxuXG4gIH1cblxuXG4gIHRyYW5zZm9ybUNvbHVtbnNGb3JDb2x1bW5zKGlucHV0Q29sdW1ucykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBbXTtcblxuICAgIGlucHV0Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgICBkYXRhRmllbGQ6IGNvbC5kYXRhRmllbGQsXG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGNhcHRpb246IGNvbC5jYXB0aW9uLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG5cbiAgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoZmlsdGVyZGF0YSwgbWFwRGF0YSkge1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIG1hcERhdGEuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICBkYXRhVHlwZTogbWFwcGluZy5kYXRhVHlwZSxcbiAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGRhdGFzZXQ6IGFueSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IGZpbHRlcnMgPSB7XG4gICAgICBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGVcbiAgICB9XG4gICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGlmIChmaWx0ZXJzLmhhc093blByb3BlcnR5KGZpbHRlci5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyLmRlZmF1bHRWYWx1ZSA9IGZpbHRlcnNbZmlsdGVyLmxvY2FsQ29sdW1uXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcInBvc3RcIikge1xuICAgICAgbGV0IHNlcnZpY2VKc29uOiBhbnkgPSB7fTtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICBsZXQgZGF0ZWNvbHVtbiA9IGZpbHRlci5zZXJ2ZXJDb2x1bW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGRhdGVjb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgZmlsdGVyLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWU1NRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldFNpbXBsZUFwaVBvc3RSZXF1ZXN0KGRhdGFzZXQuY29uZmlnLmFwaSwgc2VydmljZUpzb24pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwiZ2V0XCIpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBHRVQgVVJMIHdpdGggcGFyYW1ldGVyc1xuICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXF1ZXN0VXJsICs9IGAke2ZpbHRlci5zZXJ2ZXJDb2x1bW59PSR7ZmlsdGVyLmRlZmF1bHRWYWx1ZX1gO1xuICAgICAgICBpZiAoaW5kZXggPCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYWtlIEdFVCByZXF1ZXN0XG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpR2V0UmVxdWVzdChyZXF1ZXN0VXJsKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RWRpdERhdGFTZXQoKSB7XG4gICAgbGV0IGNvbnRlbnRWaWV3SWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkKSB7XG4gICAgICBpZiAoY29udGVudFZpZXdJZCkge1xuICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgJ2RhdGFzZXRJZCc6IHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICd2aWV3SWQnOiB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0lkLFxuICAgICAgICAgICAgJ3BhZ2VJZCc6IGNvbnRlbnRWaWV3SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25EYXRhc2V0J10sIG5hdmlnYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICdkYXRhc2V0SWQnOiB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAndmlld0lkJzogdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdJZCxcblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhdGFzZXQnXSwgbmF2aWdhdGlvbik7XG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuICBjcmVhdGVOZXdWaWV3KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwibW9uZ29cIikge1xuICAgICAgdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28odGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJxdWVyeWJ1aWxkZXJcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG5cbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclBsYWluSnNvbih0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cbiAgfVxuXG5cbiAgY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IHtcbiAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICBcImFwaVwiOiBcIlwiLFxuICAgICAgXCJkaXNwbGF5VHlwZVwiOiBcImNoYXJ0XCIsXG4gICAgICBcImZvcm1hdGVcIjogXCJcIixcbiAgICAgIFwiY29tcG9uZW50TmFtZVwiOiB0aGlzLmNvbXBvbmVudE5hbWUsXG4gICAgICBcImRhdGFDb25maWdcIjoge1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWRhdGVWaWV3KSB7XG4gICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld0lkJ10pIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IFVwZGF0ZSBTdWNjZXNzZnVsbHknKVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cblxuXG4gIGdldENhcGl0YWxpemUoaXRlbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9TcGFjZVNlcGFyYXRlZENhcGl0YWxpemVkKGl0ZW0pXG4gIH1cbiAgZ2V0RmlsdGVyKGl0ZW0pIHtcbiAgICBsZXQgY29sX25hbWUgPSBpdGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbF9uYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhcnREYXRlQ2hhbmdlKGUsIGl0ZW0pIHtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICBpdGVtLmRlZmF1bHRWYWx1ZSA9IG1vbWVudChlLnZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uZGVmYXVsdFZhbHVlID0gbW9tZW50KGUudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICB9XG5cbiAgfVxuXG4gIGdvdG9WaWV3c3NldCgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuICB9XG5cblxuICBnZXRFbWl0TmV3VGFibGVDb25maWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cblxuICBnZXRFbWl0TmV3Q2hhcnRDb25naWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cbiAgZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKGRhdGEpIHtcbiAgICBkYXRhWydkYXRhc2V0SWQnXSA9IHRoaXMuc2VsZWN0ZWREYXRhU2V0WydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0ZVZpZXdDb25maWcoZGF0YSk7XG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuICBjcmVhdGVWaWV3Q29uZmlnKGRhdGEpIHtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2RhdGFzZXRJZCddID0gZGF0YVsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0Wyd2aWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsna3BpQ29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsna3BpQ29uZmlnJ10uY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50TmFtZTtcbiAgICB9XG4gICAgY29uc29sZS5sb2codGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KTtcbiAgICBpZiAodGhpcy5pc0R1cGxpZGF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0Wyd2aWV3SWQnXSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UudXBkYXRlQXBwVmlld0NvbmZpZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgVXBkYXRlIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVBcHBDb25maWdWaWV3KCkge1xuICAgIHRoaXMuc2VydmljZS5jcmVhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IENyZWF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgIFwidmlld1R5cGVcIjogXCJcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgLy8gaWYgKHRoaXMuaXNIZWFkZXIpIHtcbiAgICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdGhpcy5hZGROZXdWaWV3KCk7XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYWRkTmV3VmlldygpIHtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICBcInZpZXdOYW1lXCI6IFwiXCIsXG4gICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgfVxuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0ge307XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICd2aWV3SWQnOiBudWxsLFxuICAgICAgICAnY29udGVudFR5cGUnOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICB9KVxuICB9XG5cblxuICBnZXREYXRhc2V0Rm9yUGxhaW5Kc29uKGRhdGFzZXQpIHtcbiAgICBsZXQgcmVxdWVzdGFwaSA9IGRhdGFzZXQuY29uZmlnLmFwaSArICc/ZGF0YXNldElkPScgKyBkYXRhc2V0LmRhdGFzZXRJZDtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIHRoaXMuc2VydmljZS5nZXRKc29uRGF0YXNldFBheWxvYWQocmVxdWVzdGFwaSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IGRhdGEuc2xpY2UoMCwgMSk7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICdkYkNvbmZpZyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRiQ29uZmlnLFxuICAgICAgJ2RhdGFiYXNlTmFtZSc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRhdGFiYXNlTmFtZSxcbiAgICAgICdmaWx0ZXJzJzogdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgJ3RlbXBsYXRlUXVlcnknOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy50ZW1wbGF0ZVF1ZXJ5LFxuICAgICAgJ2VucmljaG1lbnRzJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZW5yaWNobWVudHMsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmdlbmVyaWNTcWxRdWVyeVJlc3BvbnNlKHJlcXVlc3RBcCwgcmVxdWVzdF9wYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwobWFwRGF0YSkge1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIG1hcERhdGEuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICBkYXRhVHlwZTogbWFwcGluZy5kYXRhVHlwZSxcbiAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICBhbGlhc0NvbHVtbk5hbWU6IG1hcHBpbmcubG9jYWxDb2x1bW4sXG4gICAgICAgIC8vIHZhbHVlOiAobWFwcGluZy5vcGVyYXRvck5hbWUgPT0gXCJpblwiIHx8IG1hcHBpbmcub3BlcmF0b3JOYW1lID09IFwibm90SW5cIikgPyBbbWFwcGluZy5kZWZhdWx0VmFsdWVdIDogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMFwiPlxuICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIidWaWV3cyBFZGl0b3InXCIgKm5nSWY9XCJpc0hlYWRlclwiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMyBwLTQgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1tZCBkYXJrOmJnLWdyYXktODAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkRhdGFzZXQgTGlzdCA8c3BhbiAqbmdJZj1cImlzRmlsdGVySW5wdXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwIGN1cnNvci1wb2ludGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdldEVkaXREYXRhU2V0KClcIj48L2k+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImRhdGFTZXR0YWJsZURhdGFTb3VyY2VcIiAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0RGF0YVNldERldGFpbHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJkYXRhc2V0TmFtZVwiIHZhbHVlRXhwcj1cImRhdGFzZXRJZFwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZERhdGFTZXRPbmVkaXQuZGF0YXNldElkXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+U2VsZWN0IFZpZXcgVHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnY2hhcnQnLCd0YWJsZScsJ2dyb3VwVGFibGUnLCdvdGhlcnMnXVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldFZpZXdUeXBlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+U2VsZWN0IENvbXBvbmVudDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJjb21wb25lbnROYW1lc090aGVyc1wiIGRpc3BsYXlFeHByPVwiaXRlbVwiIHZhbHVlRXhwcj1cImNvbXBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21wb25lbnROYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiY3JlYXRDb21wVmlld09iamVjdC52aWV3TmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5WaWV3IExhYmVsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdMYWJlbFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ZpbHRlcklucHV0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXF1ZXN0IG9mIHNlbGVjdGVkRGF0YVNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0xXCI+IHt7Z2V0Q2FwaXRhbGl6ZShyZXF1ZXN0LmxvY2FsQ29sdW1uKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCBkaXNwbGF5Rm9ybWF0PVwieXl5eS1NTS1kZFwiIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzdGFydERhdGVDaGFuZ2UoJGV2ZW50LHJlcXVlc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInJlcXVlc3QuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEZpbHRlcihyZXF1ZXN0LmxvY2FsQ29sdW1uKVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC01IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtNCBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZU5ld1ZpZXcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTUgYm9yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBjaGFydCB2aWV3IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dlbmVyYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICdjaGFydCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZGFzaC1jaGFydCBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldENoYXJ0Q29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdDaGFydENvbmdpZygkZXZlbnQpXCI+PC9hcHAtZGFzaC1jaGFydD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIHRhYmxlIHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICd0YWJsZScgfHwgc2VsZWN0ZWRWaWV3VHlwZSA9PSAnZ3JvdXBUYWJsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZGFzaC10YWJsZSBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFRhYmxlQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdUYWJsZUNvbmZpZygkZXZlbnQpXCI+PC9hcHAtZGFzaC10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIG90aGVycyB2aWV3ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ290aGVycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnROYW1lID09ICdHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC10YWJsZS13aXRoLWJhciBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVPdGhlckNvbXBvbmVudFZpZXcpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj48L2FwcC10YWJsZS13aXRoLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSA9PSAnR2FtbWFHZW9DaGFydENvbXBvbmVudCcgJiYgIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtZ2FtbWEtZ2VvLWNoYXJ0PjwvYXBwLWdhbW1hLWdlby1jaGFydD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1nZW8tbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWdlby1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZGFzaC10b2RheS1wcmV2aW91cyBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldHRvZGF5UHJldmlvdXNDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj48L2xpYi1kYXNoLXRvZGF5LXByZXZpb3VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
589
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3BELE1BQU0sT0FBTyx1QkFBdUI7SUFnRGxDLFlBQ1UsTUFBcUIsRUFDdEIsYUFBNEIsRUFDM0IsT0FBa0MsRUFDbEMsVUFBNEIsRUFDNUIsTUFBYyxFQUNkLGNBQThCLEVBQ0wsV0FBZ0I7UUFOekMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0wsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUE5Q25ELG9CQUFlLEdBQVEsRUFBRSxD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S0FBSztnQkFFRixjQUFjO3NCQURqQixLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLy4uLy4uL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsga3BpY29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2twaS1zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtY29tcC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1jb21wLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtY29tcC12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ29tcFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBrcGlUcmVlRGF0YTogYW55XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBpc0dlbmVyYXRlOiBib29sZWFuO1xuICBpc0NyZWF0ZU5ld1ZpZXc6IGJvb2xlYW47XG4gIGlzS3BpU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzS3BpQ29uZmlnU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGFwaUNvbmZpZ0RhdGE6IGFueTtcbiAgc2luZ2xlRGF0YVNldENvbmZpZzogYW55O1xuICBzZWxlY3RlZERhdGFTZXQ6IGFueSA9IHt9O1xuICBkYXRhU291cmNlTW9kYWw6IGFueTtcblxuICBkYXRhU2V0dGFibGVEYXRhU291cmNlOiBhbnk7XG4gIGlzRHVwbGlkYXRlVmlldzogYm9vbGVhbjtcbiAgaXNGaWx0ZXJJbnB1dHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWREYXRhU2V0T25lZGl0OiBhbnkgPSB7fTtcbiAgc2VsZWN0ZWRWaWV3VHlwZTogYW55O1xuICBjcmVhdENvbXBWaWV3T2JqZWN0OiBhbnkgPSB7fTtcbiAgY29tcG9uZW50TmFtZXNPdGhlcnMgPSBbXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlRvZGF5IHZzIFByZXZpb3VzIERheSBcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJUYWJsZSBWaWV3IHdpdGggcGVyY2VudGFnZVwiIH0sXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiU2luZ2xlIE51bWJlciBDYXJkXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYUdlb0NoYXJ0Q29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIkdlbyBDaGFydFwiIH1cbiAgXVxuICBjb21wb25lbnROYW1lOiBhbnk7XG5cbiAgZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgZGVmYXVsdEVuZERhdGU7XG4gIGlucHV0Vmlld0lkOiBhbnk7XG5cbiAgQElucHV0KCkgaXNIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ3NlbGVjdGVkVmlld0lkJylcbiAgc2V0IHNlbGVjdGVkVmlld0lkKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlld1R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5nZXRWaWV3QnlJZCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Vmlld0lkID0gdmFsdWU7XG4gICAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGtwaVNlcnZpY2U6IGtwaWNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBASW5qZWN0KEFQUF9FTlZJUk9OTUVOVCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG5cbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCczMCcsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCcxJywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICBcInZpZXdOYW1lXCI6IFwiXCIsXG4gICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgXCJ2aWV3VHlwZVwiOiB0aGlzLnNlbGVjdGVkVmlld1R5cGVcbiAgICB9XG5cblxuICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuXG4gIH1cbiAgZ2V0Vmlld1R5cGUoZSkge1xuICAgIHRoaXMuaXNLcGlDb25maWdTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNLcGlTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gIH1cblxuXG4gIGdldERhdGFTZXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgICBsZXQgdmlld0lkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sndmlld0lkJ107XG4gICAgICAgIGxldCBjb250ZW50VHlwZSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2NvbnRlbnRUeXBlJ107XG4gICAgICAgIGlmIChjb250ZW50VHlwZSA9PSBcImNsb25lXCIpIHtcbiAgICAgICAgICB0aGlzLmlzRHVwbGlkYXRlVmlldyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlld0lkKSB7XG4gICAgICAgICAgdGhpcy5nZXRWaWV3QnlJZCh2aWV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlucHV0Vmlld0lkKSB7XG4gICAgICAgICAgdGhpcy5nZXRWaWV3QnlJZCh0aGlzLmlucHV0Vmlld0lkKTtcbiAgICAgICAgfVxuXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0Vmlld0J5SWQodmlld0lkKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFZpZXdDb25maWcodmlld0lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSBkYXRhO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmlld1R5cGUgPSBkYXRhLnZpZXdUeXBlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVNldCA9IHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZS5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhc2V0SWQgPT09IGRhdGEuZGF0YXNldElkKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRPbmVkaXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmlld1R5cGUgPT0gXCJvdGhlcnNcIikge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVNldFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9IGRhdGFbJ2twaUNvbmZpZyddO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSAhPT0gJ3NxbFF1ZXJ5Jykge1xuICAgICAgICAvLyAgIHRoaXMuY3JlYXRlTmV3VmlldygpO1xuICAgICAgICAvLyB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldE5hbWUoZGF0YXNldElkKSB7XG4gICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhc2V0SWQpO1xuICAgIGlmIChmb3VuZE9iamVjdCkge1xuICAgICAgcmV0dXJuIGZvdW5kT2JqZWN0LmRhdGFzZXROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGFTZXREZXRhaWxzKGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBldmVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicXVlcnlidWlsZGVyXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzaW1wbGVBcGlcIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBnZXRLcGlTaW5nbGVDb25maWcoZXZlbnQpIHtcbiAgICB0aGlzLnNpbmdsZURhdGFTZXRDb25maWcgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmlzS3BpQ29uZmlnU2VsZWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhU2V0KCkge1xuXG4gIH1cblxuICBnZXREYXRhU2V0Rm9yTW9uZ28oZGF0YXNldCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IGFwaUpzb25PYmplY3QgPSB7XG4gICAgICByZXF1ZXN0SWQ6IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZCxcbiAgICB9O1xuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMgJiYgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpSnNvbk9iamVjdCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1vbl9jb25maWcgPSB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxsU2V2aWNlQXBpSnNvbihhcGlKc29uT2JqZWN0KTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YShtb25fY29uZmlnLCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YXNldEZvckltcGFsYShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgZm9yIChsZXQgaXRlbSBvZiByZXF1ZXN0LnJlcUZpZWxkcykge1xuICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICBpZiAoa2V5ID09PSAnc3RhcnREYXRlJykge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdC5yZWNvcmREYXRlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnbWVhc3VyZXMnXSA9IHJlcXVlc3QubWVhc3VyZXM7XG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ2RpbWVuc2lvbnMnXSA9IHJlcXVlc3QuZGltZW5zaW9ucztcblxuICAgIC8vIHRyYW5zZm9ybWVkT2JqZWN0WydmaWx0ZXJzJ10gPSByZXF1ZXN0Lm1hcGVkRmlsdGVycztcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnZmlsdGVycyddID0gdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihbXSwgcmVxdWVzdC5tYXBlZEZpbHRlcnMpO1xuXG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ3NvcnRlcnMnXSA9IHJlcXVlc3Quc29ydGVycztcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFtcInBhZ2luYXRpb25SZXF1aXJlZFwiXSA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKHRyYW5zZm9ybWVkT2JqZWN0KTtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy50cmFuc2Zvcm1Db2x1bW5zRm9yQ29sdW1ucyhyZXF1ZXN0LmNvbHVtbnMpO1xuICAgIHRoaXMuc2VydmljZS5nZXREYXRhKHRyYW5zZm9ybWVkT2JqZWN0LCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhWydkYXRhc2V0J107XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2NvbHVtbkRhdGEnXSA9IGNvbHVtbkRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfVxuICAgIH0pXG5cbiAgfVxuXG5cbiAgdHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMoaW5wdXRDb2x1bW5zKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IFtdO1xuXG4gICAgaW5wdXRDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGNvbHVtbnMucHVzaCh7XG4gICAgICAgIGRhdGFGaWVsZDogY29sLmRhdGFGaWVsZCxcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FwdGlvbjogY29sLmNhcHRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cblxuICB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihmaWx0ZXJkYXRhLCBtYXBEYXRhKSB7XG5cbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgbGV0IHJlc3VsdE9iaiA9IHtcbiAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICBvcGVyYXRvcjogbWFwcGluZy5vcGVyYXRvck5hbWUsXG4gICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVyZGF0YS5maW5kKGYgPT4gZi5oYXNPd25Qcm9wZXJ0eShtYXBwaW5nLmxvY2FsQ29sdW1uKSk7XG4gICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyW21hcHBpbmcubG9jYWxDb2x1bW5dO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICB9KTtcbiAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKG9iaiA9PiBvYmoudmFsdWUgIT09IG51bGwgJiYgb2JqLnZhbHVlICE9PSBcIlwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShkYXRhc2V0OiBhbnkpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCBmaWx0ZXJzID0ge1xuICAgICAgc3RhcnREYXRlOiB0aGlzLmRlZmF1bHRTdGFydERhdGUsXG4gICAgICBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlXG4gICAgfVxuICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShmaWx0ZXIubG9jYWxDb2x1bW4pKSB7XG4gICAgICAgIGZpbHRlci5kZWZhdWx0VmFsdWUgPSBmaWx0ZXJzW2ZpbHRlci5sb2NhbENvbHVtbl07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJwb3N0XCIpIHtcbiAgICAgIGxldCBzZXJ2aWNlSnNvbjogYW55ID0ge307XG4gICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRhdGVjb2x1bW4gPSBmaWx0ZXIuc2VydmVyQ29sdW1uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChkYXRlY29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIGZpbHRlci5kYXRhVHlwZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICAgICBpZiAoZmlsdGVyLmZvcm1hdHRlciAmJiBmaWx0ZXIuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoZmlsdGVyLmZvcm1hdHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXJ2aWNlSnNvbltmaWx0ZXIuc2VydmVyQ29sdW1uXSA9IGZpbHRlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpUG9zdFJlcXVlc3QoZGF0YXNldC5jb25maWcuYXBpLCBzZXJ2aWNlSnNvbikuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJnZXRcIikge1xuICAgICAgLy8gQ29uc3RydWN0IEdFVCBVUkwgd2l0aCBwYXJhbWV0ZXJzXG4gICAgICBsZXQgcmVxdWVzdFVybCA9IGRhdGFzZXQuY29uZmlnLmFwaSArIFwiP1wiO1xuICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJlcXVlc3RVcmwgKz0gYCR7ZmlsdGVyLnNlcnZlckNvbHVtbn09JHtmaWx0ZXIuZGVmYXVsdFZhbHVlfWA7XG4gICAgICAgIGlmIChpbmRleCA8IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmVxdWVzdFVybCArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1ha2UgR0VUIHJlcXVlc3RcbiAgICAgIHRoaXMuc2VydmljZS5nZXRTaW1wbGVBcGlHZXRSZXF1ZXN0KHJlcXVlc3RVcmwpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG5cbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBnZXRFZGl0RGF0YVNldCgpIHtcbiAgICBsZXQgY29udGVudFZpZXdJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQpIHtcbiAgICAgIGlmIChjb250ZW50Vmlld0lkKSB7XG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAnZGF0YXNldElkJzogdGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkLFxuICAgICAgICAgICAgJ3ZpZXdJZCc6IHRoaXMuY3JlYXRDb21wVmlld09iamVjdC52aWV3SWQsXG4gICAgICAgICAgICAncGFnZUlkJzogY29udGVudFZpZXdJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhdGFzZXQnXSwgbmF2aWdhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgJ2RhdGFzZXRJZCc6IHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICd2aWV3SWQnOiB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0lkLFxuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRGF0YXNldCddLCBuYXZpZ2F0aW9uKTtcbiAgICAgIH1cblxuXG4gICAgfVxuICB9XG4gIGNyZWF0ZU5ld1ZpZXcoKSB7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJtb25nb1wiKSB7XG4gICAgICB0aGlzLmdldERhdGFTZXRGb3JNb25nbyh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInF1ZXJ5YnVpbGRlclwiKSB7XG4gICAgICB0aGlzLmdldERhdGFzZXRGb3JJbXBhbGEodGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzaW1wbGVBcGlcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicGxhaW5qc29uXCIpIHtcblxuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9yUGxhaW5Kc29uKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic3FsUXVlcnlcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUodGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLmdldERhdGFzZXRGb3JJbXBhbGEodGhpcy5zZWxlY3RlZERhdGFTZXQpXG4gICAgfVxuICB9XG5cblxuICBjcmVhdGVPdGhlckNvbXBvbmVudFZpZXcoKSB7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydkYXRhc2V0SWQnXSA9IHRoaXMuc2VsZWN0ZWREYXRhU2V0WydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2twaUNvbmZpZyddID0ge1xuICAgICAgXCJzZXJ2aWNlSWRcIjogXCJcIixcbiAgICAgIFwiYXBpXCI6IFwiXCIsXG4gICAgICBcImRpc3BsYXlUeXBlXCI6IFwiY2hhcnRcIixcbiAgICAgIFwiZm9ybWF0ZVwiOiBcIlwiLFxuICAgICAgXCJjb21wb25lbnROYW1lXCI6IHRoaXMuY29tcG9uZW50TmFtZSxcbiAgICAgIFwiZGF0YUNvbmZpZ1wiOiB7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0R1cGxpZGF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0Wyd2aWV3SWQnXSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UudXBkYXRlQXBwVmlld0NvbmZpZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgICAgICAgICBcInZpZXdOYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICAgICAgICAgIFwidmlld1R5cGVcIjogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgVXBkYXRlIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cblxuXG5cbiAgZ2V0Q2FwaXRhbGl6ZShpdGVtOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1NwYWNlU2VwYXJhdGVkQ2FwaXRhbGl6ZWQoaXRlbSlcbiAgfVxuICBnZXRGaWx0ZXIoaXRlbSkge1xuICAgIGxldCBjb2xfbmFtZSA9IGl0ZW0udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sX25hbWUuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGFydERhdGVDaGFuZ2UoZSwgaXRlbSkge1xuICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIGl0ZW0uZGVmYXVsdFZhbHVlID0gbW9tZW50KGUudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbS5kZWZhdWx0VmFsdWUgPSBtb21lbnQoZS52YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxuICAgIH1cblxuICB9XG5cbiAgZ290b1ZpZXdzc2V0KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG4gIH1cblxuXG4gIGdldEVtaXROZXdUYWJsZUNvbmZpZyhkYXRhKSB7XG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuXG4gIGdldEVtaXROZXdDaGFydENvbmdpZyhkYXRhKSB7XG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuICBnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcbiAgICAvLyB0aGlzLmdldFZpZXdDb21wb25lbnRDb25maWcuZW1pdChkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZVZpZXdDb25maWcoZGF0YSkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSBkYXRhWydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IGRhdGFbJ2twaUNvbmZpZyddO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlld1R5cGUgPT0gXCJvdGhlcnNcIikge1xuICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXS5jb21wb25lbnROYW1lID0gdGhpcy5jb21wb25lbnROYW1lO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpO1xuICAgIGlmICh0aGlzLmlzRHVwbGlkYXRlVmlldykge1xuICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdJZCddKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBVcGRhdGUgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUFwcENvbmZpZ1ZpZXcoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAvLyBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB0aGlzLmFkZE5ld1ZpZXcoKTtcblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhZGROZXdWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICB9XG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXRPbmVkaXQgPSB7fTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgJ3ZpZXdJZCc6IG51bGwsXG4gICAgICAgICdjb250ZW50VHlwZSc6IG51bGwsXG4gICAgICB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pXG4gIH1cblxuXG4gIGdldERhdGFzZXRGb3JQbGFpbkpzb24oZGF0YXNldCkge1xuICAgIGxldCByZXF1ZXN0YXBpID0gZGF0YXNldC5jb25maWcuYXBpICsgJz9kYXRhc2V0SWQ9JyArIGRhdGFzZXQuZGF0YXNldElkO1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgdGhpcy5zZXJ2aWNlLmdldEpzb25EYXRhc2V0UGF5bG9hZChyZXF1ZXN0YXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gZGF0YS5zbGljZSgwLCAxKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKGRhdGFzZXQpIHtcbiAgICBsZXQgcmVxdWVzdEFwID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IHJlcXVlc3RfcGFyYW1zID0ge1xuICAgICAgJ2RiQ29uZmlnJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZGJDb25maWcsXG4gICAgICAnZGF0YWJhc2VOYW1lJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZGF0YWJhc2VOYW1lLFxuICAgICAgJ2ZpbHRlcnMnOiB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycyksXG4gICAgICAndGVtcGxhdGVRdWVyeSc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLnRlbXBsYXRlUXVlcnksXG4gICAgICAnZW5yaWNobWVudHMnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5lbnJpY2htZW50cyxcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZpY2UuZ2VuZXJpY1NxbFF1ZXJ5UmVzcG9uc2UocmVxdWVzdEFwLCByZXF1ZXN0X3BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChtYXBEYXRhKSB7XG5cbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgbGV0IHJlc3VsdE9iaiA9IHtcbiAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICBvcGVyYXRvcjogbWFwcGluZy5vcGVyYXRvck5hbWUsXG4gICAgICAgIGFsaWFzQ29sdW1uTmFtZTogbWFwcGluZy5sb2NhbENvbHVtbixcbiAgICAgICAgLy8gdmFsdWU6IChtYXBwaW5nLm9wZXJhdG9yTmFtZSA9PSBcImluXCIgfHwgbWFwcGluZy5vcGVyYXRvck5hbWUgPT0gXCJub3RJblwiKSA/IFttYXBwaW5nLmRlZmF1bHRWYWx1ZV0gOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMFwiPlxuICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIidWaWV3cyBFZGl0b3InXCIgKm5nSWY9XCJpc0hlYWRlclwiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMyBwLTQgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1tZCBkYXJrOmJnLWdyYXktODAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkRhdGFzZXQgTGlzdCA8c3BhbiAqbmdJZj1cImlzRmlsdGVySW5wdXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwIGN1cnNvci1wb2ludGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdldEVkaXREYXRhU2V0KClcIj48L2k+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImRhdGFTZXR0YWJsZURhdGFTb3VyY2VcIiAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0RGF0YVNldERldGFpbHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJkYXRhc2V0TmFtZVwiIHZhbHVlRXhwcj1cImRhdGFzZXRJZFwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZERhdGFTZXRPbmVkaXQuZGF0YXNldElkXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+U2VsZWN0IFZpZXcgVHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnY2hhcnQnLCd0YWJsZScsJ2dyb3VwVGFibGUnLCdvdGhlcnMnXVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldFZpZXdUeXBlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+U2VsZWN0IENvbXBvbmVudDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJjb21wb25lbnROYW1lc090aGVyc1wiIGRpc3BsYXlFeHByPVwiaXRlbVwiIHZhbHVlRXhwcj1cImNvbXBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21wb25lbnROYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiY3JlYXRDb21wVmlld09iamVjdC52aWV3TmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5WaWV3IExhYmVsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdMYWJlbFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ZpbHRlcklucHV0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXF1ZXN0IG9mIHNlbGVjdGVkRGF0YVNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0xXCI+IHt7Z2V0Q2FwaXRhbGl6ZShyZXF1ZXN0LmxvY2FsQ29sdW1uKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCBkaXNwbGF5Rm9ybWF0PVwieXl5eS1NTS1kZFwiIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzdGFydERhdGVDaGFuZ2UoJGV2ZW50LHJlcXVlc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInJlcXVlc3QuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEZpbHRlcihyZXF1ZXN0LmxvY2FsQ29sdW1uKVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC01IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtNCBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZU5ld1ZpZXcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tNSBib3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoYXJ0IHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR2VuZXJhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2NoYXJ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXNoLWNoYXJ0IFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q2hhcnRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIj48L2FwcC1kYXNoLWNoYXJ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBmb3IgdGFibGUgdmlldyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ3RhYmxlJyB8fCBzZWxlY3RlZFZpZXdUeXBlID09ICdncm91cFRhYmxlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXNoLXRhYmxlIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0VGFibGVDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld1RhYmxlQ29uZmlnKCRldmVudClcIj48L2FwcC1kYXNoLXRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBmb3Igb3RoZXJzIHZpZXcgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnb3RoZXJzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudE5hbWUgPT0gJ0dhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRhYmxlLXdpdGgtYmFyIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvYXBwLXRhYmxlLXdpdGgtYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wb25lbnROYW1lID09ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiAgY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1nYW1tYS1nZW8tY2hhcnQ+PC9hcHAtZ2FtbWEtZ2VvLWNoYXJ0PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWdlby1tYXAgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+PC9hcHAtZ2VvLW1hcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wb25lbnROYW1lICE9ICdHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQnICYmIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hR2VvQ2hhcnRDb21wb25lbnQnICYmICBjb21wb25lbnROYW1lICE9ICdHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWRhc2gtdG9kYXktcHJldmlvdXMgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXR0b2RheVByZXZpb3VzQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+PC9saWItZGFzaC10b2RheS1wcmV2aW91cz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wb25lbnROYW1lICE9ICdHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQnICYmIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hR2VvQ2hhcnRDb21wb25lbnQnICYmIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXNpbmdsZS1jYXJkIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0U2luZ2xlQ2FyZENvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXNpbmdsZS1jYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==