@eo-sdk/client 11.0.0-rc.1 → 11.0.0-rc.10
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/about-state/about-state.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/dashboard.component.d.ts +2 -23
- package/app/eo-client/dashboard/dashboard.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +28 -5
- package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts +31 -21
- package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts +7 -0
- package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts +3 -2
- 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/count-objects-widget/count-objects-widget.component.d.ts +2 -0
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.d.ts +1 -0
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.d.ts +7 -0
- package/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +9 -4
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts +2 -2
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts +3 -2
- package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts +3 -2
- package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts +3 -2
- package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.d.ts +8 -4
- package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts +6 -4
- package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/picture-widget/picture-widget-setup/picture-widget-setup.component.d.ts +18 -0
- package/app/eo-client/dashboard/widgets/picture-widget/picture-widget-setup/picture-widget-setup.component.d.ts.map +1 -0
- package/app/eo-client/dashboard/widgets/picture-widget/picture-widget.component.d.ts +10 -0
- package/app/eo-client/dashboard/widgets/picture-widget/picture-widget.component.d.ts.map +1 -0
- package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts +1 -2
- package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/todowidget/todo-setup/todo-setup.component.d.ts +24 -0
- package/app/eo-client/dashboard/widgets/todowidget/todo-setup/todo-setup.component.d.ts.map +1 -0
- package/app/eo-client/dashboard/widgets/todowidget/todo-widget.component.d.ts +34 -0
- package/app/eo-client/dashboard/widgets/todowidget/todo-widget.component.d.ts.map +1 -0
- package/app/eo-client/eo-client.module.d.ts +29 -24
- package/app/eo-client/eo-client.module.d.ts.map +1 -1
- package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
- package/app/eo-client/login/login.component.d.ts +3 -1
- package/app/eo-client/login/login.component.d.ts.map +1 -1
- package/app/eo-client/process-state/process-state.component.d.ts +3 -5
- package/app/eo-client/process-state/process-state.component.d.ts.map +1 -1
- package/app/eo-client/settings/settings.component.d.ts +2 -0
- package/app/eo-client/settings/settings.component.d.ts.map +1 -1
- package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
- package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts +5 -1
- package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts.map +1 -1
- package/app/eo-framework/actions/actions/signature-action/signature-action.component.d.ts.map +1 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +3 -4
- package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/string/string.component.d.ts +1 -0
- package/app/eo-framework/form-elements/string/string.component.d.ts.map +1 -1
- package/app/eo-framework/frame/frame.component.d.ts +2 -1
- package/app/eo-framework/frame/frame.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/filters/codesystem-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/filters/datetime-filter.component.d.ts +0 -8
- package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.component.d.ts +1 -1
- package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
- package/app/eo-framework/media/media.component.d.ts +15 -1
- package/app/eo-framework/media/media.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-details.component.d.ts +9 -3
- package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +2 -0
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts +3 -2
- package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.d.ts.map +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +2 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
- package/app/eo-framework/util/services/utilities.service.d.ts +195 -0
- package/app/eo-framework/util/services/utilities.service.d.ts.map +1 -1
- package/app/eo-framework-core/api/grid.service.d.ts +1 -5
- package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
- package/app/eo-framework-core/api/plugins.service.d.ts +6 -0
- package/app/eo-framework-core/api/plugins.service.d.ts.map +1 -1
- package/assets/_default/config/main.json +1 -1
- package/assets/_default/i18n/de.json +37 -5
- package/assets/_default/i18n/en.json +41 -9
- package/assets/_default/svg/ic_noImage.svg +1 -0
- package/assets/_default/svg/ic_photo_library.svg +1 -0
- package/assets/_default/svg/ic_task.svg +1 -0
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/dashboard.component.mjs +19 -69
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +183 -86
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +109 -34
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/icharts.mjs +1 -1
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +21 -13
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +7 -3
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.mjs +1 -1
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.mjs +1 -1
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +73 -59
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +7 -8
- package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +16 -10
- package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.mjs +3 -4
- package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +15 -9
- package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +16 -10
- package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.mjs +26 -10
- package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +35 -35
- package/esm2022/app/eo-client/dashboard/widgets/picture-widget/picture-widget-setup/picture-widget-setup.component.mjs +54 -0
- package/esm2022/app/eo-client/dashboard/widgets/picture-widget/picture-widget.component.mjs +24 -0
- package/esm2022/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +4 -7
- package/esm2022/app/eo-client/dashboard/widgets/todowidget/todo-setup/todo-setup.component.mjs +74 -0
- package/esm2022/app/eo-client/dashboard/widgets/todowidget/todo-widget.component.mjs +103 -0
- package/esm2022/app/eo-client/eo-client.module.mjs +22 -6
- package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +4 -4
- package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +25 -11
- package/esm2022/app/eo-client/login/login.component.mjs +14 -11
- package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +5 -5
- package/esm2022/app/eo-client/object-state/object-state/object-state.component.mjs +3 -3
- package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +6 -6
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +12 -17
- package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +6 -6
- package/esm2022/app/eo-client/result-state/result-state.component.mjs +1 -1
- package/esm2022/app/eo-client/settings/settings.component.mjs +9 -3
- package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +4 -5
- package/esm2022/app/eo-client/version-state/version-state.component.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +6 -6
- package/esm2022/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +3 -3
- package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +23 -3
- package/esm2022/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +3 -3
- package/esm2022/app/eo-framework/actions/actions/signature-action/signature-action.component.mjs +5 -2
- package/esm2022/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +2 -2
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +12 -4
- package/esm2022/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +3 -3
- package/esm2022/app/eo-framework/app-shell/license-warning/license-warning.component.mjs +3 -3
- package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +3 -3
- package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +25 -22
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +6 -6
- package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +2 -2
- package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +2 -2
- package/esm2022/app/eo-framework/form-elements/reference/reference.component.mjs +2 -2
- package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +8 -5
- package/esm2022/app/eo-framework/frame/frame.component.mjs +3 -2
- package/esm2022/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +7 -2
- package/esm2022/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +3 -3
- package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +1 -14
- package/esm2022/app/eo-framework/grid/filters/datetime-filter.component.mjs +6 -33
- package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +3 -19
- package/esm2022/app/eo-framework/grid/filters/filesize-filter.component.mjs +2 -2
- package/esm2022/app/eo-framework/grid/grid.component.mjs +11 -12
- package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +4 -2
- package/esm2022/app/eo-framework/media/media.component.mjs +68 -19
- package/esm2022/app/eo-framework/object-details/object-details.component.mjs +53 -15
- package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +18 -27
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +2 -2
- package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +4 -4
- package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +11 -7
- package/esm2022/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +6 -1
- package/esm2022/app/eo-framework/process/history/process-history.component.mjs +2 -2
- package/esm2022/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +3 -3
- package/esm2022/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +1 -1
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +20 -6
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +13 -9
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +6 -3
- package/esm2022/app/eo-framework/util/services/utilities.service.mjs +4 -1
- package/esm2022/app/eo-framework-core/api/grid.service.mjs +20 -27
- package/esm2022/app/eo-framework-core/api/plugins.service.mjs +44 -2
- package/esm2022/app/eo-framework-core/error-handler/error-handler.service.mjs +2 -2
- package/fesm2022/eo-sdk-client.mjs +1323 -767
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/misc/scripts/exclude-core-ng-package.js +11 -0
- package/misc/scripts/prebuild-about-state.js +2 -3
- package/package.json +6 -6
- package/proxy.config.json +15 -0
|
@@ -3,17 +3,18 @@ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core
|
|
|
3
3
|
import { Validators } from '@angular/forms';
|
|
4
4
|
import { Utils } from '@eo-sdk/core';
|
|
5
5
|
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
6
|
-
import { EMPTY, skip, tap } from 'rxjs';
|
|
6
|
+
import { EMPTY, debounceTime, skip, 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 "
|
|
10
|
+
import * as i3 from "@ngx-translate/core";
|
|
11
|
+
import * as i4 from "../../../../../eo-framework/ui/error-message/error-message.component";
|
|
12
|
+
import * as i5 from "../../../../../eo-framework/form-elements/form-input/form-input.component";
|
|
13
|
+
import * as i6 from "../../../../../eo-framework/form-elements/codesystem/codesystem.component";
|
|
14
|
+
import * as i7 from "../../../../../eo-framework/form-elements/number/number.component";
|
|
15
|
+
import * as i8 from "../../../../../eo-framework/form-elements/checkbox/checkbox.component";
|
|
16
|
+
import * as i9 from "../../../../../eo-framework/form-elements/string/string.component";
|
|
17
|
+
import * as i10 from "../charts-widget.component";
|
|
17
18
|
let ChartsSetupComponent = class ChartsSetupComponent {
|
|
18
19
|
set widgetConfig(wc) {
|
|
19
20
|
this._widgetConfig = wc;
|
|
@@ -22,23 +23,32 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
22
23
|
get widgetConfig() {
|
|
23
24
|
return this._widgetConfig;
|
|
24
25
|
}
|
|
25
|
-
constructor(fb, storedQueriesService, translate, userService) {
|
|
26
|
+
constructor(fb, storedQueriesService, translate, userService, system) {
|
|
26
27
|
this.fb = fb;
|
|
27
28
|
this.storedQueriesService = storedQueriesService;
|
|
28
29
|
this.translate = translate;
|
|
29
30
|
this.userService = userService;
|
|
31
|
+
this.system = system;
|
|
30
32
|
this.widgetConfigChange = new EventEmitter();
|
|
33
|
+
this.widgetConfigStateChange = new EventEmitter();
|
|
31
34
|
this.setupForm = this.fb.group({
|
|
32
|
-
storedQuery: [null],
|
|
33
|
-
chartType: [],
|
|
34
|
-
size: [
|
|
35
|
-
aggregation: [],
|
|
36
|
-
histogramType: [],
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
storedQuery: [null, Validators.required],
|
|
36
|
+
chartType: [null, Validators.required],
|
|
37
|
+
size: [10, [Validators.max(100), Validators.min(3), Validators.required]],
|
|
38
|
+
aggregation: [null, Validators.required],
|
|
39
|
+
histogramType: [null],
|
|
40
|
+
attributMetric: [null],
|
|
41
|
+
metric: [null],
|
|
42
|
+
sortRevert: [false],
|
|
43
|
+
interval: [null],
|
|
44
|
+
startingpoint: [null],
|
|
45
|
+
minDocCount: [1],
|
|
46
|
+
title: ['', [Validators.maxLength(50)]],
|
|
47
|
+
xAxe: ['', [Validators.maxLength(50)]],
|
|
48
|
+
yAxe: ['', [Validators.maxLength(50)]]
|
|
39
49
|
});
|
|
40
50
|
this.storedQueriesPicker = {
|
|
41
|
-
title: this.translate.instant('eo.
|
|
51
|
+
title: this.translate.instant('eo.workspace.widget.label.storedquery'),
|
|
42
52
|
codesystem: null,
|
|
43
53
|
};
|
|
44
54
|
this.aggregationPicker = {
|
|
@@ -53,22 +63,34 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
53
63
|
title: this.translate.instant('eo.workspace.widget.form.label.histogram'),
|
|
54
64
|
codesystem: null,
|
|
55
65
|
};
|
|
66
|
+
this.attributMetricPicker = {
|
|
67
|
+
title: this.translate.instant('eo.workspace.widget.form.label.attributMetric'),
|
|
68
|
+
codesystem: null,
|
|
69
|
+
};
|
|
70
|
+
this.chartMetricPicker = {
|
|
71
|
+
title: this.translate.instant('eo.workspace.widget.form.label.chartMetric'),
|
|
72
|
+
codesystem: null,
|
|
73
|
+
};
|
|
56
74
|
this.isDateTimeType = false;
|
|
75
|
+
this.isNumberType = false;
|
|
57
76
|
this.selectedSavedSearchName = '';
|
|
58
|
-
this.setupForm.valueChanges.pipe(skip(1), untilDestroyed(this)).subscribe((_) => {
|
|
77
|
+
this.setupForm.valueChanges.pipe(skip(1), debounceTime(1000), untilDestroyed(this)).subscribe((_) => {
|
|
59
78
|
this.setWidgetConfig();
|
|
60
79
|
});
|
|
80
|
+
this.setupForm.statusChanges.pipe(untilDestroyed(this)).subscribe((v) => {
|
|
81
|
+
this.widgetConfigStateChange.emit(v);
|
|
82
|
+
});
|
|
61
83
|
this.getStoredQuerys();
|
|
62
84
|
this.getChartField();
|
|
85
|
+
this.getMetricCodesystem();
|
|
63
86
|
}
|
|
64
87
|
setWidgetConfig() {
|
|
65
|
-
this.histogramTypePicker.codesystem = null;
|
|
66
88
|
if (this.setupForm.valid && this.storedQueries) {
|
|
67
89
|
this.storedQuery = this.storedQueries.find((sq) => sq.name === this.setupForm.get('storedQuery').value);
|
|
68
90
|
this.widgetConfig = {
|
|
69
91
|
storedQuery: this.storedQuery?.id,
|
|
70
92
|
formValue: this.setupForm.value,
|
|
71
|
-
aggregationType: ''
|
|
93
|
+
aggregationType: 'DATETIME'
|
|
72
94
|
};
|
|
73
95
|
if (this.setupForm.get('storedQuery').value !== this.selectedSavedSearchName) {
|
|
74
96
|
if (this.storedQuery) {
|
|
@@ -81,12 +103,14 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
81
103
|
this.updateField();
|
|
82
104
|
this.selectedSavedSearchName = this.setupForm.get('storedQuery').value;
|
|
83
105
|
this.isDateTimeType = this.widgetConfig?.formValue.aggregation === 'sysobject.created' || this.widgetConfig?.aggregationType === 'DATETIME';
|
|
106
|
+
this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
|
|
84
107
|
}, 100);
|
|
85
108
|
}
|
|
86
109
|
}
|
|
87
110
|
else {
|
|
88
111
|
this.widgetConfig.aggregationType = this.aggregationCodesystem?.selectedNodes?.data?.type;
|
|
89
112
|
this.isDateTimeType = this.widgetConfig?.aggregationType === 'DATETIME';
|
|
113
|
+
this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
|
|
90
114
|
}
|
|
91
115
|
this.widgetConfigChange.emit(this._widgetConfig);
|
|
92
116
|
}
|
|
@@ -112,12 +136,9 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
112
136
|
}
|
|
113
137
|
updateField() {
|
|
114
138
|
this.getHistogramField();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
else {
|
|
119
|
-
this.getAggregationField(this.storedQuery?.types[0]?.qname);
|
|
120
|
-
}
|
|
139
|
+
const type = this.storedQuery?.types?.length === 1 ? this.storedQuery?.types[0]?.qname : 'sysdocument';
|
|
140
|
+
this.getAggregationField(type);
|
|
141
|
+
this.getAttributMetricCodesystem(type);
|
|
121
142
|
}
|
|
122
143
|
getAggregationField(type) {
|
|
123
144
|
this.aggregationPicker.codesystem = null;
|
|
@@ -131,15 +152,61 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
131
152
|
filteredFields = filteredFields.filter(field => field.type === 'DATETIME');
|
|
132
153
|
}
|
|
133
154
|
this.aggregationPicker.codesystem = {
|
|
134
|
-
entries: filteredFields.map(field =>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
entries: filteredFields.map(field => {
|
|
156
|
+
let label = filteredFields.filter(item => item.label === field.label).length > 1
|
|
157
|
+
? field.label + ' (' + this.system.getObjectType(field.qname.split('.')[0]).label + ')'
|
|
158
|
+
: field.label;
|
|
159
|
+
return {
|
|
160
|
+
id: field.qname,
|
|
161
|
+
defaultrepresentation: label,
|
|
162
|
+
data: field.qname,
|
|
163
|
+
type: field.type
|
|
164
|
+
};
|
|
165
|
+
}).sort(Utils.sortValues('defaultrepresentation')),
|
|
140
166
|
};
|
|
141
167
|
});
|
|
142
168
|
}
|
|
169
|
+
getMetricCodesystem() {
|
|
170
|
+
return this.chartMetricPicker.codesystem = {
|
|
171
|
+
entries: [
|
|
172
|
+
{
|
|
173
|
+
id: 'min',
|
|
174
|
+
defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.min'),
|
|
175
|
+
label: this.translate.instant('eo.workspace.widget.charts.metric.min'),
|
|
176
|
+
value: 'min',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
id: 'avg',
|
|
180
|
+
defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.avg'),
|
|
181
|
+
label: this.translate.instant('eo.workspace.widget.charts.metric.avg'),
|
|
182
|
+
value: 'avg',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: 'max',
|
|
186
|
+
defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.max'),
|
|
187
|
+
label: this.translate.instant('eo.workspace.widget.charts.metric.max'),
|
|
188
|
+
value: 'max',
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: 'median',
|
|
192
|
+
defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.median'),
|
|
193
|
+
label: this.translate.instant('eo.workspace.widget.charts.metric.median'),
|
|
194
|
+
value: 'median',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: 'sum',
|
|
198
|
+
defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.sum'),
|
|
199
|
+
label: this.translate.instant('eo.workspace.widget.charts.metric.sum'),
|
|
200
|
+
value: 'sum',
|
|
201
|
+
}
|
|
202
|
+
].map((res) => ({
|
|
203
|
+
id: res.id,
|
|
204
|
+
label: res.label,
|
|
205
|
+
defaultrepresentation: res.defaultrepresentation,
|
|
206
|
+
data: res.value
|
|
207
|
+
})).sort(Utils.sortValues('defaultrepresentation')),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
143
210
|
getChartField() {
|
|
144
211
|
return this.chartTypePicker.codesystem = {
|
|
145
212
|
entries: [
|
|
@@ -182,7 +249,6 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
182
249
|
};
|
|
183
250
|
}
|
|
184
251
|
getHistogramField() {
|
|
185
|
-
this.histogramTypePicker.codesystem = null;
|
|
186
252
|
let entries = [
|
|
187
253
|
{
|
|
188
254
|
id: 'daily',
|
|
@@ -218,62 +284,94 @@ let ChartsSetupComponent = class ChartsSetupComponent {
|
|
|
218
284
|
})),
|
|
219
285
|
};
|
|
220
286
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
287
|
+
getAttributMetricCodesystem(type) {
|
|
288
|
+
return this.userService.getFieldDefinition(type).pipe(untilDestroyed(this)).subscribe(definition => {
|
|
289
|
+
let exclude = new Set(['filename', 'mimetype', 'modifiertitle', 'version', 'creatortitle', 'title', 'description']);
|
|
290
|
+
if (type !== 'sysdocument') {
|
|
291
|
+
exclude.add('type');
|
|
292
|
+
}
|
|
293
|
+
let filteredFields = definition.elements.filter(field => !exclude.has(field.hitname));
|
|
294
|
+
filteredFields = filteredFields.filter(field => field.type === 'NUMBER');
|
|
295
|
+
this.attributMetricPicker.codesystem = {
|
|
296
|
+
entries: filteredFields.map(field => {
|
|
297
|
+
let label = filteredFields.filter(item => item.label === field.label).length > 1
|
|
298
|
+
? field.label + ' (' + this.system.getObjectType(field.qname.split('.')[0]).label + ')'
|
|
299
|
+
: field.label;
|
|
300
|
+
return {
|
|
301
|
+
id: field.qname,
|
|
302
|
+
defaultrepresentation: label,
|
|
303
|
+
data: field.qname,
|
|
304
|
+
type: field.type
|
|
305
|
+
};
|
|
306
|
+
}).sort(Utils.sortValues('defaultrepresentation')),
|
|
307
|
+
};
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
getInitialFormValues() {
|
|
311
|
+
return {
|
|
312
|
+
chartType: this._widgetConfig?.formValue?.chartType || 'pie',
|
|
313
|
+
size: this._widgetConfig?.formValue?.size || 10,
|
|
314
|
+
aggregation: this._widgetConfig?.formValue?.aggregation || 'sysobject.created',
|
|
315
|
+
histogramType: this._widgetConfig?.formValue?.histogramType || 'monthly',
|
|
316
|
+
attributMetric: this._widgetConfig?.formValue?.attributMetric || '',
|
|
317
|
+
metric: this._widgetConfig?.formValue?.metric || 'sum',
|
|
318
|
+
sortRevert: this._widgetConfig?.formValue?.sortRevert || '',
|
|
319
|
+
interval: this._widgetConfig?.formValue?.interval || 1000,
|
|
320
|
+
startingpoint: this._widgetConfig?.formValue?.startingpoint || 0,
|
|
321
|
+
min_doc_count: this._widgetConfig?.formValue?.minDocCount || 1,
|
|
322
|
+
title: this._widgetConfig?.formValue?.title || '',
|
|
323
|
+
xAxe: this._widgetConfig?.formValue?.xAxe || '',
|
|
324
|
+
yAxe: this._widgetConfig?.formValue?.yAxe || '',
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
updateTypeFlags() {
|
|
328
|
+
setTimeout(() => {
|
|
329
|
+
this.isDateTimeType = this.widgetConfig?.formValue.aggregation === 'sysobject.created' || this.widgetConfig?.aggregationType === 'DATETIME';
|
|
330
|
+
this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
|
|
331
|
+
}, 100);
|
|
332
|
+
}
|
|
333
|
+
storedQuerySubscription() {
|
|
334
|
+
this.getStoredQuery(this._widgetConfig?.storedQuery).subscribe(() => {
|
|
335
|
+
this.setupForm.patchValue({
|
|
336
|
+
storedQuery: this.storedQuery ? this.storedQuery.name : '',
|
|
337
|
+
...this.getInitialFormValues(),
|
|
338
|
+
});
|
|
339
|
+
if (this.storedQuery) {
|
|
340
|
+
this.selectedSavedSearchName = this.setupForm.get('storedQuery').value;
|
|
341
|
+
this.updateField();
|
|
224
342
|
this.setupForm.patchValue({
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
size: this._widgetConfig?.formValue?.size,
|
|
228
|
-
aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
|
|
229
|
-
histogramType: this._widgetConfig && this._widgetConfig?.formValue?.histogramType ? this._widgetConfig?.formValue?.histogramType : 'monthly',
|
|
230
|
-
interval: this._widgetConfig ? this._widgetConfig.formValue.interval : '',
|
|
231
|
-
startingpoint: this._widgetConfig ? this._widgetConfig.formValue.startingpoint : '',
|
|
343
|
+
aggregation: this._widgetConfig?.formValue?.aggregation || 'sysobject.created',
|
|
344
|
+
attributMetric: this._widgetConfig?.formValue?.attributMetric || '',
|
|
232
345
|
});
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}, 100);
|
|
247
|
-
}
|
|
248
|
-
}, (error) => {
|
|
249
|
-
this.isDateTimeType = false;
|
|
250
|
-
this._widgetConfig.aggregationType = null;
|
|
251
|
-
if (error.status === 404) {
|
|
252
|
-
this.setupForm.patchValue({
|
|
253
|
-
chartType: 'pie',
|
|
254
|
-
aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
|
|
255
|
-
histogramType: 'monthly',
|
|
256
|
-
size: '',
|
|
257
|
-
interval: '',
|
|
258
|
-
startingpoint: '',
|
|
259
|
-
});
|
|
260
|
-
return EMPTY;
|
|
261
|
-
}
|
|
346
|
+
this.updateTypeFlags();
|
|
347
|
+
}
|
|
348
|
+
}, (error) => {
|
|
349
|
+
this.queryError(error);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
queryError(error) {
|
|
353
|
+
this.isDateTimeType = false;
|
|
354
|
+
this.isNumberType = false;
|
|
355
|
+
this._widgetConfig.aggregationType = null;
|
|
356
|
+
if (error.status === 404) {
|
|
357
|
+
this.setupForm.patchValue({
|
|
358
|
+
...this.getInitialFormValues(),
|
|
262
359
|
});
|
|
360
|
+
return EMPTY;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
ngOnInit() {
|
|
364
|
+
if (this._widgetConfig?.storedQuery) {
|
|
365
|
+
this.storedQuerySubscription();
|
|
263
366
|
}
|
|
264
367
|
else {
|
|
265
368
|
this.setupForm.patchValue({
|
|
266
|
-
|
|
267
|
-
aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
|
|
268
|
-
histogramType: this._widgetConfig && this._widgetConfig?.formValue?.histogramType ? this._widgetConfig?.formValue?.histogramType : 'monthly',
|
|
269
|
-
size: this._widgetConfig?.formValue?.size,
|
|
270
|
-
interval: this._widgetConfig ? this._widgetConfig.formValue.interval : '',
|
|
271
|
-
startingpoint: this._widgetConfig ? this._widgetConfig.formValue.startingpoint : '',
|
|
369
|
+
...this.getInitialFormValues(),
|
|
272
370
|
});
|
|
273
371
|
}
|
|
274
372
|
}
|
|
275
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
276
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ChartsSetupComponent, selector: "eo-charts-setup", inputs: { widgetConfig: "widgetConfig" }, outputs: { widgetConfigChange: "widgetConfigChange" }, viewQueries: [{ propertyName: "aggregationCodesystem", first: true, predicate: ["aggregationCodesystem"], descendants: true }, { propertyName: "histogramCodesystem", first: true, predicate: ["histogramCodesystem"], 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 <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\" *ngIf=\"storedQueriesPicker?.codesystem?.entries\"\n [label]=\"'eo.search.title.storedqueries' | translate\" [description]=\"'eo.workspace.widget.stored.queries.description'\">\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\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').value\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"isDateTimeType\" [label]=\"'eo.workspace.widget.form.label.histogram' | translate\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [description]=\"'eo.workspace.widget.chart.form.label.description'\"\n [label]=\"'eo.workspace.widget.form.partialValue' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n <div class=\"err-msg\" *ngIf=\"setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')\">\n <div translate>\n eo.form.property.string.error.classification.partialValue </div>\n </div>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.interval' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n\n </form>\n</div>\n\n<div class=\"preview\"\n *ngIf=\"setupForm.get('aggregation').value && setupForm.get('chartType').value && setupForm.get('storedQuery').value && (isDateTimeType && setupForm.get('histogramType').value || !isDateTimeType); else tplEmpty\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n</div>\n\n<ng-template #tplEmpty>\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</ng-template>\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)}:host .setup eo-form-input{display:block;margin-bottom:var(--app-pane-padding)}:host .setup .err-msg{background-color:var(--color-error);color:var(--color-white);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4);border:0;border-radius:2px}:host .preview{grid-area:preview;overflow-y:auto;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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.ChartsWidgetComponent, selector: "eo-charts-widget", inputs: ["editMode", "widgetConfig"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
373
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i2.SystemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
374
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", 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 <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 @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate>\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\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 <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 </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" }] }); }
|
|
277
375
|
};
|
|
278
376
|
ChartsSetupComponent = __decorate([
|
|
279
377
|
UntilDestroy()
|
|
@@ -281,16 +379,15 @@ ChartsSetupComponent = __decorate([
|
|
|
281
379
|
export { ChartsSetupComponent };
|
|
282
380
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, decorators: [{
|
|
283
381
|
type: Component,
|
|
284
|
-
args: [{ selector: 'eo-charts-setup', template: "<div class=\"setup\">\n
|
|
285
|
-
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }], propDecorators: { widgetConfigChange: [{
|
|
382
|
+
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 <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 @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate>\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\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 <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 </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"] }]
|
|
383
|
+
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i2.SystemService }], propDecorators: { widgetConfigChange: [{
|
|
384
|
+
type: Output
|
|
385
|
+
}], widgetConfigStateChange: [{
|
|
286
386
|
type: Output
|
|
287
387
|
}], aggregationCodesystem: [{
|
|
288
388
|
type: ViewChild,
|
|
289
389
|
args: ['aggregationCodesystem']
|
|
290
|
-
}], histogramCodesystem: [{
|
|
291
|
-
type: ViewChild,
|
|
292
|
-
args: ['histogramCodesystem']
|
|
293
390
|
}], widgetConfig: [{
|
|
294
391
|
type: Input
|
|
295
392
|
}] } });
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFtRSxLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBUy9CLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBeUMvQixJQUFhLFlBQVksQ0FBQyxFQUFXO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUNVLEVBQXNCLEVBQ3RCLG9CQUEwQyxFQUMxQyxTQUEyQixFQUMzQixXQUF3QjtRQUh4QixPQUFFLEdBQUYs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dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJV2lkZ2V0Q29tcG9uZW50fSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcbmltcG9ydCB7SWNoYXJ0c30gZnJvbSAnLi4vaWNoYXJ0cyc7XG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdG9yZWRRdWVyaWVzU2VydmljZSwgU3RvcmVkUXVlcnksIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RU1QVFksIHNraXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvZGVzeXN0ZW1Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yayc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tY2hhcnRzLXNldHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c1NldHVwQ29tcG9uZW50IGltcGxlbWVudHMgSVdpZGdldENvbXBvbmVudCwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfd2lkZ2V0Q29uZmlnOiBJY2hhcnRzO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJY2hhcnRzPigpO1xuICBzdG9yZWRRdWVyaWVzOiBTdG9yZWRRdWVyeVtdO1xuICBzZXR1cEZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBzdG9yZWRRdWVyeTogW251bGxdLFxuICAgIGNoYXJ0VHlwZTogW10sXG4gICAgc2l6ZTogWycnLCBbVmFsaWRhdG9ycy5tYXgoMTAwKSwgVmFsaWRhdG9ycy5taW4oMyldXSxcbiAgICBhZ2dyZWdhdGlvbjogW10sXG4gICAgaGlzdG9ncmFtVHlwZTogW10sXG4gICAgaW50ZXJ2YWw6IFtdLFxuICAgIHN0YXJ0aW5ncG9pbnQ6IFtdXG4gIH0pO1xuXG4gIHN0b3JlZFF1ZXJpZXNQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC50aXRsZS5zdG9yZWRxdWVyaWVzJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhZ2dyZWdhdGlvblBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGNoYXJ0VHlwZVBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0VHlwZUZpZWxkJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBoaXN0b2dyYW1UeXBlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBpc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICBzZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9ICcnO1xuICBzdG9yZWRRdWVyeTogU3RvcmVkUXVlcnk7XG5cbiAgQFZpZXdDaGlsZCgnYWdncmVnYXRpb25Db2Rlc3lzdGVtJykgYWdncmVnYXRpb25Db2Rlc3lzdGVtOiBDb2Rlc3lzdGVtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdoaXN0b2dyYW1Db2Rlc3lzdGVtJykgaGlzdG9ncmFtQ29kZXN5c3RlbTogQ29kZXN5c3RlbUNvbXBvbmVudDtcblxuICBASW5wdXQoKSBzZXQgd2lkZ2V0Q29uZmlnKHdjOiBJY2hhcnRzKSB7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnID0gd2M7XG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICB9XG5cbiAgZ2V0IHdpZGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Q29uZmlnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5zZXR1cEZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoc2tpcCgxKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5zZXRXaWRnZXRDb25maWcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmdldFN0b3JlZFF1ZXJ5cygpO1xuICAgIHRoaXMuZ2V0Q2hhcnRGaWVsZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWRnZXRDb25maWcoKSB7XG4gICAgdGhpcy5oaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW0gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuc2V0dXBGb3JtLnZhbGlkICYmIHRoaXMuc3RvcmVkUXVlcmllcykge1xuICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcmllcy5maW5kKChzcSkgPT4gc3EubmFtZSA9PT0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlKTtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnID0ge1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeT8uaWQsXG4gICAgICAgIGZvcm1WYWx1ZTogdGhpcy5zZXR1cEZvcm0udmFsdWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogJydcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuYWdncmVnYXRpb25UeXBlID0gdGhpcy5hZ2dyZWdhdGlvbkNvZGVzeXN0ZW0/LnNlbGVjdGVkTm9kZXM/LmRhdGE/LnR5cGU7XG4gICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnREFURVRJTUUnO1xuICAgICAgfVxuICAgICAgdGhpcy53aWRnZXRDb25maWdDaGFuZ2UuZW1pdCh0aGlzLl93aWRnZXRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5cygpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlXG4gICAgICAuZmV0Y2hTdG9yZWRRdWVyaWVzKCkucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXG4gICAgICApLnN1YnNjcmliZShzdG9yZWRRdWVyaWVzID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzID0gc3RvcmVkUXVlcmllcztcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICAgICAgZW50cmllczogdGhpcy5zdG9yZWRRdWVyaWVzLm1hcChzdG9yZWRRdWVyeSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHN0b3JlZFF1ZXJ5LmlkLFxuICAgICAgICAgICAgbGFiZWw6IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkYXRhOiBzdG9yZWRRdWVyeS5uYW1lXG4gICAgICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5KGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5nZXRTdG9yZWRRdWVyeShpZCkucGlwZShcbiAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpLFxuICAgICAgdGFwKHN0b3JlZFF1ZXJ5ID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHN0b3JlZFF1ZXJ5O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRmllbGQoKSB7XG4gICAgdGhpcy5nZXRIaXN0b2dyYW1GaWVsZCgpO1xuICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlcz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aGlzLmdldEFnZ3JlZ2F0aW9uRmllbGQoJ3N5c2RvY3VtZW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCh0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlc1swXT8ucW5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZ3JlZ2F0aW9uRmllbGQodHlwZSkge1xuICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0RmllbGREZWZpbml0aW9uKHR5cGUpLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShkZWZpbml0aW9uID0+IHtcbiAgICAgIGxldCBleGNsdWRlID0gbmV3IFNldChbJ2ZpbGVuYW1lJywgJ21pbWV0eXBlJywgJ21vZGlmaWVydGl0bGUnLCAndmVyc2lvbicsICdjcmVhdG9ydGl0bGUnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nXSk7XG4gICAgICBpZiAodHlwZSAhPT0gJ3N5c2RvY3VtZW50Jykge1xuICAgICAgICBleGNsdWRlLmFkZCgndHlwZScpO1xuICAgICAgfVxuICAgICAgbGV0IGZpbHRlcmVkRmllbGRzID0gZGVmaW5pdGlvbi5lbGVtZW50cy5maWx0ZXIoZmllbGQgPT4gIWV4Y2x1ZGUuaGFzKGZpZWxkLmhpdG5hbWUpKTtcbiAgICAgIGlmICh0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdsaW5lQ3VydmUnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2xpbmVTdHJhaWdodCcpIHtcbiAgICAgICAgZmlsdGVyZWRGaWVsZHMgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gJ0RBVEVUSU1FJyk7XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgZW50cmllczogZmlsdGVyZWRGaWVsZHMubWFwKGZpZWxkID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogZmllbGQubGFiZWwsXG4gICAgICAgICAgZGF0YTogZmllbGQucW5hbWUsXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZVxuICAgICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hhcnRGaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydFR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnYmFyJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5iYXInKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmJhcidcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAncGllJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5waWUnKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLnBpZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAncGllJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZG9udXQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmRvbnV0J1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5kb251dCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnZG9udXQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVTdHJhaWdodCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZVN0cmFpZ2h0J1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lQ3VydmUnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVDdXJ2ZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZUN1cnZlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lQ3VydmUnLFxuICAgICAgICB9XG4gICAgICBdLm1hcCgocmVzKSA9PiAoe1xuICAgICAgICBpZDogcmVzLmlkLFxuICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJlcy5kZWZhdWx0cmVwcmVzZW50YXRpb24sXG4gICAgICAgIGRhdGE6IHJlcy52YWx1ZVxuICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgIH07XG4gIH1cblxuICBnZXRIaXN0b2dyYW1GaWVsZCgpIHtcbiAgICB0aGlzLmhpc3RvZ3JhbVR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IG51bGw7XG4gICAgbGV0IGVudHJpZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGFpbHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdkYWlseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnd2Vla2x5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ud2Vla2x5J1xuICAgICAgICApLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLndlZWtseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd3ZWVrbHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ21vbnRobHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5tb250aGx5JyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ubW9udGhseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdtb250aGx5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd5ZWFybHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAneWVhcmx5J1xuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogZW50cmllcy5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnkodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc3RvcmVkUXVlcnk6IHRoaXMuc3RvcmVkUXVlcnkgPyB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUgOiAnJyxcbiAgICAgICAgICBjaGFydFR5cGU6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgOiAncGllJyxcbiAgICAgICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgaGlzdG9ncmFtVHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnICYmIHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lmhpc3RvZ3JhbVR5cGUgOiAnbW9udGhseScsXG4gICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuaW50ZXJ2YWwgOiAnJyxcbiAgICAgICAgICBzdGFydGluZ3BvaW50OiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLnN0YXJ0aW5ncG9pbnQgOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zdG9yZWRRdWVyeS50eXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCgnc3lzZG9jdW1lbnQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKHRoaXMuc3RvcmVkUXVlcnkudHlwZXNbMF0ucW5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IG51bGw7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgY2hhcnRUeXBlOiAncGllJyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uIDogJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICAgIGhpc3RvZ3JhbVR5cGU6ICdtb250aGx5JyxcbiAgICAgICAgICAgIHNpemU6ICcnLFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICcnLFxuICAgICAgICAgICAgc3RhcnRpbmdwb2ludDogJycsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGNoYXJ0VHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA6ICdwaWUnLFxuICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgIGhpc3RvZ3JhbVR5cGU6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaGlzdG9ncmFtVHlwZSA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlIDogJ21vbnRobHknLFxuICAgICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSxcbiAgICAgICAgaW50ZXJ2YWw6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuaW50ZXJ2YWwgOiAnJyxcbiAgICAgICAgc3RhcnRpbmdwb2ludDogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5zdGFydGluZ3BvaW50IDogJycsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZXR1cFwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dXBGb3JtXCI+XG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydFR5cGVGaWVsZCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImNoYXJ0VHlwZVwiIFtwaWNrZXJUaXRsZV09XCJjaGFydFR5cGVQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0VHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgKm5nSWY9XCJzdG9yZWRRdWVyaWVzUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZW8uc2VhcmNoLnRpdGxlLnN0b3JlZHF1ZXJpZXMnIHwgdHJhbnNsYXRlXCIgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmRlc2NyaXB0aW9uJ1wiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVkUXVlcnlcIiBbcGlja2VyVGl0bGVdPVwic3RvcmVkUXVlcmllc1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwic3RvcmVkUXVlcmllc1BpY2tlci5jb2Rlc3lzdGVtXCJcbiAgICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmxpc3Qubm90QXZhaWxhYmxlJ1wiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImFnZ3JlZ2F0aW9uUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5hZ2dyZWdhdGlvbkZpZWxkJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gI2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiIFtwaWNrZXJUaXRsZV09XCJhZ2dyZWdhdGlvblBpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRGF0ZVRpbWVUeXBlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiaGlzdG9ncmFtVHlwZVwiIFtwaWNrZXJUaXRsZV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0LmZvcm0ubGFiZWwuZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLnBhcnRpYWxWYWx1ZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJzaXplXCI+PC9lby1udW1iZXI+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiICpuZ0lmPVwic2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdtYXgnKSB8fCBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ21pbicpXCI+XG4gICAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnN0cmluZy5lcnJvci5jbGFzc2lmaWNhdGlvbi5wYXJ0aWFsVmFsdWUgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmludGVydmFsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cImludGVydmFsXCI+PC9lby1udW1iZXI+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5zdGFydGluZ3BvaW50JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0aW5ncG9pbnRcIj48L2VvLW51bWJlcj5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgPC9mb3JtPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwcmV2aWV3XCJcbiAgICAqbmdJZj1cInNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykudmFsdWUgJiYgc2V0dXBGb3JtLmdldCgnY2hhcnRUeXBlJykudmFsdWUgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZSAmJiAoaXNEYXRlVGltZVR5cGUgJiYgc2V0dXBGb3JtLmdldCgnaGlzdG9ncmFtVHlwZScpLnZhbHVlIHx8ICFpc0RhdGVUaW1lVHlwZSk7IGVsc2UgdHBsRW1wdHlcIj5cbiAgICA8ZW8tY2hhcnRzLXdpZGdldCBbd2lkZ2V0Q29uZmlnXT1cIndpZGdldENvbmZpZ1wiIFtlZGl0TW9kZV09XCJ0cnVlXCI+PC9lby1jaGFydHMtd2lkZ2V0PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsRW1wdHk+XG4gICAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgICAgIDxlby1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICBbZW1wdHlTdGF0ZV09XCJ7aWNvbjogJ2ljX3NhdmVkX3NlYXJjaC5zdmcnLCB0ZXh0OiAnZW8ud29ya3NwYWNlLndpZGdldC5jb25maWd1cmF0aW9uLm5vdE9rJ31cIj48L2VvLWVycm9yLW1lc3NhZ2U+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBMEQsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFrRixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEgsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTN0MsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBb0I7SUE0RC9CLElBQWEsWUFBWSxDQUFDLEVBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQ1UsRUFBc0IsRUFDdEIsb0JBQTBDLEVBQzFDLFNBQTJCLEVBQzNCLFdBQXdCLEVBQ3hC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QUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUN4QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRTthQUMvQixDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUN4QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRTthQUMvQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs4R0FyYlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsNFVDZmpDLDh5UUEySkE7O0FENUlhLG9CQUFvQjtJQU5oQyxZQUFZLEVBQUU7R0FNRixvQkFBb0IsQ0FzYmhDOzsyRkF0Ylksb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjsrTUFNakIsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkF1RDZCLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRXJCLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0lXaWRnZXRDb21wb25lbnR9IGZyb20gJ0B5dXV2aXMvd2lkZ2V0LWdyaWQnO1xuaW1wb3J0IHtJY2hhcnRzfSBmcm9tICcuLi9pY2hhcnRzJztcbmltcG9ydCB7Rm9ybUNvbnRyb2xTdGF0dXMsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdG9yZWRRdWVyaWVzU2VydmljZSwgU3RvcmVkUXVlcnksIFN5c3RlbVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RU1QVFksIGRlYm91bmNlVGltZSwgc2tpcCwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29kZXN5c3RlbUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1jaGFydHMtc2V0dXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnRzLXNldHVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnRzLXNldHVwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRzU2V0dXBDb21wb25lbnQgaW1wbGVtZW50cyBJV2lkZ2V0Q29tcG9uZW50LCBPbkluaXQge1xuICBwcml2YXRlIF93aWRnZXRDb25maWc6IEljaGFydHM7XG4gIEBPdXRwdXQoKSB3aWRnZXRDb25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEljaGFydHM+KCk7XG4gIEBPdXRwdXQoKSB3aWRnZXRDb25maWdTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUNvbnRyb2xTdGF0dXM+KCk7XG5cbiAgc3RvcmVkUXVlcmllczogU3RvcmVkUXVlcnlbXTtcbiAgc2V0dXBGb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgc3RvcmVkUXVlcnk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICBjaGFydFR5cGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICBzaXplOiBbMTAsIFtWYWxpZGF0b3JzLm1heCgxMDApLCBWYWxpZGF0b3JzLm1pbigzKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIGFnZ3JlZ2F0aW9uOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgaGlzdG9ncmFtVHlwZTogW251bGxdLFxuICAgIGF0dHJpYnV0TWV0cmljOiBbbnVsbF0sXG4gICAgbWV0cmljOiBbbnVsbF0sXG4gICAgc29ydFJldmVydDogW2ZhbHNlXSxcbiAgICBpbnRlcnZhbDogW251bGxdLFxuICAgIHN0YXJ0aW5ncG9pbnQ6IFtudWxsXSxcbiAgICBtaW5Eb2NDb3VudDogWzFdLFxuICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICB4QXhlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICB5QXhlOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXVxuICB9KTtcblxuICBzdG9yZWRRdWVyaWVzUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmxhYmVsLnN0b3JlZHF1ZXJ5JyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhZ2dyZWdhdGlvblBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGNoYXJ0VHlwZVBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0VHlwZUZpZWxkJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBoaXN0b2dyYW1UeXBlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhdHRyaWJ1dE1ldHJpY1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmF0dHJpYnV0TWV0cmljJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBjaGFydE1ldHJpY1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0TWV0cmljJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBpc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICBpc051bWJlclR5cGUgPSBmYWxzZTtcbiAgc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUgPSAnJztcbiAgc3RvcmVkUXVlcnk6IFN0b3JlZFF1ZXJ5O1xuXG4gIEBWaWV3Q2hpbGQoJ2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbScpIGFnZ3JlZ2F0aW9uQ29kZXN5c3RlbTogQ29kZXN5c3RlbUNvbXBvbmVudDtcblxuICBASW5wdXQoKSBzZXQgd2lkZ2V0Q29uZmlnKHdjOiBJY2hhcnRzKSB7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnID0gd2M7XG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICB9XG5cbiAgZ2V0IHdpZGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Q29uZmlnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlKSB7XG4gICAgdGhpcy5zZXR1cEZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoc2tpcCgxKSwgZGVib3VuY2VUaW1lKDEwMDApLCB1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLnNldFdpZGdldENvbmZpZygpO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0dXBGb3JtLnN0YXR1c0NoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICB0aGlzLndpZGdldENvbmZpZ1N0YXRlQ2hhbmdlLmVtaXQodik7XG4gICAgfSk7XG4gICAgdGhpcy5nZXRTdG9yZWRRdWVyeXMoKTtcbiAgICB0aGlzLmdldENoYXJ0RmllbGQoKTtcbiAgICB0aGlzLmdldE1ldHJpY0NvZGVzeXN0ZW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2lkZ2V0Q29uZmlnKCkge1xuICAgIGlmICh0aGlzLnNldHVwRm9ybS52YWxpZCAmJiB0aGlzLnN0b3JlZFF1ZXJpZXMpIHtcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJpZXMuZmluZCgoc3EpID0+IHNxLm5hbWUgPT09IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZSk7XG4gICAgICB0aGlzLndpZGdldENvbmZpZyA9IHtcbiAgICAgICAgc3RvcmVkUXVlcnk6IHRoaXMuc3RvcmVkUXVlcnk/LmlkLFxuICAgICAgICBmb3JtVmFsdWU6IHRoaXMuc2V0dXBGb3JtLnZhbHVlLFxuICAgICAgICBhZ2dyZWdhdGlvblR5cGU6ICdEQVRFVElNRSdcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IHRoaXMuYWdncmVnYXRpb25Db2Rlc3lzdGVtPy5zZWxlY3RlZE5vZGVzPy5kYXRhPy50eXBlO1xuICAgICAgICB0aGlzLmlzRGF0ZVRpbWVUeXBlID0gdGhpcy53aWRnZXRDb25maWc/LmFnZ3JlZ2F0aW9uVHlwZSA9PT0gJ0RBVEVUSU1FJztcbiAgICAgICAgdGhpcy5pc051bWJlclR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnTlVNQkVSJztcbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnQ2hhbmdlLmVtaXQodGhpcy5fd2lkZ2V0Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdG9yZWRRdWVyeXMoKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZVxuICAgICAgLmZldGNoU3RvcmVkUXVlcmllcygpLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpLFxuICAgICAgKS5zdWJzY3JpYmUoc3RvcmVkUXVlcmllcyA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcmllcyA9IHN0b3JlZFF1ZXJpZXM7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcmllc1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICAgIGVudHJpZXM6IHRoaXMuc3RvcmVkUXVlcmllcy5tYXAoc3RvcmVkUXVlcnkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBzdG9yZWRRdWVyeS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBzdG9yZWRRdWVyeS5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiBzdG9yZWRRdWVyeS5uYW1lLFxuICAgICAgICAgICAgZGF0YTogc3RvcmVkUXVlcnkubmFtZVxuICAgICAgICAgIH0pKS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRTdG9yZWRRdWVyeShpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2UuZ2V0U3RvcmVkUXVlcnkoaWQpLnBpcGUoXG4gICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgIHRhcChzdG9yZWRRdWVyeSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkgPSBzdG9yZWRRdWVyeTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkKCkge1xuICAgIHRoaXMuZ2V0SGlzdG9ncmFtRmllbGQoKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5zdG9yZWRRdWVyeT8udHlwZXM/Lmxlbmd0aCA9PT0gMSA/IHRoaXMuc3RvcmVkUXVlcnk/LnR5cGVzWzBdPy5xbmFtZSA6ICdzeXNkb2N1bWVudCc7XG4gICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKHR5cGUpO1xuICAgIHRoaXMuZ2V0QXR0cmlidXRNZXRyaWNDb2Rlc3lzdGVtKHR5cGUpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25GaWVsZCh0eXBlKSB7XG4gICAgdGhpcy5hZ2dyZWdhdGlvblBpY2tlci5jb2Rlc3lzdGVtID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRGaWVsZERlZmluaXRpb24odHlwZSkucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGUgPSBuZXcgU2V0KFsnZmlsZW5hbWUnLCAnbWltZXR5cGUnLCAnbW9kaWZpZXJ0aXRsZScsICd2ZXJzaW9uJywgJ2NyZWF0b3J0aXRsZScsICd0aXRsZScsICdkZXNjcmlwdGlvbiddKTtcbiAgICAgIGlmICh0eXBlICE9PSAnc3lzZG9jdW1lbnQnKSB7XG4gICAgICAgIGV4Y2x1ZGUuYWRkKCd0eXBlJyk7XG4gICAgICB9XG4gICAgICBsZXQgZmlsdGVyZWRGaWVsZHMgPSBkZWZpbml0aW9uLmVsZW1lbnRzLmZpbHRlcihmaWVsZCA9PiAhZXhjbHVkZS5oYXMoZmllbGQuaGl0bmFtZSkpO1xuICAgICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2xpbmVDdXJ2ZScgfHwgdGhpcy53aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlID09PSAnbGluZVN0cmFpZ2h0Jykge1xuICAgICAgICBmaWx0ZXJlZEZpZWxkcyA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC50eXBlID09PSAnREFURVRJTUUnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgZW50cmllczogZmlsdGVyZWRGaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmxhYmVsID09PSBmaWVsZC5sYWJlbCkubGVuZ3RoID4gMVxuICAgICAgICAgICAgPyBmaWVsZC5sYWJlbCArICcgKCcgKyB0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKGZpZWxkLnFuYW1lLnNwbGl0KCcuJylbMF0pLmxhYmVsICsgJyknXG4gICAgICAgICAgICA6IGZpZWxkLmxhYmVsO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZmllbGQucW5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IGxhYmVsLFxuICAgICAgICAgICAgZGF0YTogZmllbGQucW5hbWUsXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWV0cmljQ29kZXN5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydE1ldHJpY1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdtaW4nLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWluJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1pbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbWluJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnYXZnJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLmF2ZycpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5hdmcnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2F2ZycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21heCcsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5tYXgnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWF4J1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdtYXgnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdtZWRpYW4nLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWVkaWFuJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1lZGlhbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbWVkaWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnc3VtJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLnN1bSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5zdW0nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ3N1bScsXG4gICAgICAgIH1cbiAgICAgIF0ubWFwKChyZXMpID0+ICh7XG4gICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogcmVzLmRlZmF1bHRyZXByZXNlbnRhdGlvbixcbiAgICAgICAgZGF0YTogcmVzLnZhbHVlXG4gICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgfTtcbiAgfVxuXG4gIGdldENoYXJ0RmllbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnRUeXBlUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICBlbnRyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2JhcicsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuYmFyJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5iYXInXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2JhcicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ3BpZScsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUucGllJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5waWUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ3BpZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2RvbnV0JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5kb251dCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUuZG9udXQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ2RvbnV0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGluZVN0cmFpZ2h0JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lU3RyYWlnaHQnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVTdHJhaWdodCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbGluZVN0cmFpZ2h0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGluZUN1cnZlJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5saW5lQ3VydmUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVDdXJ2ZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnbGluZUN1cnZlJyxcbiAgICAgICAgfVxuICAgICAgXS5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0SGlzdG9ncmFtRmllbGQoKSB7XG4gICAgbGV0IGVudHJpZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGFpbHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdkYWlseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnd2Vla2x5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ud2Vla2x5J1xuICAgICAgICApLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLndlZWtseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd3ZWVrbHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ21vbnRobHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5tb250aGx5JyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ubW9udGhseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdtb250aGx5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd5ZWFybHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAneWVhcmx5J1xuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogZW50cmllcy5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QXR0cmlidXRNZXRyaWNDb2Rlc3lzdGVtKHR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRGaWVsZERlZmluaXRpb24odHlwZSkucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGUgPSBuZXcgU2V0KFsnZmlsZW5hbWUnLCAnbWltZXR5cGUnLCAnbW9kaWZpZXJ0aXRsZScsICd2ZXJzaW9uJywgJ2NyZWF0b3J0aXRsZScsICd0aXRsZScsICdkZXNjcmlwdGlvbiddKTtcbiAgICAgIGlmICh0eXBlICE9PSAnc3lzZG9jdW1lbnQnKSB7XG4gICAgICAgIGV4Y2x1ZGUuYWRkKCd0eXBlJyk7XG4gICAgICB9XG4gICAgICBsZXQgZmlsdGVyZWRGaWVsZHMgPSBkZWZpbml0aW9uLmVsZW1lbnRzLmZpbHRlcihmaWVsZCA9PiAhZXhjbHVkZS5oYXMoZmllbGQuaGl0bmFtZSkpO1xuICAgICAgZmlsdGVyZWRGaWVsZHMgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gJ05VTUJFUicpO1xuICAgICAgdGhpcy5hdHRyaWJ1dE1ldHJpY1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICBlbnRyaWVzOiBmaWx0ZXJlZEZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubGFiZWwgPT09IGZpZWxkLmxhYmVsKS5sZW5ndGggPiAxXG4gICAgICAgICAgICA/IGZpZWxkLmxhYmVsICsgJyAoJyArIHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUoZmllbGQucW5hbWUuc3BsaXQoJy4nKVswXSkubGFiZWwgKyAnKSdcbiAgICAgICAgICAgIDogZmllbGQubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogbGFiZWwsXG4gICAgICAgICAgICBkYXRhOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxGb3JtVmFsdWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGFydFR5cGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgfHwgJ3BpZScsXG4gICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSB8fCAxMCxcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYWdncmVnYXRpb24gfHwgJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgIGhpc3RvZ3JhbVR5cGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlIHx8ICdtb250aGx5JyxcbiAgICAgIGF0dHJpYnV0TWV0cmljOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgfHwgJycsXG4gICAgICBtZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5tZXRyaWMgfHwgJ3N1bScsXG4gICAgICBzb3J0UmV2ZXJ0OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc29ydFJldmVydCB8fCAnJyxcbiAgICAgIGludGVydmFsOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaW50ZXJ2YWwgfHwgMTAwMCxcbiAgICAgIHN0YXJ0aW5ncG9pbnQ6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5zdGFydGluZ3BvaW50IHx8IDAsXG4gICAgICBtaW5fZG9jX2NvdW50OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWluRG9jQ291bnQgfHwgMSxcbiAgICAgIHRpdGxlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8udGl0bGUgfHwgJycsXG4gICAgICB4QXhlOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ueEF4ZSB8fCAnJyxcbiAgICAgIHlBeGU6IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy55QXhlIHx8ICcnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVR5cGVGbGFncygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlZFF1ZXJ5U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnkodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeSA/IHRoaXMuc3RvcmVkUXVlcnkubmFtZSA6ICcnLFxuICAgICAgICAuLi50aGlzLmdldEluaXRpYWxGb3JtVmFsdWVzKCksXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTYXZlZFNlYXJjaE5hbWUgPSB0aGlzLnNldHVwRm9ybS5nZXQoJ3N0b3JlZFF1ZXJ5JykudmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgYWdncmVnYXRpb246IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hZ2dyZWdhdGlvbiB8fCAnc3lzb2JqZWN0LmNyZWF0ZWQnLFxuICAgICAgICAgIGF0dHJpYnV0TWV0cmljOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgfHwgJycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVR5cGVGbGFncygpO1xuICAgICAgfVxuICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5xdWVyeUVycm9yKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcXVlcnlFcnJvcihlcnJvcjogYW55KSB7XG4gICAgdGhpcy5pc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNOdW1iZXJUeXBlID0gZmFsc2U7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IG51bGw7XG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICB0aGlzLnNldHVwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgLi4udGhpcy5nZXRJbml0aWFsRm9ybVZhbHVlcygpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIC4uLnRoaXMuZ2V0SW5pdGlhbEZvcm1WYWx1ZXMoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNldHVwXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dXBGb3JtXCI+XG4gICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydFR5cGVGaWVsZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdjaGFydFR5cGUnKS5pbnZhbGlkXCI+XG4gICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJjaGFydFR5cGVcIiBbcGlja2VyVGl0bGVdPVwiY2hhcnRUeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0VHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdjaGFydFR5cGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoc3RvcmVkUXVlcmllc1BpY2tlcj8uY29kZXN5c3RlbT8uZW50cmllcykge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5sYWJlbC5zdG9yZWRxdWVyeScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmRlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS5pbnZhbGlkXCI+XG4gICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cInN0b3JlZFF1ZXJ5XCIgW3BpY2tlclRpdGxlXT1cInN0b3JlZFF1ZXJpZXNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJzdG9yZWRRdWVyaWVzUGlja2VyLmNvZGVzeXN0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmxpc3Qubm90QXZhaWxhYmxlJ1wiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3N0b3JlZFF1ZXJ5JykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKGFnZ3JlZ2F0aW9uUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWxpZCkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdhZ2dyZWdhdGlvbicpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gI2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiIFtwaWNrZXJUaXRsZV09XCJhZ2dyZWdhdGlvblBpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImFnZ3JlZ2F0aW9uUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdhZ2dyZWdhdGlvbicpLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgdHJhbnNsYXRlPlxuICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ucGFydGlhbFZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc2l6ZScpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cInNpemVcIj48L2VvLW51bWJlcj5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ3NpemUnKS5pbnZhbGlkKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgdHJhbnNsYXRlPlxuICAgICAgICAgIEBpZiAoc2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkXG4gICAgICAgICAgfSBAZWxzZSBpZiAoc2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdtYXgnKSB8fCBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ21pbicpKSB7XG4gICAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnN0cmluZy5lcnJvci5jbGFzc2lmaWNhdGlvbi5wYXJ0aWFsVmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoaXNEYXRlVGltZVR5cGUpIHtcbiAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnaGlzdG9ncmFtVHlwZScpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiaGlzdG9ncmFtVHlwZVwiIFtwaWNrZXJUaXRsZV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIH1cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hZ2dyZWdhdGlvbiAmJiAhaXNEYXRlVGltZVR5cGUgJiYgIWlzTnVtYmVyVHlwZSkge1xuICAgICAgQGlmICh3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ2JhcicpIHtcbiAgICAgICAgPGVvLWZvcm0taW5wdXQgY2xhc3M9XCJsYWJlbCBjaGVja2JveFwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLnNvcnRSZXZlcnQnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIj5cbiAgICAgICAgICA8ZW8tY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic29ydFJldmVydFwiIFt0cmlzdGF0ZV09XCJmYWxzZVwiPjwvZW8tY2hlY2tib3g+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICAgIEBpZiAod2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5jaGFydFR5cGUgPT09ICdiYXInIHx8IHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAncGllJyB8fCB3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ3JpbmcnICYmICF3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgJiYgIWlzTnVtYmVyVHlwZSkge1xuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cInRocmVzaG9sZC1zdWNjZXNzXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLm1pbkRvY0NvdW50JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5Eb2NDb3VudFwiPlxuICAgICAgICAgIDwvZW8tbnVtYmVyPlxuICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIChpc051bWJlclR5cGUpIHtcbiAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5pbnRlcnZhbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2ludGVydmFsJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIj48L2VvLW51bWJlcj5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnN0YXJ0aW5ncG9pbnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzdGFydGluZ3BvaW50JykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRpbmdwb2ludFwiPjwvZW8tbnVtYmVyPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIH1cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdiYXInICYmIGF0dHJpYnV0TWV0cmljUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWxpZCAmJiAhaXNOdW1iZXJUeXBlICYmICFpc0RhdGVUaW1lVHlwZSkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmF0dHJpYnV0TWV0cmljJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhdHRyaWJ1dE1ldHJpY1wiIFtwaWNrZXJUaXRsZV09XCJhdHRyaWJ1dE1ldHJpY1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImF0dHJpYnV0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2JhcicgJiYgd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmF0dHJpYnV0TWV0cmljKSB7XG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydE1ldHJpYycgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJtZXRyaWNcIiBbcGlja2VyVGl0bGVdPVwiY2hhcnRNZXRyaWNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eVBpY2tlclwiPlxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgndGl0bGUnKS5pbnZhbGlkXCI+XG4gICAgICAgICAgPGVvLXN0cmluZyBhdXRvY29tcGxldGU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd0aXRsZScpLmludmFsaWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwie21heGxlbmd0aDogNTB9XCIgdHJhbnNsYXRlPmVvLmZvcm0ucHJvcGVydHkubWF4bGVuZ3RoPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAncGllJyAmJiB3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAnZG9udXQnKSB7XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnhBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInhBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnlBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInlBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbkBpZiAoc2V0dXBGb3JtLnZhbGlkKSB7XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3XCI+XG4gICAgPGVvLWNoYXJ0cy13aWRnZXQgW3dpZGdldENvbmZpZ109XCJ3aWRnZXRDb25maWdcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiPjwvZW8tY2hhcnRzLXdpZGdldD5cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgPGVvLWVycm9yLW1lc3NhZ2VcbiAgICAgIFtlbXB0eVN0YXRlXT1cIntpY29uOiAnaWNfc2F2ZWRfc2VhcmNoLnN2ZycsIHRleHQ6ICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNvbmZpZ3VyYXRpb24ubm90T2snfVwiPjwvZW8tZXJyb3ItbWVzc2FnZT5cbiAgPC9kaXY+XG59XG4iXX0=
|