@smarterplan/ngx-smarterplan-locations 0.2.20 → 0.2.22
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/plan-legend/plan-legend.component.mjs +2 -2
- package/esm2020/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +2 -2
- package/esm2020/lib/components/zones/zones.component.mjs +15 -11
- package/esm2020/lib/ngx-smarterplan-locations.module.mjs +6 -3
- package/esm2020/lib/pipes/count-audio-sweeps.pipe.mjs +27 -0
- package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +48 -17
- package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +46 -17
- package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
- package/lib/ngx-smarterplan-locations.module.d.ts +11 -10
- package/lib/pipes/count-audio-sweeps.pipe.d.ts +10 -0
- package/package.json +2 -2
|
@@ -37,10 +37,10 @@ export class PlanLegendComponent {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
PlanLegendComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
-
PlanLegendComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: PlanLegendComponent, selector: "lib-plan-legend", inputs: { isAudioZone: "isAudioZone" }, ngImport: i0, template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;
|
|
40
|
+
PlanLegendComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: PlanLegendComponent, selector: "lib-plan-legend", inputs: { isAudioZone: "isAudioZone" }, ngImport: i0, template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "translate": i1.TranslatePipe } });
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, decorators: [{
|
|
42
42
|
type: Component,
|
|
43
|
-
args: [{ selector: 'lib-plan-legend', template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;
|
|
43
|
+
args: [{ selector: 'lib-plan-legend', template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"] }]
|
|
44
44
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { isAudioZone: [{
|
|
45
45
|
type: Input
|
|
46
46
|
}] } });
|
|
@@ -390,10 +390,10 @@ export class SweepPlanSelectionComponent {
|
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
392
|
SweepPlanSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SweepPlanSelectionComponent, deps: [{ token: i1.ZoneService }, { token: i1.NavigationService }, { token: i1.PlanService }], target: i0.ɵɵFactoryTarget.Component });
|
|
393
|
-
SweepPlanSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SweepPlanSelectionComponent, selector: "lib-sweep-plan-selection", inputs: { spaceID: "spaceID", chosenScansOnPlan: "chosenScansOnPlan", newZoneData: "newZoneData", occupiedSweeps: "occupiedSweeps", unavailableSweeps: "unavailableSweeps", editingAudioZone: "editingAudioZone", inputZone: "inputZone" }, outputs: { sweepsSelected: "sweepsSelected" }, usesOnChanges: true, ngImport: i0, template: "<div ngbDropdown class=\"sp-row d-inline-block\">\n <div class=\"col-sm-3\" *ngIf=\"plans\">\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\n ngbDropdownToggle>{{chosenPlan ?\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\n [disabled]=\"!plan.calibration\">{{ plan.name }}\n </button>\n </div>\n </div>\n</div>\n<div class=\"sp-row\">\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\n <lib-plan-legend [isAudioZone]=\"editingAudioZone\" *ngIf=\"buttonElements.length > 0\"></lib-plan-legend>\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\n <div class=\"sp-row\">\n <div style=\"overflow: hidden;width:100%;\">\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\n </div>\n </div>\n </div>\n </div>\n </lib-selection>\n \n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\n <div class=\"sp-row d-inline-block\">\n <h2>{{'selectTool.title' | translate}}</h2>\n <div class=\"protip\">{{'selectTool.tip' | translate}}.</div>\n </div>\n \n <div class=\"sp-row\">\n <div class=\"col-3\" style=\"padding:0px\">\n <label class=\"tool-label\" for=\"scanSize\">{{'selectTool.size' | translate}}</label>\n </div>\n <div class=\"col-9\">\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\n </div>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectAll()\">{{'selectTool.selectAll' | translate}}</button>\n </div>\n \n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"edit-selected\">\n <span class=\"tool-label\">{{'selectTool.edit' | translate}} : </span>\n <div class=\"sp-row\">\n <button class=\"btn rounded-pill btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">{{'selectTool.add' | translate}}</button>\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectionRemove()\">{{'selectTool.undo' | translate}}</button>\n </div>\n </div>\n\n <div class=\"sp-row\">\n {{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}} \n </div>\n <div *ngIf=\"!editingAudioZone\" class=\"sp-row\">\n <lib-radio-button label=\"{{ 'selectTool.chooseStartPoint' | translate }}\" (isCheckedEvent)=\"isSettingStartSweep=!isSettingStartSweep\"></lib-radio-button>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSaveSelection()\">{{'selectTool.saveSelection' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'selectTool.cancelSelection' | translate}}</button>\n </div>\n </div>\n\n</div>\n \n", styles: [".sp-row{display:flex;margin-bottom:1rem}.selectZone{
|
|
393
|
+
SweepPlanSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SweepPlanSelectionComponent, selector: "lib-sweep-plan-selection", inputs: { spaceID: "spaceID", chosenScansOnPlan: "chosenScansOnPlan", newZoneData: "newZoneData", occupiedSweeps: "occupiedSweeps", unavailableSweeps: "unavailableSweeps", editingAudioZone: "editingAudioZone", inputZone: "inputZone" }, outputs: { sweepsSelected: "sweepsSelected" }, usesOnChanges: true, ngImport: i0, template: "<div ngbDropdown class=\"sp-row d-inline-block\">\n <div class=\"col-sm-3\" *ngIf=\"plans\">\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\n ngbDropdownToggle>{{chosenPlan ?\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\n [disabled]=\"!plan.calibration\">{{ plan.name }}\n </button>\n </div>\n </div>\n</div>\n<div class=\"sp-row\">\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\n <lib-plan-legend [isAudioZone]=\"editingAudioZone\" *ngIf=\"buttonElements.length > 0\"></lib-plan-legend>\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\n <div class=\"sp-row\">\n <div style=\"overflow: hidden;width:100%;\">\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\n </div>\n </div>\n </div>\n </div>\n </lib-selection>\n \n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\n <div class=\"sp-row d-inline-block\">\n <h2>{{'selectTool.title' | translate}}</h2>\n <div class=\"protip\">{{'selectTool.tip' | translate}}.</div>\n </div>\n \n <div class=\"sp-row\">\n <div class=\"col-3\" style=\"padding:0px\">\n <label class=\"tool-label\" for=\"scanSize\">{{'selectTool.size' | translate}}</label>\n </div>\n <div class=\"col-9\">\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\n </div>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectAll()\">{{'selectTool.selectAll' | translate}}</button>\n </div>\n \n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"edit-selected\">\n <span class=\"tool-label\">{{'selectTool.edit' | translate}} : </span>\n <div class=\"sp-row\">\n <button class=\"btn rounded-pill btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">{{'selectTool.add' | translate}}</button>\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectionRemove()\">{{'selectTool.undo' | translate}}</button>\n </div>\n </div>\n\n <div class=\"sp-row\">\n {{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}} \n </div>\n <div *ngIf=\"!editingAudioZone\" class=\"sp-row\">\n <lib-radio-button label=\"{{ 'selectTool.chooseStartPoint' | translate }}\" (isCheckedEvent)=\"isSettingStartSweep=!isSettingStartSweep\"></lib-radio-button>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSaveSelection()\">{{'selectTool.saveSelection' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'selectTool.cancelSelection' | translate}}</button>\n </div>\n </div>\n\n</div>\n \n", styles: [".sp-row{display:flex;margin-bottom:1rem}.selectZone{border-radius:6px;overflow:hidden;background-color:var(--smarterplan-secondary)}.scanTool{margin:0px 1rem}.protip{color:gray;padding:0}.tool-label{font-size:1rem}\n"], components: [{ type: i2.SelectionComponent, selector: "lib-selection", outputs: ["onSelectionChanged"] }, { type: i3.PlanLegendComponent, selector: "lib-plan-legend", inputs: ["isAudioZone"] }, { type: i4.RadioButtonComponent, selector: "lib-radio-button", inputs: ["label"], outputs: ["isCheckedEvent"] }], directives: [{ type: i5.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i5.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }], pipes: { "translate": i7.TranslatePipe } });
|
|
394
394
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SweepPlanSelectionComponent, decorators: [{
|
|
395
395
|
type: Component,
|
|
396
|
-
args: [{ selector: 'lib-sweep-plan-selection', template: "<div ngbDropdown class=\"sp-row d-inline-block\">\n <div class=\"col-sm-3\" *ngIf=\"plans\">\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\n ngbDropdownToggle>{{chosenPlan ?\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\n [disabled]=\"!plan.calibration\">{{ plan.name }}\n </button>\n </div>\n </div>\n</div>\n<div class=\"sp-row\">\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\n <lib-plan-legend [isAudioZone]=\"editingAudioZone\" *ngIf=\"buttonElements.length > 0\"></lib-plan-legend>\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\n <div class=\"sp-row\">\n <div style=\"overflow: hidden;width:100%;\">\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\n </div>\n </div>\n </div>\n </div>\n </lib-selection>\n \n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\n <div class=\"sp-row d-inline-block\">\n <h2>{{'selectTool.title' | translate}}</h2>\n <div class=\"protip\">{{'selectTool.tip' | translate}}.</div>\n </div>\n \n <div class=\"sp-row\">\n <div class=\"col-3\" style=\"padding:0px\">\n <label class=\"tool-label\" for=\"scanSize\">{{'selectTool.size' | translate}}</label>\n </div>\n <div class=\"col-9\">\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\n </div>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectAll()\">{{'selectTool.selectAll' | translate}}</button>\n </div>\n \n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"edit-selected\">\n <span class=\"tool-label\">{{'selectTool.edit' | translate}} : </span>\n <div class=\"sp-row\">\n <button class=\"btn rounded-pill btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">{{'selectTool.add' | translate}}</button>\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectionRemove()\">{{'selectTool.undo' | translate}}</button>\n </div>\n </div>\n\n <div class=\"sp-row\">\n {{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}} \n </div>\n <div *ngIf=\"!editingAudioZone\" class=\"sp-row\">\n <lib-radio-button label=\"{{ 'selectTool.chooseStartPoint' | translate }}\" (isCheckedEvent)=\"isSettingStartSweep=!isSettingStartSweep\"></lib-radio-button>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSaveSelection()\">{{'selectTool.saveSelection' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'selectTool.cancelSelection' | translate}}</button>\n </div>\n </div>\n\n</div>\n \n", styles: [".sp-row{display:flex;margin-bottom:1rem}.selectZone{
|
|
396
|
+
args: [{ selector: 'lib-sweep-plan-selection', template: "<div ngbDropdown class=\"sp-row d-inline-block\">\n <div class=\"col-sm-3\" *ngIf=\"plans\">\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\n ngbDropdownToggle>{{chosenPlan ?\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\n [disabled]=\"!plan.calibration\">{{ plan.name }}\n </button>\n </div>\n </div>\n</div>\n<div class=\"sp-row\">\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\n <lib-plan-legend [isAudioZone]=\"editingAudioZone\" *ngIf=\"buttonElements.length > 0\"></lib-plan-legend>\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\n <div class=\"sp-row\">\n <div style=\"overflow: hidden;width:100%;\">\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\n </div>\n </div>\n </div>\n </div>\n </lib-selection>\n \n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\n <div class=\"sp-row d-inline-block\">\n <h2>{{'selectTool.title' | translate}}</h2>\n <div class=\"protip\">{{'selectTool.tip' | translate}}.</div>\n </div>\n \n <div class=\"sp-row\">\n <div class=\"col-3\" style=\"padding:0px\">\n <label class=\"tool-label\" for=\"scanSize\">{{'selectTool.size' | translate}}</label>\n </div>\n <div class=\"col-9\">\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\n </div>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectAll()\">{{'selectTool.selectAll' | translate}}</button>\n </div>\n \n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"edit-selected\">\n <span class=\"tool-label\">{{'selectTool.edit' | translate}} : </span>\n <div class=\"sp-row\">\n <button class=\"btn rounded-pill btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">{{'selectTool.add' | translate}}</button>\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSelectionRemove()\">{{'selectTool.undo' | translate}}</button>\n </div>\n </div>\n\n <div class=\"sp-row\">\n {{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}} \n </div>\n <div *ngIf=\"!editingAudioZone\" class=\"sp-row\">\n <lib-radio-button label=\"{{ 'selectTool.chooseStartPoint' | translate }}\" (isCheckedEvent)=\"isSettingStartSweep=!isSettingStartSweep\"></lib-radio-button>\n </div>\n \n <div class=\"sp-row\">\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onSaveSelection()\">{{'selectTool.saveSelection' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'selectTool.cancelSelection' | translate}}</button>\n </div>\n </div>\n\n</div>\n \n", styles: [".sp-row{display:flex;margin-bottom:1rem}.selectZone{border-radius:6px;overflow:hidden;background-color:var(--smarterplan-secondary)}.scanTool{margin:0px 1rem}.protip{color:gray;padding:0}.tool-label{font-size:1rem}\n"] }]
|
|
397
397
|
}], ctorParameters: function () { return [{ type: i1.ZoneService }, { type: i1.NavigationService }, { type: i1.PlanService }]; }, propDecorators: { spaceID: [{
|
|
398
398
|
type: Input
|
|
399
399
|
}], chosenScansOnPlan: [{
|
|
@@ -11,6 +11,7 @@ import * as i6 from "../plan-legend/plan-legend.component";
|
|
|
11
11
|
import * as i7 from "./add-zone/add-zone.component";
|
|
12
12
|
import * as i8 from "./add-audio-zone/add-audio-zone.component";
|
|
13
13
|
import * as i9 from "@angular/common";
|
|
14
|
+
import * as i10 from "../../pipes/count-audio-sweeps.pipe";
|
|
14
15
|
export class ZonesComponent {
|
|
15
16
|
constructor(route, zoneService, spaceService, visitService, navigationService, userService, planService, translate) {
|
|
16
17
|
this.route = route;
|
|
@@ -211,22 +212,25 @@ export class ZonesComponent {
|
|
|
211
212
|
this.setupMenuItems();
|
|
212
213
|
}
|
|
213
214
|
async showScanPointsOnPlan(navigations) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
215
|
+
if (this.currentPlan) {
|
|
216
|
+
this.loadingPlan = false;
|
|
217
|
+
const divPlan = document.querySelector("#planDiv");
|
|
218
|
+
await showScanPointsOnPlanInDiv(this.currentPlan, divPlan, navigations);
|
|
219
|
+
console.log("loaded");
|
|
220
|
+
panzoom(divPlan, {
|
|
221
|
+
bounds: true,
|
|
222
|
+
boundsPadding: 0,
|
|
223
|
+
maxZoom: 3.5,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
222
226
|
}
|
|
223
227
|
}
|
|
224
228
|
ZonesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ZonesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.ZoneService }, { token: i2.SpaceService }, { token: i2.VisitService }, { token: i2.NavigationService }, { token: i2.BaseUserService }, { token: i2.PlanService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
-
ZonesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ZonesComponent, selector: "lib-zones", outputs: { updatedZone: "updatedZone" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\n <div class=\"col-md-6\">\n <ul class=\"list-group list-group-flush\" >\n <li class=\"list-group-item default-zone-line-item\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\n {{defaultZone.name}}\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\n </div>\n <div *ngIf=\"defaultShowing\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: \n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\n </ul>\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == defaultZone.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n \n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{floor.name}}\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\n </div>\n <div *ngIf=\"index==floorDetails\"> \n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\n floor.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\n {{floor.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\n translate}}</button>\n \n <!-- List of children zones -->\n \n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == floor.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\n m<sup>2</sup>:\n {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\n |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n </ul>\n \n <div>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\n *ngIf=\"isMuseumModule\"> {{'Add museum itinerary' | translate}}</button>\n <!-- <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone()\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button> -->\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"row\" style=\"overflow: hidden; flex-direction: column;\" *ngIf=\"currentZone\">\n <lib-plan-legend [isAudioZone]=\"false\" *ngIf=\"currentPlan && !loadingPlan && plans\"></lib-plan-legend>\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\" *ngIf=\"currentPlan\"></div>\n <div *ngIf=\"!currentPlan && plans && !loadingPlan\">\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\n {{ 'Plan is not calibrated' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\n {{ 'No scan points chosen' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\n {{ 'The zone is on several floors' | translate}}\n </div>\n </div>\n \n </div>\n </div>\n </div>\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\n </div>\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\" [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\"\n (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\n </div>\n </div>\n", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}\n"], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { type: i6.PlanLegendComponent, selector: "lib-plan-legend", inputs: ["isAudioZone"] }, { type: i7.AddZoneComponent, selector: "lib-add-zone", inputs: ["zoneEdit", "spaceID", "images360", "navigationIDs", "zones", "newZoneDataFromEditor", "chosenPlan", "isMuseumVisit", "defaultZone"], outputs: ["updatedZone"] }, { type: i8.AddAudioZoneComponent, selector: "lib-add-audio-zone", inputs: ["spaceID", "defaultZone", "zones", "parentZone", "currentAudioZone"], outputs: ["updatedZone"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i3.TranslatePipe, "keyvalue": i9.KeyValuePipe } });
|
|
229
|
+
ZonesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ZonesComponent, selector: "lib-zones", outputs: { updatedZone: "updatedZone" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\n <div class=\"col-md-6\">\n <ul class=\"list-group list-group-flush\" >\n <li class=\"list-group-item default-zone-line-item\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\n {{defaultZone.name}}\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\n </div>\n <div *ngIf=\"defaultShowing\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: \n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\n </ul>\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == defaultZone.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n \n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{floor.name}}\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\n </div>\n <div *ngIf=\"index==floorDetails\"> \n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\n floor.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\n {{floor.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\n translate}}</button>\n \n <!-- List of children zones -->\n \n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == floor.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\n m<sup>2</sup>:\n {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual && lot.isMuseumVisitZone\">\n {{'Scan Points with audio' | translate}}: {{ lot | countAudioSweeps | async}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n </ul>\n \n <div>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\n *ngIf=\"isMuseumModule\"> {{'Add museum itinerary' | translate}}</button>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"row\" style=\"overflow: hidden; flex-direction: column;\">\n <div *ngIf=\"currentPlan\">\n <lib-plan-legend [isAudioZone]=\"false\"></lib-plan-legend>\n <div class=\"planContainer\">\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\"></div>\n </div>\n </div>\n \n <div *ngIf=\"!currentPlan && plans && !loadingPlan && currentZone\">\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\n {{ 'Plan is not calibrated' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\n {{ 'No scan points chosen' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\n {{ 'The zone is on several floors' | translate}}\n </div>\n </div>\n \n </div>\n </div>\n </div>\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\n </div>\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\" [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\"\n (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\n </div>\n </div>\n", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.planContainer{overflow:hidden;border-radius:6px;background-color:var(--smarterplan-secondary);height:500px}\n"], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { type: i6.PlanLegendComponent, selector: "lib-plan-legend", inputs: ["isAudioZone"] }, { type: i7.AddZoneComponent, selector: "lib-add-zone", inputs: ["zoneEdit", "spaceID", "images360", "navigationIDs", "zones", "newZoneDataFromEditor", "chosenPlan", "isMuseumVisit", "defaultZone"], outputs: ["updatedZone"] }, { type: i8.AddAudioZoneComponent, selector: "lib-add-audio-zone", inputs: ["spaceID", "defaultZone", "zones", "parentZone", "currentAudioZone"], outputs: ["updatedZone"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i3.TranslatePipe, "keyvalue": i9.KeyValuePipe, "async": i9.AsyncPipe, "countAudioSweeps": i10.CountAudioSweepsPipe } });
|
|
226
230
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ZonesComponent, decorators: [{
|
|
227
231
|
type: Component,
|
|
228
|
-
args: [{ selector: 'lib-zones', template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\n <div class=\"col-md-6\">\n <ul class=\"list-group list-group-flush\" >\n <li class=\"list-group-item default-zone-line-item\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\n {{defaultZone.name}}\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\n </div>\n <div *ngIf=\"defaultShowing\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: \n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\n </ul>\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == defaultZone.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n \n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{floor.name}}\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\n </div>\n <div *ngIf=\"index==floorDetails\"> \n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\n floor.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\n {{floor.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\n translate}}</button>\n \n <!-- List of children zones -->\n \n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == floor.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\n m<sup>2</sup>:\n {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\n |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n </ul>\n \n <div>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\n *ngIf=\"isMuseumModule\"> {{'Add museum itinerary' | translate}}</button>\n <!-- <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone()\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button> -->\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"row\" style=\"overflow: hidden; flex-direction: column;\" *ngIf=\"currentZone\">\n <lib-plan-legend [isAudioZone]=\"false\" *ngIf=\"currentPlan && !loadingPlan && plans\"></lib-plan-legend>\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\" *ngIf=\"currentPlan\"></div>\n <div *ngIf=\"!currentPlan && plans && !loadingPlan\">\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\n {{ 'Plan is not calibrated' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\n {{ 'No scan points chosen' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\n {{ 'The zone is on several floors' | translate}}\n </div>\n </div>\n \n </div>\n </div>\n </div>\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\n </div>\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\" [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\"\n (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\n </div>\n </div>\n", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}\n"] }]
|
|
232
|
+
args: [{ selector: 'lib-zones', template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\n <div class=\"col-md-6\">\n <ul class=\"list-group list-group-flush\" >\n <li class=\"list-group-item default-zone-line-item\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\n {{defaultZone.name}}\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\n </div>\n <div *ngIf=\"defaultShowing\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: \n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\n </ul>\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == defaultZone.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n \n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{floor.name}}\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\n </div>\n <div *ngIf=\"index==floorDetails\"> \n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\n floor.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\n {{floor.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\n translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\n translate}}</button>\n \n <!-- List of children zones -->\n \n <div *ngFor=\"let pair of zonesMap | keyvalue\">\n <div *ngIf=\"pair.key == floor.id\">\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-flush list-group-item-action\"\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\n {{lot.name}}\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\n \n </div>\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\n translate}}: {{lot.layer ? lot.layer.name :\n \"No type\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\n m<sup>2</sup>:\n {{lot.surface }}\n </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual && lot.isMuseumVisitZone\">\n {{'Scan Points with audio' | translate}}: {{ lot | countAudioSweeps | async}} </li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\n {{'Zone not visible in 3D visit' | translate}}</li>\n </ul>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\n </div>\n </li>\n </ul>\n \n </div>\n </div>\n </div>\n </li>\n </ul>\n \n <div>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\n *ngIf=\"isMuseumModule\"> {{'Add museum itinerary' | translate}}</button>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"row\" style=\"overflow: hidden; flex-direction: column;\">\n <div *ngIf=\"currentPlan\">\n <lib-plan-legend [isAudioZone]=\"false\"></lib-plan-legend>\n <div class=\"planContainer\">\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\"></div>\n </div>\n </div>\n \n <div *ngIf=\"!currentPlan && plans && !loadingPlan && currentZone\">\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\n {{ 'Plan is not calibrated' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\n {{ 'No scan points chosen' | translate}}\n </div>\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\n {{ 'The zone is on several floors' | translate}}\n </div>\n </div>\n \n </div>\n </div>\n </div>\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\n </div>\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\" [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\"\n (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\n </div>\n </div>\n", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.planContainer{overflow:hidden;border-radius:6px;background-color:var(--smarterplan-secondary);height:500px}\n"] }]
|
|
229
233
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.ZoneService }, { type: i2.SpaceService }, { type: i2.VisitService }, { type: i2.NavigationService }, { type: i2.BaseUserService }, { type: i2.PlanService }, { type: i3.TranslateService }]; }, propDecorators: { updatedZone: [{
|
|
230
234
|
type: Output
|
|
231
235
|
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE9BQU8sRUFFOEMsSUFBSSxFQUFjLHlCQUF5QixFQUFxQixRQUFRLEVBQzVILE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDOzs7Ozs7Ozs7OztBQU05QixNQUFNLE9BQU8sY0FBYztJQXNEdkIsWUFDWSxLQUFxQixFQUNyQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixZQUEwQixFQUMxQixpQkFBb0MsRUFDcEMsV0FBNEIsRUFDNUIsV0FBd0IsRUFDeEIsU0FBMkI7UUFQM0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUE1RHZDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJWCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFNcEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFVdEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFFM0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFJdkIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUV4QixhQUFRLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFMUMsaUJBQVksR0FBVyxDQUFDLENBQUMsQ0FBQztRQUkxQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7SUFhdkIsQ0FBQztJQUVMLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtZQUM1QztnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO2dCQUM3QixHQUFHLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxPQUFPLEVBQUU7YUFDdkM7WUFDRDtnQkFDSSxLQUFLLEVBQUUsT0FBTztnQkFDZCxHQUFHLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRO2FBQ3JEO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2pDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUMxRSxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUN0RCxDQUFDO1FBQ0YsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pKLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDYixLQUFLLENBQUMsRUFBRSxFQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDN0QsQ0FBQztTQUNMO1FBQ0QscURBQXFEO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUN2RCxJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQ3pELElBQUksQ0FBQyxPQUFPLENBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0QsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNmLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFVO1FBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxDQUFDLCtCQUErQjtTQUMxQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixrQ0FBa0M7WUFDbEMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxLQUFXO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQywrQkFBK0I7U0FDMUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQzlELElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQzVELElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNsQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNoQixLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxzQkFBc0I7U0FDaEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFnQjtRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxlQUFlO1NBQ3pCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVU7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3RCxvQ0FBb0M7UUFDcEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMzRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUNwRDtTQUNKO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsV0FBeUI7UUFDaEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQWdCLENBQUM7UUFDbEUsTUFBTSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixhQUFhLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsR0FBRztTQUNmLENBQUMsQ0FBQztJQUNQLENBQUM7OzJHQTNSUSxjQUFjOytGQUFkLGNBQWMsK0dDYjNCLHdoV0E2S0E7MkZEaEthLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksV0FBVzs0U0FVWCxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICAgIE1lbnVJdGVtLCBab25lU2VydmljZSwgU3BhY2VTZXJ2aWNlLCBWaXNpdFNlcnZpY2UsXG4gICAgTmF2aWdhdGlvblNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgUGxhblNlcnZpY2UsIHdhaXQsIE5hdmlnYXRpb24sIHNob3dTY2FuUG9pbnRzT25QbGFuSW5EaXYsIFBsYW4sIFNwYWNlLCBab25lLCBTcE1vZHVsZVxufSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHBhbnpvb20gZnJvbSBcInBhbnpvb21cIjtcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXpvbmVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vem9uZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3pvbmVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWm9uZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgbG90SW5kZXhEZXRhaWxzID0gLTE7XG5cbiAgICBjdXJyZW50U3BhY2U6IFNwYWNlO1xuXG4gICAgQE91dHB1dCgpIHVwZGF0ZWRab25lID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcGxhbnM6IFBsYW5bXTtcblxuICAgIHpvbmVGb3JFZGl0OiBab25lO1xuXG4gICAgaXNFZGl0aW5nWm9uZSA9IGZhbHNlO1xuXG4gICAgY2FwdHVyZURhdGU6IG51bWJlcjtcblxuICAgIHNwYWNlSUQ6IHN0cmluZztcblxuICAgIG5hdmlnYXRpb25zOiBzdHJpbmdbXTtcblxuICAgIGltYWdlczM2MDogYW55W107XG5cbiAgICBjYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgcGxhbklzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgY3VycmVudFBsYW46IFBsYW47XG5cbiAgICBjdXJyZW50Wm9uZTogWm9uZTtcblxuICAgIGxvYWRpbmdQbGFuID0gZmFsc2U7XG5cbiAgICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcblxuICAgIGlzTXVzZXVtVmlzaXQgPSBmYWxzZTtcblxuICAgIGlzTXVzZXVtTW9kdWxlID0gZmFsc2U7XG5cbiAgICBhbGxab25lczogWm9uZVtdO1xuXG4gICAgZmxvb3Jab25lczogWm9uZVtdID0gW107XG5cbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgWm9uZVtdPiA9IG5ldyBNYXAoKTtcblxuICAgIGZsb29yRGV0YWlsczogbnVtYmVyID0gLTE7XG5cbiAgICBkZWZhdWx0Wm9uZTogWm9uZTtcblxuICAgIGRlZmF1bHRTaG93aW5nID0gZmFsc2U7XG5cbiAgICBpc0FkZGluZ0F1ZGlvVHJhY2sgPSBmYWxzZTtcblxuICAgIHBhcmVudFpvbmVGb3JBdWRpbzogWm9uZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlzaXRTZXJ2aWNlOiBWaXNpdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3BhY2VJRCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwiaWRcIik7XG4gICAgICAgIHRoaXMuaXNNdXNldW1Nb2R1bGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTTtcbiAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgfVxuXG4gICAgc2V0dXBNZW51SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW1xuICAgICAgICAgICAgeyBsYWJlbDogXCJMb2NhdGlvbnNcIiwgdXJsOiBcIi9sb2NhbGlzYXRpb25cIiB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRTcGFjZS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlSUR9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiWm9uZXNcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5jdXJyZW50U3BhY2UuaWR9L3pvbmVzYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgb25Hb0JhY2soKSB7XG4gICAgICAgIHRoaXMuZWRpdENvbXBsZXRlZChudWxsKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZXRab25lcygpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZUlEKTtcbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuYWxsWm9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZSh0aGlzLnNwYWNlSUQpO1xuICAgICAgICB0aGlzLmRlZmF1bHRab25lID0gdGhpcy5hbGxab25lcy5maW5kKFxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIgJiYgem9uZS5zd2VlcElEcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZsb29yWm9uZXMgPSB0aGlzLmFsbFpvbmVzLmZpbHRlcihcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxuICAgICAgICApO1xuICAgICAgICAvLyB3ZSBhZGQgb25seSBjaGlsZHJlbiB6b25lcyB0aGF0IGFyZSBub3QgRmxvb3JzXG4gICAgICAgIHRoaXMuem9uZXNNYXAuc2V0KHRoaXMuZGVmYXVsdFpvbmUuaWQsIHRoaXMuYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnBhcmVudElEID09PSB0aGlzLmRlZmF1bHRab25lLmlkICYmICF0aGlzLmZsb29yWm9uZXMuaW5jbHVkZXMoem9uZSkpKTtcbiAgICAgICAgZm9yIChjb25zdCBmbG9vciBvZiB0aGlzLmZsb29yWm9uZXMpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZXNNYXAuc2V0KFxuICAgICAgICAgICAgICAgIGZsb29yLmlkLFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnBhcmVudElEID09PSBmbG9vci5pZCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuem9uZXMgPSBzb3J0QWxwaGFiZXRpY2FsbHlPbk5hbWUodGhpcy56b25lcyk7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9ucygpO1xuICAgICAgICB0aGlzLmltYWdlczM2MCA9IGF3YWl0IHRoaXMudmlzaXRTZXJ2aWNlLmxvYWRJbWFnZXNGb3JTcGFjZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBsYW5zID0gYXdhaXQgdGhpcy5wbGFuU2VydmljZS5nZXRQbGFuc1dpdGhab25lc0ZvclNwYWNlKFxuICAgICAgICAgICAgdGhpcy5zcGFjZUlELFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBsYW5zID0gdGhpcy5wbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uaXNDdXJyZW50Rm9yWm9uZSk7XG4gICAgICAgIHRoaXMub25QbGFuc0xvYWRlZCgpO1xuICAgIH1cblxuICAgIHJlc2V0TmF2aWdhdGlvbnMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3Qgem9uZXNXaXRoU3dlZXBzID0gdGhpcy5hbGxab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuc3dlZXBJRHMpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25zID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldCh6b25lc1dpdGhTd2VlcHMuZmxhdE1hcCgoem9uZSkgPT4gem9uZS5zd2VlcElEcykpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGFzeW5jIG9uUGxhbnNMb2FkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYW5Jc1Zpc2libGUgJiYgdGhpcy5jdXJyZW50Wm9uZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGxhbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIHpvbmVcbiAgICAgKiBAcGFyYW0gaSBpbmRleCBvZiB0aGUgbG90IHRvIGJlIHRvZ2dsZWRcbiAgICAgKi9cbiAgICBhc3luYyBvblRvZ2dsZURldGFpbChpbmRleDogbnVtYmVyLCB6b25lOiBab25lKSB7XG4gICAgICAgIHRoaXMubG90SW5kZXhEZXRhaWxzID0gaW5kZXggPT09IHRoaXMubG90SW5kZXhEZXRhaWxzID8gLTEgOiBpbmRleDtcbiAgICAgICAgaWYgKHRoaXMubG90SW5kZXhEZXRhaWxzID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMucGxhbklzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wbGFucykge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyB3YWl0IHVudGlsIHRoZSBwbGFucyBhcmUgc2V0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1BsYW4pIHtcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcGxhbiBpcyBhbHJlYWR5IGxvYWRpbmdcbiAgICAgICAgICAgIGF3YWl0IHdhaXQoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVwYXJlUGxhbigpO1xuICAgIH1cblxuICAgIG9uVG9nZ2xlRGV0YWlsRmxvb3IoaW5kZXg6IG51bWJlciwgZmxvb3I6IFpvbmUpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2hvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZsb29yRGV0YWlscyA9IGluZGV4ID09PSB0aGlzLmZsb29yRGV0YWlscyA/IC0xIDogaW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmZsb29yRGV0YWlscyA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSBmbG9vcjtcbiAgICAgICAgdGhpcy5wbGFuSXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBsYW5zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInBsYW5zIG5vdCByZWFkeVwiKTtcbiAgICAgICAgICAgIHJldHVybjsgLy8gd2FpdCB1bnRpbCB0aGUgcGxhbnMgYXJlIHNldFxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcGFyZVBsYW4oKTtcbiAgICB9XG5cbiAgICBvblRvZ2dsZURlZmF1bHRab25lKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRTaG93aW5nID0gIXRoaXMuZGVmYXVsdFNob3dpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSB0aGlzLmRlZmF1bHRTaG93aW5nID8gdGhpcy5kZWZhdWx0Wm9uZSA6IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJlcGFyZVBsYW4oKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1BsYW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRQbGFuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFpvbmUudmlydHVhbCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGF3YWl0IHRoaXMucGxhblNlcnZpY2UuZ2V0Q2FsaWJyYXRlZFBsYW5Gb3Jab25lKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBsYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dTY2FuUG9pbnRzT25QbGFuKHNjYW5zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJc1Zpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRWRpdCh6b25lOiBab25lKSB7XG4gICAgICAgIHRoaXMuem9uZUZvckVkaXQgPSB6b25lO1xuICAgICAgICBpZiAodGhpcy56b25lRm9yRWRpdC5sYXllciAmJiB0aGlzLnpvbmVGb3JFZGl0LmxheWVyLm5hbWUgPT09IFwiQVVESU9cIikge1xuICAgICAgICAgICAgdGhpcy5pc0FkZGluZ0F1ZGlvVHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGAke3pvbmUubmFtZX1gLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZExvdCgpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nWm9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IFwiTmV3XCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQWRkTXVzZXVtWm9uZSgpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgTXVzZXVtIEl0aW5lcmFyeVwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZEF1ZGlvWm9uZShwYXJlbnRab25lOiBab25lKSB7XG4gICAgICAgIHRoaXMucGFyZW50Wm9uZUZvckF1ZGlvID0gcGFyZW50Wm9uZTtcbiAgICAgICAgdGhpcy5pc0FkZGluZ0F1ZGlvVHJhY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBwYXJlbnRab25lLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBcImFkZC1hdWRpby5hZGRcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25EZWxldGUoem9uZTogWm9uZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZGVsZXRlWm9uZVwiKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG4gICAgICAgIGlmICh3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS5kZWxldGVab25lKHpvbmUuaWQpO1xuICAgICAgICAgICAgdGhpcy5hbGxab25lcy5zcGxpY2UodGhpcy5hbGxab25lcy5pbmRleE9mKHpvbmUpLCAxKTtcbiAgICAgICAgICAgIGlmICh6b25lLnBhcmVudElEICYmIEFycmF5LmZyb20odGhpcy56b25lc01hcC5rZXlzKCkpLmluY2x1ZGVzKHpvbmUucGFyZW50SUQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZXNGb3JQYXJlbnQgPSB0aGlzLnpvbmVzTWFwLmdldCh6b25lLnBhcmVudElEKTtcbiAgICAgICAgICAgICAgICB6b25lc0ZvclBhcmVudC5zcGxpY2Uoem9uZXNGb3JQYXJlbnQuaW5kZXhPZih6b25lKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lc01hcC5zZXQoem9uZS5wYXJlbnRJRCwgem9uZXNGb3JQYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdENvbXBsZXRlZChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMubG90SW5kZXhEZXRhaWxzID0gLTE7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpb1RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuem9uZUZvckVkaXQgPSBudWxsO1xuICAgICAgICB0aGlzLnBsYW5Jc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd1NjYW5Qb2ludHNPblBsYW4obmF2aWdhdGlvbnM6IE5hdmlnYXRpb25bXSkge1xuICAgICAgICBjb25zdCBkaXZQbGFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwbGFuRGl2XCIpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBhd2FpdCBzaG93U2NhblBvaW50c09uUGxhbkluRGl2KHRoaXMuY3VycmVudFBsYW4sIGRpdlBsYW4sIG5hdmlnYXRpb25zKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nUGxhbiA9IGZhbHNlO1xuICAgICAgICBwYW56b29tKGRpdlBsYW4sIHtcbiAgICAgICAgICAgIGJvdW5kczogdHJ1ZSxcbiAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXG4gICAgICAgICAgICBtYXhab29tOiAzLjUsXG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiICpuZ0lmPVwiY3VycmVudFNwYWNlXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxuICAgICAgPGxpYi10YWItbmF2aWdhdGlvbiBbbWVudUl0ZW1zXT0nbWVudUl0ZW1zJyAob25Hb0JhY2spPVwib25Hb0JhY2soKVwiPjwvbGliLXRhYi1uYXZpZ2F0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc0VkaXRpbmdab25lICYmICFpc0FkZGluZ0F1ZGlvVHJhY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIiA+XG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGRlZmF1bHQtem9uZS1saW5lLWl0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHpvbmUtbmFtZVwiICpuZ0lmPVwiZGVmYXVsdFpvbmVcIj5cbiAgICAgICAgICAgICAge3tkZWZhdWx0Wm9uZS5uYW1lfX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtem9uZS1sYWJlbFwiPnt7IFwid2hvbGUgc3BhY2VcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiZGVmYXVsdFNob3dpbmdcIiAoY2xpY2spPVwib25Ub2dnbGVEZWZhdWx0Wm9uZSgpXCI+PC9saWItY2hldnJvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRlZmF1bHRTaG93aW5nXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1R5cGUgb2Ygem9uZScgfCB0cmFuc2xhdGV9fTogXG4gICAgICAgICAgICAgICAgICB7e2RlZmF1bHRab25lLmxheWVyID8gZGVmYXVsdFpvbmUubGF5ZXIubmFtZSA6IFwiTm8gdHlwZVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImRlZmF1bHRab25lLnN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgICAgIHt7J1N1cmZhY2UnIHwgdHJhbnNsYXRlfX0sIG08c3VwPjI8L3N1cD46IHt7ZGVmYXVsdFpvbmUuc3VyZmFjZSB9fVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIhZGVmYXVsdFpvbmUudmlydHVhbFwiPnt7J1NjYW4gUG9pbnRzJyB8IHRyYW5zbGF0ZX19OlxuICAgICAgICAgICAgICAgICAge3tkZWZhdWx0Wm9uZS5zd2VlcElEcyA/IGRlZmF1bHRab25lLnN3ZWVwSURzLmxlbmd0aCA6IFwiTm8gc2NhbiBwb2ludHNcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhaXIgb2Ygem9uZXNNYXAgfCBrZXl2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYWlyLmtleSA9PSBkZWZhdWx0Wm9uZS5pZFwiPlxuICAgICAgICAgICAgICAgICAgPGg1IHN0eWxlPVwibWFyZ2luOiA4cHg7XCIgKm5nSWY9XCJwYWlyLnZhbHVlLmxlbmd0aCA+IDBcIj57eydDaGlsZHJlbiB6b25lcyd8dHJhbnNsYXRlfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWZsdXNoIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsb3Qgb2YgcGFpci52YWx1ZTsgaW5kZXggYXMgem9uZUluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgem9uZS1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xvdC5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXNldW0tbGFiZWxcIiAqbmdJZj1cImxvdC5pc011c2V1bVZpc2l0Wm9uZVwiPnt7IFwiaXRpbmVyYXJ5XCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJ6b25lSW5kZXg9PWxvdEluZGV4RGV0YWlsc1wiIChjbGljayk9XCJvblRvZ2dsZURldGFpbCh6b25lSW5kZXgsIGxvdClcIj48L2xpYi1jaGV2cm9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInpvbmVJbmRleD09bG90SW5kZXhEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIhbG90LmlzTXVzZXVtVmlzaXRab25lXCI+e3snVHlwZSBvZiB6b25lJyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX06IHt7bG90LmxheWVyID8gbG90LmxheWVyLm5hbWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiTm8gdHlwZVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJsb3Quc3VyZmFjZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1N1cmZhY2UnIHwgdHJhbnNsYXRlfX0sbTxzdXA+Mjwvc3VwPjoge3tsb3Quc3VyZmFjZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QudmlydHVhbFwiPnt7J1NjYW4gUG9pbnRzJyB8IHRyYW5zbGF0ZX19OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90LnN3ZWVwSURzID8gbG90LnN3ZWVwSURzLmxlbmd0aCA6IFwiTm8gc2NhbiBwb2ludHNcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibG90LnZpcnR1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydab25lIG5vdCB2aXNpYmxlIGluIDNEIHZpc2l0JyB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdChsb3QpXCI+e3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkQXVkaW9ab25lKGxvdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVzZXVtTW9kdWxlXCI+IHt7J2FkZC1hdWRpby5hZGQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGxvdClcIj57eydEZWxldGUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgXG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgKm5nRm9yPVwibGV0IGZsb29yIG9mIGZsb29yWm9uZXM7IGluZGV4IGFzIGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIj5cbiAgICAgICAgICAgICAge3tmbG9vci5uYW1lfX1cbiAgICAgICAgICAgICAgPCEtLSA8c21hbGw+KHt7IGxvdC5tZXRhZGF0YSA/ICgnQ2FsaWJyYXRlZCcgfCB0cmFuc2xhdGUpIDogKCdOb3QgY2FsaWJyYXRlZCcgfCB0cmFuc2xhdGUpfX0pPC9zbWFsbD4gLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXNldW0tbGFiZWxcIiAqbmdJZj1cImZsb29yLmlzTXVzZXVtVmlzaXRab25lXCI+e3sgXCJpdGluZXJhcnlcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiaW5kZXg9PWZsb29yRGV0YWlsc1wiIChjbGljayk9XCJvblRvZ2dsZURldGFpbEZsb29yKGluZGV4LCBmbG9vcilcIj48L2xpYi1jaGV2cm9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5kZXg9PWZsb29yRGV0YWlsc1wiPiAgXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1R5cGUgb2Ygem9uZScgfCB0cmFuc2xhdGV9fToge3tmbG9vci5sYXllciA/XG4gICAgICAgICAgICAgICAgICBmbG9vci5sYXllci5uYW1lIDpcbiAgICAgICAgICAgICAgICAgIFwiTm8gdHlwZVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImZsb29yLnN1cmZhY2VcIj57eydTdXJmYWNlJyB8IHRyYW5zbGF0ZX19LCBtPHN1cD4yPC9zdXA+OlxuICAgICAgICAgICAgICAgICAge3tmbG9vci5zdXJmYWNlIH19XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFmbG9vci52aXJ0dWFsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX06XG4gICAgICAgICAgICAgICAgICB7e2Zsb29yLnN3ZWVwSURzID8gZmxvb3Iuc3dlZXBJRHMubGVuZ3RoIDogXCJObyBzY2FuIHBvaW50c1wiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImZsb29yLnZpcnR1YWxcIj57eydab25lIG5vdCB2aXNpYmxlIGluIDNEIHZpc2l0JyB8XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25FZGl0KGZsb29yKVwiPnt7J0VkaXQnIHxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICBcbiAgICAgICAgICAgICAgPCEtLSBMaXN0IG9mIGNoaWxkcmVuIHpvbmVzIC0tPlxuICBcbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFpciBvZiB6b25lc01hcCB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhaXIua2V5ID09IGZsb29yLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8aDUgc3R5bGU9XCJtYXJnaW46IDhweDtcIiAqbmdJZj1cInBhaXIudmFsdWUubGVuZ3RoID4gMFwiPnt7J0NoaWxkcmVuIHpvbmVzJ3x0cmFuc2xhdGV9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtZmx1c2ggbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxvdCBvZiBwYWlyLnZhbHVlOyBpbmRleCBhcyB6b25lSW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11c2V1bS1sYWJlbFwiICpuZ0lmPVwibG90LmlzTXVzZXVtVmlzaXRab25lXCI+e3sgXCJpdGluZXJhcnlcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cInpvbmVJbmRleD09bG90SW5kZXhEZXRhaWxzXCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKHpvbmVJbmRleCwgbG90KVwiPjwvbGliLWNoZXZyb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiem9uZUluZGV4PT1sb3RJbmRleERldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj57eydUeXBlIG9mIHpvbmUnIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fToge3tsb3QubGF5ZXIgPyBsb3QubGF5ZXIubmFtZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC5zdXJmYWNlXCI+e3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPHN1cD4yPC9zdXA+OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90LnN1cmZhY2UgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIhbG90LnZpcnR1YWxcIj57eydTY2FuIFBvaW50cycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xvdC5zd2VlcElEcyA/IGxvdC5zd2VlcElEcy5sZW5ndGggOiBcIk5vIHNjYW4gcG9pbnRzXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC52aXJ0dWFsXCI+e3snWm9uZSBub3QgdmlzaWJsZSBpbiAzRCB2aXNpdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KGxvdClcIj57eydFZGl0JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRBdWRpb1pvbmUobG90KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdXNldW1Nb2R1bGVcIj4ge3snYWRkLWF1ZGlvLmFkZCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUobG90KVwiPnt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkTG90KClcIj57eydBZGQgem9uZScgfFxuICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRNdXNldW1ab25lKClcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc011c2V1bU1vZHVsZVwiPiB7eydBZGQgbXVzZXVtIGl0aW5lcmFyeScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkQXVkaW9ab25lKClcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc011c2V1bU1vZHVsZVwiPiB7eydhZGQtYXVkaW8uYWRkJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwibG9hZGluZ1BsYW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiICpuZ0lmPVwiY3VycmVudFpvbmVcIj5cbiAgICAgICAgICA8bGliLXBsYW4tbGVnZW5kIFtpc0F1ZGlvWm9uZV09XCJmYWxzZVwiICpuZ0lmPVwiY3VycmVudFBsYW4gJiYgIWxvYWRpbmdQbGFuICYmIHBsYW5zXCI+PC9saWItcGxhbi1sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbXMtM1wiIHN0eWxlPVwiaGVpZ2h0OiA1MDBweDsgd2lkdGg6IDEwMCU7XCIgaWQ9XCJwbGFuRGl2XCIgKm5nSWY9XCJjdXJyZW50UGxhblwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3VycmVudFBsYW4gJiYgcGxhbnMgJiYgIWxvYWRpbmdQbGFuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgaWQ9XCJuby1wbGFuXCIgKm5nSWY9XCIhY3VycmVudFpvbmUudmlydHVhbCAmJiAhY3VycmVudFpvbmUuaXNNdWx0aXBsZUZsb29yWm9uZVwiPlxuICAgICAgICAgICAgICB7eyAnUGxhbiBpcyBub3QgY2FsaWJyYXRlZCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgaWQ9XCJuby1wbGFuXCIgKm5nSWY9XCJjdXJyZW50Wm9uZS52aXJ0dWFsXCI+XG4gICAgICAgICAgICAgIHt7ICdObyBzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbXMtM1wiIGlkPVwibm8tcGxhblwiICpuZ0lmPVwiY3VycmVudFpvbmUuaXNNdWx0aXBsZUZsb29yWm9uZVwiPlxuICAgICAgICAgICAgICB7eyAnVGhlIHpvbmUgaXMgb24gc2V2ZXJhbCBmbG9vcnMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJpc0VkaXRpbmdab25lXCI+XG4gICAgICA8bGliLWFkZC16b25lIFt6b25lRWRpdF09XCJ6b25lRm9yRWRpdFwiIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbaW1hZ2VzMzYwXT1cImltYWdlczM2MFwiIFtuYXZpZ2F0aW9uSURzXT1cIm5hdmlnYXRpb25zXCJcbiAgICAgICAgW3pvbmVzXT1cImFsbFpvbmVzXCIgW2RlZmF1bHRab25lXT1cImRlZmF1bHRab25lXCIgKHVwZGF0ZWRab25lKT1cImVkaXRDb21wbGV0ZWQoJGV2ZW50KVwiIFtpc011c2V1bVZpc2l0XT1cImlzTXVzZXVtVmlzaXRcIj48L2xpYi1hZGQtem9uZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiaXNBZGRpbmdBdWRpb1RyYWNrXCI+XG4gICAgICA8bGliLWFkZC1hdWRpby16b25lIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbZGVmYXVsdFpvbmVdPVwiZGVmYXVsdFpvbmVcIiBbcGFyZW50Wm9uZV09XCJwYXJlbnRab25lRm9yQXVkaW9cIiBbem9uZXNdPVwiYWxsWm9uZXNcIiBbY3VycmVudEF1ZGlvWm9uZV09XCJ6b25lRm9yRWRpdFwiXG4gICAgICAodXBkYXRlZFpvbmUpPVwiZWRpdENvbXBsZXRlZCgkZXZlbnQpXCI+PC9saWItYWRkLWF1ZGlvLXpvbmU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE9BQU8sRUFFOEMsSUFBSSxFQUFjLHlCQUF5QixFQUFxQixRQUFRLEVBQzVILE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNOUIsTUFBTSxPQUFPLGNBQWM7SUFzRHZCLFlBQ1ksS0FBcUIsRUFDckIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFNBQTJCO1FBUDNCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBNUR2QyxvQkFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBSVgsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBTXBELGtCQUFhLEdBQUcsS0FBSyxD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SSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFdBQXlCO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtZQUN4QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBZ0IsQ0FBQztZQUNsRSxNQUFNLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDckIsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxFQUFFLEdBQUc7YUFDZixDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7OzJHQTlSUSxjQUFjOytGQUFkLGNBQWMsK0dDYjNCLHVtV0FpTEE7MkZEcEthLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksV0FBVzs0U0FVWCxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICAgIE1lbnVJdGVtLCBab25lU2VydmljZSwgU3BhY2VTZXJ2aWNlLCBWaXNpdFNlcnZpY2UsXG4gICAgTmF2aWdhdGlvblNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgUGxhblNlcnZpY2UsIHdhaXQsIE5hdmlnYXRpb24sIHNob3dTY2FuUG9pbnRzT25QbGFuSW5EaXYsIFBsYW4sIFNwYWNlLCBab25lLCBTcE1vZHVsZVxufSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHBhbnpvb20gZnJvbSBcInBhbnpvb21cIjtcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXpvbmVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vem9uZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3pvbmVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWm9uZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgbG90SW5kZXhEZXRhaWxzID0gLTE7XG5cbiAgICBjdXJyZW50U3BhY2U6IFNwYWNlO1xuXG4gICAgQE91dHB1dCgpIHVwZGF0ZWRab25lID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcGxhbnM6IFBsYW5bXTtcblxuICAgIHpvbmVGb3JFZGl0OiBab25lO1xuXG4gICAgaXNFZGl0aW5nWm9uZSA9IGZhbHNlO1xuXG4gICAgY2FwdHVyZURhdGU6IG51bWJlcjtcblxuICAgIHNwYWNlSUQ6IHN0cmluZztcblxuICAgIG5hdmlnYXRpb25zOiBzdHJpbmdbXTtcblxuICAgIGltYWdlczM2MDogYW55W107XG5cbiAgICBjYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgcGxhbklzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgY3VycmVudFBsYW46IFBsYW47XG5cbiAgICBjdXJyZW50Wm9uZTogWm9uZTtcblxuICAgIGxvYWRpbmdQbGFuID0gZmFsc2U7XG5cbiAgICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcblxuICAgIGlzTXVzZXVtVmlzaXQgPSBmYWxzZTtcblxuICAgIGlzTXVzZXVtTW9kdWxlID0gZmFsc2U7XG5cbiAgICBhbGxab25lczogWm9uZVtdO1xuXG4gICAgZmxvb3Jab25lczogWm9uZVtdID0gW107XG5cbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgWm9uZVtdPiA9IG5ldyBNYXAoKTtcblxuICAgIGZsb29yRGV0YWlsczogbnVtYmVyID0gLTE7XG5cbiAgICBkZWZhdWx0Wm9uZTogWm9uZTtcblxuICAgIGRlZmF1bHRTaG93aW5nID0gZmFsc2U7XG5cbiAgICBpc0FkZGluZ0F1ZGlvVHJhY2sgPSBmYWxzZTtcblxuICAgIHBhcmVudFpvbmVGb3JBdWRpbzogWm9uZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlzaXRTZXJ2aWNlOiBWaXNpdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3BhY2VJRCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwiaWRcIik7XG4gICAgICAgIHRoaXMuaXNNdXNldW1Nb2R1bGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTTtcbiAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgfVxuXG4gICAgc2V0dXBNZW51SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW1xuICAgICAgICAgICAgeyBsYWJlbDogXCJMb2NhdGlvbnNcIiwgdXJsOiBcIi9sb2NhbGlzYXRpb25cIiB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRTcGFjZS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlSUR9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiWm9uZXNcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5jdXJyZW50U3BhY2UuaWR9L3pvbmVzYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgb25Hb0JhY2soKSB7XG4gICAgICAgIHRoaXMuZWRpdENvbXBsZXRlZChudWxsKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZXRab25lcygpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZUlEKTtcbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuYWxsWm9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZSh0aGlzLnNwYWNlSUQpO1xuICAgICAgICB0aGlzLmRlZmF1bHRab25lID0gdGhpcy5hbGxab25lcy5maW5kKFxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIgJiYgem9uZS5zd2VlcElEcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZsb29yWm9uZXMgPSB0aGlzLmFsbFpvbmVzLmZpbHRlcihcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxuICAgICAgICApO1xuICAgICAgICAvLyB3ZSBhZGQgb25seSBjaGlsZHJlbiB6b25lcyB0aGF0IGFyZSBub3QgRmxvb3JzXG4gICAgICAgIHRoaXMuem9uZXNNYXAuc2V0KHRoaXMuZGVmYXVsdFpvbmUuaWQsIHRoaXMuYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnBhcmVudElEID09PSB0aGlzLmRlZmF1bHRab25lLmlkICYmICF0aGlzLmZsb29yWm9uZXMuaW5jbHVkZXMoem9uZSkpKTtcbiAgICAgICAgZm9yIChjb25zdCBmbG9vciBvZiB0aGlzLmZsb29yWm9uZXMpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZXNNYXAuc2V0KFxuICAgICAgICAgICAgICAgIGZsb29yLmlkLFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnBhcmVudElEID09PSBmbG9vci5pZCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuem9uZXMgPSBzb3J0QWxwaGFiZXRpY2FsbHlPbk5hbWUodGhpcy56b25lcyk7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9ucygpO1xuICAgICAgICB0aGlzLmltYWdlczM2MCA9IGF3YWl0IHRoaXMudmlzaXRTZXJ2aWNlLmxvYWRJbWFnZXNGb3JTcGFjZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBsYW5zID0gYXdhaXQgdGhpcy5wbGFuU2VydmljZS5nZXRQbGFuc1dpdGhab25lc0ZvclNwYWNlKFxuICAgICAgICAgICAgdGhpcy5zcGFjZUlELFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBsYW5zID0gdGhpcy5wbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uaXNDdXJyZW50Rm9yWm9uZSk7XG4gICAgICAgIHRoaXMub25QbGFuc0xvYWRlZCgpO1xuICAgIH1cblxuICAgIHJlc2V0TmF2aWdhdGlvbnMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3Qgem9uZXNXaXRoU3dlZXBzID0gdGhpcy5hbGxab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuc3dlZXBJRHMpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25zID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldCh6b25lc1dpdGhTd2VlcHMuZmxhdE1hcCgoem9uZSkgPT4gem9uZS5zd2VlcElEcykpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGFzeW5jIG9uUGxhbnNMb2FkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYW5Jc1Zpc2libGUgJiYgdGhpcy5jdXJyZW50Wm9uZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGxhbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIHpvbmVcbiAgICAgKiBAcGFyYW0gaSBpbmRleCBvZiB0aGUgbG90IHRvIGJlIHRvZ2dsZWRcbiAgICAgKi9cbiAgICBhc3luYyBvblRvZ2dsZURldGFpbChpbmRleDogbnVtYmVyLCB6b25lOiBab25lKSB7XG4gICAgICAgIHRoaXMubG90SW5kZXhEZXRhaWxzID0gaW5kZXggPT09IHRoaXMubG90SW5kZXhEZXRhaWxzID8gLTEgOiBpbmRleDtcbiAgICAgICAgaWYgKHRoaXMubG90SW5kZXhEZXRhaWxzID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMucGxhbklzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wbGFucykge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyB3YWl0IHVudGlsIHRoZSBwbGFucyBhcmUgc2V0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1BsYW4pIHtcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcGxhbiBpcyBhbHJlYWR5IGxvYWRpbmdcbiAgICAgICAgICAgIGF3YWl0IHdhaXQoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVwYXJlUGxhbigpO1xuICAgIH1cblxuICAgIG9uVG9nZ2xlRGV0YWlsRmxvb3IoaW5kZXg6IG51bWJlciwgZmxvb3I6IFpvbmUpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2hvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZsb29yRGV0YWlscyA9IGluZGV4ID09PSB0aGlzLmZsb29yRGV0YWlscyA/IC0xIDogaW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmZsb29yRGV0YWlscyA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSBmbG9vcjtcbiAgICAgICAgdGhpcy5wbGFuSXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBsYW5zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInBsYW5zIG5vdCByZWFkeVwiKTtcbiAgICAgICAgICAgIHJldHVybjsgLy8gd2FpdCB1bnRpbCB0aGUgcGxhbnMgYXJlIHNldFxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcGFyZVBsYW4oKTtcbiAgICB9XG5cbiAgICBvblRvZ2dsZURlZmF1bHRab25lKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRTaG93aW5nID0gIXRoaXMuZGVmYXVsdFNob3dpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSB0aGlzLmRlZmF1bHRTaG93aW5nID8gdGhpcy5kZWZhdWx0Wm9uZSA6IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJlcGFyZVBsYW4oKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1BsYW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRQbGFuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFpvbmUudmlydHVhbCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGF3YWl0IHRoaXMucGxhblNlcnZpY2UuZ2V0Q2FsaWJyYXRlZFBsYW5Gb3Jab25lKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBsYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dTY2FuUG9pbnRzT25QbGFuKHNjYW5zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJc1Zpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRWRpdCh6b25lOiBab25lKSB7XG4gICAgICAgIHRoaXMuem9uZUZvckVkaXQgPSB6b25lO1xuICAgICAgICBpZiAodGhpcy56b25lRm9yRWRpdC5sYXllciAmJiB0aGlzLnpvbmVGb3JFZGl0LmxheWVyLm5hbWUgPT09IFwiQVVESU9cIikge1xuICAgICAgICAgICAgdGhpcy5pc0FkZGluZ0F1ZGlvVHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGAke3pvbmUubmFtZX1gLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZExvdCgpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nWm9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IFwiTmV3XCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQWRkTXVzZXVtWm9uZSgpIHtcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgTXVzZXVtIEl0aW5lcmFyeVwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZEF1ZGlvWm9uZShwYXJlbnRab25lOiBab25lKSB7XG4gICAgICAgIHRoaXMucGFyZW50Wm9uZUZvckF1ZGlvID0gcGFyZW50Wm9uZTtcbiAgICAgICAgdGhpcy5pc0FkZGluZ0F1ZGlvVHJhY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBwYXJlbnRab25lLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBcImFkZC1hdWRpby5hZGRcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25EZWxldGUoem9uZTogWm9uZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZGVsZXRlWm9uZVwiKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG4gICAgICAgIGlmICh3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS5kZWxldGVab25lKHpvbmUuaWQpO1xuICAgICAgICAgICAgdGhpcy5hbGxab25lcy5zcGxpY2UodGhpcy5hbGxab25lcy5pbmRleE9mKHpvbmUpLCAxKTtcbiAgICAgICAgICAgIGlmICh6b25lLnBhcmVudElEICYmIEFycmF5LmZyb20odGhpcy56b25lc01hcC5rZXlzKCkpLmluY2x1ZGVzKHpvbmUucGFyZW50SUQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZXNGb3JQYXJlbnQgPSB0aGlzLnpvbmVzTWFwLmdldCh6b25lLnBhcmVudElEKTtcbiAgICAgICAgICAgICAgICB6b25lc0ZvclBhcmVudC5zcGxpY2Uoem9uZXNGb3JQYXJlbnQuaW5kZXhPZih6b25lKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lc01hcC5zZXQoem9uZS5wYXJlbnRJRCwgem9uZXNGb3JQYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdENvbXBsZXRlZChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMubG90SW5kZXhEZXRhaWxzID0gLTE7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFpvbmVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpb1RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuem9uZUZvckVkaXQgPSBudWxsO1xuICAgICAgICB0aGlzLnBsYW5Jc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd1NjYW5Qb2ludHNPblBsYW4obmF2aWdhdGlvbnM6IE5hdmlnYXRpb25bXSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGxhbikge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUGxhbiA9IGZhbHNlXG4gICAgICAgICAgICBjb25zdCBkaXZQbGFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwbGFuRGl2XCIpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgYXdhaXQgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdih0aGlzLmN1cnJlbnRQbGFuLCBkaXZQbGFuLCBuYXZpZ2F0aW9ucyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImxvYWRlZFwiKVxuICAgICAgICAgICAgcGFuem9vbShkaXZQbGFuLCB7XG4gICAgICAgICAgICAgICAgYm91bmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogMy41LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gXG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgKm5nSWY9XCJjdXJyZW50U3BhY2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwibS0zXCI+XG4gICAgICA8bGliLXRhYi1uYXZpZ2F0aW9uIFttZW51SXRlbXNdPSdtZW51SXRlbXMnIChvbkdvQmFjayk9XCJvbkdvQmFjaygpXCI+PC9saWItdGFiLW5hdmlnYXRpb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWlzRWRpdGluZ1pvbmUgJiYgIWlzQWRkaW5nQXVkaW9UcmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiID5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZGVmYXVsdC16b25lLWxpbmUtaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgem9uZS1uYW1lXCIgKm5nSWY9XCJkZWZhdWx0Wm9uZVwiPlxuICAgICAgICAgICAgICB7e2RlZmF1bHRab25lLm5hbWV9fVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC16b25lLWxhYmVsXCI+e3sgXCJ3aG9sZSBzcGFjZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJkZWZhdWx0U2hvd2luZ1wiIChjbGljayk9XCJvblRvZ2dsZURlZmF1bHRab25lKClcIj48L2xpYi1jaGV2cm9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGVmYXVsdFNob3dpbmdcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snVHlwZSBvZiB6b25lJyB8IHRyYW5zbGF0ZX19OiBcbiAgICAgICAgICAgICAgICAgIHt7ZGVmYXVsdFpvbmUubGF5ZXIgPyBkZWZhdWx0Wm9uZS5sYXllci5uYW1lIDogXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiZGVmYXVsdFpvbmUuc3VyZmFjZVwiPlxuICAgICAgICAgICAgICAgICAge3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fSwgbTxzdXA+Mjwvc3VwPjoge3tkZWZhdWx0Wm9uZS5zdXJmYWNlIH19XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFkZWZhdWx0Wm9uZS52aXJ0dWFsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX06XG4gICAgICAgICAgICAgICAgICB7e2RlZmF1bHRab25lLnN3ZWVwSURzID8gZGVmYXVsdFpvbmUuc3dlZXBJRHMubGVuZ3RoIDogXCJObyBzY2FuIHBvaW50c1wiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFpciBvZiB6b25lc01hcCB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhaXIua2V5ID09IGRlZmF1bHRab25lLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8aDUgc3R5bGU9XCJtYXJnaW46IDhweDtcIiAqbmdJZj1cInBhaXIudmFsdWUubGVuZ3RoID4gMFwiPnt7J0NoaWxkcmVuIHpvbmVzJ3x0cmFuc2xhdGV9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtZmx1c2ggbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxvdCBvZiBwYWlyLnZhbHVlOyBpbmRleCBhcyB6b25lSW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11c2V1bS1sYWJlbFwiICpuZ0lmPVwibG90LmlzTXVzZXVtVmlzaXRab25lXCI+e3sgXCJpdGluZXJhcnlcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cInpvbmVJbmRleD09bG90SW5kZXhEZXRhaWxzXCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKHpvbmVJbmRleCwgbG90KVwiPjwvbGliLWNoZXZyb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiem9uZUluZGV4PT1sb3RJbmRleERldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj57eydUeXBlIG9mIHpvbmUnIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fToge3tsb3QubGF5ZXIgPyBsb3QubGF5ZXIubmFtZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC5zdXJmYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fSxtPHN1cD4yPC9zdXA+OiB7e2xvdC5zdXJmYWNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiIWxvdC52aXJ0dWFsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsb3Quc3dlZXBJRHMgPyBsb3Quc3dlZXBJRHMubGVuZ3RoIDogXCJObyBzY2FuIHBvaW50c1wiIHwgdHJhbnNsYXRlfX0gPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJsb3QudmlydHVhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1pvbmUgbm90IHZpc2libGUgaW4gM0QgdmlzaXQnIHwgdHJhbnNsYXRlfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KGxvdClcIj57eydFZGl0JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRBdWRpb1pvbmUobG90KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdXNldW1Nb2R1bGVcIj4ge3snYWRkLWF1ZGlvLmFkZCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUobG90KVwiPnt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICBcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmxvb3Igb2YgZmxvb3Jab25lczsgaW5kZXggYXMgaW5kZXhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHpvbmUtbmFtZVwiPlxuICAgICAgICAgICAgICB7e2Zsb29yLm5hbWV9fVxuICAgICAgICAgICAgICA8IS0tIDxzbWFsbD4oe3sgbG90Lm1ldGFkYXRhID8gKCdDYWxpYnJhdGVkJyB8IHRyYW5zbGF0ZSkgOiAoJ05vdCBjYWxpYnJhdGVkJyB8IHRyYW5zbGF0ZSl9fSk8L3NtYWxsPiAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11c2V1bS1sYWJlbFwiICpuZ0lmPVwiZmxvb3IuaXNNdXNldW1WaXNpdFpvbmVcIj57eyBcIml0aW5lcmFyeVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJpbmRleD09Zmxvb3JEZXRhaWxzXCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsRmxvb3IoaW5kZXgsIGZsb29yKVwiPjwvbGliLWNoZXZyb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbmRleD09Zmxvb3JEZXRhaWxzXCI+ICBcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snVHlwZSBvZiB6b25lJyB8IHRyYW5zbGF0ZX19OiB7e2Zsb29yLmxheWVyID9cbiAgICAgICAgICAgICAgICAgIGZsb29yLmxheWVyLm5hbWUgOlxuICAgICAgICAgICAgICAgICAgXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiZmxvb3Iuc3VyZmFjZVwiPnt7J1N1cmZhY2UnIHwgdHJhbnNsYXRlfX0sIG08c3VwPjI8L3N1cD46XG4gICAgICAgICAgICAgICAgICB7e2Zsb29yLnN1cmZhY2UgfX1cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiIWZsb29yLnZpcnR1YWxcIj57eydTY2FuIFBvaW50cycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgIHt7Zmxvb3Iuc3dlZXBJRHMgPyBmbG9vci5zd2VlcElEcy5sZW5ndGggOiBcIk5vIHNjYW4gcG9pbnRzXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiZmxvb3IudmlydHVhbFwiPnt7J1pvbmUgbm90IHZpc2libGUgaW4gM0QgdmlzaXQnIHxcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkVkaXQoZmxvb3IpXCI+e3snRWRpdCcgfFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gIFxuICAgICAgICAgICAgICA8IS0tIExpc3Qgb2YgY2hpbGRyZW4gem9uZXMgLS0+XG4gIFxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYWlyIG9mIHpvbmVzTWFwIHwga2V5dmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFpci5rZXkgPT0gZmxvb3IuaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxoNSBzdHlsZT1cIm1hcmdpbjogOHB4O1wiICpuZ0lmPVwicGFpci52YWx1ZS5sZW5ndGggPiAwXCI+e3snQ2hpbGRyZW4gem9uZXMnfHRyYW5zbGF0ZX19PC9oNT5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1mbHVzaCBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbG90IG9mIHBhaXIudmFsdWU7IGluZGV4IGFzIHpvbmVJbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHpvbmUtbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tsb3QubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVzZXVtLWxhYmVsXCIgKm5nSWY9XCJsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj57eyBcIml0aW5lcmFyeVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiem9uZUluZGV4PT1sb3RJbmRleERldGFpbHNcIiAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoem9uZUluZGV4LCBsb3QpXCI+PC9saWItY2hldnJvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ6b25lSW5kZXg9PWxvdEluZGV4RGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiIWxvdC5pc011c2V1bVZpc2l0Wm9uZVwiPnt7J1R5cGUgb2Ygem9uZScgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19OiB7e2xvdC5sYXllciA/IGxvdC5sYXllci5uYW1lIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk5vIHR5cGVcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibG90LnN1cmZhY2VcIj57eydTdXJmYWNlJyB8IHRyYW5zbGF0ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG08c3VwPjI8L3N1cD46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsb3Quc3VyZmFjZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QudmlydHVhbFwiPnt7J1NjYW4gUG9pbnRzJyB8IHRyYW5zbGF0ZX19OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90LnN3ZWVwSURzID8gbG90LnN3ZWVwSURzLmxlbmd0aCA6IFwiTm8gc2NhbiBwb2ludHNcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiIWxvdC52aXJ0dWFsICYmIGxvdC5pc011c2V1bVZpc2l0Wm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1NjYW4gUG9pbnRzIHdpdGggYXVkaW8nIHwgdHJhbnNsYXRlfX06IHt7IGxvdCB8IGNvdW50QXVkaW9Td2VlcHMgfCBhc3luY319IDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibG90LnZpcnR1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydab25lIG5vdCB2aXNpYmxlIGluIDNEIHZpc2l0JyB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdChsb3QpXCI+e3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkQXVkaW9ab25lKGxvdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVzZXVtTW9kdWxlXCI+IHt7J2FkZC1hdWRpby5hZGQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGxvdClcIj57eydEZWxldGUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gIFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkFkZExvdCgpXCI+e3snQWRkIHpvbmUnIHxcbiAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkTXVzZXVtWm9uZSgpXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNNdXNldW1Nb2R1bGVcIj4ge3snQWRkIG11c2V1bSBpdGluZXJhcnknIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdQbGFuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFBsYW5cIj5cbiAgICAgICAgICAgIDxsaWItcGxhbi1sZWdlbmQgW2lzQXVkaW9ab25lXT1cImZhbHNlXCI+PC9saWItcGxhbi1sZWdlbmQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhbkNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgc3R5bGU9XCJoZWlnaHQ6IDUwMHB4OyB3aWR0aDogMTAwJTtcIiBpZD1cInBsYW5EaXZcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3VycmVudFBsYW4gJiYgcGxhbnMgJiYgIWxvYWRpbmdQbGFuICYmIGN1cnJlbnRab25lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgaWQ9XCJuby1wbGFuXCIgKm5nSWY9XCIhY3VycmVudFpvbmUudmlydHVhbCAmJiAhY3VycmVudFpvbmUuaXNNdWx0aXBsZUZsb29yWm9uZVwiPlxuICAgICAgICAgICAgICB7eyAnUGxhbiBpcyBub3QgY2FsaWJyYXRlZCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgaWQ9XCJuby1wbGFuXCIgKm5nSWY9XCJjdXJyZW50Wm9uZS52aXJ0dWFsXCI+XG4gICAgICAgICAgICAgIHt7ICdObyBzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbXMtM1wiIGlkPVwibm8tcGxhblwiICpuZ0lmPVwiY3VycmVudFpvbmUuaXNNdWx0aXBsZUZsb29yWm9uZVwiPlxuICAgICAgICAgICAgICB7eyAnVGhlIHpvbmUgaXMgb24gc2V2ZXJhbCBmbG9vcnMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJpc0VkaXRpbmdab25lXCI+XG4gICAgICA8bGliLWFkZC16b25lIFt6b25lRWRpdF09XCJ6b25lRm9yRWRpdFwiIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbaW1hZ2VzMzYwXT1cImltYWdlczM2MFwiIFtuYXZpZ2F0aW9uSURzXT1cIm5hdmlnYXRpb25zXCJcbiAgICAgICAgW3pvbmVzXT1cImFsbFpvbmVzXCIgW2RlZmF1bHRab25lXT1cImRlZmF1bHRab25lXCIgKHVwZGF0ZWRab25lKT1cImVkaXRDb21wbGV0ZWQoJGV2ZW50KVwiIFtpc011c2V1bVZpc2l0XT1cImlzTXVzZXVtVmlzaXRcIj48L2xpYi1hZGQtem9uZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiaXNBZGRpbmdBdWRpb1RyYWNrXCI+XG4gICAgICA8bGliLWFkZC1hdWRpby16b25lIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbZGVmYXVsdFpvbmVdPVwiZGVmYXVsdFpvbmVcIiBbcGFyZW50Wm9uZV09XCJwYXJlbnRab25lRm9yQXVkaW9cIiBbem9uZXNdPVwiYWxsWm9uZXNcIiBbY3VycmVudEF1ZGlvWm9uZV09XCJ6b25lRm9yRWRpdFwiXG4gICAgICAodXBkYXRlZFpvbmUpPVwiZWRpdENvbXBsZXRlZCgkZXZlbnQpXCI+PC9saWItYWRkLWF1ZGlvLXpvbmU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIl19
|
|
@@ -28,6 +28,7 @@ import { SweepPlanSelectionComponent } from './components/zones/add-zone/sweep-p
|
|
|
28
28
|
import { AddAudioZoneComponent } from './components/zones/add-audio-zone/add-audio-zone.component';
|
|
29
29
|
import { RadioButtonComponent } from './radio-button/radio-button.component';
|
|
30
30
|
import { PlanLegendComponent } from './components/plan-legend/plan-legend.component';
|
|
31
|
+
import { CountAudioSweepsPipe } from './pipes/count-audio-sweeps.pipe';
|
|
31
32
|
import * as i0 from "@angular/core";
|
|
32
33
|
import * as i1 from "@ngx-translate/core";
|
|
33
34
|
export class NgxSmarterplanLocationsModule {
|
|
@@ -52,7 +53,8 @@ NgxSmarterplanLocationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12
|
|
|
52
53
|
SweepPlanSelectionComponent,
|
|
53
54
|
AddAudioZoneComponent,
|
|
54
55
|
RadioButtonComponent,
|
|
55
|
-
PlanLegendComponent
|
|
56
|
+
PlanLegendComponent,
|
|
57
|
+
CountAudioSweepsPipe], imports: [PdfViewerModule,
|
|
56
58
|
ClipboardModule,
|
|
57
59
|
NgbModule,
|
|
58
60
|
NgbAlertModule,
|
|
@@ -99,7 +101,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
99
101
|
SweepPlanSelectionComponent,
|
|
100
102
|
AddAudioZoneComponent,
|
|
101
103
|
RadioButtonComponent,
|
|
102
|
-
PlanLegendComponent
|
|
104
|
+
PlanLegendComponent,
|
|
105
|
+
CountAudioSweepsPipe,
|
|
103
106
|
],
|
|
104
107
|
imports: [
|
|
105
108
|
PdfViewerModule,
|
|
@@ -119,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
119
122
|
exports: [MapComponent, TabNavigationComponent]
|
|
120
123
|
}]
|
|
121
124
|
}] });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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O3dCQUNiLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLHNCQUFzQixDQUFDO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9jYXRpb25zL2xvY2F0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGV0YWlsTG9jYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsaWJyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGxhbnMvY2FsaWJyYXRpb24vY2FsaWJyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFBsYW5zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BsYW5zL3BsYW5zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaXNpdHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdmlzaXRzL3Zpc2l0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWm9uZXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEltYWdlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbWFnZXMvaW1hZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0UGxhbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbGFucy9lZGl0LXBsYW4vZWRpdC1wbGFuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2NhdGlvbnNSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb24tcm91dGluZy5tb2R1bGUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYi1uYXZpZ2F0aW9uL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9jYXRpb25zL21hcC9tYXAuY29tcG9uZW50JztcbmltcG9ydCB7IExlYWZsZXRNb2R1bGUgfSBmcm9tICdAYXN5bW1ldHJpay9uZ3gtbGVhZmxldCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hcFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLXBvcHVwL21hcC1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Mb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nYkFsZXJ0TW9kdWxlLCBOZ2JNb2R1bGUgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcbmltcG9ydCB7IENsaXBib2FyZE1vZHVsZSB9IGZyb20gXCJuZ3gtY2xpcGJvYXJkXCI7XG5pbXBvcnQgeyBDaGV2cm9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoZXZyb24vY2hldnJvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkWm9uZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy96b25lcy9hZGQtem9uZS9hZGQtem9uZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3pvbmVzL2FkZC16b25lL3NlbGVjdGlvbi9zZWxlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENhcm91c2VsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hTbWFydGVycGxhbkNvcmVNb2R1bGUgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHsgUGRmVmlld2VyTW9kdWxlIH0gZnJvbSAnbmcyLXBkZi12aWV3ZXInO1xuaW1wb3J0IHsgU3dlZXBQbGFuU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3pvbmVzL2FkZC16b25lL3N3ZWVwLXBsYW4tc2VsZWN0aW9uL3N3ZWVwLXBsYW4tc2VsZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRBdWRpb1pvbmVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvem9uZXMvYWRkLWF1ZGlvLXpvbmUvYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFuTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BsYW4tbGVnZW5kL3BsYW4tbGVnZW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3VudEF1ZGlvU3dlZXBzUGlwZSB9IGZyb20gJy4vcGlwZXMvY291bnQtYXVkaW8tc3dlZXBzLnBpcGUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBMb2NhdGlvbnNDb21wb25lbnQsXG4gICAgRGV0YWlsTG9jYXRpb25Db21wb25lbnQsXG4gICAgQ2FsaWJyYXRpb25Db21wb25lbnQsXG4gICAgUGxhbnNDb21wb25lbnQsXG4gICAgVmlzaXRzQ29tcG9uZW50LFxuICAgIFpvbmVzQ29tcG9uZW50LFxuICAgIEltYWdlc0NvbXBvbmVudCxcbiAgICBFZGl0UGxhbkNvbXBvbmVudCxcbiAgICBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50LFxuICAgIE1hcENvbXBvbmVudCxcbiAgICBNYXBQb3B1cENvbXBvbmVudCxcbiAgICBGb3JtTG9jYXRpb25Db21wb25lbnQsXG4gICAgQ2hldnJvbkNvbXBvbmVudCxcbiAgICBBZGRab25lQ29tcG9uZW50LFxuICAgIFNlbGVjdGlvbkNvbXBvbmVudCxcbiAgICBDYXJvdXNlbENvbXBvbmVudCxcbiAgICBTd2VlcFBsYW5TZWxlY3Rpb25Db21wb25lbnQsXG4gICAgQWRkQXVkaW9ab25lQ29tcG9uZW50LFxuICAgIFJhZGlvQnV0dG9uQ29tcG9uZW50LFxuICAgIFBsYW5MZWdlbmRDb21wb25lbnQsXG4gICAgQ291bnRBdWRpb1N3ZWVwc1BpcGUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBQZGZWaWV3ZXJNb2R1bGUsXG4gICAgQ2xpcGJvYXJkTW9kdWxlLFxuICAgIE5nYk1vZHVsZSxcbiAgICBOZ2JBbGVydE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvckNoaWxkKHtcbiAgICAgIGV4dGVuZDogdHJ1ZVxuICAgIH0pLFxuICAgIExlYWZsZXRNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ3hTbWFydGVycGxhbkNvcmVNb2R1bGUsXG4gICAgTG9jYXRpb25zUm91dGluZ01vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW01hcENvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4U21hcnRlcnBsYW5Mb2NhdGlvbnNNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@smarterplan/ngx-smarterplan-core";
|
|
4
|
+
export class CountAudioSweepsPipe {
|
|
5
|
+
constructor(zoneService) {
|
|
6
|
+
this.zoneService = zoneService;
|
|
7
|
+
}
|
|
8
|
+
async transform(zone) {
|
|
9
|
+
let childrenAudioZones = await this.zoneService.getZonesByParentZone(zone.id);
|
|
10
|
+
if (childrenAudioZones.length > 0) {
|
|
11
|
+
childrenAudioZones = childrenAudioZones.filter((zone) => zone.audioID);
|
|
12
|
+
if (childrenAudioZones.length > 0) {
|
|
13
|
+
return childrenAudioZones.flatMap((z) => z.sweepIDs).length;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
CountAudioSweepsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CountAudioSweepsPipe, deps: [{ token: i1.ZoneService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
20
|
+
CountAudioSweepsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CountAudioSweepsPipe, name: "countAudioSweeps" });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CountAudioSweepsPipe, decorators: [{
|
|
22
|
+
type: Pipe,
|
|
23
|
+
args: [{
|
|
24
|
+
name: 'countAudioSweeps'
|
|
25
|
+
}]
|
|
26
|
+
}], ctorParameters: function () { return [{ type: i1.ZoneService }]; } });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnQtYXVkaW8tc3dlZXBzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvcGlwZXMvY291bnQtYXVkaW8tc3dlZXBzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU1wRCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVqRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVU7UUFDdEIsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQy9EO1NBQ0o7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7O2lIQVpRLG9CQUFvQjsrR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSGhDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGtCQUFrQjtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBab25lLCBab25lU2VydmljZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnY291bnRBdWRpb1N3ZWVwcydcbn0pXG5leHBvcnQgY2xhc3MgQ291bnRBdWRpb1N3ZWVwc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSkgeyB9XG5cbiAgICBhc3luYyB0cmFuc2Zvcm0oem9uZTogWm9uZSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGxldCBjaGlsZHJlbkF1ZGlvWm9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlQYXJlbnRab25lKHpvbmUuaWQpO1xuICAgICAgICBpZiAoY2hpbGRyZW5BdWRpb1pvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkcmVuQXVkaW9ab25lcyA9IGNoaWxkcmVuQXVkaW9ab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuYXVkaW9JRCk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5BdWRpb1pvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5BdWRpb1pvbmVzLmZsYXRNYXAoKHopID0+IHouc3dlZXBJRHMpLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbn1cbiJdfQ==
|