@c8y/ngx-components 1021.22.0 → 1021.25.0
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/alarms/alarms-date-filter.component.d.ts +22 -10
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/alarms/alarms-type-filter.component.d.ts +21 -14
- package/alarms/alarms-type-filter.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +7 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +1 -6
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +1 -1
- package/alarms/index.d.ts +1 -0
- package/alarms/index.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +4 -2
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +17 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/esm2022/alarms/alarm-info.component.mjs +3 -3
- package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
- package/esm2022/alarms/alarms-date-filter.component.mjs +92 -42
- package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
- package/esm2022/alarms/alarms-view.service.mjs +16 -2
- package/esm2022/alarms/alarms.component.mjs +3 -3
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/alarms/alarms.module.mjs +3 -3
- package/esm2022/alarms/index.mjs +2 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +18 -5
- package/esm2022/core/router/scoped-context-route.service.mjs +9 -4
- package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +29 -6
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +11 -5
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +18 -1
- package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
- package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +11 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +199 -107
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +17 -4
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +52 -7
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +123 -14
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +10 -5
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/interval-picker.component.d.ts +2 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -1
- package/interval-picker/interval-picker.model.d.ts +5 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -1
- package/locales/de.po +2 -2
- package/locales/locales.pot +18 -6
- package/package.json +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
|
@@ -1,85 +1,80 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { FormBuilder, FormControl } from '@angular/forms';
|
|
3
2
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
3
|
+
import { ColorService } from '@c8y/ngx-components';
|
|
4
4
|
import { AlarmEventSelectorService } from '@c8y/ngx-components/alarm-event-selector';
|
|
5
|
-
import { Subject } from 'rxjs';
|
|
6
|
-
import { map, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { map, Subject, takeUntil } from 'rxjs';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@
|
|
9
|
-
import * as i2 from "@
|
|
10
|
-
import * as i3 from "@
|
|
7
|
+
import * as i1 from "@c8y/ngx-components/alarm-event-selector";
|
|
8
|
+
import * as i2 from "@angular/router";
|
|
9
|
+
import * as i3 from "@c8y/ngx-components";
|
|
11
10
|
import * as i4 from "@angular/cdk/a11y";
|
|
12
11
|
import * as i5 from "ngx-bootstrap/dropdown";
|
|
13
|
-
import * as i6 from "@
|
|
14
|
-
import * as i7 from "@angular/
|
|
15
|
-
import * as i8 from "
|
|
12
|
+
import * as i6 from "@angular/common";
|
|
13
|
+
import * as i7 from "@angular/forms";
|
|
14
|
+
import * as i8 from "ngx-bootstrap/tooltip";
|
|
15
|
+
import * as i9 from "@ngx-translate/core";
|
|
16
16
|
export class AlarmsTypeFilterComponent {
|
|
17
|
-
constructor(
|
|
18
|
-
this.formBuilder = formBuilder;
|
|
17
|
+
constructor(alarmEventSelectorService, activatedRoute, router, colorService) {
|
|
19
18
|
this.alarmEventSelectorService = alarmEventSelectorService;
|
|
20
19
|
this.activatedRoute = activatedRoute;
|
|
21
20
|
this.router = router;
|
|
21
|
+
this.colorService = colorService;
|
|
22
|
+
this.possibleFilters = [];
|
|
22
23
|
this.activeFilters = [];
|
|
23
24
|
this.onFilterChanged = new EventEmitter();
|
|
24
|
-
this.
|
|
25
|
+
this.customAlarmTypes = [];
|
|
26
|
+
this.customAlarmTypeInput = '';
|
|
25
27
|
this.queryParamName = 'typeFilter';
|
|
26
|
-
this.
|
|
27
|
-
[this.formControlName]: new FormControl([])
|
|
28
|
-
});
|
|
28
|
+
this.STORAGE_ACCESS_KEY = 'customAlarmTypes';
|
|
29
29
|
this.destroy$ = new Subject();
|
|
30
|
-
this.
|
|
30
|
+
this.currentQueryParam = '';
|
|
31
31
|
}
|
|
32
32
|
ngOnInit() {
|
|
33
|
-
this.
|
|
34
|
-
.pipe(map(params => {
|
|
35
|
-
const alarms = this.formGroup.get(this.formControlName).value;
|
|
36
|
-
return this.getActiveAlarmFiltersFromQueryParameter(alarms, params[this.queryParamName]);
|
|
37
|
-
}), takeUntil(this.destroy$))
|
|
38
|
-
.subscribe((alarmFilters) => this.formGroup.get(this.formControlName).patchValue(alarmFilters));
|
|
39
|
-
this.formGroup
|
|
40
|
-
.get(this.formControlName)
|
|
41
|
-
.valueChanges.pipe(takeUntil(this.destroy$))
|
|
42
|
-
.subscribe((alarmFilters) => this.applyFilterChange(alarmFilters));
|
|
33
|
+
this.setQueryParameterObservable();
|
|
43
34
|
}
|
|
44
|
-
ngOnChanges(changes) {
|
|
35
|
+
async ngOnChanges(changes) {
|
|
45
36
|
if (changes.alarms && changes.alarms.currentValue && this.activeFilters.length === 0) {
|
|
46
|
-
this.
|
|
37
|
+
await this.setPossibleFilters();
|
|
38
|
+
this.applyFilterChange();
|
|
47
39
|
}
|
|
48
40
|
}
|
|
41
|
+
setQueryParameterObservable() {
|
|
42
|
+
this.activatedRoute.queryParams
|
|
43
|
+
.pipe(map(params => {
|
|
44
|
+
const alarms = this.possibleFilters;
|
|
45
|
+
const possibleFilters = this.setActiveAlarmFiltersFromQueryParameter(alarms, params[this.queryParamName]);
|
|
46
|
+
return possibleFilters;
|
|
47
|
+
}), takeUntil(this.destroy$))
|
|
48
|
+
.subscribe((possibleFilters) => {
|
|
49
|
+
this.possibleFilters = possibleFilters;
|
|
50
|
+
this.applyFilterChange();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
49
53
|
ngOnDestroy() {
|
|
50
54
|
this.destroy$.next();
|
|
51
55
|
this.destroy$.complete();
|
|
52
56
|
}
|
|
57
|
+
toggleAlarmType(alarmType) {
|
|
58
|
+
alarmType.__active = !alarmType.__active;
|
|
59
|
+
}
|
|
53
60
|
deselect(type) {
|
|
54
|
-
const
|
|
55
|
-
const alarmFilter = alarms.find(alarm => alarm.filters.type === type.filters.type);
|
|
61
|
+
const alarmFilter = this.possibleFilters.find(alarm => alarm.filters.type === type.filters.type);
|
|
56
62
|
alarmFilter.__active = false;
|
|
57
|
-
this.
|
|
63
|
+
this.applyFilterChange();
|
|
58
64
|
}
|
|
59
65
|
deselectAll() {
|
|
60
|
-
|
|
61
|
-
const allFilters = alarms.map(alarm => {
|
|
66
|
+
this.possibleFilters = this.possibleFilters.map(alarm => {
|
|
62
67
|
return {
|
|
63
68
|
...alarm,
|
|
64
69
|
__active: false
|
|
65
70
|
};
|
|
66
71
|
});
|
|
67
|
-
this.
|
|
72
|
+
this.applyFilterChange();
|
|
68
73
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return alarmFilters;
|
|
72
|
-
}
|
|
73
|
-
const types = filterTypesQuery.split(',');
|
|
74
|
-
return alarmFilters.map((alarm) => ({
|
|
75
|
-
...alarm,
|
|
76
|
-
__active: types.includes(alarm.filters.type)
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
applyFilterChange(alarmFilters) {
|
|
80
|
-
const actives = alarmFilters.filter((alarmFilter) => alarmFilter.__active);
|
|
74
|
+
applyFilterChange() {
|
|
75
|
+
const actives = this.possibleFilters.filter((alarmFilter) => alarmFilter.__active);
|
|
81
76
|
const newQueryParam = this.getQueryParams(actives);
|
|
82
|
-
const hasChanged = newQueryParam !== this.
|
|
77
|
+
const hasChanged = newQueryParam !== this.currentQueryParam;
|
|
83
78
|
if (hasChanged) {
|
|
84
79
|
this.activeFilters = actives;
|
|
85
80
|
this.onFilterChanged.emit(this.activeFilters);
|
|
@@ -89,43 +84,78 @@ export class AlarmsTypeFilterComponent {
|
|
|
89
84
|
},
|
|
90
85
|
queryParamsHandling: 'merge'
|
|
91
86
|
});
|
|
92
|
-
this.
|
|
87
|
+
this.currentQueryParam = newQueryParam;
|
|
93
88
|
}
|
|
94
89
|
}
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
resetFilters() {
|
|
91
|
+
this.possibleFilters.forEach(possibleFilter => {
|
|
92
|
+
possibleFilter.__active = this.activeFilters.some((activeFilter) => activeFilter === possibleFilter);
|
|
93
|
+
});
|
|
97
94
|
}
|
|
98
|
-
|
|
95
|
+
removeCustomAlarm(alarmDetails) {
|
|
96
|
+
this.possibleFilters = this.possibleFilters.filter(filter => filter !== alarmDetails);
|
|
97
|
+
this.storeCustomAlarmTypes();
|
|
98
|
+
}
|
|
99
|
+
confirmWithEnter(event) {
|
|
100
|
+
if (event.key === 'Enter') {
|
|
101
|
+
this.addCustomAlarmType();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async addCustomAlarmType() {
|
|
105
|
+
if (!this.customAlarmTypeInput) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.possibleFilters.unshift({
|
|
109
|
+
label: this.customAlarmTypeInput,
|
|
110
|
+
color: await this.colorService.generateColor(this.customAlarmTypeInput),
|
|
111
|
+
filters: {
|
|
112
|
+
type: this.customAlarmTypeInput
|
|
113
|
+
},
|
|
114
|
+
timelineType: 'ALARM',
|
|
115
|
+
__active: true,
|
|
116
|
+
__target: null
|
|
117
|
+
});
|
|
118
|
+
this.customAlarmTypeInput = '';
|
|
119
|
+
this.storeCustomAlarmTypes();
|
|
120
|
+
}
|
|
121
|
+
storeCustomAlarmTypes() {
|
|
122
|
+
const customTypes = this.possibleFilters.filter((filter) => !filter.__target);
|
|
123
|
+
window.localStorage.setItem(this.STORAGE_ACCESS_KEY, JSON.stringify(customTypes));
|
|
124
|
+
}
|
|
125
|
+
getCustomAlarmTypeFromStorage() {
|
|
126
|
+
const types = window.localStorage.getItem(this.STORAGE_ACCESS_KEY);
|
|
127
|
+
return types ? JSON.parse(types) : [];
|
|
128
|
+
}
|
|
129
|
+
async setPossibleFilters() {
|
|
99
130
|
const queryParameters = this.activatedRoute.snapshot.queryParamMap.get(this.queryParamName);
|
|
100
131
|
const alarmTypesFromCurrentlyShownAlarms = await this.alarmEventSelectorService.getUniqueAlarmsOnly(this.alarms.data);
|
|
101
|
-
const
|
|
102
|
-
const selectableAlarmTypes = this.
|
|
103
|
-
this.
|
|
132
|
+
const customAlarmTypesFromLocalStorage = this.getCustomAlarmTypeFromStorage();
|
|
133
|
+
const selectableAlarmTypes = this.setActiveAlarmFiltersFromQueryParameter([...customAlarmTypesFromLocalStorage, ...alarmTypesFromCurrentlyShownAlarms], queryParameters);
|
|
134
|
+
this.possibleFilters = selectableAlarmTypes;
|
|
104
135
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const missingFilters = await Promise.all(types
|
|
111
|
-
.filter(type => !alarmFilters.find(alarmFilter => alarmFilter.filters.type === type))
|
|
112
|
-
.map(type => {
|
|
113
|
-
return this.alarmEventSelectorService.createItem('ALARM', {
|
|
114
|
-
type,
|
|
115
|
-
source: null
|
|
116
|
-
});
|
|
136
|
+
setActiveAlarmFiltersFromQueryParameter(alarmFilters, filterTypesQuery = '') {
|
|
137
|
+
const types = (filterTypesQuery ?? '').split(',');
|
|
138
|
+
return alarmFilters.map((alarm) => ({
|
|
139
|
+
...alarm,
|
|
140
|
+
__active: types.includes(alarm.filters.type)
|
|
117
141
|
}));
|
|
118
|
-
return [...alarmFilters, ...missingFilters];
|
|
119
142
|
}
|
|
120
|
-
|
|
121
|
-
|
|
143
|
+
getQueryParams(activeFilters) {
|
|
144
|
+
return activeFilters.map(filter => filter.filters.type).join(',');
|
|
145
|
+
}
|
|
146
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, deps: [{ token: i1.AlarmEventSelectorService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
147
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms", possibleFilters: "possibleFilters", activeFilters: "activeFilters" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"Custom alarm type\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"Add\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"Remove\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
122
148
|
}
|
|
123
149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, decorators: [{
|
|
124
150
|
type: Component,
|
|
125
|
-
args: [{ selector: 'c8y-alarms-type-filter', template: "<
|
|
126
|
-
}], ctorParameters: () => [{ type: i1.
|
|
151
|
+
args: [{ selector: 'c8y-alarms-type-filter', template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"Custom alarm type\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"Add\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"Remove\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n" }]
|
|
152
|
+
}], ctorParameters: () => [{ type: i1.AlarmEventSelectorService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.ColorService }], propDecorators: { alarms: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], possibleFilters: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], activeFilters: [{
|
|
127
157
|
type: Input
|
|
128
158
|
}], onFilterChanged: [{
|
|
129
159
|
type: Output
|
|
130
160
|
}] } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQWdCLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBTWhELE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1UsV0FBd0IsRUFDeEIseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWM7UUFIZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbkJ4QixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQztRQUMzQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUV2QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsQ0FBQyxJ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SSxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN4RCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxJQUFJO2FBQ0gsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBaEpVLHlCQUF5QjtrR0FBekIseUJBQXlCLGtLQ3JCdEMsb29HQWlHQTs7MkZENUVhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MEtBS2xDLE1BQU07c0JBREwsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFsYXJtLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsYXJtRGV0YWlscywgQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBhY3RpdmVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKVxuICBvbkZpbHRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBbGFybURldGFpbHNbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2xOYW1lID0gJ2FsYXJtcyc7XG4gIHJlYWRvbmx5IHF1ZXJ5UGFyYW1OYW1lID0gJ3R5cGVGaWx0ZXInO1xuXG4gIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIFt0aGlzLmZvcm1Db250cm9sTmFtZV06IG5ldyBGb3JtQ29udHJvbChbXSlcbiAgfSk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKGFsYXJtcywgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkgPT5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtRmlsdGVycylcbiAgICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSlcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKGFsYXJtRmlsdGVycykpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFsYXJtcyAmJiBjaGFuZ2VzLmFsYXJtcy5jdXJyZW50VmFsdWUgJiYgdGhpcy5hY3RpdmVGaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRBbGFybXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IGFsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmZpbHRlcnMudHlwZSA9PT0gdHlwZS5maWx0ZXJzLnR5cGUpO1xuICAgIGFsYXJtRmlsdGVyLl9fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtcyk7XG4gIH1cblxuICBkZXNlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGxGaWx0ZXJzID0gYWxhcm1zLm1hcChhbGFybSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hbGFybSxcbiAgICAgICAgX19hY3RpdmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkucGF0Y2hWYWx1ZShhbGxGaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgIGFsYXJtRmlsdGVyczogQWxhcm1EZXRhaWxzW10sXG4gICAgZmlsdGVyVHlwZXNRdWVyeTogc3RyaW5nXG4gICk6IEFsYXJtRGV0YWlsc1tdIHtcbiAgICBpZiAoIWZpbHRlclR5cGVzUXVlcnkpIHtcbiAgICAgIHJldHVybiBhbGFybUZpbHRlcnM7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gZmlsdGVyVHlwZXNRdWVyeS5zcGxpdCgnLCcpO1xuICAgIHJldHVybiBhbGFybUZpbHRlcnMubWFwKChhbGFybTogQWxhcm1EZXRhaWxzKSA9PiAoe1xuICAgICAgLi4uYWxhcm0sXG4gICAgICBfX2FjdGl2ZTogdHlwZXMuaW5jbHVkZXMoYWxhcm0uZmlsdGVycy50eXBlKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJDaGFuZ2UoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkge1xuICAgIGNvbnN0IGFjdGl2ZXMgPSBhbGFybUZpbHRlcnMuZmlsdGVyKChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZSk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMucXVlcnlQYXJhbTtcbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzID0gYWN0aXZlcztcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVGaWx0ZXJzKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZUZpbHRlcjogbmV3UXVlcnlQYXJhbSB8fCBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gbmV3UXVlcnlQYXJhbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0QWxhcm1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQodGhpcy5xdWVyeVBhcmFtTmFtZSk7XG4gICAgY29uc3QgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyA9XG4gICAgICBhd2FpdCB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuZ2V0VW5pcXVlQWxhcm1zT25seSh0aGlzLmFsYXJtcy5kYXRhKTtcbiAgICBjb25zdCBhbGFybVR5cGVzV2l0aE1pc3NpbmdBbmRDdXN0b20gPSBhd2FpdCB0aGlzLmFkZE1pc3NpbmdBbGFybVR5cGVzRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLmdldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIGFsYXJtVHlwZXNXaXRoTWlzc2luZ0FuZEN1c3RvbSxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpLnBhdGNoVmFsdWUoc2VsZWN0YWJsZUFsYXJtVHlwZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNaXNzaW5nQWxhcm1UeXBlc0Zyb21RdWVyeVBhcmFtcyhcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogc3RyaW5nXG4gICk6IFByb21pc2U8QWxhcm1EZXRhaWxzW10+IHtcbiAgICBpZiAoIXF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIGFsYXJtRmlsdGVycztcbiAgICB9XG4gICAgY29uc3QgdHlwZXMgPSBxdWVyeVBhcmFtZXRlcnMuc3BsaXQoJywnKTtcbiAgICBjb25zdCBtaXNzaW5nRmlsdGVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHlwZXNcbiAgICAgICAgLmZpbHRlcih0eXBlID0+ICFhbGFybUZpbHRlcnMuZmluZChhbGFybUZpbHRlciA9PiBhbGFybUZpbHRlci5maWx0ZXJzLnR5cGUgPT09IHR5cGUpKVxuICAgICAgICAubWFwKHR5cGUgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuY3JlYXRlSXRlbSgnQUxBUk0nLCB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc291cmNlOiBudWxsXG4gICAgICAgICAgfSBhcyBJQWxhcm0pO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5hbGFybUZpbHRlcnMsIC4uLm1pc3NpbmdGaWx0ZXJzXTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgIHRpdGxlPVwie3sgJ0ZpbHRlciBieSBBbGFybSB0eXBlcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGRyb3Bkb3duXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6dW5zZXQ7IG1pbi13aWR0aDogMjUwcHhcIlxuICAgICAgKmRyb3Bkb3duTWVudVxuICAgID5cbiAgICAgIDxjOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlIGZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cImZvcm1Db250cm9sTmFtZVwiXG4gICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgIHRpdGxlOiAnQWxhcm0gdHlwZSBmaWx0ZXInIHwgdHJhbnNsYXRlLFxuICAgICAgICAgIGFsbG93Q2hhbmdpbmdDb250ZXh0OiBmYWxzZVxuICAgICAgICB9XCJcbiAgICAgICAgW2lubGluZV09XCJ0cnVlXCJcbiAgICAgICAgW2hpZGVTb3VyY2VdPVwidHJ1ZVwiXG4gICAgICAgIFthZGRCdXR0b25MYWJlbF09XCInTWFuYWdlIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjYW5FZGl0XT1cImZhbHNlXCJcbiAgICAgICAgW2NhbkRyYWdBbmREcm9wXT1cImZhbHNlXCJcbiAgICAgICAgW2NhblJlbW92ZV09XCJmYWxzZVwiXG4gICAgICAgIFt0aW1lbGluZVR5cGVdPVwiJ0FMQVJNJ1wiXG4gICAgICAgIFthY3RpdmVUb2dnbGVBc1N3aXRjaF09XCJmYWxzZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZm9ybUNvbnRyb2xOYW1lXCJcbiAgICAgID5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIGNsYXNzPVwicC10LThcIlxuICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gYWxhcm0gZm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3VidGl0bGVdPVwiJ1RoZXJlIGlzIG5vIGFsYXJtIHRvIGZpbHRlci4gWW91IGNhbiBzdGlsbCBhZGQgYSBjdXN0b20gYWxhcm0uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvYzh5LWFsYXJtLWV2ZW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyx5QkFBeUI7SUFzQnBDLFlBQ1UseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUEwQjtRQUgxQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFyQnBDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVqQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV6QyxhQUFRLEdB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LENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEVBQzVFLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxZQUE0QixFQUM1QixnQkFBZ0IsR0FBRyxFQUFFO1FBRXJCLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQTZCO1FBQ2xELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLHNPQ3BCdEMscTRMQTRLQTs7MkZEeEphLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MktBS2xDLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29sb3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHMsIEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBASW5wdXQoKVxuICBwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRmlsdGVyczogQWxhcm1EZXRhaWxzW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QWxhcm1EZXRhaWxzW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1c3RvbUFsYXJtVHlwZXM6IEFsYXJtRGV0YWlsc1tdID0gW107XG4gIGN1c3RvbUFsYXJtVHlwZUlucHV0ID0gJyc7XG5cbiAgcmVhZG9ubHkgcXVlcnlQYXJhbU5hbWUgPSAndHlwZUZpbHRlcic7XG4gIHJlYWRvbmx5IFNUT1JBR0VfQUNDRVNTX0tFWSA9ICdjdXN0b21BbGFybVR5cGVzJztcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29sb3JTZXJ2aWNlOiBDb2xvclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbWV0ZXJPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuYWxhcm1zICYmIGNoYW5nZXMuYWxhcm1zLmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFBvc3NpYmxlRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXJ5UGFyYW1ldGVyT2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMucG9zc2libGVGaWx0ZXJzO1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlRmlsdGVycyA9IHRoaXMuc2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgICAgICAgICAgYWxhcm1zLFxuICAgICAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGU6IEFsYXJtRGV0YWlscykge1xuICAgIGFsYXJtVHlwZS5fX2FjdGl2ZSA9ICFhbGFybVR5cGUuX19hY3RpdmU7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbmQoXG4gICAgICBhbGFybSA9PiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IHR5cGUuZmlsdGVycy50eXBlXG4gICAgKTtcbiAgICBhbGFybUZpbHRlci5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gdGhpcy5wb3NzaWJsZUZpbHRlcnMubWFwKGFsYXJtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFsYXJtLFxuICAgICAgICBfX2FjdGl2ZTogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJDaGFuZ2UoKSB7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZVxuICAgICk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMuY3VycmVudFF1ZXJ5UGFyYW07XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycyA9IGFjdGl2ZXM7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlRmlsdGVycyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIHR5cGVGaWx0ZXI6IG5ld1F1ZXJ5UGFyYW0gfHwgbnVsbFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5UGFyYW0gPSBuZXdRdWVyeVBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy5mb3JFYWNoKHBvc3NpYmxlRmlsdGVyID0+IHtcbiAgICAgIHBvc3NpYmxlRmlsdGVyLl9fYWN0aXZlID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnNvbWUoXG4gICAgICAgIChhY3RpdmVGaWx0ZXI6IEFsYXJtRGV0YWlscykgPT4gYWN0aXZlRmlsdGVyID09PSBwb3NzaWJsZUZpbHRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUFsYXJtKGFsYXJtRGV0YWlsczogQWxhcm1EZXRhaWxzKSB7XG4gICAgdGhpcy5wb3NzaWJsZUZpbHRlcnMgPSB0aGlzLnBvc3NpYmxlRmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IGZpbHRlciAhPT0gYWxhcm1EZXRhaWxzKTtcbiAgICB0aGlzLnN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpO1xuICB9XG5cbiAgY29uZmlybVdpdGhFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tQWxhcm1UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ3VzdG9tQWxhcm1UeXBlKCkge1xuICAgIGlmICghdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy51bnNoaWZ0KHtcbiAgICAgIGxhYmVsOiB0aGlzLmN1c3RvbUFsYXJtVHlwZUlucHV0LFxuICAgICAgY29sb3I6IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IodGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY3VzdG9tQWxhcm1UeXBlSW5wdXRcbiAgICAgIH0sXG4gICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgIF9fdGFyZ2V0OiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3RvcmVDdXN0b21BbGFybVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpIHtcbiAgICBjb25zdCBjdXN0b21UeXBlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcigoZmlsdGVyOiBBbGFybURldGFpbHMpID0+ICFmaWx0ZXIuX190YXJnZXQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfQUNDRVNTX0tFWSwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tVHlwZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tQWxhcm1UeXBlRnJvbVN0b3JhZ2UoKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0FDQ0VTU19LRVkpO1xuICAgIHJldHVybiB0eXBlcyA/IEpTT04ucGFyc2UodHlwZXMpIDogW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFBvc3NpYmxlRmlsdGVycygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucXVlcnlQYXJhbU5hbWUpO1xuICAgIGNvbnN0IGFsYXJtVHlwZXNGcm9tQ3VycmVudGx5U2hvd25BbGFybXMgPVxuICAgICAgYXdhaXQgdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldFVuaXF1ZUFsYXJtc09ubHkodGhpcy5hbGFybXMuZGF0YSk7XG4gICAgY29uc3QgY3VzdG9tQWxhcm1UeXBlc0Zyb21Mb2NhbFN0b3JhZ2UgPSB0aGlzLmdldEN1c3RvbUFsYXJtVHlwZUZyb21TdG9yYWdlKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLnNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIFsuLi5jdXN0b21BbGFybVR5cGVzRnJvbUxvY2FsU3RvcmFnZSwgLi4uYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtc10sXG4gICAgICBxdWVyeVBhcmFtZXRlcnNcbiAgICApO1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gc2VsZWN0YWJsZUFsYXJtVHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIGZpbHRlclR5cGVzUXVlcnkgPSAnJ1xuICApOiBBbGFybURldGFpbHNbXSB7XG4gICAgY29uc3QgdHlwZXMgPSAoZmlsdGVyVHlwZXNRdWVyeSA/PyAnJykuc3BsaXQoJywnKTtcbiAgICByZXR1cm4gYWxhcm1GaWx0ZXJzLm1hcCgoYWxhcm06IEFsYXJtRGV0YWlscykgPT4gKHtcbiAgICAgIC4uLmFsYXJtLFxuICAgICAgX19hY3RpdmU6IHR5cGVzLmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgQWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICAob25IaWRkZW4pPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IHVuc2V0OyBtaW4td2lkdGg6IDI1MHB4XCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidpbmZvLWNpcmNsZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzdHJvbmcgdGFuc2xhdGU+VGhlIGxpc3QgYmVsb3cgbWF5IG5vdCBiZSBjb21wbGV0ZS48L3N0cm9uZz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgdGFuc2xhdGU+XG4gICAgICAgICAgICBSZWNlbnQgYWxhcm1zIGFyZSBkaXNwbGF5ZWQgYmVsb3cuIFBhc3QgYWxhcm1zIG1pZ2h0IG5vdCBiZSBzaG93bi4gT3B0aW9uYWxseSB5b3UgY2FuXG4gICAgICAgICAgICBhZGQgYSBjdXN0b20gYWxhcm0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgcC10LTE2IHAtYi0xNiBwLXItMzIgcC1sLTMyIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VzdG9tIGFsYXJtIHR5cGVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXN0b21BbGFybVR5cGVJbnB1dFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJjb25maXJtV2l0aEVudGVyKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIGN1c3RvbSBhbGFybScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwiQWRkXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRDdXN0b21BbGFybVR5cGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbCBjZGstZHJhZ1wiXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBhbGFybVR5cGUgb2YgcG9zc2libGVGaWx0ZXJzXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxhcm1UeXBlKGFsYXJtVHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1saS1jaGVja2JveFxuICAgICAgICAgICAgY2xhc3M9XCJhLXMtY2VudGVyIG0tdC00IHAtci0wIHAtbC0wXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhbGFybVR5cGUuX19hY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L2M4eS1saS1jaGVja2JveD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1sLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sb3JwaWNrZXIgcC10LTAgcC1iLTAgcC1sLTBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1jb2xvcnBpY2tlciBjOHktY29sb3JwaWNrZXItLWFsYXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2lyY2xlLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogYWxhcm1UeXBlLmNvbG9yIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2M4eUljb25dPVwiJ2JlbGwnXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtMTIgZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgIHt7IGFsYXJtVHlwZS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFsYXJtVHlwZS5fX3RhcmdldCA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQWxhcm0oYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGM4eS1saSAqbmdJZj1cInBvc3NpYmxlRmlsdGVycy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInAtdC04XCJcbiAgICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybSBmb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gYWxhcm0gdG8gZmlsdGVyLiBZb3UgY2FuIHN0aWxsIGFkZCBhIGN1c3RvbSBhbGFybS4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1ib3R0b20gcC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicG9zc2libGVGaWx0ZXJzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJDaGFuZ2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWx0ZXJzRHJvcGRvd24uaGlkZSgpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { ALARM_STATUS_LABELS, AlarmService, AlarmStatus, Severity } from '@c8y/client';
|
|
3
3
|
import { OptionsService, ViewContext, gettext } from '@c8y/ngx-components';
|
|
4
4
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
-
import { ALARMS_PATH } from './alarms.model';
|
|
5
|
+
import { ALARMS_PATH, INTERVALS_EXTENDED } from './alarms.model';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@c8y/client";
|
|
8
8
|
import * as i2 from "@c8y/ngx-components";
|
|
@@ -200,6 +200,20 @@ export class AlarmsViewService {
|
|
|
200
200
|
getRouterNavigationArray(contextData, alarm) {
|
|
201
201
|
return this.getRouterLink(contextData, alarm).split('/').filter(Boolean);
|
|
202
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Returns the correct from and to dates based on the selected interval
|
|
205
|
+
* @param intervalId the selected interval. E.g. 'none', 'hours', 'custom' ...
|
|
206
|
+
* @returns The calculated date context based on the selected interval.
|
|
207
|
+
*/
|
|
208
|
+
getDateTimeContextByInterval(intervalId) {
|
|
209
|
+
const interval = INTERVALS_EXTENDED.find(({ id }) => id === intervalId);
|
|
210
|
+
if (interval.id === 'none') {
|
|
211
|
+
return [new Date(0), new Date()];
|
|
212
|
+
}
|
|
213
|
+
const dateTo = new Date();
|
|
214
|
+
const dateFrom = new Date(dateTo.valueOf() - interval.timespanInMs);
|
|
215
|
+
return [dateFrom, dateTo];
|
|
216
|
+
}
|
|
203
217
|
/**
|
|
204
218
|
* Creates a value for query parameter for filtering alarms by severity based on array of selected severities.
|
|
205
219
|
*
|
|
@@ -242,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
242
256
|
providedIn: 'root'
|
|
243
257
|
}]
|
|
244
258
|
}], ctorParameters: () => [{ type: i1.AlarmService }, { type: i2.OptionsService }] });
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXZpZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLG1CQUFtQixFQUVuQixZQUFZLEVBQ1osV0FBVyxFQUlYLFFBQVEsRUFHVCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUwsY0FBYyxFQUNkLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFN0M7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBWTVCLFlBQ1UsWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBYi9CLDJCQUFzQixHQUE2QixtQkFBbUIsQ0FBQztRQUN2RSwyQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDaEMsaUNBQTRCLEdBQUcsVUFBVSxDQUFDO1FBQzFDLDRCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLG1DQUE4QixHQUFHLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBRzdGLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFRdEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxzQkFBc0IsQ0FDcEIsVUFBMEIsRUFDMUIsV0FBVyxHQUFHLEtBQUssRUFDbkIsYUFBNEIsRUFDNUIsTUFBeUI7UUFFekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRSxNQUFNLE9BQU8sR0FBcUI7WUFDaEMsUUFBUSxFQUFFLEVBQUU7WUFDWixjQUFjLEVBQUUsSUFBSTtZQUNwQixHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLGFBQWEsSUFBSTtnQkFDbkIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQy9DLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO2FBQzFDLENBQUM7WUFDRixHQUFHLE1BQU07U0FDVixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBc0I7UUFDekMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUM1QixlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUN2QyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQyxRQUFRLEVBQUUsRUFBRTtZQUNaLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFjO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FDNUIsUUFBc0IsRUFDdEIsV0FBb0IsRUFDcEIsTUFBeUI7UUFFekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFxQjtZQUNoQyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDL0MsR0FBRyxNQUFNO1NBQ1YsQ0FBQztRQUNGLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsd0JBQXdCLENBQUMsZUFBK0I7UUFDdEQsT0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBb0I7YUFDcEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25DLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQWtCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNkJHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixrQkFBa0MsRUFDbEMsUUFBeUI7UUFFekIsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsSUFBSSxRQUFRLENBQUM7UUFFMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRTtZQUNoRixNQUFNLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFFbkQsTUFBTSxVQUFVLEdBQUcsUUFBUTtnQkFDekIsQ0FBQyxDQUFDO29CQUNFLEdBQUcsWUFBWTtvQkFDZixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsaUJBQWlCLEVBQUUsSUFBSTtpQkFDeEI7Z0JBQ0gsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUVqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxPQUFPO1lBQ0wsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLFdBQXlCLEVBQUUsS0FBYztRQUNyRCxJQUFJLFNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixTQUFTLEdBQUcsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELFFBQVEsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sV0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUM3RCxLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNwQixPQUFPLFVBQVUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUQ7Z0JBQ0UsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUFDLFdBQXlCLEVBQUUsS0FBYztRQUNoRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0sseUJBQXlCLENBQUMsVUFBMEI7UUFDMUQsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyx1QkFBdUIsQ0FBQyxXQUFvQjtRQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFzQixDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVztZQUNsQyxDQUFDLENBQUMsUUFBUTtZQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBL1BVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBTEFSTV9TVEFUVVNfTEFCRUxTLFxuICBBbGFybVF1ZXJ5RmlsdGVyLFxuICBBbGFybVNlcnZpY2UsXG4gIEFsYXJtU3RhdHVzLFxuICBBbGFybVN0YXR1c1R5cGUsXG4gIElBbGFybSxcbiAgSVJlc3VsdExpc3QsXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU2V2ZXJpdHlUeXBlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uT3B0aW9ucyxcbiAgQ29udGV4dERhdGEsXG4gIERhdGVUaW1lQ29udGV4dCxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBTEFSTVNfUEFUSCB9IGZyb20gJy4vYWxhcm1zLm1vZGVsJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBhbmQgcmV0cmlldmluZyBhbGFybXMgZGF0YSB3aXRoaW4gdGhlIGFsYXJtcyB2aWV3LlxuICpcbiAqIFRoZSBgQWxhcm1zVmlld1NlcnZpY2VgIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gaW50ZXJhY3Qgd2l0aCBhbGFybXMsXG4gKiBpbmNsdWRpbmcgZmlsdGVyaW5nLCBjb3VudGluZywgYW5kIHRyYW5zbGF0aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucyBpbiBhbiBhbGFybXMgdmlldy5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgcmVsaWVzIG9uIHRoZSBgQWxhcm1TZXJ2aWNlYCBmb3IgZmV0Y2hpbmcgYWxhcm0gZGF0YSBhbmQgdGhlIGBPcHRpb25zU2VydmljZWBcbiAqIGZvciBjb25maWd1cmluZyBhbGFybXMgdmlldyBvcHRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNWaWV3U2VydmljZSB7XG4gIHJlYWRvbmx5IEFMQVJNX1JFRlJFU0hfVFlQRV9LRVk6IGtleW9mIEFwcGxpY2F0aW9uT3B0aW9ucyA9ICdhbGFybXNSZWZyZXNoVHlwZSc7XG4gIHJlYWRvbmx5IERFRkFVTFRfSU5URVJWQUxfVkFMVUUgPSAzMF8wMDA7XG4gIHJlYWRvbmx5IERFRkFVTFRfUkVGUkVTSF9PUFRJT05fVkFMVUUgPSAnaW50ZXJ2YWwnO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFUyA9IFs1XzAwMCwgMTBfMDAwLCAxNV8wMDAsIDMwXzAwMCwgNjBfMDAwXTtcbiAgcmVhZG9ubHkgUkVBTFRJTUVfVVBEQVRFX0FMQVJNU19NRVNTQUdFID0gZ2V0dGV4dCgnVGhlIGxpc3Qgd2FzIHVwZGF0ZWQsIGNsaWNrIHRvIHJlZnJlc2guJyk7XG5cbiAgaXNJbnRlcnZhbEVuYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICByZWxvYWRBbGFybXNMaXN0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfaXNJbnRlcnZhbEVuYWJsZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtU2VydmljZTogQWxhcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoKCkpIHtcbiAgICAgIHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICAgIHRoaXMuaXNJbnRlcnZhbEVuYWJsZWQkID0gdGhpcy5faXNJbnRlcnZhbEVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgc3ViamVjdCB0byBpbml0aWFsaXplIHRoZSBhbGFybXMgcmVsb2FkaW5nLlxuICAgKi9cbiAgdXBkYXRlQWxhcm1MaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkQWxhcm1zTGlzdCQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxhcm1zIGZpbHRlcmVkIGJ5IHNwZWNpZmllZCBzZXZlcml0aWVzIGFuZCBvdGhlciBvcHRpb25hbCBxdWVyeSBmaWx0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdGllcyBhbiBhcnJheSBvZiBzZXZlcml0aWVzIHRvIGZpbHRlciB0aGUgYWxhcm1zLlxuICAgKiBAcGFyYW0gc2hvd0NsZWFyZWQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyBjbGVhcmVkIGFsYXJtcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqIEBwYXJhbSBzZWxlY3RlZERhdGVzIGFuIGFycmF5IG9mIHR3byBkYXRlcyB0byBmaWx0ZXIgYWxhcm1zIGJ5IGNyZWF0aW9uIGFuZCBsYXN0IHVwZGF0ZSBkYXRlcy5cbiAgICogQHBhcmFtIGZpbHRlciBhZGRpdGlvbmFsIHF1ZXJ5IGZpbHRlcnMgZm9yIHJldHJpZXZpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGxpc3Qgb2YgYWxhcm1zIHNhdGlzZnlpbmcgdGhlIHNwZWNpZmllZCBmaWx0ZXJzLlxuICAgKi9cbiAgcmV0cmlldmVGaWx0ZXJlZEFsYXJtcyhcbiAgICBzZXZlcml0aWVzOiBTZXZlcml0eVR5cGVbXSxcbiAgICBzaG93Q2xlYXJlZCA9IGZhbHNlLFxuICAgIHNlbGVjdGVkRGF0ZXM/OiBbRGF0ZSwgRGF0ZV0sXG4gICAgZmlsdGVyPzogQWxhcm1RdWVyeUZpbHRlclxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PElBbGFybT4+IHtcbiAgICBjb25zdCBzZXZlcml0aWVzUXVlcnkgPSB0aGlzLmdldFNldmVyaXR5UXVlcnlQYXJhbWV0ZXIoc2V2ZXJpdGllcyk7XG4gICAgY29uc3Qgc3RhdHVzZXNRdWVyeSA9IHRoaXMuZ2V0U3RhdHVzUXVlcnlQYXJhbWV0ZXIoc2hvd0NsZWFyZWQpO1xuXG4gICAgY29uc3QgX2ZpbHRlcjogQWxhcm1RdWVyeUZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgLi4uKHNldmVyaXRpZXNRdWVyeSAmJiB7IHNldmVyaXR5OiBzZXZlcml0aWVzUXVlcnkgfSksXG4gICAgICAuLi4oc3RhdHVzZXNRdWVyeSAmJiB7IHN0YXR1czogc3RhdHVzZXNRdWVyeSB9KSxcbiAgICAgIC4uLihzZWxlY3RlZERhdGVzICYmIHtcbiAgICAgICAgbGFzdFVwZGF0ZWRGcm9tOiBzZWxlY3RlZERhdGVzWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNyZWF0ZWRUbzogc2VsZWN0ZWREYXRlc1sxXS50b0lTT1N0cmluZygpXG4gICAgICB9KSxcbiAgICAgIC4uLmZpbHRlclxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1TZXJ2aWNlLmxpc3QoX2ZpbHRlcik7XG4gIH1cblxuICByZXRyaWV2ZUFsYXJtc0J5RGF0ZShkYXRlczogRGF0ZVRpbWVDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1TZXJ2aWNlLmxpc3Qoe1xuICAgICAgbGFzdFVwZGF0ZWRGcm9tOiBkYXRlc1swXS50b0lTT1N0cmluZygpLFxuICAgICAgY3JlYXRlZFRvOiBkYXRlc1sxXS50b0lTT1N0cmluZygpLFxuICAgICAgcGFnZVNpemU6IDUwLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzdGF0ZSB0byBlbmFibGUgb3IgZGlzYWJsZSBpbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGVuYWJsZSBpbnRlcnZhbHMuXG4gICAqL1xuICB1cGRhdGVJbnRlcnZhbFN0YXRlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNJbnRlcnZhbEVuYWJsZWQ/Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNvdW50IG9mIGFsYXJtcyBmaWx0ZXJlZCBieSBzZXZlcml0eSBhbmQgY2xlYXJhbmNlIHN0YXR1cy5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gVGhlIHNldmVyaXR5IGxldmVsIHRvIGZpbHRlciBieSAoZS5nLiwgQ1JJVElDQUwsIE1BSk9SLCBldGMuKS5cbiAgICogQHBhcmFtIHNob3dDbGVhcmVkIC0gV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBjbGVhcmVkIGFsYXJtcyBpbiB0aGUgY291bnQuXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlciBjcml0ZXJpYSBmb3IgYWxhcm1zLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIG9mIGFsYXJtcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqXG4gICAqL1xuICBhc3luYyBnZXRBbGFybXNDb3VudEJ5U2V2ZXJpdHkoXG4gICAgc2V2ZXJpdHk6IFNldmVyaXR5VHlwZSxcbiAgICBzaG93Q2xlYXJlZDogYm9vbGVhbixcbiAgICBmaWx0ZXI/OiBBbGFybVF1ZXJ5RmlsdGVyXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgc3RhdHVzZXNRdWVyeSA9IHRoaXMuZ2V0U3RhdHVzUXVlcnlQYXJhbWV0ZXIoc2hvd0NsZWFyZWQpO1xuICAgIGNvbnN0IF9maWx0ZXI6IEFsYXJtUXVlcnlGaWx0ZXIgPSB7XG4gICAgICAuLi4oc2V2ZXJpdHkgJiYgeyBzZXZlcml0eTogc2V2ZXJpdHkgfSksXG4gICAgICAuLi4oc3RhdHVzZXNRdWVyeSAmJiB7IHN0YXR1czogc3RhdHVzZXNRdWVyeSB9KSxcbiAgICAgIC4uLmZpbHRlclxuICAgIH07XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFsYXJtU2VydmljZS5jb3VudChfZmlsdGVyKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhbGFybXMgcmVmcmVzaCB0eXBlIGZyb20gdGhlIE9wdGlvbnNTZXJ2aWNlXG4gICAqIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgaXQgaXMgc2V0IHRvIFwiaW50ZXJ2YWxcIi5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBhbGFybXMgcmVmcmVzaCB0eXBlIGlzIFwiaW50ZXJ2YWwsXCIgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc0ludGVydmFsUmVmcmVzaCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0KHRoaXMuQUxBUk1fUkVGUkVTSF9UWVBFX0tFWSwgJ2ludGVydmFsJyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnaW50ZXJ2YWwnO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgc2V2ZXJpdGllcyBiYXNlZCBvbiB0aGUgbmV3IHNldmVyaXR5IGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5VXBkYXRlcyAtIFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB1cGRhdGVzIHRvIGVhY2ggc2V2ZXJpdHkuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgdXBkYXRlZCBzZWxlY3RlZCBzZXZlcml0aWVzLlxuICAgKi9cbiAgdXBkYXRlU2VsZWN0ZWRTZXZlcml0aWVzKHNldmVyaXR5VXBkYXRlczogU2V2ZXJpdHlGaWx0ZXIpOiBTZXZlcml0eVR5cGVbXSB7XG4gICAgcmV0dXJuIChPYmplY3Qua2V5cyhzZXZlcml0eVVwZGF0ZXMpIGFzIFNldmVyaXR5VHlwZVtdKVxuICAgICAgLmZpbHRlcihrZXkgPT4gc2V2ZXJpdHlVcGRhdGVzW2tleV0pXG4gICAgICAubWFwKGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSBhcyBTZXZlcml0eVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgYWN0aXZlIGFsYXJtcyBvZiB0aGUgc2VsZWN0ZWQgc2V2ZXJpdGllcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFsbCBhY3RpdmUgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gbGlzdCBvZiBzZXZlcml0aWVzIGJ5IG1ha2luZyBidWxrIHVwZGF0ZSBjYWxscy4gSWYgbm8gc2V2ZXJpdGllcyBhcmUgc2VsZWN0ZWQsIGl0IGRlZmF1bHRzIHRvIHVzaW5nIGFsbCBhdmFpbGFibGUgc2V2ZXJpdGllcy5cbiAgICogSXQgd29ya3MgYnkgc2VuZGluZyBhIHNlcmllcyBvZiB1cGRhdGUgcmVxdWVzdHMgZm9yIGVhY2ggc2V2ZXJpdHkgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgaW5kaWNhdGluZyBpZiBhbGwgYWxhcm1zIHdlcmUgcmVzb2x2ZWQgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RlZFNldmVyaXRpZXMgQW4gYXJyYXkgb2Ygc2V2ZXJpdGllcyB0byBiZSBjbGVhcmVkLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBzZXZlcml0aWVzIHdpbGwgYmUgY2xlYXJlZC5cbiAgICogQHBhcmFtIHNvdXJjZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFsYXJtcyB0byBiZSBjbGVhcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCB3aXRoIGEgZmxhZyBgcmVzb2x2ZWRJbW1lZGlhdGVseWAuIFRoZSBmbGFnIGlzIHRydWUgaWYgYWxsIGFsYXJtcyBmb3IgYWxsIHNlbGVjdGVkIHNldmVyaXRpZXMgd2VyZSBjbGVhcmVkIHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHNldmVyaXRpZXNUb0NsZWFyOiBTZXZlcml0eVR5cGVbXSA9IFtTZXZlcml0eS5NQUpPUiwgU2V2ZXJpdHkuTUlOT1JdO1xuICAgKlxuICAgKiBjbGVhckFsbEFjdGl2ZUFsYXJtcyhzZXZlcml0aWVzVG9DbGVhcikudGhlbigoeyByZXNvbHZlZEltbWVkaWF0ZWx5IH0pID0+IHtcbiAgICogICBpZiAocmVzb2x2ZWRJbW1lZGlhdGVseSkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBzZWxlY3RlZCBhbGFybXMgd2VyZSBjbGVhcmVkIHN1Y2Nlc3NmdWxseS4nKTtcbiAgICogICB9IGVsc2Uge1xuICAgKiAgICAgY29uc29sZS5sb2coJ1NvbWUgYWxhcm1zIGNvdWxkIG5vdCBiZSBjbGVhcmVkLicpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiAqKk5vdGUqKlxuICAgKiAtIFRoZSBtZXRob2QgdXNlcyB0aGUgYGFsYXJtU2VydmljZS51cGRhdGVCdWxrYCBmb3IgZWFjaCBzZXZlcml0eSB0byBjbGVhciB0aGUgYWN0aXZlIGFsYXJtcy5cbiAgICogLSBJdCBtYXkgZmV0Y2ggdGhlIGBzb3VyY2VJZGAgYmFzZWQgb24gdGhlIHZpZXcgKGlmIGFwcGxpY2FibGUpIGFuZCBpbmNsdWRlIGl0IGFzIGEgcXVlcnkgcGFyYW1ldGVyIGluIHRoZSB1cGRhdGUgY2FsbHMuXG4gICAqIC0gVGhlIG1ldGhvZCByZXR1cm5zIGltbWVkaWF0ZWx5IGJ1dCB0aGUgcmV0dXJuZWQgUHJvbWlzZSBuZWVkcyB0byBoYXZlIGEgYHRoZW5gIG9yIGBjYXRjaGAgbWV0aG9kIGNhbGwgdG8gaGFuZGxlIHRoZSByZXN1bHQgb3IgZXJyb3IgcmVzcGVjdGl2ZWx5LlxuICAgKiAtIFVzZXMgYFByb21pc2UuYWxsYCB0byB3YWl0IGZvciBhbGwgdXBkYXRlIHJlcXVlc3RzIHRvIGNvbXBsZXRlIGJlZm9yZSByZXNvbHZpbmcgdGhlIGZpbmFsIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsZWFyQWxsQWN0aXZlQWxhcm1zKFxuICAgIHNlbGVjdGVkU2V2ZXJpdGllczogU2V2ZXJpdHlUeXBlW10sXG4gICAgc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBQcm9taXNlPHsgcmVzb2x2ZWRJbW1lZGlhdGVseTogYm9vbGVhbiB9PiB7XG4gICAgY29uc3Qgc2V2ZXJpdGllc1RvVXBkYXRlID0gc2VsZWN0ZWRTZXZlcml0aWVzIHx8IFNldmVyaXR5O1xuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3QudmFsdWVzKHNldmVyaXRpZXNUb1VwZGF0ZSkubWFwKChzZXZlcml0eTogU2V2ZXJpdHlUeXBlKSA9PiB7XG4gICAgICBjb25zdCBjb21tb25QYXJhbXMgPSB7IHJlc29sdmVkOiBmYWxzZSwgc2V2ZXJpdHkgfTtcblxuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNvdXJjZUlkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uY29tbW9uUGFyYW1zLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VJZCxcbiAgICAgICAgICAgIHdpdGhTb3VyY2VBc3NldHM6IHRydWUsXG4gICAgICAgICAgICB3aXRoU291cmNlRGV2aWNlczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBjb21tb25QYXJhbXM7XG5cbiAgICAgIHJldHVybiB0aGlzLmFsYXJtU2VydmljZS51cGRhdGVCdWxrKHsgc3RhdHVzOiBBbGFybVN0YXR1cy5DTEVBUkVEIH0sIHBhcmFtZXRlcnMpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZEltbWVkaWF0ZWx5OiByZXNwb25zZXMuZXZlcnkocmVzID0+IHJlcylcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvcnJlY3QgbGluayBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udGV4dCBkYXRhLlxuICAgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBmcm9tLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIGFsYXJtIHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIGxpbmsgdG8gYmUgdXNlZCBhcyBhbiB1cmwgbmF2aWdhdGlvbi5cbiAgICovXG4gIGdldFJvdXRlckxpbmsoY29udGV4dERhdGE/OiBDb250ZXh0RGF0YSwgYWxhcm0/OiBJQWxhcm0pOiBzdHJpbmcge1xuICAgIGxldCBkZXRhaWxVcmwgPSBgLyR7QUxBUk1TX1BBVEh9YDtcbiAgICBpZiAoYWxhcm0pIHtcbiAgICAgIGRldGFpbFVybCA9IGAvJHtBTEFSTVNfUEFUSH0vJHthbGFybS5pZH1gO1xuICAgIH1cbiAgICBpZiAoIWNvbnRleHREYXRhKSB7XG4gICAgICByZXR1cm4gZGV0YWlsVXJsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29udGV4dERhdGEuY29udGV4dCkge1xuICAgICAgY2FzZSBWaWV3Q29udGV4dC5EZXZpY2U6XG4gICAgICAgIHJldHVybiBgL2RldmljZS8ke2NvbnRleHREYXRhLmNvbnRleHREYXRhLmlkfSR7ZGV0YWlsVXJsfWA7XG4gICAgICBjYXNlIFZpZXdDb250ZXh0Lkdyb3VwOlxuICAgICAgICByZXR1cm4gYC9ncm91cC8ke2NvbnRleHREYXRhLmNvbnRleHREYXRhLmlkfSR7ZGV0YWlsVXJsfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGV0YWlsVXJsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IGFycmF5IG5hdmlnYXRpb24uXG4gICAqIEBwYXJhbSBjb250ZXh0RGF0YSBUaGUgY29udGV4dCB0aGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGZyb20uXG4gICAqIEBwYXJhbSBhbGFybSBUaGUgYWxhcm0gdG8gbmF2aWdhdGUgdG8uXG4gICAqIEByZXR1cm5zIEEgbGluayB0byBiZSB1c2VkIGFzIGEgcm91dGVyLm5hdmlnYXRpb24uXG4gICAqL1xuICBnZXRSb3V0ZXJOYXZpZ2F0aW9uQXJyYXkoY29udGV4dERhdGE/OiBDb250ZXh0RGF0YSwgYWxhcm0/OiBJQWxhcm0pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVyTGluayhjb250ZXh0RGF0YSwgYWxhcm0pLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgcXVlcnkgcGFyYW1ldGVyIGZvciBmaWx0ZXJpbmcgYWxhcm1zIGJ5IHNldmVyaXR5IGJhc2VkIG9uIGFycmF5IG9mIHNlbGVjdGVkIHNldmVyaXRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0aWVzIC0gQW4gYXJyYXkgb2YgYWxhcm0gc2V2ZXJpdHkgdHlwZXMgdG8gaW5jbHVkZSBpbiB0aGUgZmlsdGVyLlxuICAgKiBJZiB0aGUgYXJyYXkgaXMgZW1wdHkgb3IgdW5kZWZpbmVkLCBubyBzZXZlcml0eSBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2Ygc2VsZWN0ZWQgYWxhcm0gc2V2ZXJpdGllcyxcbiAgICogb3IgbnVsbCBpZiBubyBzZXZlcml0aWVzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2V2ZXJpdHlRdWVyeVBhcmFtZXRlcihzZXZlcml0aWVzOiBTZXZlcml0eVR5cGVbXSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghc2V2ZXJpdGllcyB8fCBzZXZlcml0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2V2ZXJpdGllcy5sZW5ndGggPT09IE9iamVjdC5rZXlzKFNldmVyaXR5KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V2ZXJpdGllcy5qb2luKCcsJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHZhbHVlIGZvciBxdWVyeSBwYXJhbWV0ZXIgZm9yIGZpbHRlcmluZyBhbGFybXMgYnkgc3RhdHVzZXMgYmFzZWQgb24gc2hvd0NsZWFyZWQgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2hvd0NsZWFyZWQgLSBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgY2xlYXJlZCBzdGF0dXNlcy5cbiAgICogSWYgdHJ1ZSwgYWxsIHN0YXR1c2VzLCBpbmNsdWRpbmcgJ0NMRUFSRUQnLCB3aWxsIGJlIGluY2x1ZGVkOyBpZiBmYWxzZSwgJ0NMRUFSRUQnIHdpbGwgYmUgZXhjbHVkZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiBhbGFybSBzdGF0dXNlcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RhdHVzUXVlcnlQYXJhbWV0ZXIoc2hvd0NsZWFyZWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1c2VzID0gT2JqZWN0LmtleXMoQUxBUk1fU1RBVFVTX0xBQkVMUykgYXMgQWxhcm1TdGF0dXNUeXBlW107XG4gICAgY29uc3QgZmlsdGVyZWRTdGF0dXNlcyA9IHNob3dDbGVhcmVkXG4gICAgICA/IHN0YXR1c2VzXG4gICAgICA6IHN0YXR1c2VzLmZpbHRlcihzdGF0dXMgPT4gc3RhdHVzICE9PSAnQ0xFQVJFRCcpO1xuICAgIHJldHVybiBmaWx0ZXJlZFN0YXR1c2VzLmpvaW4oJywnKTtcbiAgfVxufVxuIl19
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXZpZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLG1CQUFtQixFQUVuQixZQUFZLEVBQ1osV0FBVyxFQUlYLFFBQVEsRUFHVCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUwsY0FBYyxFQUNkLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHakU7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBWTVCLFlBQ1UsWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBYi9CLDJCQUFzQixHQUE2QixtQkFBbUIsQ0FBQztRQUN2RSwyQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDaEMsaUNBQTRCLEdBQUcsVUFBVSxDQUFDO1FBQzFDLDRCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLG1DQUE4QixHQUFHLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBRzdGLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFRdEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztZQUM3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TUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLHlCQUF5QixDQUFDLFVBQTBCO1FBQzFELElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssdUJBQXVCLENBQUMsV0FBb0I7UUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBc0IsQ0FBQztRQUN2RSxNQUFNLGdCQUFnQixHQUFHLFdBQVc7WUFDbEMsQ0FBQyxDQUFDLFFBQVE7WUFDVixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNwRCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDOzhHQS9RVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQUxBUk1fU1RBVFVTX0xBQkVMUyxcbiAgQWxhcm1RdWVyeUZpbHRlcixcbiAgQWxhcm1TZXJ2aWNlLFxuICBBbGFybVN0YXR1cyxcbiAgQWxhcm1TdGF0dXNUeXBlLFxuICBJQWxhcm0sXG4gIElSZXN1bHRMaXN0LFxuICBTZXZlcml0eSxcbiAgU2V2ZXJpdHlGaWx0ZXIsXG4gIFNldmVyaXR5VHlwZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbk9wdGlvbnMsXG4gIENvbnRleHREYXRhLFxuICBEYXRlVGltZUNvbnRleHQsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQUxBUk1TX1BBVEgsIElOVEVSVkFMU19FWFRFTkRFRCB9IGZyb20gJy4vYWxhcm1zLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRmlsdGVySW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgYWxhcm1zIGRhdGEgd2l0aGluIHRoZSBhbGFybXMgdmlldy5cbiAqXG4gKiBUaGUgYEFsYXJtc1ZpZXdTZXJ2aWNlYCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGludGVyYWN0IHdpdGggYWxhcm1zLFxuICogaW5jbHVkaW5nIGZpbHRlcmluZywgY291bnRpbmcsIGFuZCB0cmFuc2xhdGlvbi1yZWxhdGVkIG9wZXJhdGlvbnMgaW4gYW4gYWxhcm1zIHZpZXcuXG4gKlxuICogVGhpcyBzZXJ2aWNlIHJlbGllcyBvbiB0aGUgYEFsYXJtU2VydmljZWAgZm9yIGZldGNoaW5nIGFsYXJtIGRhdGEgYW5kIHRoZSBgT3B0aW9uc1NlcnZpY2VgXG4gKiBmb3IgY29uZmlndXJpbmcgYWxhcm1zIHZpZXcgb3B0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1zVmlld1NlcnZpY2Uge1xuICByZWFkb25seSBBTEFSTV9SRUZSRVNIX1RZUEVfS0VZOiBrZXlvZiBBcHBsaWNhdGlvbk9wdGlvbnMgPSAnYWxhcm1zUmVmcmVzaFR5cGUnO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFID0gMzBfMDAwO1xuICByZWFkb25seSBERUZBVUxUX1JFRlJFU0hfT1BUSU9OX1ZBTFVFID0gJ2ludGVydmFsJztcbiAgcmVhZG9ubHkgREVGQVVMVF9JTlRFUlZBTF9WQUxVRVMgPSBbNV8wMDAsIDEwXzAwMCwgMTVfMDAwLCAzMF8wMDAsIDYwXzAwMF07XG4gIHJlYWRvbmx5IFJFQUxUSU1FX1VQREFURV9BTEFSTVNfTUVTU0FHRSA9IGdldHRleHQoJ1RoZSBsaXN0IHdhcyB1cGRhdGVkLCBjbGljayB0byByZWZyZXNoLicpO1xuXG4gIGlzSW50ZXJ2YWxFbmFibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVsb2FkQWxhcm1zTGlzdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2lzSW50ZXJ2YWxFbmFibGVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGFybVNlcnZpY2U6IEFsYXJtU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsUmVmcmVzaCgpKSB7XG4gICAgICB0aGlzLl9pc0ludGVydmFsRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxFbmFibGVkJCA9IHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhIHN1YmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgYWxhcm1zIHJlbG9hZGluZy5cbiAgICovXG4gIHVwZGF0ZUFsYXJtTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZEFsYXJtc0xpc3QkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsYXJtcyBmaWx0ZXJlZCBieSBzcGVjaWZpZWQgc2V2ZXJpdGllcyBhbmQgb3RoZXIgb3B0aW9uYWwgcXVlcnkgZmlsdGVycy5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXRpZXMgYW4gYXJyYXkgb2Ygc2V2ZXJpdGllcyB0byBmaWx0ZXIgdGhlIGFsYXJtcy5cbiAgICogQHBhcmFtIHNob3dDbGVhcmVkIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgY2xlYXJlZCBhbGFybXMuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWREYXRlcyBhbiBhcnJheSBvZiB0d28gZGF0ZXMgdG8gZmlsdGVyIGFsYXJtcyBieSBjcmVhdGlvbiBhbmQgbGFzdCB1cGRhdGUgZGF0ZXMuXG4gICAqIEBwYXJhbSBmaWx0ZXIgYWRkaXRpb25hbCBxdWVyeSBmaWx0ZXJzIGZvciByZXRyaWV2aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBsaXN0IG9mIGFsYXJtcyBzYXRpc2Z5aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVycy5cbiAgICovXG4gIHJldHJpZXZlRmlsdGVyZWRBbGFybXMoXG4gICAgc2V2ZXJpdGllczogU2V2ZXJpdHlUeXBlW10sXG4gICAgc2hvd0NsZWFyZWQgPSBmYWxzZSxcbiAgICBzZWxlY3RlZERhdGVzPzogW0RhdGUsIERhdGVdLFxuICAgIGZpbHRlcj86IEFsYXJtUXVlcnlGaWx0ZXJcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQWxhcm0+PiB7XG4gICAgY29uc3Qgc2V2ZXJpdGllc1F1ZXJ5ID0gdGhpcy5nZXRTZXZlcml0eVF1ZXJ5UGFyYW1ldGVyKHNldmVyaXRpZXMpO1xuICAgIGNvbnN0IHN0YXR1c2VzUXVlcnkgPSB0aGlzLmdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkKTtcblxuICAgIGNvbnN0IF9maWx0ZXI6IEFsYXJtUXVlcnlGaWx0ZXIgPSB7XG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIC4uLihzZXZlcml0aWVzUXVlcnkgJiYgeyBzZXZlcml0eTogc2V2ZXJpdGllc1F1ZXJ5IH0pLFxuICAgICAgLi4uKHN0YXR1c2VzUXVlcnkgJiYgeyBzdGF0dXM6IHN0YXR1c2VzUXVlcnkgfSksXG4gICAgICAuLi4oc2VsZWN0ZWREYXRlcyAmJiB7XG4gICAgICAgIGxhc3RVcGRhdGVkRnJvbTogc2VsZWN0ZWREYXRlc1swXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjcmVhdGVkVG86IHNlbGVjdGVkRGF0ZXNbMV0udG9JU09TdHJpbmcoKVxuICAgICAgfSksXG4gICAgICAuLi5maWx0ZXJcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFsYXJtU2VydmljZS5saXN0KF9maWx0ZXIpO1xuICB9XG5cbiAgcmV0cmlldmVBbGFybXNCeURhdGUoZGF0ZXM6IERhdGVUaW1lQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmFsYXJtU2VydmljZS5saXN0KHtcbiAgICAgIGxhc3RVcGRhdGVkRnJvbTogZGF0ZXNbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGNyZWF0ZWRUbzogZGF0ZXNbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgd2hldGhlciB0byBlbmFibGUgaW50ZXJ2YWxzLlxuICAgKi9cbiAgdXBkYXRlSW50ZXJ2YWxTdGF0ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkPy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjb3VudCBvZiBhbGFybXMgZmlsdGVyZWQgYnkgc2V2ZXJpdHkgYW5kIGNsZWFyYW5jZSBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBsZXZlbCB0byBmaWx0ZXIgYnkgKGUuZy4sIENSSVRJQ0FMLCBNQUpPUiwgZXRjLikuXG4gICAqIEBwYXJhbSBzaG93Q2xlYXJlZCAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgY2xlYXJlZCBhbGFybXMgaW4gdGhlIGNvdW50LlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXIgY3JpdGVyaWEgZm9yIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlciBvZiBhbGFybXMgdGhhdCBtYXRjaCB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxhcm1zQ291bnRCeVNldmVyaXR5KFxuICAgIHNldmVyaXR5OiBTZXZlcml0eVR5cGUsXG4gICAgc2hvd0NsZWFyZWQ6IGJvb2xlYW4sXG4gICAgZmlsdGVyPzogQWxhcm1RdWVyeUZpbHRlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHN0YXR1c2VzUXVlcnkgPSB0aGlzLmdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkKTtcbiAgICBjb25zdCBfZmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyID0ge1xuICAgICAgLi4uKHNldmVyaXR5ICYmIHsgc2V2ZXJpdHk6IHNldmVyaXR5IH0pLFxuICAgICAgLi4uKHN0YXR1c2VzUXVlcnkgJiYgeyBzdGF0dXM6IHN0YXR1c2VzUXVlcnkgfSksXG4gICAgICAuLi5maWx0ZXJcbiAgICB9O1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UuY291bnQoX2ZpbHRlcik7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYWxhcm1zIHJlZnJlc2ggdHlwZSBmcm9tIHRoZSBPcHRpb25zU2VydmljZVxuICAgKiBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IGlzIHNldCB0byBcImludGVydmFsXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm1zIHJlZnJlc2ggdHlwZSBpcyBcImludGVydmFsLFwiIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCh0aGlzLkFMQVJNX1JFRlJFU0hfVFlQRV9LRVksICdpbnRlcnZhbCcpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2ludGVydmFsJztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHNlbGVjdGVkIHNldmVyaXRpZXMgYmFzZWQgb24gdGhlIG5ldyBzZXZlcml0eSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eVVwZGF0ZXMgLSBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdXBkYXRlcyB0byBlYWNoIHNldmVyaXR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHVwZGF0ZWQgc2VsZWN0ZWQgc2V2ZXJpdGllcy5cbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkU2V2ZXJpdGllcyhzZXZlcml0eVVwZGF0ZXM6IFNldmVyaXR5RmlsdGVyKTogU2V2ZXJpdHlUeXBlW10ge1xuICAgIHJldHVybiAoT2JqZWN0LmtleXMoc2V2ZXJpdHlVcGRhdGVzKSBhcyBTZXZlcml0eVR5cGVbXSlcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHNldmVyaXR5VXBkYXRlc1trZXldKVxuICAgICAgLm1hcChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgYXMgU2V2ZXJpdHlUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGFjdGl2ZSBhbGFybXMgb2YgdGhlIHNlbGVjdGVkIHNldmVyaXRpZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYWN0aXZlIGFsYXJtcyBmb3IgdGhlIGdpdmVuIGxpc3Qgb2Ygc2V2ZXJpdGllcyBieSBtYWtpbmcgYnVsayB1cGRhdGUgY2FsbHMuIElmIG5vIHNldmVyaXRpZXMgYXJlIHNlbGVjdGVkLCBpdCBkZWZhdWx0cyB0byB1c2luZyBhbGwgYXZhaWxhYmxlIHNldmVyaXRpZXMuXG4gICAqIEl0IHdvcmtzIGJ5IHNlbmRpbmcgYSBzZXJpZXMgb2YgdXBkYXRlIHJlcXVlc3RzIGZvciBlYWNoIHNldmVyaXR5IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGluZGljYXRpbmcgaWYgYWxsIGFsYXJtcyB3ZXJlIHJlc29sdmVkIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRTZXZlcml0aWVzIEFuIGFycmF5IG9mIHNldmVyaXRpZXMgdG8gYmUgY2xlYXJlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgc2V2ZXJpdGllcyB3aWxsIGJlIGNsZWFyZWQuXG4gICAqIEBwYXJhbSBzb3VyY2VJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBhbGFybXMgdG8gYmUgY2xlYXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgd2l0aCBhIGZsYWcgYHJlc29sdmVkSW1tZWRpYXRlbHlgLiBUaGUgZmxhZyBpcyB0cnVlIGlmIGFsbCBhbGFybXMgZm9yIGFsbCBzZWxlY3RlZCBzZXZlcml0aWVzIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXZlcml0aWVzVG9DbGVhcjogU2V2ZXJpdHlUeXBlW10gPSBbU2V2ZXJpdHkuTUFKT1IsIFNldmVyaXR5Lk1JTk9SXTtcbiAgICpcbiAgICogY2xlYXJBbGxBY3RpdmVBbGFybXMoc2V2ZXJpdGllc1RvQ2xlYXIpLnRoZW4oKHsgcmVzb2x2ZWRJbW1lZGlhdGVseSB9KSA9PiB7XG4gICAqICAgaWYgKHJlc29sdmVkSW1tZWRpYXRlbHkpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgc2VsZWN0ZWQgYWxhcm1zIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHkuJyk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdTb21lIGFsYXJtcyBjb3VsZCBub3QgYmUgY2xlYXJlZC4nKTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogKipOb3RlKipcbiAgICogLSBUaGUgbWV0aG9kIHVzZXMgdGhlIGBhbGFybVNlcnZpY2UudXBkYXRlQnVsa2AgZm9yIGVhY2ggc2V2ZXJpdHkgdG8gY2xlYXIgdGhlIGFjdGl2ZSBhbGFybXMuXG4gICAqIC0gSXQgbWF5IGZldGNoIHRoZSBgc291cmNlSWRgIGJhc2VkIG9uIHRoZSB2aWV3IChpZiBhcHBsaWNhYmxlKSBhbmQgaW5jbHVkZSBpdCBhcyBhIHF1ZXJ5IHBhcmFtZXRlciBpbiB0aGUgdXBkYXRlIGNhbGxzLlxuICAgKiAtIFRoZSBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSBidXQgdGhlIHJldHVybmVkIFByb21pc2UgbmVlZHMgdG8gaGF2ZSBhIGB0aGVuYCBvciBgY2F0Y2hgIG1ldGhvZCBjYWxsIHRvIGhhbmRsZSB0aGUgcmVzdWx0IG9yIGVycm9yIHJlc3BlY3RpdmVseS5cbiAgICogLSBVc2VzIGBQcm9taXNlLmFsbGAgdG8gd2FpdCBmb3IgYWxsIHVwZGF0ZSByZXF1ZXN0cyB0byBjb21wbGV0ZSBiZWZvcmUgcmVzb2x2aW5nIHRoZSBmaW5hbCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGVhckFsbEFjdGl2ZUFsYXJtcyhcbiAgICBzZWxlY3RlZFNldmVyaXRpZXM6IFNldmVyaXR5VHlwZVtdLFxuICAgIHNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTx7IHJlc29sdmVkSW1tZWRpYXRlbHk6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHNldmVyaXRpZXNUb1VwZGF0ZSA9IHNlbGVjdGVkU2V2ZXJpdGllcyB8fCBTZXZlcml0eTtcblxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzVG9VcGRhdGUpLm1hcCgoc2V2ZXJpdHk6IFNldmVyaXR5VHlwZSkgPT4ge1xuICAgICAgY29uc3QgY29tbW9uUGFyYW1zID0geyByZXNvbHZlZDogZmFsc2UsIHNldmVyaXR5IH07XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBzb3VyY2VJZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmNvbW1vblBhcmFtcyxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlSWQsXG4gICAgICAgICAgICB3aXRoU291cmNlQXNzZXRzOiB0cnVlLFxuICAgICAgICAgICAgd2l0aFNvdXJjZURldmljZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogY29tbW9uUGFyYW1zO1xuXG4gICAgICByZXR1cm4gdGhpcy5hbGFybVNlcnZpY2UudXBkYXRlQnVsayh7IHN0YXR1czogQWxhcm1TdGF0dXMuQ0xFQVJFRCB9LCBwYXJhbWV0ZXJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRJbW1lZGlhdGVseTogcmVzcG9uc2VzLmV2ZXJ5KHJlcyA9PiByZXMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbnRleHQgZGF0YS5cbiAgICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgZnJvbS5cbiAgICogQHBhcmFtIGFsYXJtIFRoZSBhbGFybSB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBsaW5rIHRvIGJlIHVzZWQgYXMgYW4gdXJsIG5hdmlnYXRpb24uXG4gICAqL1xuICBnZXRSb3V0ZXJMaW5rKGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nIHtcbiAgICBsZXQgZGV0YWlsVXJsID0gYC8ke0FMQVJNU19QQVRIfWA7XG4gICAgaWYgKGFsYXJtKSB7XG4gICAgICBkZXRhaWxVcmwgPSBgLyR7QUxBUk1TX1BBVEh9LyR7YWxhcm0uaWR9YDtcbiAgICB9XG4gICAgaWYgKCFjb250ZXh0RGF0YSkge1xuICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbnRleHREYXRhLmNvbnRleHQpIHtcbiAgICAgIGNhc2UgVmlld0NvbnRleHQuRGV2aWNlOlxuICAgICAgICByZXR1cm4gYC9kZXZpY2UvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgY2FzZSBWaWV3Q29udGV4dC5Hcm91cDpcbiAgICAgICAgcmV0dXJuIGAvZ3JvdXAvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBhcnJheSBuYXZpZ2F0aW9uLlxuICAgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBmcm9tLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIGFsYXJtIHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIGxpbmsgdG8gYmUgdXNlZCBhcyBhIHJvdXRlci5uYXZpZ2F0aW9uLlxuICAgKi9cbiAgZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFJvdXRlckxpbmsoY29udGV4dERhdGEsIGFsYXJtKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IGZyb20gYW5kIHRvIGRhdGVzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBpbnRlcnZhbFxuICAgKiBAcGFyYW0gaW50ZXJ2YWxJZCB0aGUgc2VsZWN0ZWQgaW50ZXJ2YWwuIEUuZy4gJ25vbmUnLCAnaG91cnMnLCAnY3VzdG9tJyAuLi5cbiAgICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgZGF0ZSBjb250ZXh0IGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBpbnRlcnZhbC5cbiAgICovXG4gIGdldERhdGVUaW1lQ29udGV4dEJ5SW50ZXJ2YWwoaW50ZXJ2YWxJZDogQWxhcm1GaWx0ZXJJbnRlcnZhbFsnaWQnXSk6IERhdGVUaW1lQ29udGV4dCB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBJTlRFUlZBTFNfRVhURU5ERUQuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gaW50ZXJ2YWxJZCk7XG4gICAgaWYgKGludGVydmFsLmlkID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBbbmV3IERhdGUoMCksIG5ldyBEYXRlKCldO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVUbyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUZyb20gPSBuZXcgRGF0ZShkYXRlVG8udmFsdWVPZigpIC0gaW50ZXJ2YWwudGltZXNwYW5Jbk1zKTtcbiAgICByZXR1cm4gW2RhdGVGcm9tLCBkYXRlVG9dO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgcXVlcnkgcGFyYW1ldGVyIGZvciBmaWx0ZXJpbmcgYWxhcm1zIGJ5IHNldmVyaXR5IGJhc2VkIG9uIGFycmF5IG9mIHNlbGVjdGVkIHNldmVyaXRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0aWVzIC0gQW4gYXJyYXkgb2YgYWxhcm0gc2V2ZXJpdHkgdHlwZXMgdG8gaW5jbHVkZSBpbiB0aGUgZmlsdGVyLlxuICAgKiBJZiB0aGUgYXJyYXkgaXMgZW1wdHkgb3IgdW5kZWZpbmVkLCBubyBzZXZlcml0eSBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2Ygc2VsZWN0ZWQgYWxhcm0gc2V2ZXJpdGllcyxcbiAgICogb3IgbnVsbCBpZiBubyBzZXZlcml0aWVzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2V2ZXJpdHlRdWVyeVBhcmFtZXRlcihzZXZlcml0aWVzOiBTZXZlcml0eVR5cGVbXSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghc2V2ZXJpdGllcyB8fCBzZXZlcml0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2V2ZXJpdGllcy5sZW5ndGggPT09IE9iamVjdC5rZXlzKFNldmVyaXR5KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V2ZXJpdGllcy5qb2luKCcsJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHZhbHVlIGZvciBxdWVyeSBwYXJhbWV0ZXIgZm9yIGZpbHRlcmluZyBhbGFybXMgYnkgc3RhdHVzZXMgYmFzZWQgb24gc2hvd0NsZWFyZWQgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2hvd0NsZWFyZWQgLSBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgY2xlYXJlZCBzdGF0dXNlcy5cbiAgICogSWYgdHJ1ZSwgYWxsIHN0YXR1c2VzLCBpbmNsdWRpbmcgJ0NMRUFSRUQnLCB3aWxsIGJlIGluY2x1ZGVkOyBpZiBmYWxzZSwgJ0NMRUFSRUQnIHdpbGwgYmUgZXhjbHVkZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiBhbGFybSBzdGF0dXNlcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RhdHVzUXVlcnlQYXJhbWV0ZXIoc2hvd0NsZWFyZWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1c2VzID0gT2JqZWN0LmtleXMoQUxBUk1fU1RBVFVTX0xBQkVMUykgYXMgQWxhcm1TdGF0dXNUeXBlW107XG4gICAgY29uc3QgZmlsdGVyZWRTdGF0dXNlcyA9IHNob3dDbGVhcmVkXG4gICAgICA/IHN0YXR1c2VzXG4gICAgICA6IHN0YXR1c2VzLmZpbHRlcihzdGF0dXMgPT4gc3RhdHVzICE9PSAnQ0xFQVJFRCcpO1xuICAgIHJldHVybiBmaWx0ZXJlZFN0YXR1c2VzLmpvaW4oJywnKTtcbiAgfVxufVxuIl19
|