@flywheel-io/vision 2.0.0-beta.8 → 2.0.0-beta.9
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/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +5 -4
- package/components/text-input/text-input.component.d.ts +2 -1
- package/esm2020/components/menu/menu-container/menu-container.component.mjs +1 -1
- package/esm2020/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +81 -62
- package/esm2020/components/select-menu/select-menu.component.mjs +1 -1
- package/esm2020/components/text-input/text-input.component.mjs +8 -2
- package/fesm2015/flywheel-io-vision.mjs +89 -64
- package/fesm2015/flywheel-io-vision.mjs.map +1 -1
- package/fesm2020/flywheel-io-vision.mjs +89 -64
- package/fesm2020/flywheel-io-vision.mjs.map +1 -1
- package/flywheel-io-vision-2.0.0-beta.9.tgz +0 -0
- package/package.json +1 -1
- package/flywheel-io-vision-2.0.0-beta.8.tgz +0 -0
|
@@ -28,7 +28,7 @@ export declare class FwMultiSelectMenuComponent implements ControlValueAccessor,
|
|
|
28
28
|
trigger: CdkMenuTrigger;
|
|
29
29
|
menu: FwMenuComponent;
|
|
30
30
|
renderedMenuItems: QueryList<FwMenuItemComponent>;
|
|
31
|
-
|
|
31
|
+
customMenuItems: QueryList<FwMenuItemComponent>;
|
|
32
32
|
selectedValues: string[];
|
|
33
33
|
selectedOptions: object[];
|
|
34
34
|
filteredOptions: object[];
|
|
@@ -52,14 +52,15 @@ export declare class FwMultiSelectMenuComponent implements ControlValueAccessor,
|
|
|
52
52
|
ngOnChanges(changes: SimpleChanges): void;
|
|
53
53
|
ngOnDestroy(): void;
|
|
54
54
|
ngAfterContentInit(): void;
|
|
55
|
+
registerCustomMenuItems(): void;
|
|
55
56
|
handleTouched(): void;
|
|
56
57
|
handleClose(chip: object): void;
|
|
57
58
|
handleChange(e: string[]): void;
|
|
58
59
|
updateFilteredItems(): void;
|
|
59
|
-
updateValue(
|
|
60
|
+
updateValue(incomingValues: any[], additive?: boolean): void;
|
|
60
61
|
moveFocused(direction: string): void;
|
|
61
62
|
handleKeyDown(event: KeyboardEvent): void;
|
|
62
|
-
|
|
63
|
+
handleFilterChange(event: Event): void;
|
|
63
64
|
static ɵfac: i0.ɵɵFactoryDeclaration<FwMultiSelectMenuComponent, never>;
|
|
64
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FwMultiSelectMenuComponent, "fw-multi-select", never, { "options": "options"; "valueProperty": "valueProperty"; "titleProperty": "titleProperty"; "iconProperty": "iconProperty"; "disabled": "disabled"; "useCheckbox": "useCheckbox"; "closeOnSelect": "closeOnSelect"; "filterItemsOnSelect": "filterItemsOnSelect"; "maxSelectedShown": "maxSelectedShown"; "width": "width"; "minHeight": "minHeight"; "maxHeight": "maxHeight"; "optionsWidth": "optionsWidth"; "minOptionsHeight": "minOptionsHeight"; "maxOptionsHeight": "maxOptionsHeight"; "size": "size"; "placeholder": "placeholder"; "emptyText": "emptyText"; "value": "value"; }, { "change": "change"; }, ["
|
|
65
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FwMultiSelectMenuComponent, "fw-multi-select", never, { "options": "options"; "valueProperty": "valueProperty"; "titleProperty": "titleProperty"; "iconProperty": "iconProperty"; "disabled": "disabled"; "useCheckbox": "useCheckbox"; "closeOnSelect": "closeOnSelect"; "filterItemsOnSelect": "filterItemsOnSelect"; "maxSelectedShown": "maxSelectedShown"; "width": "width"; "minHeight": "minHeight"; "maxHeight": "maxHeight"; "optionsWidth": "optionsWidth"; "minOptionsHeight": "minOptionsHeight"; "maxOptionsHeight": "maxOptionsHeight"; "size": "size"; "placeholder": "placeholder"; "emptyText": "emptyText"; "value": "value"; }, { "change": "change"; }, ["customMenuItems"], ["[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]"], false, never>;
|
|
65
66
|
}
|
|
@@ -28,6 +28,7 @@ export declare class FwTextInputComponent implements ControlValueAccessor {
|
|
|
28
28
|
autocomplete?: string;
|
|
29
29
|
error?: boolean;
|
|
30
30
|
textInput: any;
|
|
31
|
+
width: string;
|
|
31
32
|
value: string;
|
|
32
33
|
externalControl: FormControl;
|
|
33
34
|
onTouch: () => void;
|
|
@@ -41,5 +42,5 @@ export declare class FwTextInputComponent implements ControlValueAccessor {
|
|
|
41
42
|
onLeftIconClick(): void;
|
|
42
43
|
onRightIconClick(): void;
|
|
43
44
|
static ɵfac: i0.ɵɵFactoryDeclaration<FwTextInputComponent, never>;
|
|
44
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FwTextInputComponent, "fw-text-input", never, { "disabled": "disabled"; "useActionableIcons": "useActionableIcons"; "leftIcon": "leftIcon"; "rightIcon": "rightIcon"; "prefix": "prefix"; "context": "context"; "helperText": "helperText"; "errorText": "errorText"; "placeholder": "placeholder"; "readOnly": "readOnly"; "size": "size"; "type": "type"; "maxLength": "maxLength"; "autofocus": "autofocus"; "autocomplete": "autocomplete"; "error": "error"; "value": "value"; }, { "leftIconAction": "leftIconAction"; "rightIconAction": "rightIconAction"; }, ["textInput"], ["input", "*"], false, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FwTextInputComponent, "fw-text-input", never, { "disabled": "disabled"; "useActionableIcons": "useActionableIcons"; "leftIcon": "leftIcon"; "rightIcon": "rightIcon"; "prefix": "prefix"; "context": "context"; "helperText": "helperText"; "errorText": "errorText"; "placeholder": "placeholder"; "readOnly": "readOnly"; "size": "size"; "type": "type"; "maxLength": "maxLength"; "autofocus": "autofocus"; "autocomplete": "autocomplete"; "error": "error"; "width": "width"; "value": "value"; }, { "leftIconAction": "leftIconAction"; "rightIconAction": "rightIconAction"; }, ["textInput"], ["input", "*"], false, never>;
|
|
45
46
|
}
|
|
@@ -53,7 +53,7 @@ export class FwMenuContainerComponent {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
FwMenuContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwMenuContainerComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
-
FwMenuContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwMenuContainerComponent, selector: "fw-menu-container", inputs: { width: "width", maxHeight: "maxHeight", minHeight: "minHeight", border: "border", shadow: "shadow", showFilter: "showFilter", filterText: "filterText", offset: "offset", collapsed: "collapsed" }, outputs: { filterChanged: "filterChanged" }, host: { properties: { "attr.class": "this.classes", "style": "this.style" } }, queries: [{ propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"showFilter\" class=\"filter-box\" cdkMenuBar>\n <fw-text-input\n placeholder=\"Search\" leftIcon=\"search\" autofocus\n [value]=\"filterText\" (input)=\"filterTextChange($event)\">\n </fw-text-input>\n</div>\n<div class=\"menu-wrapper\" [ngClass]=\"[showFilter?'filtered':'', collapsed?'collapsed':'']\">\n <ng-content></ng-content>\n</div>\n", styles: [".fw-menu-container{display:flex;border-radius:8px;background:var(--card-background);position:relative}.fw-menu-container.border-default{border:1px solid var(--separations-border)}.fw-menu-container .filter-box{border-top-left-radius:8px;border-top-right-radius:8px;padding:8px;border-bottom:1px solid var(--separations-base);background-color:var(--card-background);position:absolute;left:0;right:0;z-index:1}.fw-menu-container .menu-wrapper{flex:1;padding:6px 4px;scroll-padding:17px;overflow:hidden auto}.fw-menu-container .menu-wrapper.collapsed{scrollbar-width:none}.fw-menu-container .menu-wrapper.filtered{margin-top:54px}.fw-menu-container fw-menu-separator{margin:6px -8px}\n"], dependencies: [{ kind: "directive", type: i2.CdkMenuBar, selector: "[cdkMenuBar]", exportAs: ["cdkMenuBar"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FwTextInputComponent, selector: "fw-text-input", inputs: ["disabled", "useActionableIcons", "leftIcon", "rightIcon", "prefix", "context", "helperText", "errorText", "placeholder", "readOnly", "size", "type", "maxLength", "autofocus", "autocomplete", "error", "value"], outputs: ["leftIconAction", "rightIconAction"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
56
|
+
FwMenuContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwMenuContainerComponent, selector: "fw-menu-container", inputs: { width: "width", maxHeight: "maxHeight", minHeight: "minHeight", border: "border", shadow: "shadow", showFilter: "showFilter", filterText: "filterText", offset: "offset", collapsed: "collapsed" }, outputs: { filterChanged: "filterChanged" }, host: { properties: { "attr.class": "this.classes", "style": "this.style" } }, queries: [{ propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"showFilter\" class=\"filter-box\" cdkMenuBar>\n <fw-text-input\n placeholder=\"Search\" leftIcon=\"search\" autofocus\n [value]=\"filterText\" (input)=\"filterTextChange($event)\">\n </fw-text-input>\n</div>\n<div class=\"menu-wrapper\" [ngClass]=\"[showFilter?'filtered':'', collapsed?'collapsed':'']\">\n <ng-content></ng-content>\n</div>\n", styles: [".fw-menu-container{display:flex;border-radius:8px;background:var(--card-background);position:relative}.fw-menu-container.border-default{border:1px solid var(--separations-border)}.fw-menu-container .filter-box{border-top-left-radius:8px;border-top-right-radius:8px;padding:8px;border-bottom:1px solid var(--separations-base);background-color:var(--card-background);position:absolute;left:0;right:0;z-index:1}.fw-menu-container .menu-wrapper{flex:1;padding:6px 4px;scroll-padding:17px;overflow:hidden auto}.fw-menu-container .menu-wrapper.collapsed{scrollbar-width:none}.fw-menu-container .menu-wrapper.filtered{margin-top:54px}.fw-menu-container fw-menu-separator{margin:6px -8px}\n"], dependencies: [{ kind: "directive", type: i2.CdkMenuBar, selector: "[cdkMenuBar]", exportAs: ["cdkMenuBar"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FwTextInputComponent, selector: "fw-text-input", inputs: ["disabled", "useActionableIcons", "leftIcon", "rightIcon", "prefix", "context", "helperText", "errorText", "placeholder", "readOnly", "size", "type", "maxLength", "autofocus", "autocomplete", "error", "width", "value"], outputs: ["leftIconAction", "rightIconAction"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
57
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwMenuContainerComponent, decorators: [{
|
|
58
58
|
type: Component,
|
|
59
59
|
args: [{ selector: 'fw-menu-container', encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"showFilter\" class=\"filter-box\" cdkMenuBar>\n <fw-text-input\n placeholder=\"Search\" leftIcon=\"search\" autofocus\n [value]=\"filterText\" (input)=\"filterTextChange($event)\">\n </fw-text-input>\n</div>\n<div class=\"menu-wrapper\" [ngClass]=\"[showFilter?'filtered':'', collapsed?'collapsed':'']\">\n <ng-content></ng-content>\n</div>\n", styles: [".fw-menu-container{display:flex;border-radius:8px;background:var(--card-background);position:relative}.fw-menu-container.border-default{border:1px solid var(--separations-border)}.fw-menu-container .filter-box{border-top-left-radius:8px;border-top-right-radius:8px;padding:8px;border-bottom:1px solid var(--separations-base);background-color:var(--card-background);position:absolute;left:0;right:0;z-index:1}.fw-menu-container .menu-wrapper{flex:1;padding:6px 4px;scroll-padding:17px;overflow:hidden auto}.fw-menu-container .menu-wrapper.collapsed{scrollbar-width:none}.fw-menu-container .menu-wrapper.filtered{margin-top:54px}.fw-menu-container fw-menu-separator{margin:6px -8px}\n"] }]
|
|
@@ -83,32 +83,37 @@ export class FwMultiSelectMenuComponent {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
ngAfterContentInit() {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
86
|
+
this.registerCustomMenuItems();
|
|
87
|
+
this.customMenuItems.changes.subscribe(() => {
|
|
88
|
+
this.registerCustomMenuItems();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
registerCustomMenuItems() {
|
|
92
|
+
// first filter any menuItems we've already registered as options
|
|
93
|
+
const newMenuItems = this.customMenuItems.filter(menuItem => !this.options.find(option => menuItem.value === option.value));
|
|
94
|
+
newMenuItems.forEach((newMenuItem) => {
|
|
95
|
+
const newOption = {
|
|
96
|
+
value: newMenuItem.value,
|
|
97
|
+
title: newMenuItem.title,
|
|
98
|
+
icon: newMenuItem.icon,
|
|
99
|
+
};
|
|
100
|
+
this.options.push(newOption);
|
|
101
|
+
const sub = newMenuItem.click.subscribe(value => {
|
|
102
|
+
this.updateValue([value], true);
|
|
103
|
+
if (this.closeOnSelect) {
|
|
104
|
+
this.trigger.close();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
this.subscriptions.push(sub);
|
|
108
|
+
});
|
|
109
|
+
this.updateFilteredItems();
|
|
105
110
|
}
|
|
106
111
|
handleTouched() {
|
|
107
112
|
this.touched = true;
|
|
108
113
|
}
|
|
109
114
|
handleClose(chip) {
|
|
110
|
-
this.value.
|
|
111
|
-
this.updateValue(
|
|
115
|
+
const newValues = this.value.filter(val => val !== chip[this.valueProperty]);
|
|
116
|
+
this.updateValue(newValues);
|
|
112
117
|
this.trigger.close();
|
|
113
118
|
}
|
|
114
119
|
handleChange(e) {
|
|
@@ -125,6 +130,16 @@ export class FwMultiSelectMenuComponent {
|
|
|
125
130
|
if (this.filterItemsOnSelect && this.options && this.value) {
|
|
126
131
|
this.filteredOptions = this.options.filter(i => !this.value.includes(i[this.valueProperty]));
|
|
127
132
|
}
|
|
133
|
+
if (this.customMenuItems && this.filterItemsOnSelect) {
|
|
134
|
+
this.customMenuItems.forEach(item => {
|
|
135
|
+
if (this.value.includes(item.value)) {
|
|
136
|
+
item.hidden = true;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
item.hidden = false;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
128
143
|
if (this.value) {
|
|
129
144
|
if (this.value.length === 0) {
|
|
130
145
|
setTimeout(() => {
|
|
@@ -146,34 +161,31 @@ export class FwMultiSelectMenuComponent {
|
|
|
146
161
|
}
|
|
147
162
|
}
|
|
148
163
|
}
|
|
149
|
-
updateValue(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.selectedOptions.push(val);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
this.selectedValues.push(val);
|
|
160
|
-
if (this.options && this.options.length) {
|
|
161
|
-
this.selectedOptions = [];
|
|
162
|
-
this.options.forEach(opt => {
|
|
163
|
-
if (value.indexOf(opt[this.valueProperty]) >= 0) {
|
|
164
|
-
this.selectedOptions.push(opt);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
});
|
|
164
|
+
updateValue(incomingValues, additive = false) {
|
|
165
|
+
if (!incomingValues) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!additive) {
|
|
169
|
+
this.selectedValues = [];
|
|
170
|
+
this.selectedOptions = [];
|
|
170
171
|
}
|
|
172
|
+
incomingValues.forEach(incoming => {
|
|
173
|
+
if (typeof incoming === 'object') {
|
|
174
|
+
this.selectedValues.push(incoming[this.valueProperty]);
|
|
175
|
+
this.selectedOptions.push(incoming);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.selectedValues.push(incoming);
|
|
179
|
+
const incomingMappedToOption = this.options.find(opt => opt[this.valueProperty] === incoming);
|
|
180
|
+
this.selectedOptions.push(incomingMappedToOption);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
171
183
|
this._value = this.selectedValues;
|
|
172
184
|
this.updateFilteredItems();
|
|
173
185
|
if (this.onChange) {
|
|
174
|
-
this.onChange(
|
|
186
|
+
this.onChange(this._value);
|
|
175
187
|
}
|
|
176
|
-
this.change.emit(
|
|
188
|
+
this.change.emit(this._value);
|
|
177
189
|
if (this.textInput && this.textInput.nativeElement) {
|
|
178
190
|
this.textInput.nativeElement.value = '';
|
|
179
191
|
}
|
|
@@ -254,24 +266,31 @@ export class FwMultiSelectMenuComponent {
|
|
|
254
266
|
}
|
|
255
267
|
}
|
|
256
268
|
}
|
|
257
|
-
|
|
258
|
-
if (
|
|
259
|
-
this.
|
|
260
|
-
if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
|
|
261
|
-
return !this.value.includes(option);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
});
|
|
269
|
+
handleFilterChange(event) {
|
|
270
|
+
if (!this.trigger.isOpen()) {
|
|
271
|
+
this.trigger.open();
|
|
267
272
|
}
|
|
268
|
-
|
|
273
|
+
const newFilterValue = event.target['value'];
|
|
274
|
+
// empty filter guard
|
|
275
|
+
if (!newFilterValue) {
|
|
269
276
|
this.filteredOptions = this.options;
|
|
270
277
|
this.updateFilteredItems();
|
|
278
|
+
return;
|
|
271
279
|
}
|
|
272
|
-
|
|
273
|
-
|
|
280
|
+
// hide custom items
|
|
281
|
+
if (this.customMenuItems) {
|
|
282
|
+
const filteredCustomItems = this.customMenuItems.filter(item => !item.title.toLowerCase().includes(newFilterValue.toLowerCase()));
|
|
283
|
+
filteredCustomItems.forEach(item => item.hidden = true);
|
|
274
284
|
}
|
|
285
|
+
// decide what to render if we're using options
|
|
286
|
+
this.filteredOptions = this.options.filter(option => {
|
|
287
|
+
if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
|
|
288
|
+
return !this.value.includes(option);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
});
|
|
275
294
|
this.moveFocused('zero');
|
|
276
295
|
}
|
|
277
296
|
}
|
|
@@ -282,7 +301,7 @@ FwMultiSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
282
301
|
useExisting: forwardRef(() => FwMultiSelectMenuComponent),
|
|
283
302
|
multi: true,
|
|
284
303
|
},
|
|
285
|
-
], queries: [{ propertyName: "
|
|
304
|
+
], queries: [{ propertyName: "customMenuItems", predicate: FwMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "textInitialInput", first: true, predicate: ["textInitialInput"], descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleFilterChange($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleFilterChange($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"customMenuItems.length === 0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n </ng-container>\n <fw-menu-item\n *ngIf=\"filteredOptions.length === 0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i3.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: i4.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i5.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i6.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i7.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "directive", type: i8.MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] });
|
|
286
305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
|
|
287
306
|
type: Component,
|
|
288
307
|
args: [{ selector: 'fw-multi-select', providers: [
|
|
@@ -291,7 +310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
291
310
|
useExisting: forwardRef(() => FwMultiSelectMenuComponent),
|
|
292
311
|
multi: true,
|
|
293
312
|
},
|
|
294
|
-
], template: "<div [ngStyle]=\"{width: width}\">\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"
|
|
313
|
+
], template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleFilterChange($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleFilterChange($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"customMenuItems.length === 0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n </ng-container>\n <fw-menu-item\n *ngIf=\"filteredOptions.length === 0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"] }]
|
|
295
314
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { outsideClick: [{
|
|
296
315
|
type: HostListener,
|
|
297
316
|
args: ['document:click']
|
|
@@ -340,9 +359,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
340
359
|
}], renderedMenuItems: [{
|
|
341
360
|
type: ViewChildren,
|
|
342
361
|
args: [FwMenuItemComponent]
|
|
343
|
-
}],
|
|
362
|
+
}], customMenuItems: [{
|
|
344
363
|
type: ContentChildren,
|
|
345
|
-
args: [FwMenuItemComponent]
|
|
364
|
+
args: [FwMenuItemComponent, { descendants: true }]
|
|
346
365
|
}], textInput: [{
|
|
347
366
|
type: ViewChild,
|
|
348
367
|
args: ['textInput']
|
|
@@ -354,4 +373,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
354
373
|
}], value: [{
|
|
355
374
|
type: Input
|
|
356
375
|
}] } });
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7OztBQWMvRSxNQUFNLE9BQU8sMEJBQTBCO0lBd0RyQyxZQUFzQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTdDbEQsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxpQkFBWSxHQUFZLE1BQU0sQ0FBQztRQUMvQixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQWEsSUFBSSxDQUFDO1FBQy9CLHdCQUFtQixHQUFhLElB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Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ3FCLE9BQU87c0JBQWpDLFNBQVM7dUJBQUMsY0FBYztnQkFDRyxJQUFJO3NCQUEvQixTQUFTO3VCQUFDLGVBQWU7Z0JBQ1MsaUJBQWlCO3NCQUFuRCxZQUFZO3VCQUFDLG1CQUFtQjtnQkFDSyxTQUFTO3NCQUE5QyxlQUFlO3VCQUFDLG1CQUFtQjtnQkFLWixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFbkIsTUFBTTtzQkFBZixNQUFNO2dCQU1ILEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDZGtNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9tZW51JztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJykgb3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgJiYgdGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIEBJbnB1dCgpIHZhbHVlUHJvcGVydHk/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSB0aXRsZVByb3BlcnR5Pzogc3RyaW5nID0gJ3RpdGxlJztcbiAgQElucHV0KCkgaWNvblByb3BlcnR5Pzogc3RyaW5nID0gJ2ljb24nO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2hlY2tib3g/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZmlsdGVySXRlbXNPblNlbGVjdD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhTZWxlY3RlZFNob3duOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMjAwcHgnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG9wdGlvbnNXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgbWluT3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgbWF4T3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3Qgc29tZXRoaW5nLi4uJztcbiAgQElucHV0KCkgZW1wdHlUZXh0OiBzdHJpbmcgPSAnTm8gbWF0Y2hlcyBmb3VuZC4uLic7XG4gIEBWaWV3Q2hpbGQoQ2RrTWVudVRyaWdnZXIpIHRyaWdnZXI6IENka01lbnVUcmlnZ2VyO1xuICBAVmlld0NoaWxkKEZ3TWVudUNvbXBvbmVudCkgbWVudTogRndNZW51Q29tcG9uZW50O1xuICBAVmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpIHJlbmRlcmVkTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZE9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIGZpbHRlcmVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBAVmlld0NoaWxkKCd0ZXh0SW5wdXQnKSB0ZXh0SW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RleHRJbml0aWFsSW5wdXQnKSB0ZXh0SW5pdGlhbElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmb2N1c2VkID0gMDtcbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55W10pID0+IHZvaWQ7XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcbiAgICAvLyB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVudUl0ZW1zICYmIHRoaXMubWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBvcHQgPSB7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0KTtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKGl0ZW0udmFsdWUudG9TdHJpbmcoKSkgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdWIgPSBpdGVtLmNsaWNrLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm1lbnUud3JpdGVWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDbG9zZShjaGlwOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmluZGV4T2YoY2hpcFt0aGlzLnZhbHVlUHJvcGVydHldKSwgMSk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGkgPT4gIXRoaXMudmFsdWUuaW5jbHVkZXMoaVt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgdG8gZ2l2ZSB0aW1lIGZvciBlbGVtZW50IHN3YXAgdG8gaGFwcGVuXG4gICAgICAgICAgaWYgKHRoaXMudGV4dEluaXRpYWxJbnB1dCAmJiB0aGlzLnRleHRJbml0aWFsSW5wdXQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzXG4gICAgICAgICAgICB0aGlzLnRleHRJbml0aWFsSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHRoaXMgbmVlZHMgdG8gYmUgZGVsYXllZCB0byBnaXZlIHRpbWUgZm9yIGVsZW1lbnQgc3dhcCB0byBoYXBwZW5cbiAgICAgICAgICBpZiAodGhpcy50ZXh0SW5wdXQgJiYgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzXG4gICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2godmFsW3RoaXMudmFsdWVQcm9wZXJ0eV0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihvcHRbdGhpcy52YWx1ZVByb3BlcnR5XSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBtb3ZlRm9jdXNlZChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdkb3duJzoge1xuICAgICAgICB0aGlzLmZvY3VzZWQrKztcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCA+PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndXAnOiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZC0tO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkIDwgMCkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICBldmVudC50YXJnZXRbJ3ZhbHVlJ10gPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldFsndmFsdWUnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmZvY3VzZWRdKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5mb2N1c2VkXVt0aGlzLnZhbHVlUHJvcGVydHldXTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIGV2ZW50LnRhcmdldFsndmFsdWUnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uW3RoaXMudGl0bGVQcm9wZXJ0eV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXRbJ3ZhbHVlJ10udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJpZ2dlci5pc09wZW4oKSkge1xuICAgICAgdGhpcy50cmlnZ2VyLm9wZW4oKTtcbiAgICB9XG4gICAgdGhpcy5tb3ZlRm9jdXNlZCgnemVybycpO1xuICB9XG59XG4iLCI8ZGl2IFtuZ1N0eWxlXT1cInt3aWR0aDogd2lkdGh9XCI+XG4gIDxkaXZcbiAgICBmd01lbnVSZWdpc3RlclxuICAgIFtuZ0NsYXNzXT1cIlsnY2hpcC1ncmlkJywgc2l6ZV1cIlxuICAgIFtuZ1N0eWxlXT1cInttaW5IZWlnaHQ6IG1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHR9XCJcbiAgICBbY2RrTWVudVRyaWdnZXJGb3JdPVwic2VsZWN0TWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jaGlwLWdyaWRcIiAqbmdJZj1cInZhbHVlICYmIHZhbHVlLmxlbmd0aD4wXCI+XG4gICAgICA8ZnctY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBzZWxlY3RlZE9wdGlvbnMgfCBzbGljZTowOm1heFNlbGVjdGVkU2hvd25cIlxuICAgICAgICBbdGl0bGVdPVwiY2hpcFt0aXRsZVByb3BlcnR5XVwiXG4gICAgICAgIFt2YWx1ZV09XCJjaGlwW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgW2ljb25dPVwiY2hpcFtpY29uUHJvcGVydHldXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKGNoaXApXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIj5cbiAgICAgIDwvZnctY2hpcD5cbiAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUubGVuZ3RoPm1heFNlbGVjdGVkU2hvd25cIiBjbGFzcz1cIm1heC1leGNlZWRlZFwiPit7eyB2YWx1ZS5sZW5ndGggLSBtYXhTZWxlY3RlZFNob3duIH19XG4gICAgICAgIG1vcmU8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIiAjdGV4dElucHV0XG4gICAgICAgIGNsYXNzPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJGV2ZW50KVwiPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIiAjdGV4dEluaXRpYWxJbnB1dFxuICAgICAgKm5nSWY9XCIhdmFsdWUgfHwgdmFsdWUubGVuZ3RoPT09MFwiXG4gICAgICBjbGFzcz1cInBsYWNlaG9sZGVyXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVUb3VjaGVkKClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3NlbGVjdE1lbnU+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoIHx8IHdpZHRoXCIgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCIgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0XCJcbiAgICAgICpuZ0lmPVwiZW1wdHlUZXh0Lmxlbmd0aCA+IDAgfHwgKGZpbHRlcmVkT3B0aW9ucyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTApXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW1zICYmIG1lbnVJdGVtcy5sZW5ndGg9PT0wXCI+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zOyBpbmRleCBhcyAkaW5kZXhcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bdmFsdWVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW2ljb25dPVwiaXRlbVtpY29uUHJvcGVydHldXCJcbiAgICAgICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaG93Q2hlY2tib3hdPVwidXNlQ2hlY2tib3hcIlxuICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZD09PSRpbmRleFwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cImZvY3VzZWQ9JGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9mdy1tZW51LWl0ZW0+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTAgJiYgZW1wdHlUZXh0XCIgW3Nob3dDaGVja2JveF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiIFt0aXRsZV09XCJlbXB0eVRleHRcIj5cbiAgICAgICAgICA8L2Z3LW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7OztBQWMvRSxNQUFNLE9BQU8sMEJBQTBCO0lBd0RyQyxZQUFzQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTdDbEQsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxpQkFBWSxHQUFZLE1BQU0sQ0FBQztRQUMvQixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQWEsSUFBSSxDQUFDO1FBQy9CLHdCQUFtQixHQUFhLElB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Q0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csSUFBSTtzQkFBL0IsU0FBUzt1QkFBQyxlQUFlO2dCQUNTLGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQzRCLGVBQWU7c0JBQTNFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUtuQyxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFbkIsTUFBTTtzQkFBZixNQUFNO2dCQU1ILEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDZGtNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9tZW51JztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJykgb3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgJiYgdGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIEBJbnB1dCgpIHZhbHVlUHJvcGVydHk/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSB0aXRsZVByb3BlcnR5Pzogc3RyaW5nID0gJ3RpdGxlJztcbiAgQElucHV0KCkgaWNvblByb3BlcnR5Pzogc3RyaW5nID0gJ2ljb24nO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2hlY2tib3g/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZmlsdGVySXRlbXNPblNlbGVjdD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhTZWxlY3RlZFNob3duOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMjAwcHgnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG9wdGlvbnNXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgbWluT3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgbWF4T3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3Qgc29tZXRoaW5nLi4uJztcbiAgQElucHV0KCkgZW1wdHlUZXh0OiBzdHJpbmcgPSAnTm8gbWF0Y2hlcyBmb3VuZC4uLic7XG4gIEBWaWV3Q2hpbGQoQ2RrTWVudVRyaWdnZXIpIHRyaWdnZXI6IENka01lbnVUcmlnZ2VyO1xuICBAVmlld0NoaWxkKEZ3TWVudUNvbXBvbmVudCkgbWVudTogRndNZW51Q29tcG9uZW50O1xuICBAVmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpIHJlbmRlcmVkTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjdXN0b21NZW51SXRlbXM6IFF1ZXJ5TGlzdDxGd01lbnVJdGVtQ29tcG9uZW50PjtcbiAgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgZmlsdGVyZWRPcHRpb25zOiBvYmplY3RbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3RleHRJbnB1dCcpIHRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGV4dEluaXRpYWxJbnB1dCcpIHRleHRJbml0aWFsSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvY3VzZWQgPSAwO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cblxuICBvbkNoYW5nZTogKHZhbHVlOiBhbnlbXSkgPT4gdm9pZDtcbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tTWVudUl0ZW1zKClcblxuICAgIHRoaXMuY3VzdG9tTWVudUl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKTtcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKTogdm9pZCB7XG4gICAgLy8gZmlyc3QgZmlsdGVyIGFueSBtZW51SXRlbXMgd2UndmUgYWxyZWFkeSByZWdpc3RlcmVkIGFzIG9wdGlvbnNcbiAgICBjb25zdCBuZXdNZW51SXRlbXMgPSB0aGlzLmN1c3RvbU1lbnVJdGVtcy5maWx0ZXIoXG4gICAgICBtZW51SXRlbSA9PiAhdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG1lbnVJdGVtLnZhbHVlID09PSAob3B0aW9uIGFzIGFueSkudmFsdWUpLFxuICAgIClcblxuICAgIG5ld01lbnVJdGVtcy5mb3JFYWNoKChuZXdNZW51SXRlbSkgPT4ge1xuXG4gICAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICAgIHZhbHVlOiBuZXdNZW51SXRlbS52YWx1ZSxcbiAgICAgICAgdGl0bGU6IG5ld01lbnVJdGVtLnRpdGxlLFxuICAgICAgICBpY29uOiBuZXdNZW51SXRlbS5pY29uLFxuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuXG4gICAgICBjb25zdCBzdWIgPSBuZXdNZW51SXRlbS5jbGljay5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKFt2YWx1ZV0sIHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xuICAgIH0pXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDbG9zZShjaGlwOiBvYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSB0aGlzLnZhbHVlLmZpbHRlcih2YWwgPT4gdmFsICE9PSBjaGlwW3RoaXMudmFsdWVQcm9wZXJ0eV0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWVzKTtcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGkgPT4gIXRoaXMudmFsdWUuaW5jbHVkZXMoaVt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VzdG9tTWVudUl0ZW1zICYmIHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCkge1xuXG4gICAgICB0aGlzLmN1c3RvbU1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtLnZhbHVlKSkge1xuICAgICAgICAgIGl0ZW0uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gdGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIHRvIGdpdmUgdGltZSBmb3IgZWxlbWVudCBzd2FwIHRvIGhhcHBlblxuICAgICAgICAgIGlmICh0aGlzLnRleHRJbml0aWFsSW5wdXQgJiYgdGhpcy50ZXh0SW5pdGlhbElucHV0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5pdGlhbElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgdG8gZ2l2ZSB0aW1lIGZvciBlbGVtZW50IHN3YXAgdG8gaGFwcGVuXG4gICAgICAgICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZShpbmNvbWluZ1ZhbHVlczogYW55W10sIGFkZGl0aXZlID0gZmFsc2UpOiB2b2lkIHtcblxuICAgIGlmICghaW5jb21pbmdWYWx1ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFkZGl0aXZlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIGluY29taW5nVmFsdWVzLmZvckVhY2goaW5jb21pbmcgPT4ge1xuXG4gICAgICBpZiAodHlwZW9mIGluY29taW5nID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaW5jb21pbmdbdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmcpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaChpbmNvbWluZyk7XG5cbiAgICAgICAgY29uc3QgaW5jb21pbmdNYXBwZWRUb09wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHRbdGhpcy52YWx1ZVByb3BlcnR5XSA9PT0gaW5jb21pbmcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKGluY29taW5nTWFwcGVkVG9PcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBtb3ZlRm9jdXNlZChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdkb3duJzoge1xuICAgICAgICB0aGlzLmZvY3VzZWQrKztcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCA+PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndXAnOiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZC0tO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkIDwgMCkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICBldmVudC50YXJnZXRbJ3ZhbHVlJ10gPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldFsndmFsdWUnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmZvY3VzZWRdKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5mb2N1c2VkXVt0aGlzLnZhbHVlUHJvcGVydHldXTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIGV2ZW50LnRhcmdldFsndmFsdWUnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVGaWx0ZXJDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMudHJpZ2dlci5pc09wZW4oKSkge1xuICAgICAgdGhpcy50cmlnZ2VyLm9wZW4oKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldFsndmFsdWUnXTtcblxuICAgIC8vIGVtcHR5IGZpbHRlciBndWFyZFxuICAgIGlmICghbmV3RmlsdGVyVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaGlkZSBjdXN0b20gaXRlbXNcbiAgICBpZiAodGhpcy5jdXN0b21NZW51SXRlbXMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ3VzdG9tSXRlbXMgPSB0aGlzLmN1c3RvbU1lbnVJdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5ld0ZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGZpbHRlcmVkQ3VzdG9tSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaGlkZGVuID0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyIGlmIHdlJ3JlIHVzaW5nIG9wdGlvbnNcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb25bdGhpcy50aXRsZVByb3BlcnR5XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRhcmdldFsndmFsdWUnXS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubW92ZUZvY3VzZWQoJ3plcm8nKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJ7d2lkdGg6IHdpZHRofVwiICN3cmFwcGVyPlxuICA8ZGl2XG4gICAgZndNZW51UmVnaXN0ZXJcbiAgICBbbmdDbGFzc109XCJbJ2NoaXAtZ3JpZCcsIHNpemVdXCJcbiAgICBbbmdTdHlsZV09XCJ7bWluSGVpZ2h0OiBtaW5IZWlnaHQsIG1heEhlaWdodDogbWF4SGVpZ2h0fVwiXG4gICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInNlbGVjdE1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItY2hpcC1ncmlkXCIgKm5nSWY9XCJ2YWx1ZSAmJiB2YWx1ZS5sZW5ndGg+MFwiPlxuICAgICAgPGZ3LWNoaXBcbiAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygc2VsZWN0ZWRPcHRpb25zIHwgc2xpY2U6MDptYXhTZWxlY3RlZFNob3duXCJcbiAgICAgICAgW3RpdGxlXT1cImNoaXBbdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICBbdmFsdWVdPVwiY2hpcFt2YWx1ZVByb3BlcnR5XVwiXG4gICAgICAgIFtpY29uXT1cImNoaXBbaWNvblByb3BlcnR5XVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtzaG93Q2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgIChjbG9zZSk9XCJoYW5kbGVDbG9zZShjaGlwKVwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCI+XG4gICAgICA8L2Z3LWNoaXA+XG4gICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLmxlbmd0aD5tYXhTZWxlY3RlZFNob3duXCIgY2xhc3M9XCJtYXgtZXhjZWVkZWRcIj4re3sgdmFsdWUubGVuZ3RoIC0gbWF4U2VsZWN0ZWRTaG93biB9fVxuICAgICAgICBtb3JlPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgI3RleHRJbnB1dFxuICAgICAgICBjbGFzcz1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cImhhbmRsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGV4dFwiICN0ZXh0SW5pdGlhbElucHV0XG4gICAgICAqbmdJZj1cIiF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGg9PT0wXCJcbiAgICAgIGNsYXNzPVwicGxhY2Vob2xkZXJcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgKGZvY3VzKT1cImhhbmRsZVRvdWNoZWQoKVwiXG4gICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoaW5wdXQpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3NlbGVjdE1lbnU+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoIHx8IHdyYXBwZXIub2Zmc2V0V2lkdGggKyAncHgnXCIgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCIgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0XCJcbiAgICAgICpuZ0lmPVwiZW1wdHlUZXh0Lmxlbmd0aCA+IDAgfHwgKGZpbHRlcmVkT3B0aW9ucyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTApXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tTWVudUl0ZW1zLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxmdy1tZW51LWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkT3B0aW9uczsgaW5kZXggYXMgJGluZGV4XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtW3RpdGxlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFtpY29uXT1cIml0ZW1baWNvblByb3BlcnR5XVwiXG4gICAgICAgICAgICBbbXVsdGlTZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2hvd0NoZWNrYm94XT1cInVzZUNoZWNrYm94XCJcbiAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWQ9PT0kaW5kZXhcIlxuICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJmb2N1c2VkPSRpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBlbXB0eVRleHRcIiBbc2hvd0NoZWNrYm94XT1cImZhbHNlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiIFt0aXRsZV09XCJlbXB0eVRleHRcIj5cbiAgICAgICAgPC9mdy1tZW51LWl0ZW0+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yLCBmdy1tZW51LWl0ZW0tZ3JvdXAsIGZ3LW1lbnUtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -268,7 +268,7 @@ export class FwSelectMenuComponent {
|
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
270
|
FwSelectMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwSelectMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
271
|
-
FwSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwSelectMenuComponent, selector: "fw-select", inputs: { options: "options", valueProperty: "valueProperty", useFullOptionAsValue: "useFullOptionAsValue", titleProperty: "titleProperty", iconProperty: "iconProperty", staticIcon: "staticIcon", descriptionProperty: "descriptionProperty", showFilter: "showFilter", showReset: "showReset", disabled: "disabled", errored: "errored", width: "width", optionsWidth: "optionsWidth", minOptionsHeight: "minOptionsHeight", maxOptionsHeight: "maxOptionsHeight", size: "size", placeholder: "placeholder", value: "value" }, outputs: { change: "change", filterChanged: "filterChanged" }, host: { listeners: { "document:click": "outsideClick($event.target)" } }, queries: [{ propertyName: "menuItems", predicate: FwMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #wrapper [ngStyle]=\"{width: width, cursor: 'pointer'}\">\n <fw-text-input\n fwMenuRegister\n [cdkMenuTriggerFor]=\"selectMenu\"\n [value]=\"selectTitle\"\n [leftIcon]=\"staticIcon || selectIcon\"\n [rightIcon]=\"(selectTitle&&showReset)?'close-circled':'chevron-down'\"\n (rightIconAction)=\"handleReset()\"\n [useActionableIcons]=\"true\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [size]=\"size\"\n [error]=\"errored || (invalid && touched)\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\"\n readOnly=\"true\">\n </fw-text-input>\n <ng-template #selectMenu>\n <fw-menu-container\n [filterText]=\"filterValue\"\n *ngIf=\"!disabled\" [showFilter]=\"showFilter\" [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\"\n [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\" (filterChanged)=\"onFilterChanged($event)\">\n <fw-menu [disabled]=\"disabled\" [value]=\"selectValue\" (change)=\"handleClick($event)\">\n <ng-container *ngIf=\"menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of options\"\n [title]=\"item[titleProperty]?.toString()\"\n [description]=\"item[descriptionProperty]\"\n [value]=\"useFullOptionAsValue ? JSON.stringify(item) : item?.[valueProperty]?.toString()\"\n [icon]=\"item[iconProperty]\"\n >\n </fw-menu-item>\n </ng-container>\n <div #menuContentWrapper>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group]\"></ng-content>\n </div>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host{box-sizing:border-box;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i4.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i5.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i6.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "component", type: i7.FwTextInputComponent, selector: "fw-text-input", inputs: ["disabled", "useActionableIcons", "leftIcon", "rightIcon", "prefix", "context", "helperText", "errorText", "placeholder", "readOnly", "size", "type", "maxLength", "autofocus", "autocomplete", "error", "value"], outputs: ["leftIconAction", "rightIconAction"] }, { kind: "directive", type: i8.MenuRegisterDirective, selector: "[fwMenuRegister]" }] });
|
|
271
|
+
FwSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwSelectMenuComponent, selector: "fw-select", inputs: { options: "options", valueProperty: "valueProperty", useFullOptionAsValue: "useFullOptionAsValue", titleProperty: "titleProperty", iconProperty: "iconProperty", staticIcon: "staticIcon", descriptionProperty: "descriptionProperty", showFilter: "showFilter", showReset: "showReset", disabled: "disabled", errored: "errored", width: "width", optionsWidth: "optionsWidth", minOptionsHeight: "minOptionsHeight", maxOptionsHeight: "maxOptionsHeight", size: "size", placeholder: "placeholder", value: "value" }, outputs: { change: "change", filterChanged: "filterChanged" }, host: { listeners: { "document:click": "outsideClick($event.target)" } }, queries: [{ propertyName: "menuItems", predicate: FwMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #wrapper [ngStyle]=\"{width: width, cursor: 'pointer'}\">\n <fw-text-input\n fwMenuRegister\n [cdkMenuTriggerFor]=\"selectMenu\"\n [value]=\"selectTitle\"\n [leftIcon]=\"staticIcon || selectIcon\"\n [rightIcon]=\"(selectTitle&&showReset)?'close-circled':'chevron-down'\"\n (rightIconAction)=\"handleReset()\"\n [useActionableIcons]=\"true\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [size]=\"size\"\n [error]=\"errored || (invalid && touched)\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\"\n readOnly=\"true\">\n </fw-text-input>\n <ng-template #selectMenu>\n <fw-menu-container\n [filterText]=\"filterValue\"\n *ngIf=\"!disabled\" [showFilter]=\"showFilter\" [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\"\n [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\" (filterChanged)=\"onFilterChanged($event)\">\n <fw-menu [disabled]=\"disabled\" [value]=\"selectValue\" (change)=\"handleClick($event)\">\n <ng-container *ngIf=\"menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of options\"\n [title]=\"item[titleProperty]?.toString()\"\n [description]=\"item[descriptionProperty]\"\n [value]=\"useFullOptionAsValue ? JSON.stringify(item) : item?.[valueProperty]?.toString()\"\n [icon]=\"item[iconProperty]\"\n >\n </fw-menu-item>\n </ng-container>\n <div #menuContentWrapper>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group]\"></ng-content>\n </div>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host{box-sizing:border-box;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i4.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i5.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i6.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "component", type: i7.FwTextInputComponent, selector: "fw-text-input", inputs: ["disabled", "useActionableIcons", "leftIcon", "rightIcon", "prefix", "context", "helperText", "errorText", "placeholder", "readOnly", "size", "type", "maxLength", "autofocus", "autocomplete", "error", "width", "value"], outputs: ["leftIconAction", "rightIconAction"] }, { kind: "directive", type: i8.MenuRegisterDirective, selector: "[fwMenuRegister]" }] });
|
|
272
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwSelectMenuComponent, decorators: [{
|
|
273
273
|
type: Component,
|
|
274
274
|
args: [{ selector: 'fw-select', template: "<div #wrapper [ngStyle]=\"{width: width, cursor: 'pointer'}\">\n <fw-text-input\n fwMenuRegister\n [cdkMenuTriggerFor]=\"selectMenu\"\n [value]=\"selectTitle\"\n [leftIcon]=\"staticIcon || selectIcon\"\n [rightIcon]=\"(selectTitle&&showReset)?'close-circled':'chevron-down'\"\n (rightIconAction)=\"handleReset()\"\n [useActionableIcons]=\"true\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [size]=\"size\"\n [error]=\"errored || (invalid && touched)\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\"\n readOnly=\"true\">\n </fw-text-input>\n <ng-template #selectMenu>\n <fw-menu-container\n [filterText]=\"filterValue\"\n *ngIf=\"!disabled\" [showFilter]=\"showFilter\" [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\"\n [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\" (filterChanged)=\"onFilterChanged($event)\">\n <fw-menu [disabled]=\"disabled\" [value]=\"selectValue\" (change)=\"handleClick($event)\">\n <ng-container *ngIf=\"menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of options\"\n [title]=\"item[titleProperty]?.toString()\"\n [description]=\"item[descriptionProperty]\"\n [value]=\"useFullOptionAsValue ? JSON.stringify(item) : item?.[valueProperty]?.toString()\"\n [icon]=\"item[iconProperty]\"\n >\n </fw-menu-item>\n </ng-container>\n <div #menuContentWrapper>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group]\"></ng-content>\n </div>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host{box-sizing:border-box;max-width:100%}\n"] }]
|
|
@@ -14,6 +14,7 @@ export class FwTextInputComponent {
|
|
|
14
14
|
this.maxLength = 255;
|
|
15
15
|
// we bind this to host because that's where angular form apis put the error classes
|
|
16
16
|
this.error = false;
|
|
17
|
+
this.width = '100%';
|
|
17
18
|
this.value = '';
|
|
18
19
|
this.externalControl = null;
|
|
19
20
|
this.onTouch = () => {
|
|
@@ -52,7 +53,7 @@ export class FwTextInputComponent {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
FwTextInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwTextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
-
FwTextInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwTextInputComponent, selector: "fw-text-input", inputs: { disabled: "disabled", useActionableIcons: "useActionableIcons", leftIcon: "leftIcon", rightIcon: "rightIcon", prefix: "prefix", context: "context", helperText: "helperText", errorText: "errorText", placeholder: "placeholder", readOnly: "readOnly", size: "size", type: "type", maxLength: "maxLength", autofocus: "autofocus", autocomplete: "autocomplete", error: "error", value: "value" }, outputs: { leftIconAction: "leftIconAction", rightIconAction: "rightIconAction" }, host: { properties: { "class.errored": "this.error" } }, providers: [{
|
|
56
|
+
FwTextInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwTextInputComponent, selector: "fw-text-input", inputs: { disabled: "disabled", useActionableIcons: "useActionableIcons", leftIcon: "leftIcon", rightIcon: "rightIcon", prefix: "prefix", context: "context", helperText: "helperText", errorText: "errorText", placeholder: "placeholder", readOnly: "readOnly", size: "size", type: "type", maxLength: "maxLength", autofocus: "autofocus", autocomplete: "autocomplete", error: "error", width: "width", value: "value" }, outputs: { leftIconAction: "leftIconAction", rightIconAction: "rightIconAction" }, host: { properties: { "class.errored": "this.error", "style.width": "this.width" } }, providers: [{
|
|
56
57
|
provide: NG_VALUE_ACCESSOR,
|
|
57
58
|
useExisting: FwTextInputComponent,
|
|
58
59
|
multi: true,
|
|
@@ -106,7 +107,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
106
107
|
}], textInput: [{
|
|
107
108
|
type: ContentChild,
|
|
108
109
|
args: ['textInput', { static: false }]
|
|
110
|
+
}], width: [{
|
|
111
|
+
type: HostBinding,
|
|
112
|
+
args: ['style.width']
|
|
113
|
+
}, {
|
|
114
|
+
type: Input
|
|
109
115
|
}], value: [{
|
|
110
116
|
type: Input
|
|
111
117
|
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQXFDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFjdEYsTUFBTSxPQUFPLG9CQUFvQjtJQVZqQztRQVlXLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFDM0IsdUJBQWtCLEdBQWEsS0FBSyxDQUFDO1FBRXBDLG1CQUFjLEdBQXdCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0Qsb0JBQWUsR0FBd0IsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQWFqRSxTQUFJLEdBQWtDLFFBQVEsQ0FBQztRQUMvQyxTQUFJLEdBQVksTUFBTSxDQUFDO1FBQ3ZCLGNBQVMsR0FBWSxHQUFHLENBQUM7UUFHbEMsb0ZBQW9GO1FBQzdDLFVBQUssR0FBYSxLQUFLLENBQUM7UUFFMUIsVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUUzQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLG9CQUFlLEdBQWdCLElBQUksQ0FBQztRQUU3QixZQUFPLEdBQUcsR0FBUyxFQUFFO1FBQzVCLENBQUMsQ0FBQztRQUNGLDZEQUE2RDtRQUN0RCxhQUFRLEdBQUcsQ0FBQyxLQUFhLEVBQVEsRUFBRTtRQUMxQyxDQUFDLENBQUM7S0FzQ0g7SUFwQ0MsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7O2tIQXpFVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiwrbUJBTnBCLENBQUM7WUFDVixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLDhIQ2JKLHcwQ0FvQ0E7NEZEckJhLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxlQUFlLGFBR2QsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQzs4QkFJTyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0UsU0FBUztzQkFBakIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVpQyxLQUFLO3NCQUEzQyxXQUFXO3VCQUFDLGVBQWU7O3NCQUFHLEtBQUs7Z0JBQ1UsU0FBUztzQkFBdEQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNQLEtBQUs7c0JBQXpDLFdBQVc7dUJBQUMsYUFBYTs7c0JBQUcsS0FBSztnQkFFekIsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEljb25UeXBlIH0gZnJvbSAnLi4vaWNvbi9pY29uLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctdGV4dC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IEZ3VGV4dElucHV0Q29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlLFxuICB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRndUZXh0SW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZUFjdGlvbmFibGVJY29ucz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbGVmdEljb24/OiBJY29uVHlwZTtcbiAgQE91dHB1dCgpIGxlZnRJY29uQWN0aW9uPzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASW5wdXQoKSByaWdodEljb24/OiBzdHJpbmc7XG4gIEBPdXRwdXQoKSByaWdodEljb25BY3Rpb24/OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBJbnB1dCgpIHByZWZpeD86IHN0cmluZztcbiAgQElucHV0KCkgY29udGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgZnctd3JhcHBlZC1pbnB1dCBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBoZWxwZXJUZXh0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBmdy13cmFwcGVkLWlucHV0IGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIGVycm9yVGV4dD86IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgQElucHV0KCkgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgdHlwZT86IHN0cmluZyA9ICd0ZXh0JztcbiAgQElucHV0KCkgbWF4TGVuZ3RoPzogbnVtYmVyID0gMjU1O1xuICBASW5wdXQoKSBhdXRvZm9jdXM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZT86IHN0cmluZztcbiAgLy8gd2UgYmluZCB0aGlzIHRvIGhvc3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgYW5ndWxhciBmb3JtIGFwaXMgcHV0IHRoZSBlcnJvciBjbGFzc2VzXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3JlZCcpIEBJbnB1dCgpIGVycm9yPzogYm9vbGVhbiA9IGZhbHNlO1xuICBAQ29udGVudENoaWxkKCd0ZXh0SW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGV4dElucHV0O1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgQElucHV0KCkgd2lkdGggPSAnMTAwJSc7XG5cbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgZXh0ZXJuYWxDb250cm9sOiBGb3JtQ29udHJvbCA9IG51bGw7XG5cbiAgcHVibGljIG9uVG91Y2ggPSAoKTogdm9pZCA9PiB7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHVibGljIG9uQ2hhbmdlID0gKHZhbHVlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgfTtcblxuICB3cml0ZVZhbHVlKG9iajogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgY2hhbmdlSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vblRvdWNoKCk7XG4gIH1cblxuICBibHVySGFuZGxlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2goKTtcbiAgfVxuXG4gIG9uTGVmdEljb25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmxlZnRJY29uQWN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmlnaHRJY29uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5yaWdodEljb25BY3Rpb24uZW1pdCgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmdWxsLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiIFtjbGFzc109XCJzaXplXCI+XG4gICAgPGZ3LWljb25cbiAgICAgICpuZ0lmPVwiISFsZWZ0SWNvblwiXG4gICAgICAoY2xpY2spPVwidXNlQWN0aW9uYWJsZUljb25zP29uTGVmdEljb25DbGljaygpOm51bGxcIlxuICAgICAgW25nQ2xhc3NdPVwidXNlQWN0aW9uYWJsZUljb25zPydhY3Rpb25hYmxlJzonJ1wiPnt7IGxlZnRJY29uIH19XG4gICAgPC9mdy1pY29uPlxuICAgIDxwIGNsYXNzPVwidmlzaW9uLXAyIGNvbnRleHRcIiAqbmdJZj1cIiEhcHJlZml4XCI+e3sgcHJlZml4IH19PC9wPlxuXG4gICAgPGlucHV0XG4gICAgICAqbmdJZj1cIiF0ZXh0SW5wdXRcIlxuICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICAoa2V5dXApPVwiY2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cImJsdXJIYW5kbGVyKClcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIFttYXhMZW5ndGhdPVwibWF4TGVuZ3RoXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW5wdXRcIj48L25nLWNvbnRlbnQ+XG4gICAgPHAgY2xhc3M9XCJ2aXNpb24tcDIgY29udGV4dFwiICpuZ0lmPVwiISFjb250ZXh0XCI+e3sgY29udGV4dCB9fTwvcD5cblxuICAgIDxmdy1pY29uIGNsYXNzPVwiZXJyb3ItaWNvblwiPndhcm5pbmctY2lyY2xlPC9mdy1pY29uPlxuICAgIDxmdy1pY29uXG4gICAgICAqbmdJZj1cIiEhcmlnaHRJY29uXCJcbiAgICAgIChjbGljayk9XCJ1c2VBY3Rpb25hYmxlSWNvbnM/b25SaWdodEljb25DbGljaygpOm51bGxcIlxuICAgICAgW25nQ2xhc3NdPVwidXNlQWN0aW9uYWJsZUljb25zPydhY3Rpb25hYmxlJzonJ1wiPnt7IHJpZ2h0SWNvbiB9fVxuICAgIDwvZnctaWNvbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8cCBjbGFzcz1cInZpc2lvbi1wNCBoZWxwZXItdGV4dFwiICpuZ0lmPVwiISFoZWxwZXJUZXh0XCI+e3sgaGVscGVyVGV4dCB9fTwvcD5cbiAgPHAgY2xhc3M9XCJ2aXNpb24tcDQgZXJyb3ItdGV4dFwiICpuZ0lmPVwiISFlcnJvclRleHRcIj57eyBlcnJvclRleHQgfX08L3A+XG48L2Rpdj5cbiJdfQ==
|