@eqproject/eqp-dynamic-module 2.6.47 → 2.6.48
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.
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +28 -13
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +53 -38
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +53 -38
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -8,23 +8,24 @@ import * as i1 from "../../../../services/utilityHelper.services";
|
|
|
8
8
|
import * as i2 from "@angular/material/dialog";
|
|
9
9
|
import * as i3 from "@angular/router";
|
|
10
10
|
import * as i4 from "../../../../services/db-date.service";
|
|
11
|
-
import * as i5 from "@angular/
|
|
12
|
-
import * as i6 from "@angular/material/
|
|
13
|
-
import * as i7 from "@angular/material/
|
|
14
|
-
import * as i8 from "@angular/material/
|
|
15
|
-
import * as i9 from "@angular/material/
|
|
16
|
-
import * as i10 from "@angular/
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
import * as i6 from "@angular/material/button";
|
|
13
|
+
import * as i7 from "@angular/material/card";
|
|
14
|
+
import * as i8 from "@angular/material/expansion";
|
|
15
|
+
import * as i9 from "@angular/material/icon";
|
|
16
|
+
import * as i10 from "@angular/material/tooltip";
|
|
17
17
|
import * as i11 from "@angular/cdk/drag-drop";
|
|
18
18
|
import * as i12 from "../add-form-record/add-form-record.component";
|
|
19
19
|
import * as i13 from "./single-record/single-record.component";
|
|
20
20
|
import * as i14 from "../../graphs/graphs.component";
|
|
21
21
|
export class ListViewFormRecordComponent {
|
|
22
|
-
constructor(utilityHelperService, changeDetector, dialog, router, dbDateService) {
|
|
22
|
+
constructor(utilityHelperService, changeDetector, dialog, router, dbDateService, datePipe) {
|
|
23
23
|
this.utilityHelperService = utilityHelperService;
|
|
24
24
|
this.changeDetector = changeDetector;
|
|
25
25
|
this.dialog = dialog;
|
|
26
26
|
this.router = router;
|
|
27
27
|
this.dbDateService = dbDateService;
|
|
28
|
+
this.datePipe = datePipe;
|
|
28
29
|
this.form = null;
|
|
29
30
|
this.defaultListViewFunction = null;
|
|
30
31
|
this.externalButtons = new Array();
|
|
@@ -523,7 +524,21 @@ export class ListViewFormRecordComponent {
|
|
|
523
524
|
let out = "";
|
|
524
525
|
if (this.configurations.listViewRecordTitle != null && this.configurations.listViewRecordTitle.length > 0)
|
|
525
526
|
this.configurations.listViewRecordTitle.forEach((item) => {
|
|
526
|
-
|
|
527
|
+
const regex = /\((.+)\)/g;
|
|
528
|
+
; // pattern per uno o più numeri
|
|
529
|
+
// (dateformat=EEEE, d MMMM y, H:mm:ss)
|
|
530
|
+
const match = regex.exec(item);
|
|
531
|
+
if (match) {
|
|
532
|
+
let mymatch = match[1];
|
|
533
|
+
if (mymatch.includes("dateformat")) {
|
|
534
|
+
let format = mymatch.split("=")[1];
|
|
535
|
+
let token = item.split("(")[0];
|
|
536
|
+
out += record.AdditionalInfo[token] ? " " + this.datePipe.transform(record.AdditionalInfo[token], format) : record[token] ? " " + this.datePipe.transform(record[token], format) : " " + token;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
out += record.AdditionalInfo[item] ? " " + record.AdditionalInfo[item] : record[item] ? " " + record[item] : " " + item;
|
|
541
|
+
}
|
|
527
542
|
});
|
|
528
543
|
// throw new Error('Method not implemented.');
|
|
529
544
|
return out;
|
|
@@ -541,12 +556,12 @@ export class ListViewFormRecordComponent {
|
|
|
541
556
|
this.fireTrigger.emit(ev);
|
|
542
557
|
}
|
|
543
558
|
}
|
|
544
|
-
ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
545
|
-
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title cdkDrag (cdkDragStarted)=\"onDragStarted([panel.record,form])\" (cdkDragReleased)=\"onDragReleased()\">\r\n <mat-icon class=\"drag-icon\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }} {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}\n"], dependencies: [{ kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i7.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i7.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i12.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "onlyView", "isDuplicate", "inConfig", "showAllFields", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i13.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i14.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }] });
|
|
559
|
+
ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }, { token: i5.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
560
|
+
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title cdkDrag (cdkDragStarted)=\"onDragStarted([panel.record,form])\" (cdkDragReleased)=\"onDragReleased()\">\r\n <mat-icon class=\"drag-icon\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i12.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "onlyView", "isDuplicate", "inConfig", "showAllFields", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i13.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i14.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form"] }] });
|
|
546
561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
|
|
547
562
|
type: Component,
|
|
548
|
-
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title cdkDrag (cdkDragStarted)=\"onDragStarted([panel.record,form])\" (cdkDragReleased)=\"onDragReleased()\">\r\n <mat-icon class=\"drag-icon\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{
|
|
549
|
-
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }, { type: i3.Router }, { type: i4.dbDateService }]; }, propDecorators: { configurations: [{
|
|
563
|
+
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title cdkDrag (cdkDragStarted)=\"onDragStarted([panel.record,form])\" (cdkDragReleased)=\"onDragReleased()\">\r\n <mat-icon class=\"drag-icon\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}\n"] }]
|
|
564
|
+
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }, { type: i3.Router }, { type: i4.dbDateService }, { type: i5.DatePipe }]; }, propDecorators: { configurations: [{
|
|
550
565
|
type: Input
|
|
551
566
|
}], compileConfigurations: [{
|
|
552
567
|
type: Input
|
|
@@ -598,4 +613,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
598
613
|
}], fireTrigger: [{
|
|
599
614
|
type: Output
|
|
600
615
|
}] } });
|
|
601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQjFELE1BQU0sT0FBTywyQkFBMkI7SUE0RHRDLFlBQ1Usb0JBQTBDLEVBQzFDLGNBQWlDLEVBQ2pDLE1BQWlCLEVBQ2pCLE1BQWMsRUFDZCxhQUE0QjtRQUo1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXhEN0IsU0FBSSxHQUFTLElBQUksQ0FBQztRQUNsQiw0QkFBdUIsR0FBYSxJQUFJLENBQUM7UUFDekMsb0JBQWUsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDakUsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixZQUFPLEdBQXFCLElBQUksQ0FBQztRQUNqQyxvQkFBZSxHQUFRLElBQUksQ0FBQztRQUdyQyx1QkFBa0IsR0FDaEIsSUFBSSx5Q0FBeUMsRUFBRSxDQUFDO1FBQ2xELGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIseUJBQXlCO1FBQ3pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFHYixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQWMsSUFBSSxLQUFLLEVBQVcsQ0FBQztRQUMxQyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUkxQixZQUFPLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFcEMsWUFBTyxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUN6RCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQVc3QixVQUFVO1FBQ0Esd0JBQW1CLEdBR3hCLElBQUksWUFBWSxFQUF5QyxDQUFDO1FBRXJELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbEUsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRSx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4RSxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUFRL0UsQ0FBQztJQUVMLFFBQVE7UUFDTiwwQkFBMEI7UUFDMUIscURBQXFEO1FBQ3JELHNCQUFzQjtRQUV0QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBRS9DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLDBCQUEwQixDQUM1RCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQzNDLENBQUM7UUFDRixpR0FBaUc7UUFDakcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLHdDQUF3QztRQUN4QywyQ0FBMkM7UUFDM0MsMkJBQTJCO0lBSTdCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsaURBQWlEO1FBRWpELDBFQUEwRTtRQUMxRSxJQUNFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLFNBQVM7WUFDdEMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsV0FBVyxJQUFJLEtBQUssRUFDOUM7WUFDQSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDcEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUViO2dCQUNFLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztnQkFDaEosWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDdkMsWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVM7Z0JBQzVDLFlBQVksRUFBRSx1QkFBdUI7Z0JBQ3JDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7YUFDRjtZQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUN6QyxZQUFZLEVBQUUsb0JBQW9CO2dCQUNsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQzthQUNGO1NBRUYsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsSUFBSSxDQUFDLE1BQU07UUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtZQUNyQixNQUFNLG1CQUFtQixHQUN2QixJQUFJLEtBQUssRUFBc0IsQ0FBQztZQUNsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFDO29CQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7aUJBQzNDO2dCQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FDYixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLGtDQUFrQztRQUNsQyxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wseURBQXlEO1lBQ3pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLElBQUksbUJBQW1CLEdBQUc7WUFDeEI7Z0JBQ0UsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSTtZQUNsQyxJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3REO1lBQ0EsMEJBQTBCO1lBQzFCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDdEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFO2dCQUN4QixvREFBb0Q7Z0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU0sSUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUI7WUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU87WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFDL0Q7WUFDQSxzQkFBc0I7WUFDdEIsSUFBSSxtQkFBbUIsR0FBRztnQkFDeEI7b0JBQ0UsU0FBUyxFQUFFLE9BQU87b0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2lCQUN4QztnQkFDRDtvQkFDRSxTQUFTLEVBQUUsUUFBUTtvQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtvQkFDdEMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ3hDO2FBQ0YsQ0FBQztZQUVGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFDL0QsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFO2dCQUN4Qiw2REFBNkQ7Z0JBQzdELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDOUQ7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsR0FBcUI7UUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFTLENBQUM7UUFDakMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2hCLG1EQUFtRDtZQUNuRCxJQUFJLE1BQU0sR0FBVyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLGdFQUFnRTtZQUNoRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekIsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFaEYsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZILE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLGNBQWMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0csSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXhDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUNoQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDdkcsYUFBYSxHQUFHLEtBQUssQ0FBQztxQkFDdkI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVUsRUFBRSxNQUFjO1FBQ3BDLHVDQUF1QztRQUN2QyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLEVBQUU7WUFDeEMsMkRBQTJEO1lBQzNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNqQixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNwQixLQUFLLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDO1lBQ3hDLDhCQUE4QjtZQUM5QixxQkFBcUI7WUFDckIsWUFBWTtTQUNiO2FBQU07WUFDTCxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLE1BQWMsRUFBRSxRQUFpQixFQUFFLENBQUM7UUFDbkQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLHVEQUF1RDtJQUN6RCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEtBQVksRUFBRSxRQUFpQixFQUFFLENBQUMsRUFBRSxFQUFTO1FBQ3RELEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsc0NBQXNDO1FBQ3RDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUkscUJBQXFCLEVBQUU7WUFDNUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDeEI7YUFBTTtZQUNMLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSx1REFBdUQ7SUFDekQsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFZLEVBQUUsUUFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBUztRQUN0RCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLHNDQUFzQztRQUV0QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsbURBQW1EO1FBQ25ELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxtQkFBbUIsRUFBRTtZQUMxQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN4QjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLHVEQUF1RDtJQUN6RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBUyxFQUFFLFFBQWtCLEVBQUUsTUFBVztRQUN6RCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQVksRUFBRSxRQUFpQixFQUFFLENBQUMsRUFBRSxFQUFTO1FBQzNELEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckIsNENBQTRDO1FBRTVDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDM0QsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsT0FBTztTQUNuQixDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWMsRUFBRSxFQUFTO1FBQ3BDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBSztRQUNyQixrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsb0JBQW9CLENBQUMsS0FBNEM7UUFFL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWhELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUNFLElBQUksQ0FBQyxxQkFBcUI7Z0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO2dCQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDbEQ7Z0JBQ0Esd0NBQXdDO2dCQUN4QyxJQUFJLG1CQUFtQixHQUFHO29CQUN4Qjt3QkFDRSxTQUFTLEVBQUUsT0FBTzt3QkFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDOUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7cUJBQ3hDO29CQUNEO3dCQUNFLFNBQVMsRUFBRSxTQUFTO3dCQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPO3dCQUNoQyxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztxQkFDeEM7aUJBQ0YsQ0FBQztnQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUMxRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtvQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFDO3dCQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQzNEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7cUJBQzNDO29CQUVELDRCQUE0QjtvQkFDNUIsSUFBSSxtQkFBbUIsR0FBRzt3QkFDeEI7NEJBQ0UsU0FBUyxFQUFFLElBQUk7NEJBQ2YsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDM0IsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7eUJBQ3hDO3FCQUNGLENBQUM7b0JBQ0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQ2xELG1CQUFtQixFQUNuQixDQUFDLEdBQWMsRUFBRSxFQUFFO3dCQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7d0JBRTFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNyQixDQUFDLENBQ0YsQ0FBQztnQkFDSixDQUFDLENBQ0YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNwQjtTQUNGO2FBQU07WUFDTCxNQUFNLG1CQUFtQixHQUN2QixJQUFJLEtBQUssRUFBc0IsQ0FBQztZQUNsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2hELG1CQUFtQixFQUNuQixDQUFDLEdBQVMsRUFBRSxFQUFFO2dCQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUM7b0JBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVcsQ0FBQztpQkFDM0M7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FDYixDQUFDO1lBRUYsOEJBQThCO1lBQzlCLHlCQUF5QjtZQUN6QixxREFBcUQ7U0FDdEQ7SUFDSCxDQUFDO0lBR0QsWUFBWTtRQUNWLHdHQUF3RztRQUN4RyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxtQkFBbUIsRUFBQztnQkFDdkMsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQzthQUN6QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxtQkFBbUIsR0FBOEIsSUFBSSxLQUFLLEVBQXNCLENBQUM7UUFDdkYsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3ZCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO1NBQ3hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFDO2dCQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDM0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVcsQ0FBQzthQUMzQztZQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBRXhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUMzRCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNO2dCQUNiLFNBQVMsRUFBRSxPQUFPO2FBQ25CLENBQUMsQ0FBQztRQUVMLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBRVIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0QsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLE1BQU07WUFDaEIsU0FBUyxFQUFFLE1BQU07WUFDakIsU0FBUyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsc0ZBQXNGO0lBQ3hGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYztRQUM1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FBRTtRQUNyRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBYztRQUNqQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FBRTtRQUNyRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDeEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUUsSUFBSSxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFBO1FBQ0YsOENBQThDO1FBQzlDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFPO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsRUFBWTtRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQWU7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7eUhBMW9CVSwyQkFBMkI7NkdBQTNCLDJCQUEyQix5a0NDN0N4Qyw2Mk1BbUtBOzRGRHRIYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsdUJBQXVCO29OQU14QixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQWV1QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT0ksYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdJLGVBQWU7c0JBQS9ELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9yQyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnRcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgZGJEYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9kYi1kYXRlLnNlcnZpY2VcIjtcclxuXHJcbnR5cGUgUGFuZWwgPSB7XHJcbiAgcmVjb3JkOiBSZWNvcmQsXHJcbiAgaXNPcGVuOiBib29sZWFuLFxyXG4gIHBhZ2VTdGF0ZTogc3RyaW5nLFxyXG4gIGhpZ2hsaWdodGVkOiBib29sZWFuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0Vmlld0Zvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnO1xyXG4gIEBJbnB1dCgpIGNvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgb3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBvcmdhSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbjogRnVuY3Rpb24gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJlY29yZHM6IEFycmF5PER5blJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodEZpbHRlcjogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcblxyXG4gIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAvLyB2YWx1ZXM6IEFycmF5PFJlY29yZD47XHJcbiAgdGVzdCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUmVjb3JkOiBSZWNvcmQ7XHJcbiAgbG9hZGVyOiBib29sZWFuO1xyXG4gIGxvYWRlZGZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwYW5lbE9wZW5TdGF0ZTogYm9vbGVhbltdID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICBtb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHBhbmVsczogQXJyYXk8UGFuZWw+XHJcbiAgYnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgcG9wdXBMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5BZGREaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5BZGREaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkFkZERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkdyYXBoRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuR3JhcGhEaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkdyYXBoRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHRvZG9MaXN0OiBhbnk7XHJcblxyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGJEYXRlU2VydmljZTogZGJEYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICApO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12aWV3IC0gb3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG5cclxuICAgIC8vIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRDtcclxuICAgIC8vIHRoaXMudmFsdWVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXNcclxuICAgIC8vIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5pbmcoaW5kaWNlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGljZTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpIHtcclxuICAgIHRoaXMuYnV0dG9ucyA9IFtcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ICYmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0IHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUpLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcInZpZXctYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld1JlY29yZChwYW5lbCwgdHJ1ZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImVkaXRcIixcclxuICAgICAgICBcInRleHRcIjogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0LFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImVkaXQtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuRWRpdFJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkdXBsaWNhdGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkNhbmNlbGxhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkZWxldGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgXVxyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5idXR0b25zLmNvbmNhdCh0aGlzLmV4dGVybmFsQnV0dG9ucykuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIHRoaXMubG9hZGVkZm9ybSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIC8vIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRzID09IG51bGwpIHtcclxuICAgICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnUmVjb3JkcyBFeGlzdHMnLCB0aGlzLnJlY29yZHMpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHRoaXMucmVjb3Jkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgLy8gc2Ugbm9uIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdHZXRCeUZvcm1JREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImNvbnRyb2xsYXJlIGxlIGNvbmZpZ3VyYXppb25pIGRlbGwnZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlczogQXJyYXk8RHluUmVjb3JkPikge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgdGhpcy5wYW5lbHMgPSBuZXcgQXJyYXk8UGFuZWw+KCk7XHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZW5lcmF0ZUFuc3dlcnNBcnJheVwiLCByKVxyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlNlcmlhbGl6ZWRWYWx1ZXNcIiwgci5TZXJpYWxpemVkVmFsdWVzKVxyXG4gICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gdGhpcy5kYkRhdGVTZXJ2aWNlLnBhcnNlRGF0ZWZyb21EQihyLkFuc3dlckRhdGUpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICB0bXBSZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gci5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZGl0aW9uYWxQYXJhbXNcIiwgci5BZGRpdGlvbmFsUGFyYW1zKVxyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyA9IHIuQWRkaXRpb25hbFBhcmFtcyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxQYXJhbXMpIDogXCJcIjtcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxJbmZvID0gci5BZGRpdGlvbmFsSW5mbyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbEluZm8gIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsSW5mbykgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcblxyXG4gICAgICB2YXIgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5oaWdobGlnaHRGaWx0ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaGlnaGxpZ2h0RmlsdGVyKS5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSB8fCB0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdICE9IHRoaXMuaGlnaGxpZ2h0RmlsdGVyW2ZpbHRlcl0pIHtcclxuICAgICAgICAgICAgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBhbmVscy5wdXNoKHsgcmVjb3JkOiB0bXBSZWMsIGlzT3BlbjogZmFsc2UsIHBhZ2VTdGF0ZTogbnVsbCwgaGlnaGxpZ2h0ZWQ6IGlzSGlnaGxpZ2h0ZWQgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBhbmVsKHBhbmVsOiBhbnksIHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3RvZ2dsZVBhbmVsJylcclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uICE9IG51bGwpIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbicsIHJlY29yZClcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbihyZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsLmlzT3Blbikge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIC8vIFNpbXVsYSB1biBjYWxjb2xvIGFzaW5jcm9ub1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gfSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuLCBpKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdPckVkaXRSZWNvcmQnKVxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgdmlld1JlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld1JlY29yZCcpXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAndmlzdWFsaXp6YUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICBFZGl0UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFZGl0UmVjb3JkJylcclxuXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICBwYW5lbC5yZWNvcmQuQWRkaXRpb25hbEluZm8gPSBPYmplY3QuYXNzaWduKHt9LCByZWNvcmQuQWRkaXRpb25hbEluZm8sIHRoaXMuY29uZmlndXJhdGlvbnMudXBkYXRlSW5mbyk7XHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAnbW9kaWZpY2FDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG5cclxuICBleHRlcm5hbENhbGxiYWNrKGV2OiBFdmVudCwgY2FsbGJhY2s6IEZ1bmN0aW9uLCByZWNvcmQ6IGFueSkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY2FsbGJhY2socmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZHVwbGljYXJlIHVuIHJlY29yZCBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBkdXBsaWNhdGVSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkdXBsaWNhdGVSZWNvcmQnKTtcclxuXHJcbiAgICBwYW5lbC5yZWNvcmQuSUQgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHBhbmVsLnJlY29yZDtcclxuXHJcbiAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgc2F2ZScsIHJlY29yZClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgb25BZnRlclNhdmVSZWNvcmQoZXZlbnQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIGFmdGVyc2F2ZScsIGV2ZW50KVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZDIoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uID0gZmFsc2U7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbiA9ICFldmVudC5vbmx5VmlldztcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBvcGVuQWRkUG9wdXAoKSB7XHJcbiAgICAvLyBtaSBzc2ljdXJvIGNoZSBub24gY2kgc2lhbm8gcGFubmVsbGkgaW4gbW9kaWZpY2EgcGVyY2jDqCBhbHRyaW1lbnRpIHZhIGluIGNvbmZsaXR0byBsJ3VwZGF0ZSBjb24gbCdhZGRcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmKHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0bycpe1xyXG4gICAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMucG9wdXBMb2FkZXIgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuR3JhcGhzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuR3JhcGhEaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgbWluV2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiNzB2aFwiLFxyXG4gICAgICBtYXhIZWlnaHQ6IFwiMTAwdmhcIlxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2R5bmFtaWMtbW9kdWxlLWdyYXBocy8nICsgdGhpcy5mb3JtSUQgKyAnLycgKyB0aGlzLnVzZXJJRF0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gICAgXHJcbiAgb25BZGRTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMClcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIG91dCArPSByZWNvcmQuQWRkaXRpb25hbEluZm9baXRlbV0gPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IFwiIFwiKyBpdGVtO1xyXG4gICAgfSlcclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5kcmFnU3RhcnRlZC5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKCl7XHJcbiAgICB0aGlzLmRyYWdSZWxlYXNlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIG9uRmlyZVRyaWdnZXIoZXY6IEZpcmVUcmlnZ2VyKXtcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdChldik7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInNob3dUaXRsZSB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZSAmJiBsb2FkZWRmb3JtXCI+TW9kdWxvIHt7IGZvcm0uTmFtZSB9fSA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkdyYXBocygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnBpZV9jaGFydDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkdyYWZpY2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkZFBvcHVwKClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICBcclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtYWNjb3JkaW9uICAjZG9uZUxpc3Q9XCJjZGtEcm9wTGlzdFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlt0b2RvTGlzdF1cIiBbaGlkZVRvZ2dsZV09XCJ0ZXN0XCIgW211bHRpXT1cInRydWVcIiBjbGFzcz1cImRmLWxpc3Qtdmlldy1hY2NvcmRpb25cIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsczsgaW5kZXggYXMgaVwiIFxyXG4gICAgICAgIFtleHBhbmRlZF09XCJwYW5lbC5pc09wZW5cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIxXCIgXHJcbiAgICAgICAgW2NsYXNzXT1cInBhbmVsLmhpZ2hsaWdodGVkID8gJ2RtX3BhbmVsX2hpZ2hsaWdodGVkJyA6ICcwJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKHBhbmVsLCBwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlIGNka0RyYWcgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoW3BhbmVsLnJlY29yZCxmb3JtXSlcIiAoY2RrRHJhZ1JlbGVhc2VkKT1cIm9uRHJhZ1JlbGVhc2VkKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZHJhZy1pY29uXCI+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPiB7eyAhc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcGFuZWwucmVjb3JkLkFuc3dlckRhdGUgfCBkYXRlIDogXCJFRUVFLCBkIE1NTU0geSwgSDptbTpzc1wiIH19IHt7IHByaW50QWRkaXRpb25hbEluZm8ocGFuZWwucmVjb3JkKSB9fVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICA8IS0tI3JlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiIFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaGlkZGVuXT1cImJ1dHRvbi5pY29uID09ICdmaWxlX2NvcHknICYmIChwYW5lbHMubGVuZ3RoID09IDAgfHwgcGFuZWwucmVjb3JkLlZlcnNpb24gIT0gcGFuZWxzWzBdLnJlY29yZC5WZXJzaW9uKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mbihwYW5lbCxpLCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHRlcm5hbEJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuXHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICAgICAgICAgICAgW3JlY29yZF0gPSBcInBhbmVsLnJlY29yZFwiIFxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJzYXZlT3JFeGl0Rm9ybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICA8L2xpYi1zaW5nbGUtcmVjb3JkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0jZW5kcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG5cclxuXHJcbiAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDxtYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG48IS0tI3JlZ2lvbiBESUFMT0cgQUdHSVVOVEEgUklTUE9TVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkFkZERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgICAgW29ubHlWaWV3XT1cImZhbHNlXCJcclxuICAgICAgICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcclxuXHJcbiAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuXHJcbiAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwib25BZGRTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZEFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5HcmFwaERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlIGdyYXBoQ2FyZFwiPlxyXG4gICAgXHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBncmFwaC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPkdyYWZpY28ge3sgZm9ybS5OYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZUdyYXBocygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxyXG4gICAgICAgICAgYXJyb3dfYmFja1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5JbmRpZXRybzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxncmFwaHNcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc10gPSBcIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgID5cclxuICAgICAgPC9ncmFwaHM+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuIl19
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQjFELE1BQU0sT0FBTywyQkFBMkI7SUE2RHRDLFlBQ1Usb0JBQTBDLEVBQzFDLGNBQWlDLEVBQ2pDLE1BQWlCLEVBQ2pCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixRQUFrQjtRQUxsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFD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QUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQWdCdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9JLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHSSxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPckMsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50XHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLy4uLy4uLy4uLy4uLy9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IGRiRGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZGItZGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxudHlwZSBQYW5lbCA9IHtcclxuICByZWNvcmQ6IFJlY29yZCxcclxuICBpc09wZW46IGJvb2xlYW4sXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcsXHJcbiAgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgY29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBvdXRDb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9yZ2FJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVjb3JkczogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICB0ZXN0ID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZDtcclxuICBsb2FkZXI6IGJvb2xlYW47XHJcbiAgbG9hZGVkZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhbmVsT3BlblN0YXRlOiBib29sZWFuW10gPSBuZXcgQXJyYXk8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgdmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gIG1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHBhbmVsczogQXJyYXk8UGFuZWw+XHJcbiAgYnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgcG9wdXBMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5BZGREaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5BZGREaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkFkZERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkdyYXBoRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuR3JhcGhEaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkdyYXBoRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHRvZG9MaXN0OiBhbnk7XHJcblxyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGJEYXRlU2VydmljZTogZGJEYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnBhbmVsT3BlblN0YXRlID0gW1xyXG4gICAgLy8gICAuLi5BcnJheSh0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5sZW5ndGggKyAxKSxcclxuICAgIC8vIF0ubWFwKCgpID0+IGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuXHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbEluZm8sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnByZWZpbHRlclBhcmFtcyxcclxuICAgICk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJsaXN0LXZpZXcgLSBvdXRjb21waWxlQ29uZmlndXJhdGlvbnMgXCIsIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIHRoaXMuY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCk7XHJcblxyXG4gICAgLy8gdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMudXNlcklEO1xyXG4gICAgLy8gdGhpcy52YWx1ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlc1xyXG4gICAgLy8gdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25DaGFuZ2VzJywgY2hhbmdlcyk7XHJcblxyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKFxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5maXJzdENoYW5nZSA9PSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3BlbmluZyhpbmRpY2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kaWNlO1xyXG4gIH1cclxuXHJcbiAgY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCkge1xyXG4gICAgdGhpcy5idXR0b25zID0gW1xyXG5cclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcInZpc2liaWxpdHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgJiYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlIHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSksXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwidmlldy1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWV3UmVjb3JkKHBhbmVsLCB0cnVlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZWRpdFwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZWRpdC1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkR1cGxpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImR1cGxpY2F0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FuY2VsbGFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImRlbGV0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQocGFuZWwsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICBdXHJcbiAgICB0aGlzLmJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnMuY29uY2F0KHRoaXMuZXh0ZXJuYWxCdXR0b25zKS5maWx0ZXIoeCA9PiB4LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkZWRmb3JtID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgLy8gdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIGlmICh0aGlzLnJlY29yZHMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdSZWNvcmRzIEV4aXN0cycsIHRoaXMucmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkodGhpcy5yZWNvcmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICB0aGlzLnBhbmVscyA9IG5ldyBBcnJheTxQYW5lbD4oKTtcclxuICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdlbmVyYXRlQW5zd2Vyc0FycmF5XCIsIHIpXHJcbiAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiU2VyaWFsaXplZFZhbHVlc1wiLCByLlNlcmlhbGl6ZWRWYWx1ZXMpXHJcbiAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSB0aGlzLmRiRGF0ZVNlcnZpY2UucGFyc2VEYXRlZnJvbURCKHIuQW5zd2VyRGF0ZSkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHRtcFJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSByLkhUTUxyZWFkYWJsZVZhbHVlcztcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkaXRpb25hbFBhcmFtc1wiLCByLkFkZGl0aW9uYWxQYXJhbXMpXHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zID0gci5BZGRpdGlvbmFsUGFyYW1zICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsUGFyYW1zICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbFBhcmFtcykgOiBcIlwiO1xyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbEluZm8gPSByLkFkZGl0aW9uYWxJbmZvICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsSW5mbyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxJbmZvKSA6IFwiXCI7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuXHJcbiAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEZpbHRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdIHx8IHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gIT0gdGhpcy5oaWdobGlnaHRGaWx0ZXJbZmlsdGVyXSkge1xyXG4gICAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucGFuZWxzLnB1c2goeyByZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsLCBoaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFuZWwocGFuZWw6IGFueSwgcmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndG9nZ2xlUGFuZWwnKVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2RlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uJywgcmVjb3JkKVxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uKHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcGFuZWwuaXNPcGVuKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgLy8gU2ltdWxhIHVuIGNhbGNvbG8gYXNpbmNyb25vXHJcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyB9LCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4sIGkpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld09yRWRpdFJlY29yZCcpXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICB2aWV3UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3UmVjb3JkJylcclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICd2aXN1YWxpenphQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIEVkaXRSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0VkaXRSZWNvcmQnKVxyXG5cclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHBhbmVsLnJlY29yZC5BZGRpdGlvbmFsSW5mbyA9IE9iamVjdC5hc3NpZ24oe30sIHJlY29yZC5BZGRpdGlvbmFsSW5mbywgdGhpcy5jb25maWd1cmF0aW9ucy51cGRhdGVJbmZvKTtcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICdtb2RpZmljYUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIGV4dGVybmFsQ2FsbGJhY2soZXY6IEV2ZW50LCBjYWxsYmFjazogRnVuY3Rpb24sIHJlY29yZDogYW55KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjYWxsYmFjayhyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIGR1cGxpY2F0ZVJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2R1cGxpY2F0ZVJlY29yZCcpO1xyXG5cclxuICAgIHBhbmVsLnJlY29yZC5JRCA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcGFuZWwucmVjb3JkO1xyXG5cclxuICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQsIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVPckV4aXRGb3JtKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBzYXZlJywgcmVjb3JkKVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgYWZ0ZXJzYXZlJywgZXZlbnQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkMihldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgICAgICAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5JRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgICAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgICAgICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShldmVudC5yZWNvcmQpKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5BZGRQb3B1cCgpIHtcclxuICAgIC8vIG1pIHNzaWN1cm8gY2hlIG5vbiBjaSBzaWFubyBwYW5uZWxsaSBpbiBtb2RpZmljYSBwZXJjaMOoIGFsdHJpbWVudGkgdmEgaW4gY29uZmxpdHRvIGwndXBkYXRlIGNvbiBsJ2FkZFxyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYocGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJyl7XHJcbiAgICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB9ICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5wb3B1cExvYWRlciA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBSdW5FbmRQb2ludENhbGxcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW5HcmFwaHMoKSB7XHJcbiAgICBcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5HcmFwaERpYWxvZywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICBtaW5XaWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCI3MHZoXCIsXHJcbiAgICAgIG1heEhlaWdodDogXCIxMDB2aFwiXHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZHluYW1pYy1tb2R1bGUtZ3JhcGhzLycgKyB0aGlzLmZvcm1JRCArICcvJyArIHRoaXMudXNlcklEXSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUdyYXBocygpIHtcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcbiAgICBcclxuICBvbkFkZFNhdmVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmICh0aGlzLm9wZW5BZGREaWFsb2dSZWYgIT0gbnVsbCkgeyB0aGlzLm9wZW5BZGREaWFsb2dSZWYuY2xvc2UoKTsgfVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBwcmludEFkZGl0aW9uYWxJbmZvKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBsZXQgb3V0ID0gXCJcIjtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZSAhPSBudWxsICYmIHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZS5sZW5ndGggPiAwKVxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgXHJcbiAgICAgIC8vIChkYXRlZm9ybWF0PUVFRUUsIGQgTU1NTSB5LCBIOm1tOnNzKVxyXG4gICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGxldCBteW1hdGNoID0gbWF0Y2hbMV07XHJcbiAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgbGV0IGZvcm1hdCA9IG15bWF0Y2guc3BsaXQoXCI9XCIpWzFdO1xyXG4gICAgICAgICAgbGV0IHRva2VuID0gaXRlbS5zcGxpdChcIihcIilbMF07XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSwgZm9ybWF0KSA6IHJlY29yZFt0b2tlbl0gPyBcIiBcIiArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlY29yZFt0b2tlbl0sIGZvcm1hdCkgOiAgXCIgXCIgKyB0b2tlbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dID8gXCIgXCIgKyByZWNvcmQuQWRkaXRpb25hbEluZm9baXRlbV0gOiByZWNvcmRbaXRlbV0gPyBcIiBcIiArIHJlY29yZFtpdGVtXSA6ICBcIiBcIiArIGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChlbDogYW55KXtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdSZWxlYXNlZCgpe1xyXG4gICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJzaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGUgJiYgbG9hZGVkZm9ybVwiPk1vZHVsbyB7eyBmb3JtLk5hbWUgfX0gPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZCB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCI+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmFwaHMoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5waWVfY2hhcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5HcmFmaWNpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZGRQb3B1cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgXHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWFjY29yZGlvbiAgI2RvbmVMaXN0PVwiY2RrRHJvcExpc3RcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbdG9kb0xpc3RdXCIgW2hpZGVUb2dnbGVdPVwidGVzdFwiIFttdWx0aV09XCJ0cnVlXCIgY2xhc3M9XCJkZi1saXN0LXZpZXctYWNjb3JkaW9uXCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBwYW5lbHM7IGluZGV4IGFzIGlcIiBcclxuICAgICAgICBbZXhwYW5kZWRdPVwicGFuZWwuaXNPcGVuXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiMVwiIFxyXG4gICAgICAgIFtjbGFzc109XCJwYW5lbC5oaWdobGlnaHRlZCA/ICdkbV9wYW5lbF9oaWdobGlnaHRlZCcgOiAnMCdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbChwYW5lbCwgcGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSBjZGtEcmFnIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgKGNka0RyYWdSZWxlYXNlZCk9XCJvbkRyYWdSZWxlYXNlZCgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRyYWctaWNvblwiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj4ge3sgIXNob3dUaXRsZSA/IGZvcm0uTmFtZSA6IFwiXCIgfX0gdi57eyBwYW5lbC5yZWNvcmQuVmVyc2lvbiB9fSAtIHt7IHByaW50QWRkaXRpb25hbEluZm8ocGFuZWwucmVjb3JkKSB9fVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICA8IS0tI3JlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiIFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaGlkZGVuXT1cImJ1dHRvbi5pY29uID09ICdmaWxlX2NvcHknICYmIChwYW5lbHMubGVuZ3RoID09IDAgfHwgcGFuZWwucmVjb3JkLlZlcnNpb24gIT0gcGFuZWxzWzBdLnJlY29yZC5WZXJzaW9uKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mbihwYW5lbCxpLCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHRlcm5hbEJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuXHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICAgICAgICAgICAgW3JlY29yZF0gPSBcInBhbmVsLnJlY29yZFwiIFxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJzYXZlT3JFeGl0Rm9ybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICA8L2xpYi1zaW5nbGUtcmVjb3JkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0jZW5kcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG5cclxuXHJcbiAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDxtYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG48IS0tI3JlZ2lvbiBESUFMT0cgQUdHSVVOVEEgUklTUE9TVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkFkZERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgICAgW29ubHlWaWV3XT1cImZhbHNlXCJcclxuICAgICAgICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcclxuXHJcbiAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuXHJcbiAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwib25BZGRTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZEFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5HcmFwaERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlIGdyYXBoQ2FyZFwiPlxyXG4gICAgXHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBncmFwaC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPkdyYWZpY28ge3sgZm9ybS5OYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZUdyYXBocygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxyXG4gICAgICAgICAgYXJyb3dfYmFja1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5JbmRpZXRybzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxncmFwaHNcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc10gPSBcIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgID5cclxuICAgICAgPC9ncmFwaHM+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuIl19
|