@koobiq/components 18.38.1 → 18.39.1
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-switcher/app-switcher.d.ts +4 -3
- package/checkbox/checkbox.scss +5 -21
- package/code-block/code-block.scss +2 -2
- package/core/option/option.d.ts +1 -0
- package/core/styles/visual/_layout.scss +10 -0
- package/dropdown/dropdown.scss +1 -0
- package/esm2022/app-switcher/app-switcher.mjs +20 -17
- package/esm2022/checkbox/checkbox.mjs +2 -2
- package/esm2022/code-block/code-block.mjs +3 -3
- package/esm2022/core/option/option.mjs +3 -1
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +2 -4
- package/esm2022/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/filter-bar/filter-bar.mjs +5 -19
- package/esm2022/filter-bar/filter-search.mjs +39 -11
- package/esm2022/filter-bar/pipes/pipe-date.mjs +4 -1
- package/esm2022/filter-bar/pipes/pipe-datetime.mjs +5 -2
- package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +35 -14
- package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +40 -11
- package/esm2022/input/input-number.mjs +3 -1
- package/esm2022/list/list-selection.component.mjs +10 -4
- package/esm2022/loader-overlay/loader-overlay.component.mjs +2 -2
- package/esm2022/popover/popover-confirm.component.mjs +3 -3
- package/esm2022/popover/popover.component.mjs +3 -3
- package/esm2022/select/select.component.mjs +4 -2
- package/esm2022/time-range/time-range-editor.mjs +2 -2
- package/esm2022/timepicker/timepicker.directive.mjs +59 -9
- package/esm2022/tooltip/tooltip.component.mjs +3 -3
- package/fesm2022/koobiq-components-app-switcher.mjs +19 -16
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +2 -2
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +2 -2
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +3 -1
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +3 -5
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +122 -53
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +2 -0
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +9 -3
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +4 -4
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +4 -2
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +1 -1
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +58 -8
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +2 -2
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/filter-bar/filter-bar.d.ts +1 -1
- package/filter-bar/filter-search.d.ts +17 -4
- package/filter-bar/pipes/pipe-multi-select.d.ts +4 -1
- package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -0
- package/list/list-selection.component.d.ts +4 -2
- package/loader-overlay/loader-overlay.scss +22 -31
- package/package.json +4 -4
- package/popover/_popover-theme.scss +2 -2
- package/popover/popover.scss +3 -2
- package/schematics/ng-add/index.js +2 -2
- package/timepicker/timepicker.directive.d.ts +16 -6
- package/tooltip/_tooltip-theme.scss +5 -6
|
@@ -116,8 +116,7 @@ export declare class KbqAppSwitcherTrigger extends KbqPopUpTrigger<KbqAppSwitche
|
|
|
116
116
|
/** Whether the sites are used or not
|
|
117
117
|
* @docs-private */
|
|
118
118
|
get sitesMode(): boolean;
|
|
119
|
-
/**
|
|
120
|
-
* @docs-private */
|
|
119
|
+
/** @docs-private */
|
|
121
120
|
get currentApps(): KbqAppSwitcherApp[];
|
|
122
121
|
/** Selected application */
|
|
123
122
|
selectedApp: KbqAppSwitcherApp;
|
|
@@ -131,7 +130,9 @@ export declare class KbqAppSwitcherTrigger extends KbqPopUpTrigger<KbqAppSwitche
|
|
|
131
130
|
get sites(): KbqAppSwitcherSite[];
|
|
132
131
|
set sites(value: KbqAppSwitcherSite[]);
|
|
133
132
|
private _parsedSites;
|
|
134
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* @deprecated Will be removed in next major release, use `sites` with one element instead.
|
|
135
|
+
*/
|
|
135
136
|
get apps(): KbqAppSwitcherApp[];
|
|
136
137
|
set apps(apps: KbqAppSwitcherApp[]);
|
|
137
138
|
private makeGroupsForApps;
|
package/checkbox/checkbox.scss
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
@use '../core/styles/common/tokens' as *;
|
|
2
1
|
@use './checkbox-theme' as *;
|
|
3
2
|
|
|
4
3
|
.kbq-checkbox-checkmark,
|
|
@@ -27,10 +26,7 @@
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
.kbq-checkbox__layout {
|
|
30
|
-
|
|
31
|
-
[checkbox-size-normal-width,
|
|
32
|
-
checkbox-size-normal-horizontal-content-padding]
|
|
33
|
-
);
|
|
29
|
+
--padding: calc(var(--kbq-checkbox-size-normal-width) + var(--kbq-checkbox-size-normal-horizontal-content-padding));
|
|
34
30
|
|
|
35
31
|
box-sizing: initial;
|
|
36
32
|
|
|
@@ -39,7 +35,7 @@
|
|
|
39
35
|
|
|
40
36
|
display: inline-flex;
|
|
41
37
|
|
|
42
|
-
max-width: calc(100% -
|
|
38
|
+
max-width: calc(100% - var(--padding));
|
|
43
39
|
|
|
44
40
|
// `cursor: inherit` ensures that the wrapper element gets the same cursor as the kbq-checkbox
|
|
45
41
|
// (e.g. pointer by default, regular when disabled), instead of the browser default.
|
|
@@ -49,7 +45,7 @@
|
|
|
49
45
|
|
|
50
46
|
padding-bottom: var(--kbq-checkbox-size-normal-padding-bottom);
|
|
51
47
|
|
|
52
|
-
padding-left:
|
|
48
|
+
padding-left: var(--padding);
|
|
53
49
|
|
|
54
50
|
vertical-align: top;
|
|
55
51
|
}
|
|
@@ -104,16 +100,7 @@
|
|
|
104
100
|
}
|
|
105
101
|
|
|
106
102
|
.kbq-checkbox.kbq-checkbox_big {
|
|
107
|
-
|
|
108
|
-
$padding-left: kbq-sum-series-css-variables(
|
|
109
|
-
[ checkbox-size-normal-width,
|
|
110
|
-
checkbox-size-normal-horizontal-content-padding]
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
max-width: calc(100% - $padding-left);
|
|
114
|
-
|
|
115
|
-
padding-left: $padding-left;
|
|
116
|
-
}
|
|
103
|
+
--padding: calc(var(--kbq-checkbox-size-big-width) + var(--kbq-checkbox-size-big-horizontal-content-padding));
|
|
117
104
|
|
|
118
105
|
& .kbq-checkbox__inner-container {
|
|
119
106
|
top: var(--kbq-checkbox-size-big-top);
|
|
@@ -152,10 +139,7 @@
|
|
|
152
139
|
.kbq-checkbox_label-before {
|
|
153
140
|
.kbq-checkbox__layout {
|
|
154
141
|
padding-left: 0;
|
|
155
|
-
padding-right:
|
|
156
|
-
[ checkbox-size-normal-width,
|
|
157
|
-
checkbox-size-normal-horizontal-content-padding]
|
|
158
|
-
);
|
|
142
|
+
padding-right: var(--padding);
|
|
159
143
|
}
|
|
160
144
|
|
|
161
145
|
.kbq-checkbox__inner-container {
|
|
@@ -139,8 +139,8 @@
|
|
|
139
139
|
display: none;
|
|
140
140
|
position: absolute;
|
|
141
141
|
top: 0;
|
|
142
|
-
right:
|
|
143
|
-
padding: var(--kbq-size-s) var(--kbq-size-m);
|
|
142
|
+
right: var(--kbq-size-m);
|
|
143
|
+
padding: var(--kbq-size-s) 0 var(--kbq-size-s) var(--kbq-size-m);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
.kbq-code-block__main {
|
package/core/option/option.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class KbqOptionSelectionChange<T = KbqOption> {
|
|
|
17
17
|
export interface KbqOptionParentComponent {
|
|
18
18
|
multiple?: boolean;
|
|
19
19
|
multiSelection?: boolean;
|
|
20
|
+
withVirtualScroll?: boolean;
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
23
|
* Handler that will update scroll position of elements inside overlay
|
|
@@ -500,6 +500,16 @@
|
|
|
500
500
|
.layout-#{$indent}-left-#{$name} {
|
|
501
501
|
#{$indent}-left: $value !important;
|
|
502
502
|
}
|
|
503
|
+
|
|
504
|
+
.layout-#{$indent}-vertical-#{$name} {
|
|
505
|
+
#{$indent}-top: $value !important;
|
|
506
|
+
#{$indent}-bottom: $value !important;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
.layout-#{$indent}-horizontal-#{$name} {
|
|
510
|
+
#{$indent}-left: $value !important;
|
|
511
|
+
#{$indent}-right: $value !important;
|
|
512
|
+
}
|
|
503
513
|
}
|
|
504
514
|
|
|
505
515
|
.layout-#{$indent}-no-top {
|
package/dropdown/dropdown.scss
CHANGED
|
@@ -142,7 +142,7 @@ export class KbqAppSwitcherComponent extends KbqPopUp {
|
|
|
142
142
|
this.configuration = KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION;
|
|
143
143
|
}
|
|
144
144
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: KbqAppSwitcherComponent, isStandalone: true, selector: "kbq-app-switcher", host: { classAttribute: "kbq-app-switcher" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true }, { propertyName: "otherSites", first: true, predicate: ["otherSites"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqCleaner, selector: "kbq-cleaner", exportAs: ["kbqCleaner"] }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i3.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i5.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqBadgeModule }, { kind: "component", type: i6.KbqBadge, selector: "kbq-badge", inputs: ["compact", "outline", "badgeColor"] }, { kind: "directive", type: i6.KbqBadgeCssStyler, selector: "kbq-badge" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i7.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "directive", type: i7.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: i7.KbqDropdownStaticContent, selector: "[kbqDropdownStaticContent]" }, { kind: "ngmodule", type: KbqScrollbarModule }, { kind: "component", type: i8.KbqScrollbar, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: ["initializationTarget", "options", "events", "defer"], outputs: ["onInitialize", "onUpdate", "onDestroy", "onScroll"], exportAs: ["kbqScrollbar"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "component", type: i9.KbqOptgroup, selector: "kbq-optgroup", inputs: ["label", "disabled"], exportAs: ["kbqOptgroup"] }, { kind: "component", type: KbqAppSwitcherDropdownApp, selector: "[kbq-app-switcher-dropdown-app]", inputs: ["kbq-app-switcher-dropdown-app"], exportAs: ["kbqAppSwitcherDropdownApp"] }, { kind: "component", type: KbqAppSwitcherDropdownSite, selector: "[kbq-app-switcher-dropdown-site]", inputs: ["kbq-app-switcher-dropdown-site"], exportAs: ["kbqAppSwitcherDropdownSite"] }, { kind: "component", type: KbqAppSwitcherListItem, selector: "[kbq-app-switcher-list-item]", inputs: ["app", "toggle", "collapsed"], exportAs: ["kbqAppSwitcherApp"] }], animations: [kbqAppSwitcherAnimations.state], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
145
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: KbqAppSwitcherComponent, isStandalone: true, selector: "kbq-app-switcher", host: { classAttribute: "kbq-app-switcher" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true }, { propertyName: "otherSites", first: true, predicate: ["otherSites"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqCleaner, selector: "kbq-cleaner", exportAs: ["kbqCleaner"] }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i3.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i5.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqBadgeModule }, { kind: "component", type: i6.KbqBadge, selector: "kbq-badge", inputs: ["compact", "outline", "badgeColor"] }, { kind: "directive", type: i6.KbqBadgeCssStyler, selector: "kbq-badge" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i7.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "directive", type: i7.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: i7.KbqDropdownStaticContent, selector: "[kbqDropdownStaticContent]" }, { kind: "ngmodule", type: KbqScrollbarModule }, { kind: "component", type: i8.KbqScrollbar, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: ["initializationTarget", "options", "events", "defer"], outputs: ["onInitialize", "onUpdate", "onDestroy", "onScroll"], exportAs: ["kbqScrollbar"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "component", type: i9.KbqOptgroup, selector: "kbq-optgroup", inputs: ["label", "disabled"], exportAs: ["kbqOptgroup"] }, { kind: "component", type: KbqAppSwitcherDropdownApp, selector: "[kbq-app-switcher-dropdown-app]", inputs: ["kbq-app-switcher-dropdown-app"], exportAs: ["kbqAppSwitcherDropdownApp"] }, { kind: "component", type: KbqAppSwitcherDropdownSite, selector: "[kbq-app-switcher-dropdown-site]", inputs: ["kbq-app-switcher-dropdown-site"], exportAs: ["kbqAppSwitcherDropdownSite"] }, { kind: "component", type: KbqAppSwitcherListItem, selector: "[kbq-app-switcher-list-item]", inputs: ["app", "toggle", "collapsed"], exportAs: ["kbqAppSwitcherApp"] }], animations: [kbqAppSwitcherAnimations.state], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
146
146
|
}
|
|
147
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherComponent, decorators: [{
|
|
148
148
|
type: Component,
|
|
@@ -164,7 +164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
164
164
|
KbqAppSwitcherDropdownSite,
|
|
165
165
|
KbqAppSwitcherListItem,
|
|
166
166
|
JsonPipe
|
|
167
|
-
], animations: [kbqAppSwitcherAnimations.state], template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"] }]
|
|
167
|
+
], animations: [kbqAppSwitcherAnimations.state], template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"] }]
|
|
168
168
|
}], ctorParameters: () => [], propDecorators: { input: [{
|
|
169
169
|
type: ViewChild,
|
|
170
170
|
args: [KbqInput]
|
|
@@ -223,18 +223,14 @@ export class KbqAppSwitcherTrigger extends KbqPopUpTrigger {
|
|
|
223
223
|
/** Number of applications to choose from
|
|
224
224
|
* @docs-private */
|
|
225
225
|
get appsCount() {
|
|
226
|
-
|
|
227
|
-
return this.originalSites.reduce((acc, site) => acc + site.apps.length, 0);
|
|
228
|
-
}
|
|
229
|
-
return this.originalApps.length;
|
|
226
|
+
return this.originalSites.reduce((acc, site) => acc + site.apps.length, 0);
|
|
230
227
|
}
|
|
231
228
|
/** Whether the sites are used or not
|
|
232
229
|
* @docs-private */
|
|
233
230
|
get sitesMode() {
|
|
234
|
-
return this.originalSites
|
|
231
|
+
return this.originalSites.length > 1;
|
|
235
232
|
}
|
|
236
|
-
/**
|
|
237
|
-
* @docs-private */
|
|
233
|
+
/** @docs-private */
|
|
238
234
|
get currentApps() {
|
|
239
235
|
return this.sitesMode ? this.selectedSite.apps : this._parsedApps;
|
|
240
236
|
}
|
|
@@ -244,14 +240,21 @@ export class KbqAppSwitcherTrigger extends KbqPopUpTrigger {
|
|
|
244
240
|
}
|
|
245
241
|
set sites(value) {
|
|
246
242
|
this.originalSites = value;
|
|
247
|
-
this.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
this._parsedSites
|
|
252
|
-
|
|
243
|
+
if (this.originalSites.length === 1) {
|
|
244
|
+
this._parsedApps = this.makeGroupsForApps(this.originalSites[0].apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this._parsedSites = [];
|
|
248
|
+
value.forEach((site) => {
|
|
249
|
+
const newSite = { ...site, apps: [] };
|
|
250
|
+
newSite.apps = this.makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
|
|
251
|
+
this._parsedSites.push(newSite);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
253
254
|
}
|
|
254
|
-
/**
|
|
255
|
+
/**
|
|
256
|
+
* @deprecated Will be removed in next major release, use `sites` with one element instead.
|
|
257
|
+
*/
|
|
255
258
|
get apps() {
|
|
256
259
|
return this._parsedApps;
|
|
257
260
|
}
|
|
@@ -443,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
443
446
|
}], selectedAppChange: [{
|
|
444
447
|
type: Output
|
|
445
448
|
}] } });
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN3aXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUdILE9BQU8sRUFHVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUdILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixRQUFRLEVBQ1IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNqQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxN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ckIscUJBQXFCLDRNQThEVixlQUFlLHNIQWlHZixnQkFBZ0I7OzRGQS9KM0IscUJBQXFCO2tCQVhqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0YsK0JBQStCLEVBQUUsUUFBUTt3QkFDekMsb0JBQW9CLEVBQUUsMkJBQTJCO3dCQUNqRCxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxZQUFZLEVBQUUsbUJBQW1CO3FCQUNwQztpQkFDSjs4QkFzRFksV0FBVztzQkFBbkIsS0FBSztnQkFHNEIsU0FBUztzQkFBMUMsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBR3ZCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR2lDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUlqQyxLQUFLO3NCQURSLEtBQUs7Z0JBdUJGLElBQUk7c0JBRFAsS0FBSztnQkFzQ0YsT0FBTztzQkFEVixLQUFLO2dCQW1CRixZQUFZO3NCQURmLEtBQUs7Z0JBa0JGLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFtQkMsZUFBZTtzQkFBckQsTUFBTTt1QkFBQyxvQkFBb0I7Z0JBR1MsYUFBYTtzQkFBakQsTUFBTTt1QkFBQyxrQkFBa0I7Z0JBR1Asa0JBQWtCO3NCQUFwQyxNQUFNO2dCQUVZLGlCQUFpQjtzQkFBbkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENka1Njcm9sbGFibGUsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbmZpZyxcbiAgICBTY3JvbGxTdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBpbmplY3QsXG4gICAgbnVtYmVyQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS2JxQmFkZ2VNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHtcbiAgICBLQlFfTE9DQUxFX1NFUlZJQ0UsXG4gICAgS2JxT3B0aW9uTW9kdWxlLFxuICAgIEticVBvcFVwLFxuICAgIEticVBvcFVwVHJpZ2dlcixcbiAgICBQT1NJVElPTl9UT19DU1NfTUFQLFxuICAgIFBvcFVwUGxhY2VtZW50cyxcbiAgICBQb3BVcFNpemVzLFxuICAgIFBvcFVwVHJpZ2dlcnMsXG4gICAgYXBwbHlQb3B1cE1hcmdpbnMsXG4gICAgcnVSVUxvY2FsZURhdGFcbn0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRGl2aWRlck1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9kaXZpZGVyJztcbmltcG9ydCB7IEticURyb3Bkb3duTW9kdWxlLCBLYnFEcm9wZG93blRyaWdnZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticUlucHV0LCBLYnFJbnB1dE1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEticVNjcm9sbGJhck1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9zY3JvbGxiYXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsga2JxQXBwU3dpdGNoZXJBbmltYXRpb25zIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duQXBwIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItZHJvcGRvd24tYXBwJztcbmltcG9ydCB7IEticUFwcFN3aXRjaGVyRHJvcGRvd25TaXRlIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItZHJvcGRvd24tc2l0ZSc7XG5pbXBvcnQgeyBLYnFBcHBTd2l0Y2hlckxpc3RJdGVtIH0gZnJvbSAnLi9rYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2JxQXBwU3dpdGNoZXJBcHAge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHR5cGU/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGNhcHRpb24/OiBzdHJpbmc7XG4gICAgYWxpYXNlcz86IEticUFwcFN3aXRjaGVyQXBwW107XG4gICAgbGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLYnFBcHBTd2l0Y2hlclNpdGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIGFwcHM6IEticUFwcFN3aXRjaGVyQXBwW107XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEdyb3VwQnkoXG4gICAgYXBwOiBLYnFBcHBTd2l0Y2hlckFwcCxcbiAgICBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPixcbiAgICB1bnR5cGVkOiBLYnFBcHBTd2l0Y2hlckFwcFtdXG4pIHtcbiAgICBpZiAoIWFwcC50eXBlKSB7XG4gICAgICAgIHVudHlwZWQucHVzaChhcHApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwcFR5cGUgPSBhcHAudHlwZS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChncm91cHNbYXBwVHlwZV0pIHtcbiAgICAgICAgICAgIGdyb3Vwc1thcHBUeXBlXS5hbGlhc2VzIS5wdXNoKGFwcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cHNbYXBwVHlwZV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXBwVHlwZSxcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbYXBwXSxcbiAgICAgICAgICAgICAgICBpY29uOiBhcHAuaWNvbixcbiAgICAgICAgICAgICAgICBpZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBLQlFfTUlOX05VTUJFUl9PRl9BUFBTX1RPX0VOQUJMRV9TRUFSQ0g6IG51bWJlciA9IDc7XG5leHBvcnQgY29uc3QgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfR1JPVVBJTkc6IG51bWJlciA9IDM7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gU2Nyb2xsU3RyYXRlZ3k+KFxuICAgICdrYnEtYXBwLXN3aXRjaGVyLXNjcm9sbC1zdHJhdGVneSdcbik7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24ga2JxQXBwU3dpdGNoZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnkob3ZlcmxheTogT3ZlcmxheSk6ICgpID0+IFNjcm9sbFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMjAgfSk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBLQlFfQVBQX1NXSVRDSEVSX1NDUk9MTF9TVFJBVEVHWSxcbiAgICBkZXBzOiBbT3ZlcmxheV0sXG4gICAgdXNlRmFjdG9yeToga2JxQXBwU3dpdGNoZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnlcbn07XG5cbi8qKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgYXBwLXN3aXRjaGVyICovXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BUFBfU1dJVENIRVJfREVGQVVMVF9DT05GSUdVUkFUSU9OID0gcnVSVUxvY2FsZURhdGEuYXBwU3dpdGNoZXI7XG5cbi8qKiBJbmplY3Rpb24gVG9rZW4gZm9yIHByb3ZpZGluZyBjb25maWd1cmF0aW9uIG9mIGFwcC1zd2l0Y2hlciAqL1xuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfQVBQX1NXSVRDSEVSX0NPTkZJR1VSQVRJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0ticUFwcFN3aXRjaGVyQ29uZmlndXJhdGlvbicpO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1hcHAtc3dpdGNoZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHAtc3dpdGNoZXIuaHRtbCcsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXBwLXN3aXRjaGVyLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWFwcC1zd2l0Y2hlcidcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBLYnFGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIEticUlucHV0TW9kdWxlLFxuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFEaXZpZGVyTW9kdWxlLFxuICAgICAgICBLYnFCYWRnZU1vZHVsZSxcbiAgICAgICAgS2JxRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIEticVNjcm9sbGJhck1vZHVsZSxcbiAgICAgICAgS2JxT3B0aW9uTW9kdWxlLFxuICAgICAgICBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duQXBwLFxuICAgICAgICBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duU2l0ZSxcbiAgICAgICAgS2JxQXBwU3dpdGNoZXJMaXN0SXRlbSxcbiAgICAgICAgSnNvblBpcGVcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtrYnFBcHBTd2l0Y2hlckFuaW1hdGlvbnMuc3RhdGVdXG59KVxuZXhwb3J0IGNsYXNzIEticUFwcFN3aXRjaGVyQ29tcG9uZW50IGV4dGVuZHMgS2JxUG9wVXAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHJlYWRvbmx5IGV4dGVybmFsQ29uZmlndXJhdGlvbiA9IGluamVjdChLQlFfQVBQX1NXSVRDSEVSX0NPTkZJR1VSQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICBjb25maWd1cmF0aW9uO1xuXG4gICAgLyoqIGxvY2FsaXplZCBkYXRhXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVhZG9ubHkgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGZpbHRlcmVkU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcmVmaXggPSAna2JxLWFwcC1zd2l0Y2hlcic7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IEticUFwcFN3aXRjaGVyVHJpZ2dlcjtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgaXNUcmFwRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIGFjdGl2ZVNpdGU6IEticUFwcFN3aXRjaGVyU2l0ZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBhY3RpdmVBcHA6IEticUFwcFN3aXRjaGVyQXBwO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAVmlld0NoaWxkKEticUlucHV0KSBpbnB1dDogS2JxSW5wdXQ7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAVmlld0NoaWxkKCdvdGhlclNpdGVzJykgb3RoZXJTaXRlczogS2JxRHJvcGRvd25UcmlnZ2VyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgIT09IG51bGwgJiYgc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhcHBseVBvcHVwTWFyZ2lucyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm9mZnNldCEudG9TdHJpbmcoKX1weGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+ICh0aGlzLmZpbHRlcmVkU2l0ZXMgPSB0aGlzLmZpbHRlclNpdGVzKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50OiBzdHJpbmcsIGN1c3RvbUNsYXNzOiBzdHJpbmcsIHNpemU6IFBvcFVwU2l6ZXMpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50LCBjdXN0b21DbGFzcywgeyBbYCR7dGhpcy5wcmVmaXh9XyR7c2l6ZX1gXTogISFzaXplIH0pO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlVHJhcEZvY3VzKGlzVHJhcEZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNUcmFwRm9jdXMgPSBpc1RyYXBGb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGVzY2FwZUhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHNlbGVjdEFwcEluU2l0ZShzaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUsIGFwcDogS2JxQXBwU3dpdGNoZXJBcHApIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLnNlbGVjdGVkU2l0ZSA9IHNpdGU7XG4gICAgICAgIHRoaXMudHJpZ2dlci5zZWxlY3RlZEFwcCA9IGFwcDtcblxuICAgICAgICB0aGlzLnRyaWdnZXIuc2VsZWN0ZWRTaXRlQ2hhbmdlLmVtaXQoc2l0ZSk7XG4gICAgICAgIHRoaXMudHJpZ2dlci5zZWxlY3RlZEFwcENoYW5nZS5lbWl0KGFwcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJTaXRlcyhxdWVyeTogc3RyaW5nIHwgbnVsbCk6IEticUFwcFN3aXRjaGVyU2l0ZVtdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRTaXRlcyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyaWdnZXIub3JpZ2luYWxTaXRlcyk7XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5XG4gICAgICAgICAgICA/IGZpbHRlcmVkU2l0ZXMuZmlsdGVyKChzaXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFwcHMgPSBzaXRlLmFwcHMuZmlsdGVyKChhcHApID0+IGFwcC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNpdGUuYXBwcyA9IGZpbHRlcmVkQXBwcztcblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IGZpbHRlcmVkU2l0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHRoaXMuZXh0ZXJuYWxDb25maWd1cmF0aW9uIHx8IHRoaXMubG9jYWxlU2VydmljZT8uZ2V0UGFyYW1zKCdhcHBTd2l0Y2hlcicpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IEtCUV9BUFBfU1dJVENIRVJfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1trYnFBcHBTd2l0Y2hlcl0nLFxuICAgIGV4cG9ydEFzOiAna2JxQXBwU3dpdGNoZXInLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5rYnEtYXBwLXN3aXRjaGVyX29wZW5dJzogJ2lzT3BlbicsXG4gICAgICAgICdbY2xhc3Mua2JxLWFjdGl2ZV0nOiAnaGFzQ2xpY2tUcmlnZ2VyICYmIGlzT3BlbicsXG4gICAgICAgICcoa2V5ZG93biknOiAna2V5ZG93bkhhbmRsZXIoJGV2ZW50KScsXG4gICAgICAgICcodG91Y2hlbmQpJzogJ3RvdWNoZW5kSGFuZGxlcigpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQXBwU3dpdGNoZXJUcmlnZ2VyXG4gICAgZXh0ZW5kcyBLYnFQb3BVcFRyaWdnZXI8S2JxQXBwU3dpdGNoZXJDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXRcbntcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBzY3JvbGxTdHJhdGVneTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kgPSBpbmplY3QoS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1kpO1xuXG4gICAgLy8gbm90IHVzZWRcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGFycm93OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjdXN0b21DbGFzczogc3RyaW5nO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBoYXNCYWNrZHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBzaXplOiBQb3BVcFNpemVzID0gUG9wVXBTaXplcy5NZWRpdW07XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgaGVhZGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBjbG9zZU9uU2Nyb2xsOiBudWxsO1xuXG4gICAgLyoqIFdoZXRoZXIgc2VhcmNoIGlzIHVzZWQgb3Igbm90ICovXG4gICAgZ2V0IHdpdGhTZWFyY2goKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcHNDb3VudCA+IEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX1NFQVJDSDtcbiAgICB9XG5cbiAgICAvKiogTnVtYmVyIG9mIGFwcGxpY2F0aW9ucyB0byBjaG9vc2UgZnJvbVxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgYXBwc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNpdGVzTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxTaXRlcy5yZWR1Y2UoKGFjYywgc2l0ZSkgPT4gYWNjICsgc2l0ZS5hcHBzLmxlbmd0aCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbEFwcHMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzaXRlcyBhcmUgdXNlZCBvciBub3RcbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IHNpdGVzTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxTaXRlcz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2l0ZXMgYXJlIHVzZWQgb3Igbm90XG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBjdXJyZW50QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZXNNb2RlID8gdGhpcy5zZWxlY3RlZFNpdGUuYXBwcyA6IHRoaXMuX3BhcnNlZEFwcHM7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdGVkIGFwcGxpY2F0aW9uICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRBcHA6IEticUFwcFN3aXRjaGVyQXBwO1xuXG4gICAgLyoqIFBsYWNlbWVudCBvZiBwb3BVcCAqL1xuICAgIEBJbnB1dCgna2JxQXBwU3dpdGNoZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cy5Cb3R0b21MZWZ0O1xuXG4gICAgLyoqIENsYXNzIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBiYWNrZ3JvdW5kICovXG4gICAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nID0gJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJztcblxuICAgIC8qKiBPZmZzZXQgb2YgcG9wVXAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBvZmZzZXQ6IG51bWJlciB8IG51bGwgPSBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdztcblxuICAgIC8qKiBBcnJheSBvZiBzaXRlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNpdGVzKCk6IEticUFwcFN3aXRjaGVyU2l0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFNpdGVzO1xuICAgIH1cblxuICAgIHNldCBzaXRlcyh2YWx1ZTogS2JxQXBwU3dpdGNoZXJTaXRlW10pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFNpdGVzID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fcGFyc2VkU2l0ZXMgPSBbXTtcblxuICAgICAgICB2YWx1ZS5mb3JFYWNoKChzaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NpdGU6IEticUFwcFN3aXRjaGVyU2l0ZSA9IHsgLi4uc2l0ZSwgYXBwczogW10gfTtcblxuICAgICAgICAgICAgbmV3U2l0ZS5hcHBzID0gdGhpcy5tYWtlR3JvdXBzRm9yQXBwcyhzaXRlLmFwcHMsIEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HKTtcblxuICAgICAgICAgICAgdGhpcy5fcGFyc2VkU2l0ZXMucHVzaChuZXdTaXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuXG4gICAgLyoqIEFycmF5IG9mIGFwcGxpY2F0aW9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGFwcHMoKTogS2JxQXBwU3dpdGNoZXJBcHBbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZWRBcHBzO1xuICAgIH1cblxuICAgIHNldCBhcHBzKGFwcHM6IEticUFwcFN3aXRjaGVyQXBwW10pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFwcHMgPSBhcHBzO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlZEFwcHMgPSB0aGlzLm1ha2VHcm91cHNGb3JBcHBzKHRoaXMub3JpZ2luYWxBcHBzLCBLQlFfTUlOX05VTUJFUl9PRl9BUFBTX1RPX0VOQUJMRV9HUk9VUElORyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlR3JvdXBzRm9yQXBwcyhhcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdLCBtaW5BcHBzRm9yR3JvdXBpbmc6IG51bWJlcik6IEticUFwcFN3aXRjaGVyQXBwW10ge1xuICAgICAgICBjb25zdCBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPiA9IHt9O1xuICAgICAgICBjb25zdCB1bnR5cGVkOiBLYnFBcHBTd2l0Y2hlckFwcFtdID0gW107XG4gICAgICAgIGNvbnN0IGdyb3VwZWRBcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdID0gW107XG5cbiAgICAgICAgYXBwcy5mb3JFYWNoKChhcHApID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBCeShhcHAsIGdyb3VwcywgdW50eXBlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBzKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdyb3VwLmFsaWFzZXMgJiYgZ3JvdXAuYWxpYXNlcy5sZW5ndGggPiBtaW5BcHBzRm9yR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkQXBwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW50eXBlZC5wdXNoKC4uLmdyb3VwLmFsaWFzZXMhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ3JvdXBlZEFwcHMucHVzaCguLi51bnR5cGVkKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBlZEFwcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkQXBwczogS2JxQXBwU3dpdGNoZXJBcHBbXTtcblxuICAgIC8qKiBGdW5jdGlvbiB0byBncm91cCB0aGUgYXBwcyBieSB0eXBlLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXBwIG9iamVjdCB3aXRoIHR5cGUuXG4gICAgICogVGhlIHNlY29uZCBpcyBhIGdyb3VwcyBvYmplY3QgYW5kIHRoaXJkIGlzIGFuIGFycmF5IGZvciB1bnR5cGVkIGFwcHMgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBncm91cEJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBCeTtcbiAgICB9XG5cbiAgICBzZXQgZ3JvdXBCeShcbiAgICAgICAgZm46IChhcHA6IEticUFwcFN3aXRjaGVyQXBwLCBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPiwgdW50eXBlZDogS2JxQXBwU3dpdGNoZXJBcHBbXSkgPT4gdm9pZFxuICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyb3VwQnkgPSBmbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ncm91cEJ5ID0gZGVmYXVsdEdyb3VwQnk7XG5cbiAgICAvKiogU2VsZWN0ZWQgc2l0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkU2l0ZSgpOiBLYnFBcHBTd2l0Y2hlclNpdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VkU2VsZWN0ZWRTaXRlO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZFNpdGUodmFsdWU6IEticUFwcFN3aXRjaGVyU2l0ZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IHRoaXMub3JpZ2luYWxTaXRlcy5maW5kKChzaXRlKSA9PiB2YWx1ZS5pZCA9PT0gc2l0ZS5pZCkgYXMgS2JxQXBwU3dpdGNoZXJTaXRlO1xuICAgICAgICBjb25zdCBuZXdTaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUgPSB7IC4uLm9yaWdpblZhbHVlLCBhcHBzOiBbXSB9O1xuXG4gICAgICAgIG5ld1NpdGUuYXBwcyA9IHRoaXMubWFrZUdyb3Vwc0ZvckFwcHMob3JpZ2luVmFsdWUuYXBwcywgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfR1JPVVBJTkcpO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlZFNlbGVjdGVkU2l0ZSA9IG5ld1NpdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkU2VsZWN0ZWRTaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJpZ2dlciBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBoYXNDbGlja1RyaWdnZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXIuaW5jbHVkZXMoUG9wVXBUcmlnZ2Vycy5DbGljayk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IHdoZW5ldmVyIHRoZSBwbGFjZW1lbnQgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFQbGFjZW1lbnRDaGFuZ2UnKSByZWFkb25seSBwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogRW1pdHMgYSBjaGFuZ2UgZXZlbnQgd2hlbmV2ZXIgdGhlIHZpc2libGUgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFWaXNpYmxlQ2hhbmdlJykgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkU2l0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxQXBwU3dpdGNoZXJTaXRlPigpO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkQXBwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLYnFBcHBTd2l0Y2hlckFwcD4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdHJpZ2dlcjogc3RyaW5nID0gYCR7UG9wVXBUcmlnZ2Vycy5DbGlja30sICR7UG9wVXBUcmlnZ2Vycy5LZXlkb3dufWA7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9yaWdpbmFsU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgb3JpZ2luYWxBcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgb3JpZ2luU2VsZWN0b3IgPSAnLmticS1hcHAtc3dpdGNoZXInO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IG92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiAna2JxLWFwcC1zd2l0Y2hlcl9fcGFuZWwnLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuaGFzQmFja2Ryb3AsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiB0aGlzLmJhY2tkcm9wQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBwcmV2ZW50Q2xvc2luZ0J5SW5uZXJTY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZVxuICAgICAgICAgICAgPy5lbGVtZW50U2Nyb2xsZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuaGlkZUlmTm90SW5WaWV3UG9ydCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoKS5zdWJzY3JpYmUoKHNjcm9sbGFibGU6IENka1Njcm9sbGFibGUgfCB2b2lkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ticS1oaWRlLW5lc3RlZC1wb3B1cCcpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSZWN0cyA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZWN0cyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVjdHMuYm90dG9tIDwgcGFyZW50UmVjdHMudG9wIHx8IGNoaWxkUmVjdHMudG9wID4gcGFyZW50UmVjdHMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmlzaWJsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50Q2xvc2luZ0J5SW5uZXJTY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLmNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRbJ3Njcm9sbERpc3BhdGNoZXInXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbJ2ticVBvcG92ZXJQcmV2ZW50SGlkZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Wyd0eXBlJ10gPSAnY2xpY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuaGVhZGVyID0gdGhpcy5oZWFkZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5hcnJvdyA9IHRoaXMuYXJyb3c7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZm9vdGVyID0gdGhpcy5mb290ZXI7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGVUcmFwRm9jdXModGhpcy50cmlnZ2VyICE9PSBQb3BVcFRyaWdnZXJzLkZvY3VzKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlUG9zaXRpb24ocmVhcHBseVBvc2l0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5nZXRBZGp1c3RlZFBvc2l0aW9ucygpKVxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgICAgIGlmIChyZWFwcGx5UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zaXRpb24ucmVhcHBseUxhc3RQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0T3ZlcmxheUhhbmRsZUNvbXBvbmVudFR5cGUoKTogVHlwZTxLYnFBcHBTd2l0Y2hlckNvbXBvbmVudD4ge1xuICAgICAgICByZXR1cm4gS2JxQXBwU3dpdGNoZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB1cGRhdGVDbGFzc01hcChuZXdQbGFjZW1lbnQ6IHN0cmluZyA9IHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlQ2xhc3NNYXAoUE9TSVRJT05fVE9fQ1NTX01BUFtuZXdQbGFjZW1lbnRdLCB0aGlzLmN1c3RvbUNsYXNzLCB0aGlzLnNpemUpO1xuICAgICAgICB0aGlzLmluc3RhbmNlLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiEub3V0c2lkZVBvaW50ZXJFdmVudHMoKSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiEuYmFja2Ryb3BDbGljaygpLFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVJZk5vdEluVmlld1BvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5zY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPj0gY29udGFpbmVyUmVjdC50b3AgJiZcbiAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID49IGNvbnRhaW5lclJlY3QubGVmdCAmJlxuICAgICAgICAgICAgICAgIHJlY3QudG9wIDw9IGNvbnRhaW5lclJlY3QuYm90dG9tICYmXG4gICAgICAgICAgICAgICAgcmVjdC5sZWZ0IDw9IGNvbnRhaW5lclJlY3QucmlnaHRcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCJAaWYgKHRyaWdnZXIud2l0aFNlYXJjaCkge1xuICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19zZWFyY2gtY29udGFpbmVyXCIgKG1vdXNlZW50ZXIpPVwib3RoZXJTaXRlcz8uY2xvc2UoKVwiPlxuICAgICAgICA8a2JxLWZvcm0tZmllbGQgbm9Cb3JkZXJzPlxuICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtbWFnbmlmeWluZy1nbGFzc18xNlwiIGticVByZWZpeD48L2k+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIGticUlucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBsb2NhbGVEYXRhLnNlYXJjaFBsYWNlaG9sZGVyIH19XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImVzY2FwZUhhbmRsZXIoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGticS1jbGVhbmVyIC8+XG4gICAgICAgIDwva2JxLWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8a2JxLWRpdmlkZXIgLz5cbn1cblxuPGRpdiBrYnEtc2Nyb2xsYmFyPlxuICAgIEBpZiAoIXNlYXJjaENvbnRyb2wuZ2V0UmF3VmFsdWUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlcl9fYXBwLWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cIm90aGVyU2l0ZXM/LmNsb3NlKClcIj5cbiAgICAgICAgICAgIEBpZiAodHJpZ2dlci5zaXRlc01vZGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItZ3JvdXAtaGVhZGVyX190ZXh0XCI+e3sgdHJpZ2dlci5zZWxlY3RlZFNpdGU/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0cmlnZ2VyLnNlbGVjdGVkU2l0ZT8uc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2JxLWJhZGdlIGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJfX2JhZGdlXCIgW2NvbXBhY3RdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRyaWdnZXIuc2VsZWN0ZWRTaXRlLnN0YXR1cyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9rYnEtYmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGticS1kcm9wZG93biBbY2xhc3NdPVwiJ2ticS1hcHAtc3dpdGNoZXItc2l0ZXMnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBrYnFEcm9wZG93blN0YXRpY0NvbnRlbnQgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLXNpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYXBwIG9mIHRyaWdnZXIuY3VycmVudEFwcHM7IHRyYWNrIGFwcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYXBwLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgYXBwLmxpbmsgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXNlbGVjdGVkXT1cImFwcC5pZCA9PT0gdHJpZ2dlci5zZWxlY3RlZEFwcD8uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFwcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwiISFhcHAuYWxpYXNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FwcFN3aXRjaGVyQXBwPVwia2JxQXBwU3dpdGNoZXJBcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFwcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwiISFhcHAuYWxpYXNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYXBwU3dpdGNoZXJBcHAuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFsaWFzIG9mIGFwcC5hbGlhc2VzOyB0cmFjayBhbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItc2l0ZV9uZXN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGticS1hcHAtc3dpdGNoZXItbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGFsaWFzLmxpbmsgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtc2VsZWN0ZWRdPVwiYWxpYXMuaWQgPT09IHRyaWdnZXIuc2VsZWN0ZWRBcHA/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHRyaWdnZXIuc2l0ZXNNb2RlKSB7XG4gICAgICAgICAgICA8a2JxLWRpdmlkZXIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXJfX3NpdGVzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLWdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJfX3RleHRcIj57eyBsb2NhbGVEYXRhLnNpdGVzSGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNvdGhlclNpdGVzPVwia2JxRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrYnFEcm9wZG93blN0YXRpY0NvbnRlbnQgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLXNpdGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzaXRlIG9mIHRyaWdnZXIuc2l0ZXM7IHRyYWNrIHNpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNpdGUuaWQgIT09IHRyaWdnZXIuc2VsZWN0ZWRTaXRlPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1zaXRlXT1cInNpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ticURyb3Bkb3duVHJpZ2dlckZvcl09XCJkcm9wZG93bldpdGhTZWxlY3RlZFNpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29mZnNldFhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJhY3RpdmVTaXRlID0gc2l0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxrYnEtZHJvcGRvd24gI2Ryb3Bkb3duV2l0aFNlbGVjdGVkU2l0ZT1cImticURyb3Bkb3duXCIgW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFwcCBvZiBhY3RpdmVTaXRlPy5hcHBzOyB0cmFjayBhcHApIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmIChhcHAuYWxpYXNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bldpdGhHcm91cGVkQXBwc1RyaWdnZXI9XCJrYnFEcm9wZG93blRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrYnEtYXBwLXN3aXRjaGVyLWRyb3Bkb3duLWFwcF09XCJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFEcm9wZG93blRyaWdnZXJGb3JdPVwiZHJvcGRvd25XaXRoR3JvdXBlZEFwcHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXRYXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtcHJlc3NlZF09XCJkcm9wZG93bldpdGhHcm91cGVkQXBwc1RyaWdnZXIub3BlbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJhY3RpdmVBcHAgPSBhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGFwcC5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1hcHBdPVwiYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXBwSW5TaXRlKGFjdGl2ZVNpdGUsIGFwcClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuXG4gICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNkcm9wZG93bldpdGhHcm91cGVkQXBwcz1cImticURyb3Bkb3duXCIgW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFsaWFzIG9mIGFjdGl2ZUFwcD8uYWxpYXNlczsgdHJhY2sgYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBhbGlhcy5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrYnEtYXBwLXN3aXRjaGVyLWRyb3Bkb3duLWFwcF09XCJhbGlhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXBwSW5TaXRlKGFjdGl2ZVNpdGUsIGFsaWFzKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9rYnEtZHJvcGRvd24+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXJfX3NlYXJjaC1yZXN1bHRcIj5cbiAgICAgICAgICAgIDxrYnEtZHJvcGRvd24gW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYga2JxRHJvcGRvd25TdGF0aWNDb250ZW50IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1zaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHNpdGUgb2YgZmlsdGVyZWRTaXRlczsgdHJhY2sgc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzaXRlLmFwcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2JxLW9wdGdyb3VwIGxhYmVsPVwie3sgc2l0ZS5uYW1lIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYXBwIG9mIHNpdGUuYXBwczsgdHJhY2sgYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEga2JxLWFwcC1zd2l0Y2hlci1saXN0LWl0ZW0gaHJlZj1cInt7IGFwcC5saW5rIH19XCIgW2FwcF09XCJhcHBcIj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19lbXB0eS1zZWFyY2gtcmVzdWx0XCI+e3sgbG9jYWxlRGF0YS5zZWFyY2hFbXB0eVJlc3VsdCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ticS1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN3aXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUdILE9BQU8sRUFHVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUdILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixRQUFRLEVBQ1IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNqQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxN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QUN2QyxJQUFJLENBQUMsVUFBVyxDQUFDLGFBQWEsRUFBRSxFQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQ25DLENBQUM7SUFDTixDQUFDO2tJQWpUUSxxQkFBcUI7c0hBQXJCLHFCQUFxQiw0TUF5RFYsZUFBZSxzSEEwR2YsZ0JBQWdCOzs0RkFuSzNCLHFCQUFxQjtrQkFYakMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsSUFBSSxFQUFFO3dCQUNGLCtCQUErQixFQUFFLFFBQVE7d0JBQ3pDLG9CQUFvQixFQUFFLDJCQUEyQjt3QkFDakQsV0FBVyxFQUFFLHdCQUF3Qjt3QkFDckMsWUFBWSxFQUFFLG1CQUFtQjtxQkFDcEM7aUJBQ0o7OEJBaURZLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRzRCLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMseUJBQXlCO2dCQUd2QixhQUFhO3NCQUFyQixLQUFLO2dCQUdpQyxNQUFNO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJakMsS0FBSztzQkFEUixLQUFLO2dCQWdDRixJQUFJO3NCQURQLEtBQUs7Z0JBc0NGLE9BQU87c0JBRFYsS0FBSztnQkFtQkYsWUFBWTtzQkFEZixLQUFLO2dCQWtCRixRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBbUJDLGVBQWU7c0JBQXJELE1BQU07dUJBQUMsb0JBQW9CO2dCQUdTLGFBQWE7c0JBQWpELE1BQU07dUJBQUMsa0JBQWtCO2dCQUdQLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFFWSxpQkFBaUI7c0JBQW5DLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlDb25maWcsXG4gICAgU2Nyb2xsU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFR5cGUsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgaW5qZWN0LFxuICAgIG51bWJlckF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEticUJhZGdlTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7XG4gICAgS0JRX0xPQ0FMRV9TRVJWSUNFLFxuICAgIEticU9wdGlvbk1vZHVsZSxcbiAgICBLYnFQb3BVcCxcbiAgICBLYnFQb3BVcFRyaWdnZXIsXG4gICAgUE9TSVRJT05fVE9fQ1NTX01BUCxcbiAgICBQb3BVcFBsYWNlbWVudHMsXG4gICAgUG9wVXBTaXplcyxcbiAgICBQb3BVcFRyaWdnZXJzLFxuICAgIGFwcGx5UG9wdXBNYXJnaW5zLFxuICAgIHJ1UlVMb2NhbGVEYXRhXG59IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticURpdmlkZXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZGl2aWRlcic7XG5pbXBvcnQgeyBLYnFEcm9wZG93bk1vZHVsZSwgS2JxRHJvcGRvd25UcmlnZ2VyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEticUZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEticUljb25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBLYnFJbnB1dCwgS2JxSW5wdXRNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IHsgZGVmYXVsdE9mZnNldFlXaXRoQXJyb3cgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBLYnFTY3JvbGxiYXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGticUFwcFN3aXRjaGVyQW5pbWF0aW9ucyB9IGZyb20gJy4vYXBwLXN3aXRjaGVyLWFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgS2JxQXBwU3dpdGNoZXJEcm9wZG93bkFwcCB9IGZyb20gJy4vYXBwLXN3aXRjaGVyLWRyb3Bkb3duLWFwcCc7XG5pbXBvcnQgeyBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duU2l0ZSB9IGZyb20gJy4vYXBwLXN3aXRjaGVyLWRyb3Bkb3duLXNpdGUnO1xuaW1wb3J0IHsgS2JxQXBwU3dpdGNoZXJMaXN0SXRlbSB9IGZyb20gJy4va2JxLWFwcC1zd2l0Y2hlci1saXN0LWl0ZW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEticUFwcFN3aXRjaGVyQXBwIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICB0eXBlPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGljb246IHN0cmluZztcbiAgICBjYXB0aW9uPzogc3RyaW5nO1xuICAgIGFsaWFzZXM/OiBLYnFBcHBTd2l0Y2hlckFwcFtdO1xuICAgIGxpbms/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2JxQXBwU3dpdGNoZXJTaXRlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBhcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRHcm91cEJ5KFxuICAgIGFwcDogS2JxQXBwU3dpdGNoZXJBcHAsXG4gICAgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBLYnFBcHBTd2l0Y2hlckFwcD4sXG4gICAgdW50eXBlZDogS2JxQXBwU3dpdGNoZXJBcHBbXVxuKSB7XG4gICAgaWYgKCFhcHAudHlwZSkge1xuICAgICAgICB1bnR5cGVkLnB1c2goYXBwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcHBUeXBlID0gYXBwLnR5cGUudG9TdHJpbmcoKTtcblxuICAgICAgICBpZiAoZ3JvdXBzW2FwcFR5cGVdKSB7XG4gICAgICAgICAgICBncm91cHNbYXBwVHlwZV0uYWxpYXNlcyEucHVzaChhcHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JvdXBzW2FwcFR5cGVdID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFwcFR5cGUsXG4gICAgICAgICAgICAgICAgYWxpYXNlczogW2FwcF0sXG4gICAgICAgICAgICAgICAgaWNvbjogYXBwLmljb24sXG4gICAgICAgICAgICAgICAgaWQ6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfU0VBUkNIOiBudW1iZXIgPSA3O1xuZXhwb3J0IGNvbnN0IEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HOiBudW1iZXIgPSAzO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BUFBfU1dJVENIRVJfU0NST0xMX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPCgpID0+IFNjcm9sbFN0cmF0ZWd5PihcbiAgICAna2JxLWFwcC1zd2l0Y2hlci1zY3JvbGwtc3RyYXRlZ3knXG4pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGticUFwcFN3aXRjaGVyU2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XG4gICAgcmV0dXJuICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDIwIH0pO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BUFBfU1dJVENIRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1ksXG4gICAgZGVwczogW092ZXJsYXldLFxuICAgIHVzZUZhY3Rvcnk6IGticUFwcFN3aXRjaGVyU2Nyb2xsU3RyYXRlZ3lGYWN0b3J5XG59O1xuXG4vKiogZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIGFwcC1zd2l0Y2hlciAqL1xuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfQVBQX1NXSVRDSEVSX0RFRkFVTFRfQ09ORklHVVJBVElPTiA9IHJ1UlVMb2NhbGVEYXRhLmFwcFN3aXRjaGVyO1xuXG4vKiogSW5qZWN0aW9uIFRva2VuIGZvciBwcm92aWRpbmcgY29uZmlndXJhdGlvbiBvZiBhcHAtc3dpdGNoZXIgKi9cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX0FQUF9TV0lUQ0hFUl9DT05GSUdVUkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuKCdLYnFBcHBTd2l0Y2hlckNvbmZpZ3VyYXRpb24nKTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdrYnEtYXBwLXN3aXRjaGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBwLXN3aXRjaGVyLmh0bWwnLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHN0eWxlVXJsczogWycuL2FwcC1zd2l0Y2hlci5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1hcHAtc3dpdGNoZXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgS2JxRm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBLYnFJbnB1dE1vZHVsZSxcbiAgICAgICAgS2JxSWNvbk1vZHVsZSxcbiAgICAgICAgS2JxRGl2aWRlck1vZHVsZSxcbiAgICAgICAgS2JxQmFkZ2VNb2R1bGUsXG4gICAgICAgIEticURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBLYnFTY3JvbGxiYXJNb2R1bGUsXG4gICAgICAgIEticU9wdGlvbk1vZHVsZSxcbiAgICAgICAgS2JxQXBwU3dpdGNoZXJEcm9wZG93bkFwcCxcbiAgICAgICAgS2JxQXBwU3dpdGNoZXJEcm9wZG93blNpdGUsXG4gICAgICAgIEticUFwcFN3aXRjaGVyTGlzdEl0ZW0sXG4gICAgICAgIEpzb25QaXBlXG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBba2JxQXBwU3dpdGNoZXJBbmltYXRpb25zLnN0YXRlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFBcHBTd2l0Y2hlckNvbXBvbmVudCBleHRlbmRzIEticVBvcFVwIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9jYWxlU2VydmljZSA9IGluamVjdChLQlFfTE9DQUxFX1NFUlZJQ0UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICByZWFkb25seSBleHRlcm5hbENvbmZpZ3VyYXRpb24gPSBpbmplY3QoS0JRX0FQUF9TV0lUQ0hFUl9DT05GSUdVUkFUSU9OLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgY29uZmlndXJhdGlvbjtcblxuICAgIC8qKiBsb2NhbGl6ZWQgZGF0YVxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBmaWx0ZXJlZFNpdGVzOiBLYnFBcHBTd2l0Y2hlclNpdGVbXTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJlZml4ID0gJ2ticS1hcHAtc3dpdGNoZXInO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB0cmlnZ2VyOiBLYnFBcHBTd2l0Y2hlclRyaWdnZXI7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGlzVHJhcEZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBhY3RpdmVTaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGU7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgYWN0aXZlQXBwOiBLYnFBcHBTd2l0Y2hlckFwcDtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQFZpZXdDaGlsZChLYnFJbnB1dCkgaW5wdXQ6IEticUlucHV0O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQFZpZXdDaGlsZCgnb3RoZXJTaXRlcycpIG90aGVyU2l0ZXM6IEticURyb3Bkb3duVHJpZ2dlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubG9jYWxlU2VydmljZT8uY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodGhpcy51cGRhdGVMb2NhbGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0ICE9PSBudWxsICYmIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlQb3B1cE1hcmdpbnMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5vZmZzZXQhLnRvU3RyaW5nKCl9cHhgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiAodGhpcy5maWx0ZXJlZFNpdGVzID0gdGhpcy5maWx0ZXJTaXRlcyh2YWx1ZSkpKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudDogc3RyaW5nLCBjdXN0b21DbGFzczogc3RyaW5nLCBzaXplOiBQb3BVcFNpemVzKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudCwgY3VzdG9tQ2xhc3MsIHsgW2Ake3RoaXMucHJlZml4fV8ke3NpemV9YF06ICEhc2l6ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZVRyYXBGb2N1cyhpc1RyYXBGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzVHJhcEZvY3VzID0gaXNUcmFwRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBlc2NhcGVIYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmhpZGUoMCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBzZWxlY3RBcHBJblNpdGUoc2l0ZTogS2JxQXBwU3dpdGNoZXJTaXRlLCBhcHA6IEticUFwcFN3aXRjaGVyQXBwKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlci5zZWxlY3RlZFNpdGUgPSBzaXRlO1xuICAgICAgICB0aGlzLnRyaWdnZXIuc2VsZWN0ZWRBcHAgPSBhcHA7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyLnNlbGVjdGVkU2l0ZUNoYW5nZS5lbWl0KHNpdGUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIuc2VsZWN0ZWRBcHBDaGFuZ2UuZW1pdChhcHApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyU2l0ZXMocXVlcnk6IHN0cmluZyB8IG51bGwpOiBLYnFBcHBTd2l0Y2hlclNpdGVbXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkU2l0ZXMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmlnZ2VyLm9yaWdpbmFsU2l0ZXMpO1xuXG4gICAgICAgIHJldHVybiBxdWVyeVxuICAgICAgICAgICAgPyBmaWx0ZXJlZFNpdGVzLmZpbHRlcigoc2l0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBcHBzID0gc2l0ZS5hcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQXBwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaXRlLmFwcHMgPSBmaWx0ZXJlZEFwcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBmaWx0ZXJlZFNpdGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB0aGlzLmV4dGVybmFsQ29uZmlndXJhdGlvbiB8fCB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFBhcmFtcygnYXBwU3dpdGNoZXInKTtcblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0UGFyYW1zKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBLQlFfQVBQX1NXSVRDSEVSX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdba2JxQXBwU3dpdGNoZXJdJyxcbiAgICBleHBvcnRBczogJ2ticUFwcFN3aXRjaGVyJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3Mua2JxLWFwcC1zd2l0Y2hlcl9vcGVuXSc6ICdpc09wZW4nLFxuICAgICAgICAnW2NsYXNzLmticS1hY3RpdmVdJzogJ2hhc0NsaWNrVHJpZ2dlciAmJiBpc09wZW4nLFxuICAgICAgICAnKGtleWRvd24pJzogJ2tleWRvd25IYW5kbGVyKCRldmVudCknLFxuICAgICAgICAnKHRvdWNoZW5kKSc6ICd0b3VjaGVuZEhhbmRsZXIoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticUFwcFN3aXRjaGVyVHJpZ2dlclxuICAgIGV4dGVuZHMgS2JxUG9wVXBUcmlnZ2VyPEticUFwcFN3aXRjaGVyQ29tcG9uZW50PlxuICAgIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0XG57XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgc2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5ID0gaW5qZWN0KEtCUV9BUFBfU1dJVENIRVJfU0NST0xMX1NUUkFURUdZKTtcblxuICAgIC8vIG5vdCB1c2VkXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBhcnJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY3VzdG9tQ2xhc3M6IHN0cmluZztcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByaXZhdGUgaGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByaXZhdGUgc2l6ZTogUG9wVXBTaXplcyA9IFBvcFVwU2l6ZXMuTWVkaXVtO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGhlYWRlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGZvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByaXZhdGUgY2xvc2VPblNjcm9sbDogbnVsbDtcblxuICAgIC8qKiBXaGV0aGVyIHNlYXJjaCBpcyB1c2VkIG9yIG5vdCAqL1xuICAgIGdldCB3aXRoU2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBzQ291bnQgPiBLQlFfTUlOX05VTUJFUl9PRl9BUFBTX1RPX0VOQUJMRV9TRUFSQ0g7XG4gICAgfVxuXG4gICAgLyoqIE51bWJlciBvZiBhcHBsaWNhdGlvbnMgdG8gY2hvb3NlIGZyb21cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGFwcHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFNpdGVzLnJlZHVjZSgoYWNjLCBzaXRlKSA9PiBhY2MgKyBzaXRlLmFwcHMubGVuZ3RoLCAwKTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2l0ZXMgYXJlIHVzZWQgb3Igbm90XG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBzaXRlc01vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsU2l0ZXMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBjdXJyZW50QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZXNNb2RlID8gdGhpcy5zZWxlY3RlZFNpdGUuYXBwcyA6IHRoaXMuX3BhcnNlZEFwcHM7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdGVkIGFwcGxpY2F0aW9uICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRBcHA6IEticUFwcFN3aXRjaGVyQXBwO1xuXG4gICAgLyoqIFBsYWNlbWVudCBvZiBwb3BVcCAqL1xuICAgIEBJbnB1dCgna2JxQXBwU3dpdGNoZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cy5Cb3R0b21MZWZ0O1xuXG4gICAgLyoqIENsYXNzIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBiYWNrZ3JvdW5kICovXG4gICAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nID0gJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJztcblxuICAgIC8qKiBPZmZzZXQgb2YgcG9wVXAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBvZmZzZXQ6IG51bWJlciB8IG51bGwgPSBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdztcblxuICAgIC8qKiBBcnJheSBvZiBzaXRlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNpdGVzKCk6IEticUFwcFN3aXRjaGVyU2l0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFNpdGVzO1xuICAgIH1cblxuICAgIHNldCBzaXRlcyh2YWx1ZTogS2JxQXBwU3dpdGNoZXJTaXRlW10pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFNpdGVzID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxTaXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlZEFwcHMgPSB0aGlzLm1ha2VHcm91cHNGb3JBcHBzKFxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxTaXRlc1swXS5hcHBzLFxuICAgICAgICAgICAgICAgIEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VkU2l0ZXMgPSBbXTtcblxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoc2l0ZTogS2JxQXBwU3dpdGNoZXJTaXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2l0ZTogS2JxQXBwU3dpdGNoZXJTaXRlID0geyAuLi5zaXRlLCBhcHBzOiBbXSB9O1xuXG4gICAgICAgICAgICAgICAgbmV3U2l0ZS5hcHBzID0gdGhpcy5tYWtlR3JvdXBzRm9yQXBwcyhzaXRlLmFwcHMsIEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlZFNpdGVzLnB1c2gobmV3U2l0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlZFNpdGVzOiBLYnFBcHBTd2l0Y2hlclNpdGVbXTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UsIHVzZSBgc2l0ZXNgIHdpdGggb25lIGVsZW1lbnQgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBhcHBzKCk6IEticUFwcFN3aXRjaGVyQXBwW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VkQXBwcztcbiAgICB9XG5cbiAgICBzZXQgYXBwcyhhcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdKSB7XG4gICAgICAgIHRoaXMub3JpZ2luYWxBcHBzID0gYXBwcztcblxuICAgICAgICB0aGlzLl9wYXJzZWRBcHBzID0gdGhpcy5tYWtlR3JvdXBzRm9yQXBwcyh0aGlzLm9yaWdpbmFsQXBwcywgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfR1JPVVBJTkcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZUdyb3Vwc0ZvckFwcHMoYXBwczogS2JxQXBwU3dpdGNoZXJBcHBbXSwgbWluQXBwc0Zvckdyb3VwaW5nOiBudW1iZXIpOiBLYnFBcHBTd2l0Y2hlckFwcFtdIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBLYnFBcHBTd2l0Y2hlckFwcD4gPSB7fTtcbiAgICAgICAgY29uc3QgdW50eXBlZDogS2JxQXBwU3dpdGNoZXJBcHBbXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cGVkQXBwczogS2JxQXBwU3dpdGNoZXJBcHBbXSA9IFtdO1xuXG4gICAgICAgIGFwcHMuZm9yRWFjaCgoYXBwKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQnkoYXBwLCBncm91cHMsIHVudHlwZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBPYmplY3QudmFsdWVzKGdyb3VwcykuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGlmIChncm91cC5hbGlhc2VzICYmIGdyb3VwLmFsaWFzZXMubGVuZ3RoID4gbWluQXBwc0Zvckdyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEFwcHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVudHlwZWQucHVzaCguLi5ncm91cC5hbGlhc2VzISk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGdyb3VwZWRBcHBzLnB1c2goLi4udW50eXBlZCk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwZWRBcHBzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlZEFwcHM6IEticUFwcFN3aXRjaGVyQXBwW107XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ3JvdXAgdGhlIGFwcHMgYnkgdHlwZS4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFwcCBvYmplY3Qgd2l0aCB0eXBlLlxuICAgICAqIFRoZSBzZWNvbmQgaXMgYSBncm91cHMgb2JqZWN0IGFuZCB0aGlyZCBpcyBhbiBhcnJheSBmb3IgdW50eXBlZCBhcHBzICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZ3JvdXBCeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwQnk7XG4gICAgfVxuXG4gICAgc2V0IGdyb3VwQnkoXG4gICAgICAgIGZuOiAoYXBwOiBLYnFBcHBTd2l0Y2hlckFwcCwgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBLYnFBcHBTd2l0Y2hlckFwcD4sIHVudHlwZWQ6IEticUFwcFN3aXRjaGVyQXBwW10pID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ncm91cEJ5ID0gZm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ3JvdXBCeSA9IGRlZmF1bHRHcm91cEJ5O1xuXG4gICAgLyoqIFNlbGVjdGVkIHNpdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBzZWxlY3RlZFNpdGUoKTogS2JxQXBwU3dpdGNoZXJTaXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFNlbGVjdGVkU2l0ZTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRTaXRlKHZhbHVlOiBLYnFBcHBTd2l0Y2hlclNpdGUpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luVmFsdWUgPSB0aGlzLm9yaWdpbmFsU2l0ZXMuZmluZCgoc2l0ZSkgPT4gdmFsdWUuaWQgPT09IHNpdGUuaWQpIGFzIEticUFwcFN3aXRjaGVyU2l0ZTtcbiAgICAgICAgY29uc3QgbmV3U2l0ZTogS2JxQXBwU3dpdGNoZXJTaXRlID0geyAuLi5vcmlnaW5WYWx1ZSwgYXBwczogW10gfTtcblxuICAgICAgICBuZXdTaXRlLmFwcHMgPSB0aGlzLm1ha2VHcm91cHNGb3JBcHBzKG9yaWdpblZhbHVlLmFwcHMsIEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HKTtcblxuICAgICAgICB0aGlzLl9wYXJzZWRTZWxlY3RlZFNpdGUgPSBuZXdTaXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlZFNlbGVjdGVkU2l0ZTogS2JxQXBwU3dpdGNoZXJTaXRlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRyaWdnZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgaGFzQ2xpY2tUcmlnZ2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyLmluY2x1ZGVzKFBvcFVwVHJpZ2dlcnMuQ2xpY2spO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhIGNoYW5nZSBldmVudCB3aGVuZXZlciB0aGUgcGxhY2VtZW50IHN0YXRlIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgna2JxUGxhY2VtZW50Q2hhbmdlJykgcmVhZG9ubHkgcGxhY2VtZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IHdoZW5ldmVyIHRoZSB2aXNpYmxlIHN0YXRlIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgna2JxVmlzaWJsZUNoYW5nZScpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZFNpdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEticUFwcFN3aXRjaGVyU2l0ZT4oKTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZEFwcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxQXBwU3dpdGNoZXJBcHA+KCk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IHN0cmluZyA9IGAke1BvcFVwVHJpZ2dlcnMuQ2xpY2t9LCAke1BvcFVwVHJpZ2dlcnMuS2V5ZG93bn1gO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvcmlnaW5hbFNpdGVzOiBLYnFBcHBTd2l0Y2hlclNpdGVbXTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9yaWdpbmFsQXBwczogS2JxQXBwU3dpdGNoZXJBcHBbXTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIG9yaWdpblNlbGVjdG9yID0gJy5rYnEtYXBwLXN3aXRjaGVyJztcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIGdldCBvdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2ticS1hcHAtc3dpdGNoZXJfX3BhbmVsJyxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogdGhpcy5iYWNrZHJvcENsYXNzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNjcm9sbGFibGVcbiAgICAgICAgICAgID8uZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZGVJZk5vdEluVmlld1BvcnQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNjcm9sbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlIHwgdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdrYnEtaGlkZS1uZXN0ZWQtcG9wdXAnKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UmVjdHMgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVjdHMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlY3RzLmJvdHRvbSA8IHBhcmVudFJlY3RzLnRvcCB8fCBjaGlsZFJlY3RzLnRvcCA+IHBhcmVudFJlY3RzLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZpc2libGU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tbmVzdGVkLXN1YnNjcmliZVxuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5jbG9zaW5nQWN0aW9ucygpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50WydzY3JvbGxEaXNwYXRjaGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WydrYnFQb3BvdmVyUHJldmVudEhpZGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFsndHlwZSddID0gJ2NsaWNrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRDbG9zaW5nQnlJbm5lclNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB1cGRhdGVEYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLmhlYWRlciA9IHRoaXMuaGVhZGVyO1xuICAgICAgICB0aGlzLmluc3RhbmNlLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuYXJyb3cgPSB0aGlzLmFycm93O1xuICAgICAgICB0aGlzLmluc3RhbmNlLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgICB0aGlzLmluc3RhbmNlLmZvb3RlciA9IHRoaXMuZm9vdGVyO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlVHJhcEZvY3VzKHRoaXMudHJpZ2dlciAhPT0gUG9wVXBUcmlnZ2Vycy5Gb2N1cyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZVBvc2l0aW9uKHJlYXBwbHlQb3NpdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKHRoaXMub3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMuZ2V0QWRqdXN0ZWRQb3NpdGlvbnMoKSlcbiAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKTtcblxuICAgICAgICBpZiAocmVhcHBseVBvc2l0aW9uKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc2l0aW9uLnJlYXBwbHlMYXN0UG9zaXRpb24oKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldE92ZXJsYXlIYW5kbGVDb21wb25lbnRUeXBlKCk6IFR5cGU8S2JxQXBwU3dpdGNoZXJDb21wb25lbnQ+IHtcbiAgICAgICAgcmV0dXJuIEticUFwcFN3aXRjaGVyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlQ2xhc3NNYXAobmV3UGxhY2VtZW50OiBzdHJpbmcgPSB0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnVwZGF0ZUNsYXNzTWFwKFBPU0lUSU9OX1RPX0NTU19NQVBbbmV3UGxhY2VtZW50XSwgdGhpcy5jdXN0b21DbGFzcywgdGhpcy5zaXplKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNsb3NpbmdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLm91dHNpZGVQb2ludGVyRXZlbnRzKCksXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmJhY2tkcm9wQ2xpY2soKSxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlSWZOb3RJblZpZXdQb3J0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID49IGNvbnRhaW5lclJlY3QudG9wICYmXG4gICAgICAgICAgICAgICAgcmVjdC5yaWdodCA+PSBjb250YWluZXJSZWN0LmxlZnQgJiZcbiAgICAgICAgICAgICAgICByZWN0LnRvcCA8PSBjb250YWluZXJSZWN0LmJvdHRvbSAmJlxuICAgICAgICAgICAgICAgIHJlY3QubGVmdCA8PSBjb250YWluZXJSZWN0LnJpZ2h0XG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiQGlmICh0cmlnZ2VyLndpdGhTZWFyY2gpIHtcbiAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlcl9fc2VhcmNoLWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cIm90aGVyU2l0ZXM/LmNsb3NlKClcIj5cbiAgICAgICAgPGticS1mb3JtLWZpZWxkIG5vQm9yZGVycz5cbiAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLW1hZ25pZnlpbmctZ2xhc3NfMTZcIiBrYnFQcmVmaXg+PC9pPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICBrYnFJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgbG9jYWxlRGF0YS5zZWFyY2hQbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJlc2NhcGVIYW5kbGVyKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxrYnEtY2xlYW5lciAvPlxuICAgICAgICA8L2ticS1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGticS1kaXZpZGVyIC8+XG59XG5cbjxkaXYga2JxLXNjcm9sbGJhcj5cbiAgICBAaWYgKCFzZWFyY2hDb250cm9sLmdldFJhd1ZhbHVlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXJfX2FwcC1jb250YWluZXJcIiAobW91c2VlbnRlcik9XCJvdGhlclNpdGVzPy5jbG9zZSgpXCI+XG4gICAgICAgICAgICBAaWYgKHRyaWdnZXIuc2l0ZXNNb2RlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItZ3JvdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLWdyb3VwLWhlYWRlcl9fdGV4dFwiPnt7IHRyaWdnZXIuc2VsZWN0ZWRTaXRlPy5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodHJpZ2dlci5zZWxlY3RlZFNpdGU/LnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGticS1iYWRnZSBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItZ3JvdXAtaGVhZGVyX19iYWRnZVwiIFtjb21wYWN0XT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0cmlnZ2VyLnNlbGVjdGVkU2l0ZS5zdGF0dXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwva2JxLWJhZGdlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxrYnEtZHJvcGRvd24gW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYga2JxRHJvcGRvd25TdGF0aWNDb250ZW50IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1zaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFwcCBvZiB0cmlnZ2VyLmN1cnJlbnRBcHBzOyB0cmFjayBhcHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWFwcC5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2JxLWFwcC1zd2l0Y2hlci1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGFwcC5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmticS1zZWxlY3RlZF09XCJhcHAuaWQgPT09IHRyaWdnZXIuc2VsZWN0ZWRBcHA/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcF09XCJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9nZ2xlXT1cIiEhYXBwLmFsaWFzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHBTd2l0Y2hlckFwcD1cImticUFwcFN3aXRjaGVyQXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2JxLWFwcC1zd2l0Y2hlci1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcF09XCJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9nZ2xlXT1cIiEhYXBwLmFsaWFzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWFwcFN3aXRjaGVyQXBwLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhbGlhcyBvZiBhcHAuYWxpYXNlczsgdHJhY2sgYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLXNpdGVfbmVzdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBhbGlhcy5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXNlbGVjdGVkXT1cImFsaWFzLmlkID09PSB0cmlnZ2VyLnNlbGVjdGVkQXBwPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcF09XCJhbGlhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ticS1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmICh0cmlnZ2VyLnNpdGVzTW9kZSkge1xuICAgICAgICAgICAgPGticS1kaXZpZGVyIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19zaXRlcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItZ3JvdXAtaGVhZGVyX190ZXh0XCI+e3sgbG9jYWxlRGF0YS5zaXRlc0hlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGticS1kcm9wZG93biAjb3RoZXJTaXRlcz1cImticURyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2JxRHJvcGRvd25TdGF0aWNDb250ZW50IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1zaXRlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoc2l0ZSBvZiB0cmlnZ2VyLnNpdGVzOyB0cmFjayBzaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzaXRlLmlkICE9PSB0cmlnZ2VyLnNlbGVjdGVkU2l0ZT8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ticS1hcHAtc3dpdGNoZXItZHJvcGRvd24tc2l0ZV09XCJzaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFEcm9wZG93blRyaWdnZXJGb3JdPVwiZHJvcGRvd25XaXRoU2VsZWN0ZWRTaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXRYXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiYWN0aXZlU2l0ZSA9IHNpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ticS1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNkcm9wZG93bldpdGhTZWxlY3RlZFNpdGU9XCJrYnFEcm9wZG93blwiIFtjbGFzc109XCIna2JxLWFwcC1zd2l0Y2hlci1zaXRlcydcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhcHAgb2YgYWN0aXZlU2l0ZT8uYXBwczsgdHJhY2sgYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXBwLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25XaXRoR3JvdXBlZEFwcHNUcmlnZ2VyPVwia2JxRHJvcGRvd25UcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1hcHBdPVwiYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxRHJvcGRvd25UcmlnZ2VyRm9yXT1cImRyb3Bkb3duV2l0aEdyb3VwZWRBcHBzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb2Zmc2V0WF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXByZXNzZWRdPVwiZHJvcGRvd25XaXRoR3JvdXBlZEFwcHNUcmlnZ2VyLm9wZW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiYWN0aXZlQXBwID0gYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBhcHAubGluayB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ticS1hcHAtc3dpdGNoZXItZHJvcGRvd24tYXBwXT1cImFwcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFwcEluU2l0ZShhY3RpdmVTaXRlLCBhcHApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2ticS1kcm9wZG93bj5cblxuICAgICAgICAgICAgPGticS1kcm9wZG93biAjZHJvcGRvd25XaXRoR3JvdXBlZEFwcHM9XCJrYnFEcm9wZG93blwiIFtjbGFzc109XCIna2JxLWFwcC1zd2l0Y2hlci1zaXRlcydcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhbGlhcyBvZiBhY3RpdmVBcHA/LmFsaWFzZXM7IHRyYWNrIGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgYWxpYXMubGluayB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1hcHBdPVwiYWxpYXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFwcEluU2l0ZShhY3RpdmVTaXRlLCBhbGlhcylcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuICAgICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19zZWFyY2gtcmVzdWx0XCI+XG4gICAgICAgICAgICA8a2JxLWRyb3Bkb3duIFtjbGFzc109XCIna2JxLWFwcC1zd2l0Y2hlci1zaXRlcydcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGticURyb3Bkb3duU3RhdGljQ29udGVudCBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItc2l0ZVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChzaXRlIG9mIGZpbHRlcmVkU2l0ZXM7IHRyYWNrIHNpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodHJpZ2dlci5zaXRlc01vZGUgJiYgc2l0ZS5hcHBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGticS1vcHRncm91cCBsYWJlbD1cInt7IHNpdGUubmFtZSB9fVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFwcCBvZiBzaXRlLmFwcHM7IHRyYWNrIGFwcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGticS1hcHAtc3dpdGNoZXItbGlzdC1pdGVtIGhyZWY9XCJ7eyBhcHAubGluayB9fVwiIFthcHBdPVwiYXBwXCI+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlcl9fZW1wdHktc2VhcmNoLXJlc3VsdFwiPnt7IGxvY2FsZURhdGEuc2VhcmNoRW1wdHlSZXN1bHQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9rYnEtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
|