@eo-sdk/client 11.12.0-rc.1 → 11.12.0-rc.3
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/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +3 -1
- package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts +3 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +3 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/widgets.service.d.ts +17 -0
- package/app/eo-client/dashboard/widgets/widgets.service.d.ts.map +1 -0
- package/app/eo-client/settings/settings.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts +1 -1
- package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-details.component.d.ts +2 -0
- package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts +2 -0
- package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.module.d.ts +3 -2
- package/app/eo-framework/result-list/result-list.module.d.ts.map +1 -1
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +20 -17
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +17 -14
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +18 -15
- package/esm2022/app/eo-client/dashboard/widgets/widgets.service.mjs +26 -0
- package/esm2022/app/eo-client/settings/settings.component.mjs +3 -10
- package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +5 -6
- package/esm2022/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +1 -1
- package/esm2022/app/eo-framework/object-details/object-details.component.mjs +39 -4
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +2 -2
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +55 -4
- package/esm2022/app/eo-framework/result-list/result-list.module.mjs +5 -1
- package/fesm2022/eo-sdk-client.mjs +583 -474
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -7,14 +7,15 @@ import { EMPTY, debounceTime, tap } from 'rxjs';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/forms";
|
|
9
9
|
import * as i2 from "@eo-sdk/core";
|
|
10
|
-
import * as i3 from "
|
|
11
|
-
import * as i4 from "
|
|
12
|
-
import * as i5 from "../../../../../eo-framework/
|
|
13
|
-
import * as i6 from "../../../../../eo-framework/form-elements/
|
|
14
|
-
import * as i7 from "../../../../../eo-framework/form-elements/
|
|
15
|
-
import * as i8 from "../../../../../eo-framework/form-elements/
|
|
16
|
-
import * as i9 from "../../../../../eo-framework/form-elements/
|
|
17
|
-
import * as i10 from "
|
|
10
|
+
import * as i3 from "../../widgets.service";
|
|
11
|
+
import * as i4 from "@ngx-translate/core";
|
|
12
|
+
import * as i5 from "../../../../../eo-framework/ui/error-message/error-message.component";
|
|
13
|
+
import * as i6 from "../../../../../eo-framework/form-elements/form-input/form-input.component";
|
|
14
|
+
import * as i7 from "../../../../../eo-framework/form-elements/codesystem/codesystem.component";
|
|
15
|
+
import * as i8 from "../../../../../eo-framework/form-elements/number/number.component";
|
|
16
|
+
import * as i9 from "../../../../../eo-framework/form-elements/checkbox/checkbox.component";
|
|
17
|
+
import * as i10 from "../../../../../eo-framework/form-elements/string/string.component";
|
|
18
|
+
import * as i11 from "../charts-widget.component";
|
|
18
19
|
let ChartsSetupComponent = class ChartsSetupComponent {
|
|
19
20
|
set widgetConfig(wc) {
|
|
20
21
|
this._widgetConfig = wc;
|
|
@@ -23,13 +24,14 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
23
24
|
get widgetConfig() {
|
|
24
25
|
return this._widgetConfig;
|
|
25
26
|
}
|
|
26
|
-
constructor(fb, storedQueriesService, translate, userService, system, searchService) {
|
|
27
|
+
constructor(fb, storedQueriesService, translate, userService, system, searchService, widgetsService) {
|
|
27
28
|
this.fb = fb;
|
|
28
29
|
this.storedQueriesService = storedQueriesService;
|
|
29
30
|
this.translate = translate;
|
|
30
31
|
this.userService = userService;
|
|
31
32
|
this.system = system;
|
|
32
33
|
this.searchService = searchService;
|
|
34
|
+
this.widgetsService = widgetsService;
|
|
33
35
|
this.widgetConfigChange = new EventEmitter();
|
|
34
36
|
this.widgetConfigStateChange = new EventEmitter();
|
|
35
37
|
this.setupForm = this.fb.group({
|
|
@@ -91,13 +93,14 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
91
93
|
}
|
|
92
94
|
setWidgetConfig() {
|
|
93
95
|
if (this.setupForm.valid && this.storedQueries) {
|
|
94
|
-
|
|
96
|
+
const storedQueryValue = this.widgetsService.getStoredQueryValue(this.setupForm);
|
|
97
|
+
this.storedQuery = this.storedQueries.find((sq) => sq.name === storedQueryValue);
|
|
95
98
|
this.widgetConfig = {
|
|
96
99
|
storedQuery: this.storedQuery?.id,
|
|
97
100
|
formValue: this.setupForm.value,
|
|
98
101
|
aggregationType: 'DATETIME'
|
|
99
102
|
};
|
|
100
|
-
if (
|
|
103
|
+
if (storedQueryValue !== this.selectedSavedSearchName) {
|
|
101
104
|
if (this.storedQuery) {
|
|
102
105
|
setTimeout(() => {
|
|
103
106
|
if (this.selectedSavedSearchName !== '') {
|
|
@@ -106,7 +109,7 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
106
109
|
});
|
|
107
110
|
}
|
|
108
111
|
this.updateField();
|
|
109
|
-
this.selectedSavedSearchName =
|
|
112
|
+
this.selectedSavedSearchName = storedQueryValue;
|
|
110
113
|
this.isDateTimeType = this.widgetConfig?.formValue.aggregation === 'sysobject.created' || this.widgetConfig?.aggregationType === 'DATETIME';
|
|
111
114
|
this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
|
|
112
115
|
}, 100);
|
|
@@ -387,7 +390,7 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
387
390
|
...this.getInitialFormValues(),
|
|
388
391
|
});
|
|
389
392
|
if (this.storedQuery) {
|
|
390
|
-
this.selectedSavedSearchName = this.
|
|
393
|
+
this.selectedSavedSearchName = this.widgetsService.getStoredQueryValue(this.setupForm);
|
|
391
394
|
this.setupForm.patchValue({
|
|
392
395
|
aggregation: this._widgetConfig?.formValue?.aggregation || 'sysobject.created',
|
|
393
396
|
attributMetric: this._widgetConfig?.formValue?.attributMetric || '',
|
|
@@ -420,8 +423,8 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
420
423
|
});
|
|
421
424
|
}
|
|
422
425
|
}
|
|
423
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i2.SystemService }, { token: i2.SearchService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
424
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ChartsSetupComponent, selector: "eo-charts-setup", inputs: { widgetConfig: "widgetConfig" }, outputs: { widgetConfigChange: "widgetConfigChange", widgetConfigStateChange: "widgetConfigStateChange" }, viewQueries: [{ propertyName: "aggregationCodesystem", first: true, predicate: ["aggregationCodesystem"], descendants: true }], ngImport: i0, template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('chartType').invalid\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('chartType').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n\n @if (storedQueriesPicker?.codesystem?.entries) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.label.storedquery' | translate\"\n [description]=\"'eo.workspace.widget.stored.queries.description'\"\n [invalid]=\"setupForm.dirty && setupForm.get('storedQuery').invalid\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('storedQuery').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n @if (aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('aggregation').invalid\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('aggregation').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n <eo-form-input [required]=\"true\"\n [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.partialValue' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('size').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate [translateParams]=\"{min: 3, max: 100}\">\n @if (setupForm.get('size').hasError('required')) {\n eo.form.property.required\n } @else if (setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')) {\n eo.form.property.string.error.classification.partialValue\n }\n </div>\n }\n\n @if (isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.histogram' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('histogramType').invalid\"\n [description]=\" setupForm.get('histogramType').value ? '': 'eo.workspace.widget.histogram.description'\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.aggregation && !isDateTimeType && !isNumberType) {\n @if (widgetConfig.formValue.chartType === 'bar') {\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.sortRevert'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"sortRevert\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n }\n @if (widgetConfig.formValue.chartType === 'bar' || widgetConfig.formValue.chartType === 'pie' || widgetConfig.formValue.chartType === 'ring' && !widgetConfig?.formValue?.attributMetric && !isNumberType) {\n <eo-form-input class=\"threshold-success\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.minDocCount' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"minDocCount\">\n </eo-number>\n </eo-form-input>\n }\n }\n\n @if (isNumberType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.interval' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('interval').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('startingpoint').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.chartType === 'bar' && attributMetricPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid && !isNumberType && !isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.attributMetric' | translate\">\n <eo-codesystem formControlName=\"attributMetric\" [pickerTitle]=\"attributMetricPicker.title\"\n [codesystem]=\"attributMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n @if (widgetConfig?.formValue?.chartType === 'bar' && widgetConfig?.formValue?.attributMetric) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.chartMetric' | translate\">\n <eo-codesystem formControlName=\"metric\" [pickerTitle]=\"chartMetricPicker.title\"\n [codesystem]=\"chartMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n }\n\n @if (widgetConfig?.formValue?.chartType) {\n <div class=\"propertyPicker\">\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.title' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('title').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"title\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('title').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n @if (widgetConfig?.formValue?.chartType !== 'pie' && widgetConfig?.formValue?.chartType !== 'donut') {\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.xAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('xAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"xAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('xAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.yAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('yAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"yAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('yAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n }\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.value.legend'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"showAbsolutValue\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n </div>\n }\n </form>\n</div>\n\n@if (setupForm.valid) {\n <div class=\"preview\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n </div>\n} @else {\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n}\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color);overflow-y:auto}:host .setup eo-form-input{display:block;margin-top:var(--app-pane-padding)}:host .setup .propertyPicker{display:block;padding-top:40px}:host .setup .err-msg{color:var(--color-error)}:host .preview{grid-area:preview;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i5.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i6.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i7.NumberComponent, selector: "eo-number", inputs: ["scale", "precision", "grouping", "pattern", "readonly"] }, { kind: "component", type: i8.CheckboxComponent, selector: "eo-checkbox", inputs: ["required", "tristate", "readonly"] }, { kind: "component", type: i9.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i10.ChartsWidgetComponent, selector: "eo-charts-widget", inputs: ["editMode", "widgetConfig"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
426
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i2.SystemService }, { token: i2.SearchService }, { token: i3.WidgetsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
427
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ChartsSetupComponent, selector: "eo-charts-setup", inputs: { widgetConfig: "widgetConfig" }, outputs: { widgetConfigChange: "widgetConfigChange", widgetConfigStateChange: "widgetConfigStateChange" }, viewQueries: [{ propertyName: "aggregationCodesystem", first: true, predicate: ["aggregationCodesystem"], descendants: true }], ngImport: i0, template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('chartType').invalid\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('chartType').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n\n @if (storedQueriesPicker?.codesystem?.entries) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.label.storedquery' | translate\"\n [description]=\"'eo.workspace.widget.stored.queries.description'\"\n [invalid]=\"setupForm.dirty && setupForm.get('storedQuery').invalid\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('storedQuery').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n @if (aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('aggregation').invalid\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('aggregation').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n <eo-form-input [required]=\"true\"\n [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.partialValue' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('size').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate [translateParams]=\"{min: 3, max: 100}\">\n @if (setupForm.get('size').hasError('required')) {\n eo.form.property.required\n } @else if (setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')) {\n eo.form.property.string.error.classification.partialValue\n }\n </div>\n }\n\n @if (isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.histogram' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('histogramType').invalid\"\n [description]=\" setupForm.get('histogramType').value ? '': 'eo.workspace.widget.histogram.description'\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.aggregation && !isDateTimeType && !isNumberType) {\n @if (widgetConfig.formValue.chartType === 'bar') {\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.sortRevert'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"sortRevert\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n }\n @if (widgetConfig.formValue.chartType === 'bar' || widgetConfig.formValue.chartType === 'pie' || widgetConfig.formValue.chartType === 'ring' && !widgetConfig?.formValue?.attributMetric && !isNumberType) {\n <eo-form-input class=\"threshold-success\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.minDocCount' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"minDocCount\">\n </eo-number>\n </eo-form-input>\n }\n }\n\n @if (isNumberType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.interval' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('interval').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('startingpoint').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.chartType === 'bar' && attributMetricPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid && !isNumberType && !isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.attributMetric' | translate\">\n <eo-codesystem formControlName=\"attributMetric\" [pickerTitle]=\"attributMetricPicker.title\"\n [codesystem]=\"attributMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n @if (widgetConfig?.formValue?.chartType === 'bar' && widgetConfig?.formValue?.attributMetric) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.chartMetric' | translate\">\n <eo-codesystem formControlName=\"metric\" [pickerTitle]=\"chartMetricPicker.title\"\n [codesystem]=\"chartMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n }\n\n @if (widgetConfig?.formValue?.chartType) {\n <div class=\"propertyPicker\">\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.title' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('title').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"title\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('title').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n @if (widgetConfig?.formValue?.chartType !== 'pie' && widgetConfig?.formValue?.chartType !== 'donut') {\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.xAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('xAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"xAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('xAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.yAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('yAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"yAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('yAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n }\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.value.legend'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"showAbsolutValue\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n </div>\n }\n </form>\n</div>\n\n@if (setupForm.valid) {\n <div class=\"preview\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n </div>\n} @else {\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n}\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color);overflow-y:auto}:host .setup eo-form-input{display:block;margin-top:var(--app-pane-padding)}:host .setup .propertyPicker{display:block;padding-top:40px}:host .setup .err-msg{color:var(--color-error)}:host .preview{grid-area:preview;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i6.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i7.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i8.NumberComponent, selector: "eo-number", inputs: ["scale", "precision", "grouping", "pattern", "readonly"] }, { kind: "component", type: i9.CheckboxComponent, selector: "eo-checkbox", inputs: ["required", "tristate", "readonly"] }, { kind: "component", type: i10.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i11.ChartsWidgetComponent, selector: "eo-charts-widget", inputs: ["editMode", "widgetConfig"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
425
428
|
};
|
|
426
429
|
ChartsSetupComponent = __decorate([
|
|
427
430
|
UntilDestroy()
|
|
@@ -430,7 +433,7 @@ export { ChartsSetupComponent };
|
|
|
430
433
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChartsSetupComponent, decorators: [{
|
|
431
434
|
type: Component,
|
|
432
435
|
args: [{ selector: 'eo-charts-setup', template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('chartType').invalid\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('chartType').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n\n @if (storedQueriesPicker?.codesystem?.entries) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.label.storedquery' | translate\"\n [description]=\"'eo.workspace.widget.stored.queries.description'\"\n [invalid]=\"setupForm.dirty && setupForm.get('storedQuery').invalid\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('storedQuery').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n @if (aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('aggregation').invalid\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('aggregation').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n <eo-form-input [required]=\"true\"\n [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.partialValue' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('size').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate [translateParams]=\"{min: 3, max: 100}\">\n @if (setupForm.get('size').hasError('required')) {\n eo.form.property.required\n } @else if (setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')) {\n eo.form.property.string.error.classification.partialValue\n }\n </div>\n }\n\n @if (isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.histogram' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('histogramType').invalid\"\n [description]=\" setupForm.get('histogramType').value ? '': 'eo.workspace.widget.histogram.description'\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.aggregation && !isDateTimeType && !isNumberType) {\n @if (widgetConfig.formValue.chartType === 'bar') {\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.sortRevert'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"sortRevert\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n }\n @if (widgetConfig.formValue.chartType === 'bar' || widgetConfig.formValue.chartType === 'pie' || widgetConfig.formValue.chartType === 'ring' && !widgetConfig?.formValue?.attributMetric && !isNumberType) {\n <eo-form-input class=\"threshold-success\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.minDocCount' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"minDocCount\">\n </eo-number>\n </eo-form-input>\n }\n }\n\n @if (isNumberType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.interval' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('interval').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('startingpoint').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.chartType === 'bar' && attributMetricPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid && !isNumberType && !isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.attributMetric' | translate\">\n <eo-codesystem formControlName=\"attributMetric\" [pickerTitle]=\"attributMetricPicker.title\"\n [codesystem]=\"attributMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n @if (widgetConfig?.formValue?.chartType === 'bar' && widgetConfig?.formValue?.attributMetric) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.chartMetric' | translate\">\n <eo-codesystem formControlName=\"metric\" [pickerTitle]=\"chartMetricPicker.title\"\n [codesystem]=\"chartMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n }\n\n @if (widgetConfig?.formValue?.chartType) {\n <div class=\"propertyPicker\">\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.title' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('title').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"title\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('title').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n @if (widgetConfig?.formValue?.chartType !== 'pie' && widgetConfig?.formValue?.chartType !== 'donut') {\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.xAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('xAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"xAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('xAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.yAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('yAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"yAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('yAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n }\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.value.legend'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"showAbsolutValue\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n </div>\n }\n </form>\n</div>\n\n@if (setupForm.valid) {\n <div class=\"preview\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n </div>\n} @else {\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n}\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color);overflow-y:auto}:host .setup eo-form-input{display:block;margin-top:var(--app-pane-padding)}:host .setup .propertyPicker{display:block;padding-top:40px}:host .setup .err-msg{color:var(--color-error)}:host .preview{grid-area:preview;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"] }]
|
|
433
|
-
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i2.SystemService }, { type: i2.SearchService }], propDecorators: { widgetConfigChange: [{
|
|
436
|
+
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i2.SystemService }, { type: i2.SearchService }, { type: i3.WidgetsService }], propDecorators: { widgetConfigChange: [{
|
|
434
437
|
type: Output
|
|
435
438
|
}], widgetConfigStateChange: [{
|
|
436
439
|
type: Output
|
|
@@ -440,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
440
443
|
}], widgetConfig: [{
|
|
441
444
|
type: Input
|
|
442
445
|
}] } });
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBMEQsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUE4RyxLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEosT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztBQVN2QyxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQWlFL0IsSUFBYSxZQUFZLENBQUMsRUFBVztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFDVSxFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsU0FBMkIsRUFDM0IsV0FBd0IsRUFDeEIsTUFBcUIsRUFD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QztnQkFDeEIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBcmVVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDRVQ2ZqQyx5c1JBa0tBOztBRG5KYSxvQkFBb0I7SUFOaEMsWUFBWSxFQUFFO0dBTUYsb0JBQW9CLENBc2VoQzs7MkZBdGVZLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7Mk9BTWpCLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBNEQ2QixxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUVyQixZQUFZO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJV2lkZ2V0Q29tcG9uZW50fSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcbmltcG9ydCB7SWNoYXJ0c30gZnJvbSAnLi4vaWNoYXJ0cyc7XG5pbXBvcnQge0Zvcm1Db250cm9sU3RhdHVzLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U2VhcmNoUXVlcnksIFNlYXJjaFNlcnZpY2UsIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLCBTdG9yZWRRdWVyeSwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlU2VydmljZSwgVXNlclNlcnZpY2UsIFV0aWxzfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtFTVBUWSwgZGVib3VuY2VUaW1lLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb2Rlc3lzdGVtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9lby1mcmFtZXdvcmsnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLWNoYXJ0cy1zZXR1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydHMtc2V0dXAuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydHNTZXR1cENvbXBvbmVudCBpbXBsZW1lbnRzIElXaWRnZXRDb21wb25lbnQsIE9uSW5pdCB7XG4gIHByaXZhdGUgX3dpZGdldENvbmZpZzogSWNoYXJ0cztcbiAgQE91dHB1dCgpIHdpZGdldENvbmZpZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SWNoYXJ0cz4oKTtcbiAgQE91dHB1dCgpIHdpZGdldENvbmZpZ1N0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtQ29udHJvbFN0YXR1cz4oKTtcblxuICBzdG9yZWRRdWVyaWVzOiBTdG9yZWRRdWVyeVtdO1xuICBwcml2YXRlIF9xdWVyeTogU2VhcmNoUXVlcnk7XG4gIHNldHVwRm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHN0b3JlZFF1ZXJ5OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgY2hhcnRUeXBlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgc2l6ZTogWzEwLCBbVmFsaWRhdG9ycy5tYXgoMTAwKSwgVmFsaWRhdG9ycy5taW4oMyksIFZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICBhZ2dyZWdhdGlvbjogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIGhpc3RvZ3JhbVR5cGU6IFtudWxsXSxcbiAgICBhdHRyaWJ1dE1ldHJpYzogW251bGxdLFxuICAgIG1ldHJpYzogW251bGxdLFxuICAgIHNvcnRSZXZlcnQ6IFtmYWxzZV0sXG4gICAgc2hvd0Fic29sdXRWYWx1ZTogW2ZhbHNlXSxcbiAgICBpbnRlcnZhbDogW251bGxdLFxuICAgIHN0YXJ0aW5ncG9pbnQ6IFtudWxsXSxcbiAgICBtaW5Eb2NDb3VudDogWzFdLFxuICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICB4QXhlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICB5QXhlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICBtaW5WYWx1ZTogW251bGxdLFxuICAgIG1heFZhbHVlOiBbbnVsbF1cbiAgfSk7XG5cbiAgc3RvcmVkUXVlcmllc1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5sYWJlbC5zdG9yZWRxdWVyeScpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgYWdncmVnYXRpb25QaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5hZ2dyZWdhdGlvbkZpZWxkJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBjaGFydFR5cGVQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydFR5cGVGaWVsZCcpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgaGlzdG9ncmFtVHlwZVBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmhpc3RvZ3JhbScpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgYXR0cmlidXRNZXRyaWNQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5hdHRyaWJ1dE1ldHJpYycpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgY2hhcnRNZXRyaWNQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydE1ldHJpYycpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgaXNEYXRlVGltZVR5cGUgPSBmYWxzZTtcbiAgaXNOdW1iZXJUeXBlID0gZmFsc2U7XG4gIHNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lID0gJyc7XG4gIHNlbGVjdGVkQWdncmVnYXRpb25OYW1lID0gJyc7XG4gIHN0b3JlZFF1ZXJ5OiBTdG9yZWRRdWVyeTtcblxuICBAVmlld0NoaWxkKCdhZ2dyZWdhdGlvbkNvZGVzeXN0ZW0nKSBhZ2dyZWdhdGlvbkNvZGVzeXN0ZW06IENvZGVzeXN0ZW1Db21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2V0IHdpZGdldENvbmZpZyh3YzogSWNoYXJ0cykge1xuICAgIHRoaXMuX3dpZGdldENvbmZpZyA9IHdjO1xuICAgIHRoaXMudXBkYXRlRmllbGQoKTtcbiAgfVxuXG4gIGdldCB3aWRnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldENvbmZpZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UpIHtcbiAgICB0aGlzLnNldHVwRm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuc2V0V2lkZ2V0Q29uZmlnKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXR1cEZvcm0uc3RhdHVzQ2hhbmdlcy5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnU3RhdGVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9KTtcbiAgICB0aGlzLmdldFN0b3JlZFF1ZXJ5cygpO1xuICAgIHRoaXMuZ2V0Q2hhcnRGaWVsZCgpO1xuICAgIHRoaXMuZ2V0TWV0cmljQ29kZXN5c3RlbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWRnZXRDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuc2V0dXBGb3JtLnZhbGlkICYmIHRoaXMuc3RvcmVkUXVlcmllcykge1xuICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcmllcy5maW5kKChzcSkgPT4gc3EubmFtZSA9PT0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlKTtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnID0ge1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeT8uaWQsXG4gICAgICAgIGZvcm1WYWx1ZTogdGhpcy5zZXR1cEZvcm0udmFsdWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogJ0RBVEVUSU1FJ1xuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnNldHVwRm9ybS5nZXQoJ3N0b3JlZFF1ZXJ5JykudmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lID0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pc0RhdGVUaW1lVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWUuYWdncmVnYXRpb24gPT09ICdzeXNvYmplY3QuY3JlYXRlZCcgfHwgdGhpcy53aWRnZXRDb25maWc/LmFnZ3JlZ2F0aW9uVHlwZSA9PT0gJ0RBVEVUSU1FJztcbiAgICAgICAgICAgIHRoaXMuaXNOdW1iZXJUeXBlID0gdGhpcy53aWRnZXRDb25maWc/LmFnZ3JlZ2F0aW9uVHlwZSA9PT0gJ05VTUJFUic7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuYWdncmVnYXRpb25UeXBlID0gdGhpcy5hZ2dyZWdhdGlvbkNvZGVzeXN0ZW0/LnNlbGVjdGVkTm9kZXM/LmRhdGE/LnR5cGU7XG4gICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnREFURVRJTUUnO1xuICAgICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgICAgICBpZiAodGhpcy5zZXR1cEZvcm0uZ2V0KCdhZ2dyZWdhdGlvbicpLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkQWdncmVnYXRpb25OYW1lKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFnZ3JlZ2F0aW9uTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnYWdncmVnYXRpb24nKS52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy5pc051bWJlclR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RhcnRFbmR2YWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy53aWRnZXRDb25maWdDaGFuZ2UuZW1pdCh0aGlzLl93aWRnZXRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXJ0RW5kdmFsdWUoKSB7XG4gICAgbGV0IGZpZWxkID0gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmFnZ3JlZ2F0aW9uO1xuICAgIHRoaXMuX3F1ZXJ5ID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmJ1aWxkUXVlcnkoc3RydWN0dXJlZENsb25lKHRoaXMuc3RvcmVkUXVlcnkpKTtcbiAgICBkZWxldGUgdGhpcy5fcXVlcnkubmFtZTtcbiAgICBjb25zdCBxdWVyeU1pbk1heCA9IHtcbiAgICAgIGFnZ3M6IHtcbiAgICAgICAgW2ZpZWxkLnJlcGxhY2UoJ3N5c29iamVjdC4nLCAnJyldOiB7XG4gICAgICAgICAgbWV0cmljczogWydtaW4nLCAnbWF4J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuX3F1ZXJ5LmdldFF1ZXJ5SnNvbigpXG4gICAgfTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5TWluTWF4LCB0cnVlKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgbGV0IG1pbiA9IHJlcy5hZ2dyZWdhdGlvbnNbJ21pbiMnICsgZmllbGQucmVwbGFjZSgnc3lzb2JqZWN0LicsICcnKSArICdfbWluJ10/LnZhbHVlO1xuICAgICAgbGV0IG1heCA9IHJlcy5hZ2dyZWdhdGlvbnNbJ21heCMnICsgZmllbGQucmVwbGFjZSgnc3lzb2JqZWN0LicsICcnKSArICdfbWF4J10/LnZhbHVlO1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIG1pblZhbHVlOiBtaW4sXG4gICAgICAgIG1heFZhbHVlOiBtYXgsXG4gICAgICB9KTtcbiAgICAgIGxldCBzaXplID0gMTA7XG4gICAgICBtaW4gPSBNYXRoLmZsb29yKG1pbik7XG4gICAgICBtYXggPSBNYXRoLmNlaWwobWF4KTtcbiAgICAgIGxldCBpbnRlcnZhbCA9IChtYXggLSBtaW4pIC8gc2l6ZTtcbiAgICAgIGxldCBpbnRlcnZhbFJvdW5kID0gMDtcbiAgICAgIGlmIChpbnRlcnZhbCA8IDEwKSB7XG4gICAgICAgIGludGVydmFsUm91bmQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlnaXRzID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKGludGVydmFsKSkgKyAxO1xuICAgICAgICBjb25zdCBkaXZpc29yID0gTWF0aC5wb3coMTAsIGRpZ2l0cyAtIDEpO1xuICAgICAgICBpbnRlcnZhbFJvdW5kID0gTWF0aC5jZWlsKGludGVydmFsIC8gZGl2aXNvcikgKiBkaXZpc29yO1xuICAgICAgfVxuICAgICAgbWluID0gbWluICYmIE1hdGgucm91bmQoTWF0aC5mbG9vcihtaW4gLyBpbnRlcnZhbFJvdW5kKSAqIGludGVydmFsUm91bmQpO1xuICAgICAgbWF4ID0gbWF4ICYmIE1hdGgucm91bmQoTWF0aC5jZWlsKG1heCAvIGludGVydmFsUm91bmQpICogaW50ZXJ2YWxSb3VuZCk7XG4gICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgaW50ZXJ2YWw6IGludGVydmFsUm91bmQsXG4gICAgICAgIHN0YXJ0aW5ncG9pbnQ6IG1pbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RvcmVkUXVlcnlzKCkge1xuICAgIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2VcbiAgICAgIC5mZXRjaFN0b3JlZFF1ZXJpZXMoKS5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICkuc3Vic2NyaWJlKHN0b3JlZFF1ZXJpZXMgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJpZXMgPSBzdG9yZWRRdWVyaWVzO1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJpZXNQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgICBlbnRyaWVzOiB0aGlzLnN0b3JlZFF1ZXJpZXMubWFwKHN0b3JlZFF1ZXJ5ID0+ICh7XG4gICAgICAgICAgICBpZDogc3RvcmVkUXVlcnkuaWQsXG4gICAgICAgICAgICBsYWJlbDogc3RvcmVkUXVlcnkubmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogc3RvcmVkUXVlcnkubmFtZSxcbiAgICAgICAgICAgIGRhdGE6IHN0b3JlZFF1ZXJ5Lm5hbWVcbiAgICAgICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RvcmVkUXVlcnkoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlLmdldFN0b3JlZFF1ZXJ5KGlkKS5waXBlKFxuICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXG4gICAgICB0YXAoc3RvcmVkUXVlcnkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5ID0gc3RvcmVkUXVlcnk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVGaWVsZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCB0eXBlID0gdGhpcy5zdG9yZWRRdWVyeT8udHlwZXM/Lmxlbmd0aCA9PT0gMSA/IHRoaXMuc3RvcmVkUXVlcnk/LnR5cGVzWzBdPy5xbmFtZSA6ICdzeXNkb2N1bWVudCc7XG4gICAgICBsZXQgY29udGV4dFR5cGUgPSB0aGlzLnN0b3JlZFF1ZXJ5Py5jb250ZXh0Rm9sZGVyVHlwZXNbMF0/LnFuYW1lO1xuICAgICAgdGhpcy5nZXRIaXN0b2dyYW1GaWVsZCgpO1xuICAgICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKHR5cGUsIGNvbnRleHRUeXBlKTtcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRNZXRyaWNDb2Rlc3lzdGVtKHR5cGUpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGlvbkZpZWxkKHR5cGUsIGNvbnRleHRUeXBlPykge1xuICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0RmllbGREZWZpbml0aW9uKHR5cGUsIGNvbnRleHRUeXBlKS5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZGVmaW5pdGlvbiA9PiB7XG4gICAgICBsZXQgZXhjbHVkZSA9IG5ldyBTZXQoWydmaWxlbmFtZScsICdtaW1ldHlwZScsICdtb2RpZmllcnRpdGxlJywgJ3ZlcnNpb24nLCAnY3JlYXRvcnRpdGxlJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10pO1xuICAgICAgaWYgKHR5cGUgIT09ICdzeXNkb2N1bWVudCcpIHtcbiAgICAgICAgZXhjbHVkZS5hZGQoJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZEZpZWxkcyA9IGRlZmluaXRpb24uZWxlbWVudHMuZmlsdGVyKGZpZWxkID0+ICFleGNsdWRlLmhhcyhmaWVsZC5oaXRuYW1lKSk7XG4gICAgICBpZiAodGhpcy53aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlID09PSAnbGluZUN1cnZlJyB8fCB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdsaW5lU3RyYWlnaHQnKSB7XG4gICAgICAgIGZpbHRlcmVkRmllbGRzID0gZmlsdGVyZWRGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnR5cGUgPT09ICdEQVRFVElNRScgfHwgZmllbGQudHlwZSA9PT0gJ05VTUJFUicpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZ2dyZWdhdGlvblBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICBlbnRyaWVzOiBmaWx0ZXJlZEZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgIGxldCBhZGRpdGlvbmFsTGFiZWwgPSBmaWVsZC5zZWxlY3RlZGZvcmVucmljaG1lbnQgPyAnIConIDogJyc7XG4gICAgICAgICAgbGV0IGxhYmVsID0gZmlsdGVyZWRGaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5sYWJlbCA9PT0gZmllbGQubGFiZWwpLmxlbmd0aCA+IDFcbiAgICAgICAgICAgID8gZmllbGQubGFiZWwgKyAnICgnICsgdGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZShmaWVsZC5xbmFtZS5zcGxpdCgnLicpWzBdKS5sYWJlbCArICcpJyArIGFkZGl0aW9uYWxMYWJlbFxuICAgICAgICAgICAgOiBmaWVsZC5sYWJlbCArIGFkZGl0aW9uYWxMYWJlbDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGZpZWxkLnFuYW1lLFxuICAgICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiBsYWJlbCxcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLnFuYW1lLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1ldHJpY0NvZGVzeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnRNZXRyaWNQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbWluJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1pbicpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5taW4nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ21pbicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2F2ZycsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5hdmcnKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMuYXZnJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdhdmcnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdtYXgnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWF4J1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1heCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbWF4JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnc3VtJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLnN1bSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5zdW0nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ3N1bScsXG4gICAgICAgIH1cbiAgICAgIF0ubWFwKChyZXMpID0+ICh7XG4gICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogcmVzLmRlZmF1bHRyZXByZXNlbnRhdGlvbixcbiAgICAgICAgZGF0YTogcmVzLnZhbHVlXG4gICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgfTtcbiAgfVxuXG4gIGdldENoYXJ0RmllbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnRUeXBlUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICBlbnRyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2JhcicsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuYmFyJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5iYXInXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2JhcicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ3BpZScsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUucGllJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5waWUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ3BpZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2RvbnV0JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5kb251dCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuZG9udXQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2RvbnV0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGluZVN0cmFpZ2h0JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lU3RyYWlnaHQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVTdHJhaWdodCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbGluZVN0cmFpZ2h0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGluZUN1cnZlJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lQ3VydmUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVDdXJ2ZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbGluZUN1cnZlJyxcbiAgICAgICAgfVxuICAgICAgXS5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0SGlzdG9ncmFtRmllbGQoKSB7XG4gICAgbGV0IGVudHJpZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGFpbHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdkYWlseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnd2Vla2x5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ud2Vla2x5J1xuICAgICAgICApLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLndlZWtseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd3ZWVrbHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ21vbnRobHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5tb250aGx5JyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ubW9udGhseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdtb250aGx5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd5ZWFybHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAneWVhcmx5J1xuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogZW50cmllcy5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QXR0cmlidXRNZXRyaWNDb2Rlc3lzdGVtKHR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRGaWVsZERlZmluaXRpb24odHlwZSkucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGUgPSBuZXcgU2V0KFsnZmlsZW5hbWUnLCAnbWltZXR5cGUnLCAnbW9kaWZpZXJ0aXRsZScsICd2ZXJzaW9uJywgJ2NyZWF0b3J0aXRsZScsICd0aXRsZScsICdkZXNjcmlwdGlvbiddKTtcbiAgICAgIGlmICh0eXBlICE9PSAnc3lzZG9jdW1lbnQnKSB7XG4gICAgICAgIGV4Y2x1ZGUuYWRkKCd0eXBlJyk7XG4gICAgICB9XG4gICAgICBsZXQgZmlsdGVyZWRGaWVsZHMgPSBkZWZpbml0aW9uLmVsZW1lbnRzLmZpbHRlcihmaWVsZCA9PiAhZXhjbHVkZS5oYXMoZmllbGQuaGl0bmFtZSkpO1xuICAgICAgZmlsdGVyZWRGaWVsZHMgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gJ05VTUJFUicpO1xuICAgICAgdGhpcy5hdHRyaWJ1dE1ldHJpY1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICBlbnRyaWVzOiBmaWx0ZXJlZEZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubGFiZWwgPT09IGZpZWxkLmxhYmVsKS5sZW5ndGggPiAxXG4gICAgICAgICAgICA/IGZpZWxkLmxhYmVsICsgJyAoJyArIHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUoZmllbGQucW5hbWUuc3BsaXQoJy4nKVswXSkubGFiZWwgKyAnKSdcbiAgICAgICAgICAgIDogZmllbGQubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogbGFiZWwsXG4gICAgICAgICAgICBkYXRhOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxGb3JtVmFsdWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGFydFR5cGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgfHwgJ3BpZScsXG4gICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSB8fCAxMCxcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYWdncmVnYXRpb24gfHwgJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgIGhpc3RvZ3JhbVR5cGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlIHx8ICdtb250aGx5JyxcbiAgICAgIGF0dHJpYnV0TWV0cmljOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgfHwgJycsXG4gICAgICBtZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5tZXRyaWMgfHwgJ3N1bScsXG4gICAgICBzb3J0UmV2ZXJ0OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc29ydFJldmVydCB8fCAnJyxcbiAgICAgIHNob3dBYnNvbHV0VmFsdWU6ICB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2hvd0Fic29sdXRWYWx1ZSB8fCBmYWxzZSxcbiAgICAgIGludGVydmFsOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaW50ZXJ2YWwgfHwgMTAwMCxcbiAgICAgIHN0YXJ0aW5ncG9pbnQ6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5zdGFydGluZ3BvaW50IHx8IDAsXG4gICAgICBtaW5fZG9jX2NvdW50OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWluRG9jQ291bnQgfHwgMSxcbiAgICAgIHRpdGxlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8udGl0bGUgfHwgJycsXG4gICAgICB4QXhlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ueEF4ZSB8fCAnJyxcbiAgICAgIHlBeGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy55QXhlIHx8ICcnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVR5cGVGbGFncygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlZFF1ZXJ5U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnkodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeSA/IHRoaXMuc3RvcmVkUXVlcnkubmFtZSA6ICcnLFxuICAgICAgICAuLi50aGlzLmdldEluaXRpYWxGb3JtVmFsdWVzKCksXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUgPSB0aGlzLnNldHVwRm9ybS5nZXQoJ3N0b3JlZFF1ZXJ5JykudmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYWdncmVnYXRpb24gfHwgJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICBhdHRyaWJ1dE1ldHJpYzogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmF0dHJpYnV0TWV0cmljIHx8ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVUeXBlRmxhZ3MoKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuXG4gICAgICB9XG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5RXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBxdWVyeUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICB0aGlzLmlzRGF0ZVRpbWVUeXBlID0gZmFsc2U7XG4gICAgdGhpcy5pc051bWJlclR5cGUgPSBmYWxzZTtcbiAgICB0aGlzLl93aWRnZXRDb25maWcuYWdncmVnYXRpb25UeXBlID0gbnVsbDtcbiAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAuLi50aGlzLmdldEluaXRpYWxGb3JtVmFsdWVzKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkge1xuICAgICAgdGhpcy5zdG9yZWRRdWVyeVN1YnNjcmlwdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgLi4udGhpcy5nZXRJbml0aWFsRm9ybVZhbHVlcygpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2V0dXBcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZXR1cEZvcm1cIj5cbiAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0VHlwZUZpZWxkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2NoYXJ0VHlwZScpLmludmFsaWRcIj5cbiAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImNoYXJ0VHlwZVwiIFtwaWNrZXJUaXRsZV09XCJjaGFydFR5cGVQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiY2hhcnRUeXBlUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgPC9lby1mb3JtLWlucHV0PlxuICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2NoYXJ0VHlwZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZFxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChzdG9yZWRRdWVyaWVzUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmxhYmVsLnN0b3JlZHF1ZXJ5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuc3RvcmVkLnF1ZXJpZXMuZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVkUXVlcnlcIiBbcGlja2VyVGl0bGVdPVwic3RvcmVkUXVlcmllc1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cInN0b3JlZFF1ZXJpZXNQaWNrZXIuY29kZXN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuc3RvcmVkLnF1ZXJpZXMubGlzdC5ub3RBdmFpbGFibGUnXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkXG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoYWdncmVnYXRpb25QaWNrZXI/LmNvZGVzeXN0ZW0/LmVudHJpZXMgJiYgdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbGlkKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuYWdncmVnYXRpb25GaWVsZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSAjYWdncmVnYXRpb25Db2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCIgW3BpY2tlclRpdGxlXT1cImFnZ3JlZ2F0aW9uUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG5cbiAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5wYXJ0aWFsVmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3NpemUnKS5pbnZhbGlkXCI+XG4gICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwic2l6ZVwiPjwvZW8tbnVtYmVyPlxuICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3NpemUnKS5pbnZhbGlkKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInttaW46IDMsIG1heDogMTAwfVwiPlxuICAgICAgICBAaWYgKHNldHVwRm9ybS5nZXQoJ3NpemUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgICAgfSBAZWxzZSBpZiAoc2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdtYXgnKSB8fCBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ21pbicpKSB7XG4gICAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5zdHJpbmcuZXJyb3IuY2xhc3NpZmljYXRpb24ucGFydGlhbFZhbHVlXG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaXNEYXRlVGltZVR5cGUpIHtcbiAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnaGlzdG9ncmFtVHlwZScpLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIiBzZXR1cEZvcm0uZ2V0KCdoaXN0b2dyYW1UeXBlJykudmFsdWUgPyAnJzogJ2VvLndvcmtzcGFjZS53aWRnZXQuaGlzdG9ncmFtLmRlc2NyaXB0aW9uJ1wiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJoaXN0b2dyYW1UeXBlXCIgW3BpY2tlclRpdGxlXT1cImhpc3RvZ3JhbVR5cGVQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgfVxuICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmFnZ3JlZ2F0aW9uICYmICFpc0RhdGVUaW1lVHlwZSAmJiAhaXNOdW1iZXJUeXBlKSB7XG4gICAgICBAaWYgKHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAnYmFyJykge1xuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cImxhYmVsIGNoZWNrYm94XCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuc29ydFJldmVydCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxlby1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzb3J0UmV2ZXJ0XCIgW3RyaXN0YXRlXT1cImZhbHNlXCI+PC9lby1jaGVja2JveD5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgfVxuICAgICAgQGlmICh3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ2JhcicgfHwgd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5jaGFydFR5cGUgPT09ICdwaWUnIHx8IHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAncmluZycgJiYgIXdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hdHRyaWJ1dE1ldHJpYyAmJiAhaXNOdW1iZXJUeXBlKSB7XG4gICAgICAgIDxlby1mb3JtLWlucHV0IGNsYXNzPVwidGhyZXNob2xkLXN1Y2Nlc3NcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwubWluRG9jQ291bnQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cIm1pbkRvY0NvdW50XCI+XG4gICAgICAgICAgPC9lby1udW1iZXI+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKGlzTnVtYmVyVHlwZSkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmludGVydmFsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnaW50ZXJ2YWwnKS5pbnZhbGlkXCI+XG4gICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJpbnRlcnZhbFwiPjwvZW8tbnVtYmVyPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuc3RhcnRpbmdwb2ludCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3N0YXJ0aW5ncG9pbnQnKS5pbnZhbGlkXCI+XG4gICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydGluZ3BvaW50XCI+PC9lby1udW1iZXI+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgfVxuICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2JhcicgJiYgYXR0cmlidXRNZXRyaWNQaWNrZXI/LmNvZGVzeXN0ZW0/LmVudHJpZXMgJiYgdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbGlkICYmICFpc051bWJlclR5cGUgJiYgIWlzRGF0ZVRpbWVUeXBlKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuYXR0cmlidXRNZXRyaWMnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImF0dHJpYnV0TWV0cmljXCIgW3BpY2tlclRpdGxlXT1cImF0dHJpYnV0TWV0cmljUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiYXR0cmlidXRNZXRyaWNQaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgQGlmICh3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlID09PSAnYmFyJyAmJiB3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMpIHtcbiAgICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0TWV0cmljJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cIm1ldHJpY1wiIFtwaWNrZXJUaXRsZV09XCJjaGFydE1ldHJpY1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiY2hhcnRNZXRyaWNQaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnR5UGlja2VyXCI+XG4gICAgICAgIDxlby1mb3JtLWlucHV0IHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd0aXRsZScpLmludmFsaWRcIj5cbiAgICAgICAgICA8ZW8tc3RyaW5nIGF1dG9jb21wbGV0ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiPjwvZW8tc3RyaW5nPlxuICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3RpdGxlJykuaW52YWxpZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgIT09ICdwaWUnICYmIHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgIT09ICdkb251dCcpIHtcbiAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMueEF4ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd4QXhlJykuaW52YWxpZFwiPlxuICAgICAgICAgICAgPGVvLXN0cmluZyBhdXRvY29tcGxldGU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwieEF4ZVwiPjwvZW8tc3RyaW5nPlxuICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd4QXhlJykuaW52YWxpZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDUwfVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5Lm1heGxlbmd0aDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMueUF4ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd5QXhlJykuaW52YWxpZFwiPlxuICAgICAgICAgICAgPGVvLXN0cmluZyBhdXRvY29tcGxldGU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwieUF4ZVwiPjwvZW8tc3RyaW5nPlxuICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd5QXhlJykuaW52YWxpZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDUwfVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5Lm1heGxlbmd0aDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cImxhYmVsIGNoZWNrYm94XCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwudmFsdWUubGVnZW5kJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxlby1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzaG93QWJzb2x1dFZhbHVlXCIgW3RyaXN0YXRlXT1cImZhbHNlXCI+PC9lby1jaGVja2JveD5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Zvcm0+XG48L2Rpdj5cblxuQGlmIChzZXR1cEZvcm0udmFsaWQpIHtcbiAgPGRpdiBjbGFzcz1cInByZXZpZXdcIj5cbiAgICA8ZW8tY2hhcnRzLXdpZGdldCBbd2lkZ2V0Q29uZmlnXT1cIndpZGdldENvbmZpZ1wiIFtlZGl0TW9kZV09XCJ0cnVlXCI+PC9lby1jaGFydHMtd2lkZ2V0PlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiZW1wdHlcIj5cbiAgICA8ZW8tZXJyb3ItbWVzc2FnZVxuICAgICAgW2VtcHR5U3RhdGVdPVwie2ljb246ICdpY19zYXZlZF9zZWFyY2guc3ZnJywgdGV4dDogJ2VvLndvcmtzcGFjZS53aWRnZXQuY29uZmlndXJhdGlvbi5ub3RPayd9XCI+PC9lby1lcnJvci1tZXNzYWdlPlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBMEQsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUE4RyxLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEosT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVdkMsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBb0I7SUFpRS9CLElBQWEsWUFBWSxDQUFDLEVBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQ1UsRUFBc0IsRUFDdEIsb0JBQTBDLEVBQzFDLFNBQTJCLEVBQzNCLFdBQXdCLEVBQ3hCLE1BQXFCLEVB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eEIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBdmVVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDRVQ2hCakMseXNSQWtLQTs7QURsSmEsb0JBQW9CO0lBTmhDLFlBQVksRUFBRTtHQU1GLG9CQUFvQixDQXdlaEM7OzJGQXhlWSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCO3dRQU1qQixrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQTRENkIscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFFckIsWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SVdpZGdldENvbXBvbmVudH0gZnJvbSAnQHl1dXZpcy93aWRnZXQtZ3JpZCc7XG5pbXBvcnQge0ljaGFydHN9IGZyb20gJy4uL2ljaGFydHMnO1xuaW1wb3J0IHtGb3JtQ29udHJvbFN0YXR1cywgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NlYXJjaFF1ZXJ5LCBTZWFyY2hTZXJ2aWNlLCBTdG9yZWRRdWVyaWVzU2VydmljZSwgU3RvcmVkUXVlcnksIFN5c3RlbVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RU1QVFksIGRlYm91bmNlVGltZSwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29kZXN5c3RlbUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrJztcbmltcG9ydCB7V2lkZ2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uL3dpZGdldHMuc2VydmljZSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tY2hhcnRzLXNldHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c1NldHVwQ29tcG9uZW50IGltcGxlbWVudHMgSVdpZGdldENvbXBvbmVudCwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfd2lkZ2V0Q29uZmlnOiBJY2hhcnRzO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJY2hhcnRzPigpO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnU3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Db250cm9sU3RhdHVzPigpO1xuXG4gIHN0b3JlZFF1ZXJpZXM6IFN0b3JlZFF1ZXJ5W107XG4gIHByaXZhdGUgX3F1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgc2V0dXBGb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgc3RvcmVkUXVlcnk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICBjaGFydFR5cGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICBzaXplOiBbMTAsIFtWYWxpZGF0b3JzLm1heCgxMDApLCBWYWxpZGF0b3JzLm1pbigzKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIGFnZ3JlZ2F0aW9uOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgaGlzdG9ncmFtVHlwZTogW251bGxdLFxuICAgIGF0dHJpYnV0TWV0cmljOiBbbnVsbF0sXG4gICAgbWV0cmljOiBbbnVsbF0sXG4gICAgc29ydFJldmVydDogW2ZhbHNlXSxcbiAgICBzaG93QWJzb2x1dFZhbHVlOiBbZmFsc2VdLFxuICAgIGludGVydmFsOiBbbnVsbF0sXG4gICAgc3RhcnRpbmdwb2ludDogW251bGxdLFxuICAgIG1pbkRvY0NvdW50OiBbMV0sXG4gICAgdGl0bGU6IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgIHhBeGU6IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgIHlBeGU6IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgIG1pblZhbHVlOiBbbnVsbF0sXG4gICAgbWF4VmFsdWU6IFtudWxsXVxuICB9KTtcblxuICBzdG9yZWRRdWVyaWVzUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmxhYmVsLnN0b3JlZHF1ZXJ5JyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhZ2dyZWdhdGlvblBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGNoYXJ0VHlwZVBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0VHlwZUZpZWxkJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBoaXN0b2dyYW1UeXBlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhdHRyaWJ1dE1ldHJpY1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmF0dHJpYnV0TWV0cmljJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBjaGFydE1ldHJpY1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0TWV0cmljJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBpc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICBpc051bWJlclR5cGUgPSBmYWxzZTtcbiAgc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUgPSAnJztcbiAgc2VsZWN0ZWRBZ2dyZWdhdGlvbk5hbWUgPSAnJztcbiAgc3RvcmVkUXVlcnk6IFN0b3JlZFF1ZXJ5O1xuXG4gIEBWaWV3Q2hpbGQoJ2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbScpIGFnZ3JlZ2F0aW9uQ29kZXN5c3RlbTogQ29kZXN5c3RlbUNvbXBvbmVudDtcblxuICBASW5wdXQoKSBzZXQgd2lkZ2V0Q29uZmlnKHdjOiBJY2hhcnRzKSB7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnID0gd2M7XG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICB9XG5cbiAgZ2V0IHdpZGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Q29uZmlnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldHNTZXJ2aWNlOiBXaWRnZXRzU2VydmljZSkge1xuICAgIHRoaXMuc2V0dXBGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5zZXRXaWRnZXRDb25maWcoKTtcbiAgICB9KTtcbiAgICB0aGlzLnNldHVwRm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgodikgPT4ge1xuICAgICAgdGhpcy53aWRnZXRDb25maWdTdGF0ZUNoYW5nZS5lbWl0KHYpO1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnlzKCk7XG4gICAgdGhpcy5nZXRDaGFydEZpZWxkKCk7XG4gICAgdGhpcy5nZXRNZXRyaWNDb2Rlc3lzdGVtKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFdpZGdldENvbmZpZygpIHtcbiAgICBpZiAodGhpcy5zZXR1cEZvcm0udmFsaWQgJiYgdGhpcy5zdG9yZWRRdWVyaWVzKSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWVyeVZhbHVlID0gdGhpcy53aWRnZXRzU2VydmljZS5nZXRTdG9yZWRRdWVyeVZhbHVlKHRoaXMuc2V0dXBGb3JtKTtcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJpZXMuZmluZCgoc3EpID0+IHNxLm5hbWUgPT09IHN0b3JlZFF1ZXJ5VmFsdWUpO1xuICAgICAgdGhpcy53aWRnZXRDb25maWcgPSB7XG4gICAgICAgIHN0b3JlZFF1ZXJ5OiB0aGlzLnN0b3JlZFF1ZXJ5Py5pZCxcbiAgICAgICAgZm9ybVZhbHVlOiB0aGlzLnNldHVwRm9ybS52YWx1ZSxcbiAgICAgICAgYWdncmVnYXRpb25UeXBlOiAnREFURVRJTUUnXG4gICAgICB9O1xuICAgICAgaWYgKHN0b3JlZFF1ZXJ5VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lID0gc3RvcmVkUXVlcnlWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IHRoaXMuYWdncmVnYXRpb25Db2Rlc3lzdGVtPy5zZWxlY3RlZE5vZGVzPy5kYXRhPy50eXBlO1xuICAgICAgICB0aGlzLmlzRGF0ZVRpbWVUeXBlID0gdGhpcy53aWRnZXRDb25maWc/LmFnZ3JlZ2F0aW9uVHlwZSA9PT0gJ0RBVEVUSU1FJztcbiAgICAgICAgdGhpcy5pc051bWJlclR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnTlVNQkVSJztcbiAgICAgICAgaWYgKHRoaXMuc2V0dXBGb3JtLmdldCgnYWdncmVnYXRpb24nKS52YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZEFnZ3JlZ2F0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZ2dyZWdhdGlvbk5hbWUgPSB0aGlzLnNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykudmFsdWU7XG4gICAgICAgICAgaWYgKHRoaXMuaXNOdW1iZXJUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFN0YXJ0RW5kdmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnQ2hhbmdlLmVtaXQodGhpcy5fd2lkZ2V0Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGFydEVuZHZhbHVlKCkge1xuICAgIGxldCBmaWVsZCA9IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hZ2dyZWdhdGlvbjtcbiAgICB0aGlzLl9xdWVyeSA9IHRoaXMuc2VhcmNoU2VydmljZS5idWlsZFF1ZXJ5KHN0cnVjdHVyZWRDbG9uZSh0aGlzLnN0b3JlZFF1ZXJ5KSk7XG4gICAgZGVsZXRlIHRoaXMuX3F1ZXJ5Lm5hbWU7XG4gICAgY29uc3QgcXVlcnlNaW5NYXggPSB7XG4gICAgICBhZ2dzOiB7XG4gICAgICAgIFtmaWVsZC5yZXBsYWNlKCdzeXNvYmplY3QuJywgJycpXToge1xuICAgICAgICAgIG1ldHJpY3M6IFsnbWluJywgJ21heCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAuLi50aGlzLl9xdWVyeS5nZXRRdWVyeUpzb24oKVxuICAgIH07XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmV4ZWN1dGVRdWVyeShxdWVyeU1pbk1heCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGxldCBtaW4gPSByZXMuYWdncmVnYXRpb25zWydtaW4jJyArIGZpZWxkLnJlcGxhY2UoJ3N5c29iamVjdC4nLCAnJykgKyAnX21pbiddPy52YWx1ZTtcbiAgICAgIGxldCBtYXggPSByZXMuYWdncmVnYXRpb25zWydtYXgjJyArIGZpZWxkLnJlcGxhY2UoJ3N5c29iamVjdC4nLCAnJykgKyAnX21heCddPy52YWx1ZTtcbiAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBtaW5WYWx1ZTogbWluLFxuICAgICAgICBtYXhWYWx1ZTogbWF4LFxuICAgICAgfSk7XG4gICAgICBsZXQgc2l6ZSA9IDEwO1xuICAgICAgbWluID0gTWF0aC5mbG9vcihtaW4pO1xuICAgICAgbWF4ID0gTWF0aC5jZWlsKG1heCk7XG4gICAgICBsZXQgaW50ZXJ2YWwgPSAobWF4IC0gbWluKSAvIHNpemU7XG4gICAgICBsZXQgaW50ZXJ2YWxSb3VuZCA9IDA7XG4gICAgICBpZiAoaW50ZXJ2YWwgPCAxMCkge1xuICAgICAgICBpbnRlcnZhbFJvdW5kID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0cyA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChpbnRlcnZhbCkpICsgMTtcbiAgICAgICAgY29uc3QgZGl2aXNvciA9IE1hdGgucG93KDEwLCBkaWdpdHMgLSAxKTtcbiAgICAgICAgaW50ZXJ2YWxSb3VuZCA9IE1hdGguY2VpbChpbnRlcnZhbCAvIGRpdmlzb3IpICogZGl2aXNvcjtcbiAgICAgIH1cbiAgICAgIG1pbiA9IG1pbiAmJiBNYXRoLnJvdW5kKE1hdGguZmxvb3IobWluIC8gaW50ZXJ2YWxSb3VuZCkgKiBpbnRlcnZhbFJvdW5kKTtcbiAgICAgIG1heCA9IG1heCAmJiBNYXRoLnJvdW5kKE1hdGguY2VpbChtYXggLyBpbnRlcnZhbFJvdW5kKSAqIGludGVydmFsUm91bmQpO1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGludGVydmFsOiBpbnRlcnZhbFJvdW5kLFxuICAgICAgICBzdGFydGluZ3BvaW50OiBtaW4sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5cygpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlXG4gICAgICAuZmV0Y2hTdG9yZWRRdWVyaWVzKCkucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXG4gICAgICApLnN1YnNjcmliZShzdG9yZWRRdWVyaWVzID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzID0gc3RvcmVkUXVlcmllcztcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICAgICAgZW50cmllczogdGhpcy5zdG9yZWRRdWVyaWVzLm1hcChzdG9yZWRRdWVyeSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHN0b3JlZFF1ZXJ5LmlkLFxuICAgICAgICAgICAgbGFiZWw6IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkYXRhOiBzdG9yZWRRdWVyeS5uYW1lXG4gICAgICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5KGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5nZXRTdG9yZWRRdWVyeShpZCkucGlwZShcbiAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpLFxuICAgICAgdGFwKHN0b3JlZFF1ZXJ5ID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHN0b3JlZFF1ZXJ5O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRmllbGQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsZXQgdHlwZSA9IHRoaXMuc3RvcmVkUXVlcnk/LnR5cGVzPy5sZW5ndGggPT09IDEgPyB0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlc1swXT8ucW5hbWUgOiAnc3lzZG9jdW1lbnQnO1xuICAgICAgbGV0IGNvbnRleHRUeXBlID0gdGhpcy5zdG9yZWRRdWVyeT8uY29udGV4dEZvbGRlclR5cGVzWzBdPy5xbmFtZTtcbiAgICAgIHRoaXMuZ2V0SGlzdG9ncmFtRmllbGQoKTtcbiAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCh0eXBlLCBjb250ZXh0VHlwZSk7XG4gICAgICB0aGlzLmdldEF0dHJpYnV0TWV0cmljQ29kZXN5c3RlbSh0eXBlKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25GaWVsZCh0eXBlLCBjb250ZXh0VHlwZT8pIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uUGlja2VyLmNvZGVzeXN0ZW0gPSBudWxsO1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldEZpZWxkRGVmaW5pdGlvbih0eXBlLCBjb250ZXh0VHlwZSkucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGUgPSBuZXcgU2V0KFsnZmlsZW5hbWUnLCAnbWltZXR5cGUnLCAnbW9kaWZpZXJ0aXRsZScsICd2ZXJzaW9uJywgJ2NyZWF0b3J0aXRsZScsICd0aXRsZScsICdkZXNjcmlwdGlvbiddKTtcbiAgICAgIGlmICh0eXBlICE9PSAnc3lzZG9jdW1lbnQnKSB7XG4gICAgICAgIGV4Y2x1ZGUuYWRkKCd0eXBlJyk7XG4gICAgICB9XG4gICAgICBsZXQgZmlsdGVyZWRGaWVsZHMgPSBkZWZpbml0aW9uLmVsZW1lbnRzLmZpbHRlcihmaWVsZCA9PiAhZXhjbHVkZS5oYXMoZmllbGQuaGl0bmFtZSkpO1xuICAgICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2xpbmVDdXJ2ZScgfHwgdGhpcy53aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlID09PSAnbGluZVN0cmFpZ2h0Jykge1xuICAgICAgICBmaWx0ZXJlZEZpZWxkcyA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC50eXBlID09PSAnREFURVRJTUUnIHx8IGZpZWxkLnR5cGUgPT09ICdOVU1CRVInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgZW50cmllczogZmlsdGVyZWRGaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICBsZXQgYWRkaXRpb25hbExhYmVsID0gZmllbGQuc2VsZWN0ZWRmb3JlbnJpY2htZW50ID8gJyAqJyA6ICcnO1xuICAgICAgICAgIGxldCBsYWJlbCA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubGFiZWwgPT09IGZpZWxkLmxhYmVsKS5sZW5ndGggPiAxXG4gICAgICAgICAgICA/IGZpZWxkLmxhYmVsICsgJyAoJyArIHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUoZmllbGQucW5hbWUuc3BsaXQoJy4nKVswXSkubGFiZWwgKyAnKScgKyBhZGRpdGlvbmFsTGFiZWxcbiAgICAgICAgICAgIDogZmllbGQubGFiZWwgKyBhZGRpdGlvbmFsTGFiZWw7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogbGFiZWwsXG4gICAgICAgICAgICBkYXRhOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRNZXRyaWNDb2Rlc3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmNoYXJ0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICBlbnRyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21pbicsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5taW4nKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWluJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdtaW4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdhdmcnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMuYXZnJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLmF2ZydcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnYXZnJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbWF4JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1heCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5tYXgnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ21heCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ3N1bScsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5zdW0nXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMuc3VtJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdzdW0nLFxuICAgICAgICB9XG4gICAgICBdLm1hcCgocmVzKSA9PiAoe1xuICAgICAgICBpZDogcmVzLmlkLFxuICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJlcy5kZWZhdWx0cmVwcmVzZW50YXRpb24sXG4gICAgICAgIGRhdGE6IHJlcy52YWx1ZVxuICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgIH07XG4gIH1cblxuICBnZXRDaGFydEZpZWxkKCkge1xuICAgIHJldHVybiB0aGlzLmNoYXJ0VHlwZVBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdiYXInLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmJhcicpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuYmFyJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdiYXInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdwaWUnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLnBpZScpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUucGllJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdwaWUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdkb251dCcsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuZG9udXQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmRvbnV0J1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdkb251dCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2xpbmVTdHJhaWdodCcsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZVN0cmFpZ2h0J1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lU3RyYWlnaHQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2xpbmVTdHJhaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2xpbmVDdXJ2ZScsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZUN1cnZlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lQ3VydmUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2xpbmVDdXJ2ZScsXG4gICAgICAgIH1cbiAgICAgIF0ubWFwKChyZXMpID0+ICh7XG4gICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogcmVzLmRlZmF1bHRyZXByZXNlbnRhdGlvbixcbiAgICAgICAgZGF0YTogcmVzLnZhbHVlXG4gICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgfTtcbiAgfVxuXG4gIGdldEhpc3RvZ3JhbUZpZWxkKCkge1xuICAgIGxldCBlbnRyaWVzID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ2RhaWx5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0uZGFpbHknXG4gICAgICAgICksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0uZGFpbHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnZGFpbHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3dlZWtseScsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLndlZWtseSdcbiAgICAgICAgKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS53ZWVrbHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnd2Vla2x5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtb250aGx5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ubW9udGhseScpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLm1vbnRobHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnbW9udGhseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAneWVhcmx5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ueWVhcmx5JyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ueWVhcmx5J1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ3llYXJseSdcbiAgICAgIH1cbiAgICBdO1xuICAgIHJldHVybiB0aGlzLmhpc3RvZ3JhbVR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IGVudHJpZXMubWFwKChyZXMpID0+ICh7XG4gICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogcmVzLmRlZmF1bHRyZXByZXNlbnRhdGlvbixcbiAgICAgICAgZGF0YTogcmVzLnZhbHVlXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0TWV0cmljQ29kZXN5c3RlbSh0eXBlKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0RmllbGREZWZpbml0aW9uKHR5cGUpLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShkZWZpbml0aW9uID0+IHtcbiAgICAgIGxldCBleGNsdWRlID0gbmV3IFNldChbJ2ZpbGVuYW1lJywgJ21pbWV0eXBlJywgJ21vZGlmaWVydGl0bGUnLCAndmVyc2lvbicsICdjcmVhdG9ydGl0bGUnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nXSk7XG4gICAgICBpZiAodHlwZSAhPT0gJ3N5c2RvY3VtZW50Jykge1xuICAgICAgICBleGNsdWRlLmFkZCgndHlwZScpO1xuICAgICAgfVxuICAgICAgbGV0IGZpbHRlcmVkRmllbGRzID0gZGVmaW5pdGlvbi5lbGVtZW50cy5maWx0ZXIoZmllbGQgPT4gIWV4Y2x1ZGUuaGFzKGZpZWxkLmhpdG5hbWUpKTtcbiAgICAgIGZpbHRlcmVkRmllbGRzID0gZmlsdGVyZWRGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnR5cGUgPT09ICdOVU1CRVInKTtcbiAgICAgIHRoaXMuYXR0cmlidXRNZXRyaWNQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgZW50cmllczogZmlsdGVyZWRGaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmxhYmVsID09PSBmaWVsZC5sYWJlbCkubGVuZ3RoID4gMVxuICAgICAgICAgICAgPyBmaWVsZC5sYWJlbCArICcgKCcgKyB0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKGZpZWxkLnFuYW1lLnNwbGl0KCcuJylbMF0pLmxhYmVsICsgJyknXG4gICAgICAgICAgICA6IGZpZWxkLmxhYmVsO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZmllbGQucW5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IGxhYmVsLFxuICAgICAgICAgICAgZGF0YTogZmllbGQucW5hbWUsXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsRm9ybVZhbHVlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRUeXBlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlIHx8ICdwaWUnLFxuICAgICAgc2l6ZTogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnNpemUgfHwgMTAsXG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmFnZ3JlZ2F0aW9uIHx8ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICBoaXN0b2dyYW1UeXBlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaGlzdG9ncmFtVHlwZSB8fCAnbW9udGhseScsXG4gICAgICBhdHRyaWJ1dE1ldHJpYzogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmF0dHJpYnV0TWV0cmljIHx8ICcnLFxuICAgICAgbWV0cmljOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWV0cmljIHx8ICdzdW0nLFxuICAgICAgc29ydFJldmVydDogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnNvcnRSZXZlcnQgfHwgJycsXG4gICAgICBzaG93QWJzb2x1dFZhbHVlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2hvd0Fic29sdXRWYWx1ZSB8fCBmYWxzZSxcbiAgICAgIGludGVydmFsOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaW50ZXJ2YWwgfHwgMTAwMCxcbiAgICAgIHN0YXJ0aW5ncG9pbnQ6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5zdGFydGluZ3BvaW50IHx8IDAsXG4gICAgICBtaW5fZG9jX2NvdW50OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWluRG9jQ291bnQgfHwgMSxcbiAgICAgIHRpdGxlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8udGl0bGUgfHwgJycsXG4gICAgICB4QXhlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ueEF4ZSB8fCAnJyxcbiAgICAgIHlBeGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy55QXhlIHx8ICcnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVR5cGVGbGFncygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlZFF1ZXJ5U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnkodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeSA/IHRoaXMuc3RvcmVkUXVlcnkubmFtZSA6ICcnLFxuICAgICAgICAuLi50aGlzLmdldEluaXRpYWxGb3JtVmFsdWVzKCksXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUgPSB0aGlzLndpZGdldHNTZXJ2aWNlLmdldFN0b3JlZFF1ZXJ5VmFsdWUodGhpcy5zZXR1cEZvcm0pO1xuICAgICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmFnZ3JlZ2F0aW9uIHx8ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgYXR0cmlidXRNZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hdHRyaWJ1dE1ldHJpYyB8fCAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlVHlwZUZsYWdzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcblxuICAgICAgfVxuICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5xdWVyeUVycm9yKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcXVlcnlFcnJvcihlcnJvcjogYW55KSB7XG4gICAgdGhpcy5pc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNOdW1iZXJUeXBlID0gZmFsc2U7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IG51bGw7XG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgLi4udGhpcy5nZXRJbml0aWFsRm9ybVZhbHVlcygpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIC4uLnRoaXMuZ2V0SW5pdGlhbEZvcm1WYWx1ZXMoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNldHVwXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dXBGb3JtXCI+XG4gICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydFR5cGVGaWVsZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdjaGFydFR5cGUnKS5pbnZhbGlkXCI+XG4gICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJjaGFydFR5cGVcIiBbcGlja2VyVGl0bGVdPVwiY2hhcnRUeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0VHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdjaGFydFR5cGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoc3RvcmVkUXVlcmllc1BpY2tlcj8uY29kZXN5c3RlbT8uZW50cmllcykge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5sYWJlbC5zdG9yZWRxdWVyeScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmRlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS5pbnZhbGlkXCI+XG4gICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cInN0b3JlZFF1ZXJ5XCIgW3BpY2tlclRpdGxlXT1cInN0b3JlZFF1ZXJpZXNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJzdG9yZWRRdWVyaWVzUGlja2VyLmNvZGVzeXN0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmxpc3Qubm90QXZhaWxhYmxlJ1wiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3N0b3JlZFF1ZXJ5JykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKGFnZ3JlZ2F0aW9uUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWxpZCkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdhZ2dyZWdhdGlvbicpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gI2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiIFtwaWNrZXJUaXRsZV09XCJhZ2dyZWdhdGlvblBpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImFnZ3JlZ2F0aW9uUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdhZ2dyZWdhdGlvbicpLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgdHJhbnNsYXRlPlxuICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuXG4gICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ucGFydGlhbFZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaW52YWxpZFwiPlxuICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cInNpemVcIj48L2VvLW51bWJlcj5cbiAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaW52YWxpZCkge1xuICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWluOiAzLCBtYXg6IDEwMH1cIj5cbiAgICAgICAgQGlmIChzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkXG4gICAgICAgIH0gQGVsc2UgaWYgKHNldHVwRm9ybS5nZXQoJ3NpemUnKS5oYXNFcnJvcignbWF4JykgfHwgc2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdtaW4nKSkge1xuICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkuc3RyaW5nLmVycm9yLmNsYXNzaWZpY2F0aW9uLnBhcnRpYWxWYWx1ZVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGlzRGF0ZVRpbWVUeXBlKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmhpc3RvZ3JhbScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2hpc3RvZ3JhbVR5cGUnKS5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCIgc2V0dXBGb3JtLmdldCgnaGlzdG9ncmFtVHlwZScpLnZhbHVlID8gJyc6ICdlby53b3Jrc3BhY2Uud2lkZ2V0Lmhpc3RvZ3JhbS5kZXNjcmlwdGlvbidcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiaGlzdG9ncmFtVHlwZVwiIFtwaWNrZXJUaXRsZV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIH1cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hZ2dyZWdhdGlvbiAmJiAhaXNEYXRlVGltZVR5cGUgJiYgIWlzTnVtYmVyVHlwZSkge1xuICAgICAgQGlmICh3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ2JhcicpIHtcbiAgICAgICAgPGVvLWZvcm0taW5wdXQgY2xhc3M9XCJsYWJlbCBjaGVja2JveFwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLnNvcnRSZXZlcnQnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIj5cbiAgICAgICAgICA8ZW8tY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic29ydFJldmVydFwiIFt0cmlzdGF0ZV09XCJmYWxzZVwiPjwvZW8tY2hlY2tib3g+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICAgIEBpZiAod2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5jaGFydFR5cGUgPT09ICdiYXInIHx8IHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAncGllJyB8fCB3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ3JpbmcnICYmICF3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgJiYgIWlzTnVtYmVyVHlwZSkge1xuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cInRocmVzaG9sZC1zdWNjZXNzXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLm1pbkRvY0NvdW50JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5Eb2NDb3VudFwiPlxuICAgICAgICAgIDwvZW8tbnVtYmVyPlxuICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIChpc051bWJlclR5cGUpIHtcbiAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5pbnRlcnZhbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2ludGVydmFsJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIj48L2VvLW51bWJlcj5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnN0YXJ0aW5ncG9pbnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzdGFydGluZ3BvaW50JykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRpbmdwb2ludFwiPjwvZW8tbnVtYmVyPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIH1cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdiYXInICYmIGF0dHJpYnV0TWV0cmljUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWxpZCAmJiAhaXNOdW1iZXJUeXBlICYmICFpc0RhdGVUaW1lVHlwZSkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmF0dHJpYnV0TWV0cmljJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhdHRyaWJ1dE1ldHJpY1wiIFtwaWNrZXJUaXRsZV09XCJhdHRyaWJ1dE1ldHJpY1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImF0dHJpYnV0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2JhcicgJiYgd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmF0dHJpYnV0TWV0cmljKSB7XG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydE1ldHJpYycgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJtZXRyaWNcIiBbcGlja2VyVGl0bGVdPVwiY2hhcnRNZXRyaWNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eVBpY2tlclwiPlxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgndGl0bGUnKS5pbnZhbGlkXCI+XG4gICAgICAgICAgPGVvLXN0cmluZyBhdXRvY29tcGxldGU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd0aXRsZScpLmludmFsaWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwie21heGxlbmd0aDogNTB9XCIgdHJhbnNsYXRlPmVvLmZvcm0ucHJvcGVydHkubWF4bGVuZ3RoPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAncGllJyAmJiB3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAnZG9udXQnKSB7XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnhBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInhBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnlBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInlBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPGVvLWZvcm0taW5wdXQgY2xhc3M9XCJsYWJlbCBjaGVja2JveFwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLnZhbHVlLmxlZ2VuZCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIj5cbiAgICAgICAgICA8ZW8tY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic2hvd0Fic29sdXRWYWx1ZVwiIFt0cmlzdGF0ZV09XCJmYWxzZVwiPjwvZW8tY2hlY2tib3g+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbkBpZiAoc2V0dXBGb3JtLnZhbGlkKSB7XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3XCI+XG4gICAgPGVvLWNoYXJ0cy13aWRnZXQgW3dpZGdldENvbmZpZ109XCJ3aWRnZXRDb25maWdcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiPjwvZW8tY2hhcnRzLXdpZGdldD5cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgPGVvLWVycm9yLW1lc3NhZ2VcbiAgICAgIFtlbXB0eVN0YXRlXT1cIntpY29uOiAnaWNfc2F2ZWRfc2VhcmNoLnN2ZycsIHRleHQ6ICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNvbmZpZ3VyYXRpb24ubm90T2snfVwiPjwvZW8tZXJyb3ItbWVzc2FnZT5cbiAgPC9kaXY+XG59XG4iXX0=
|