imm-element-ui 2.8.2 → 2.8.4

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.
@@ -12,7 +12,7 @@ export class CellEditSelectFieldComponent {
12
12
  if (!this.params.rawOptions && typeof this.params.getOptions === 'function') {
13
13
  if (isObservable(this.params.getOptions(this.params.data))) {
14
14
  this.params.getOptions(this.params.data).subscribe((res) => {
15
- this.params.options = res.hasOwnPropertys('data') ? res.data : (res || []);
15
+ this.params.options = res.hasOwnPropertys('data') ? res.data : res || [];
16
16
  });
17
17
  }
18
18
  else {
@@ -33,7 +33,7 @@ export class CellEditSelectFieldComponent {
33
33
  width: `${cellWidth}px`,
34
34
  background: 'var(--ag-background-color)',
35
35
  height: '40px',
36
- alignItems: 'center'
36
+ alignItems: 'center',
37
37
  };
38
38
  this.params.panelStyle = {
39
39
  width: `${cellWidth}px`,
@@ -51,149 +51,162 @@ export class CellEditSelectFieldComponent {
51
51
  });
52
52
  }
53
53
  updateNameField(nameField, event) {
54
- const oldValue = this.params.data[nameField.field];
54
+ const oldValue = this.params.data?.[nameField.field];
55
55
  const valueField = this.params.optionValue || 'value';
56
56
  const item = this.params.options.find((op) => op?.[valueField] === event.value);
57
57
  const newValue = item ? item[nameField.key] : null;
58
- const grid = this.params.grid();
59
- let e = {
60
- colDef: nameField,
61
- oldValue,
62
- newValue,
63
- rowIndex: this.params.node.rowIndex,
64
- data: { id: this.params.data.id },
65
- };
66
- grid.cellValueChanged(e);
67
- this.params.data[nameField.field] = newValue;
58
+ const grid = this.getGrid();
59
+ if (grid?.cellValueChanged) {
60
+ let e = {
61
+ colDef: nameField,
62
+ oldValue,
63
+ newValue,
64
+ rowIndex: this.params.node?.rowIndex,
65
+ data: { id: this.params.data?.id },
66
+ };
67
+ grid.cellValueChanged(e);
68
+ }
69
+ if (this.params.data) {
70
+ this.params.data[nameField.field] = newValue;
71
+ }
72
+ }
73
+ getGrid() {
74
+ if (typeof this.params.grid === 'function') {
75
+ return this.params.grid();
76
+ }
77
+ if (typeof this.params.context?.grid === 'function') {
78
+ return this.params.context.grid();
79
+ }
80
+ return undefined;
68
81
  }
69
82
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellEditSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
70
83
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CellEditSelectFieldComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
71
- <p-select
72
- [(ngModel)]="value"
73
- [scrollHeight]="params.scrollHeight || '200px'"
74
- [filter]="params.filter"
75
- [name]="params.name"
76
- [options]="params.options"
77
- [placeholder]="params.placeholder"
78
- [class]="params.class"
79
- [style]="params.style"
80
- [panelStyle]="params.panelStyle"
81
- [panelStyleClass]="params.panelStyleClass"
82
- [readonly]="params.readonly"
83
- [editable]="params.editable"
84
- [appendTo]="params.appendTo || 'body'"
85
- [tabindex]="params.tabindex"
86
- [placeholder]="params.placeholder"
87
- [loadingIcon]="params.loadingIcon"
88
- [filterPlaceholder]="params.filterPlaceholder"
89
- [filterLocale]="params.filterLocale"
90
- [variant]="params.variant"
91
- [inputId]="params.inputId"
92
- [dataKey]="params.dataKey"
93
- [filterBy]="params.filterBy"
94
- [filterFields]="params.filterFields"
95
- [autofocus]="params.autofocus ?? true"
96
- [resetFilterOnHide]="params.resetFilterOnHide"
97
- [checkmark]="params.checkmark"
98
- [dropdownIcon]="params.dropdownIcon"
99
- [loading]="params.loading"
100
- [optionLabel]="params.optionLabel"
101
- [optionValue]="params.optionValue"
102
- [optionDisabled]="params.optionDisabled"
103
- [optionGroupLabel]="params.optionGroupLabel"
104
- [optionGroupChildren]="params.optionGroupChildren || 'items'"
105
- [group]="params.group"
106
- [showClear]="params.showClear"
107
- [emptyFilterMessage]="params.emptyFilterMessage"
108
- [emptyMessage]="params.emptyMessage"
109
- [lazy]="params.lazy"
110
- [virtualScroll]="params.virtualScroll"
111
- [virtualScrollItemSize]="params.virtualScrollItemSize"
112
- [virtualScrollOptions]="params.virtualScrollOptions"
113
- [overlayOptions]="params.overlayOptions"
114
- [size]="params.size"
115
- [ariaFilterLabel]="params.ariaFilterLabel"
116
- [ariaLabel]="params.ariaLabel"
117
- [ariaLabelledBy]="params.ariaLabelledBy"
118
- [filterMatchMode]="params.filterMatchMode"
119
- [maxlength]="params.maxlength"
120
- [tooltip]="params.tooltip"
121
- [tooltipPosition]="params.tooltipPosition || 'right'"
122
- [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
123
- [tooltipStyleClass]="params.tooltipStyleClass"
124
- [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
125
- [fluid]="params.fluid == undefined ? true : params.fluid"
126
- [filterValue]="params.filterValue"
127
- (onChange)="onChange($event)" />
128
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i2.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] }); }
84
+ <p-select
85
+ [(ngModel)]="value"
86
+ [scrollHeight]="params.scrollHeight || '200px'"
87
+ [filter]="params.filter"
88
+ [name]="params.name"
89
+ [options]="params.options"
90
+ [placeholder]="params.placeholder"
91
+ [class]="params.class"
92
+ [style]="params.style"
93
+ [panelStyle]="params.panelStyle"
94
+ [panelStyleClass]="params.panelStyleClass"
95
+ [readonly]="params.readonly"
96
+ [editable]="params.editable"
97
+ [appendTo]="params.appendTo || 'body'"
98
+ [tabindex]="params.tabindex"
99
+ [placeholder]="params.placeholder"
100
+ [loadingIcon]="params.loadingIcon"
101
+ [filterPlaceholder]="params.filterPlaceholder"
102
+ [filterLocale]="params.filterLocale"
103
+ [variant]="params.variant"
104
+ [inputId]="params.inputId"
105
+ [dataKey]="params.dataKey"
106
+ [filterBy]="params.filterBy"
107
+ [filterFields]="params.filterFields"
108
+ [autofocus]="params.autofocus ?? true"
109
+ [resetFilterOnHide]="params.resetFilterOnHide"
110
+ [checkmark]="params.checkmark"
111
+ [dropdownIcon]="params.dropdownIcon"
112
+ [loading]="params.loading"
113
+ [optionLabel]="params.optionLabel"
114
+ [optionValue]="params.optionValue"
115
+ [optionDisabled]="params.optionDisabled"
116
+ [optionGroupLabel]="params.optionGroupLabel"
117
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
118
+ [group]="params.group"
119
+ [showClear]="params.showClear"
120
+ [emptyFilterMessage]="params.emptyFilterMessage"
121
+ [emptyMessage]="params.emptyMessage"
122
+ [lazy]="params.lazy"
123
+ [virtualScroll]="params.virtualScroll"
124
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
125
+ [virtualScrollOptions]="params.virtualScrollOptions"
126
+ [overlayOptions]="params.overlayOptions"
127
+ [size]="params.size"
128
+ [ariaFilterLabel]="params.ariaFilterLabel"
129
+ [ariaLabel]="params.ariaLabel"
130
+ [ariaLabelledBy]="params.ariaLabelledBy"
131
+ [filterMatchMode]="params.filterMatchMode"
132
+ [maxlength]="params.maxlength"
133
+ [tooltip]="params.tooltip"
134
+ [tooltipPosition]="params.tooltipPosition || 'right'"
135
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
136
+ [tooltipStyleClass]="params.tooltipStyleClass"
137
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
138
+ [fluid]="params.fluid == undefined ? true : params.fluid"
139
+ [filterValue]="params.filterValue"
140
+ (onChange)="onChange($event)" />
141
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i2.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] }); }
129
142
  }
130
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellEditSelectFieldComponent, decorators: [{
131
144
  type: Component,
132
145
  args: [{
133
146
  standalone: true,
134
147
  template: `
135
- <p-select
136
- [(ngModel)]="value"
137
- [scrollHeight]="params.scrollHeight || '200px'"
138
- [filter]="params.filter"
139
- [name]="params.name"
140
- [options]="params.options"
141
- [placeholder]="params.placeholder"
142
- [class]="params.class"
143
- [style]="params.style"
144
- [panelStyle]="params.panelStyle"
145
- [panelStyleClass]="params.panelStyleClass"
146
- [readonly]="params.readonly"
147
- [editable]="params.editable"
148
- [appendTo]="params.appendTo || 'body'"
149
- [tabindex]="params.tabindex"
150
- [placeholder]="params.placeholder"
151
- [loadingIcon]="params.loadingIcon"
152
- [filterPlaceholder]="params.filterPlaceholder"
153
- [filterLocale]="params.filterLocale"
154
- [variant]="params.variant"
155
- [inputId]="params.inputId"
156
- [dataKey]="params.dataKey"
157
- [filterBy]="params.filterBy"
158
- [filterFields]="params.filterFields"
159
- [autofocus]="params.autofocus ?? true"
160
- [resetFilterOnHide]="params.resetFilterOnHide"
161
- [checkmark]="params.checkmark"
162
- [dropdownIcon]="params.dropdownIcon"
163
- [loading]="params.loading"
164
- [optionLabel]="params.optionLabel"
165
- [optionValue]="params.optionValue"
166
- [optionDisabled]="params.optionDisabled"
167
- [optionGroupLabel]="params.optionGroupLabel"
168
- [optionGroupChildren]="params.optionGroupChildren || 'items'"
169
- [group]="params.group"
170
- [showClear]="params.showClear"
171
- [emptyFilterMessage]="params.emptyFilterMessage"
172
- [emptyMessage]="params.emptyMessage"
173
- [lazy]="params.lazy"
174
- [virtualScroll]="params.virtualScroll"
175
- [virtualScrollItemSize]="params.virtualScrollItemSize"
176
- [virtualScrollOptions]="params.virtualScrollOptions"
177
- [overlayOptions]="params.overlayOptions"
178
- [size]="params.size"
179
- [ariaFilterLabel]="params.ariaFilterLabel"
180
- [ariaLabel]="params.ariaLabel"
181
- [ariaLabelledBy]="params.ariaLabelledBy"
182
- [filterMatchMode]="params.filterMatchMode"
183
- [maxlength]="params.maxlength"
184
- [tooltip]="params.tooltip"
185
- [tooltipPosition]="params.tooltipPosition || 'right'"
186
- [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
187
- [tooltipStyleClass]="params.tooltipStyleClass"
188
- [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
189
- [fluid]="params.fluid == undefined ? true : params.fluid"
190
- [filterValue]="params.filterValue"
191
- (onChange)="onChange($event)" />
192
- `,
148
+ <p-select
149
+ [(ngModel)]="value"
150
+ [scrollHeight]="params.scrollHeight || '200px'"
151
+ [filter]="params.filter"
152
+ [name]="params.name"
153
+ [options]="params.options"
154
+ [placeholder]="params.placeholder"
155
+ [class]="params.class"
156
+ [style]="params.style"
157
+ [panelStyle]="params.panelStyle"
158
+ [panelStyleClass]="params.panelStyleClass"
159
+ [readonly]="params.readonly"
160
+ [editable]="params.editable"
161
+ [appendTo]="params.appendTo || 'body'"
162
+ [tabindex]="params.tabindex"
163
+ [placeholder]="params.placeholder"
164
+ [loadingIcon]="params.loadingIcon"
165
+ [filterPlaceholder]="params.filterPlaceholder"
166
+ [filterLocale]="params.filterLocale"
167
+ [variant]="params.variant"
168
+ [inputId]="params.inputId"
169
+ [dataKey]="params.dataKey"
170
+ [filterBy]="params.filterBy"
171
+ [filterFields]="params.filterFields"
172
+ [autofocus]="params.autofocus ?? true"
173
+ [resetFilterOnHide]="params.resetFilterOnHide"
174
+ [checkmark]="params.checkmark"
175
+ [dropdownIcon]="params.dropdownIcon"
176
+ [loading]="params.loading"
177
+ [optionLabel]="params.optionLabel"
178
+ [optionValue]="params.optionValue"
179
+ [optionDisabled]="params.optionDisabled"
180
+ [optionGroupLabel]="params.optionGroupLabel"
181
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
182
+ [group]="params.group"
183
+ [showClear]="params.showClear"
184
+ [emptyFilterMessage]="params.emptyFilterMessage"
185
+ [emptyMessage]="params.emptyMessage"
186
+ [lazy]="params.lazy"
187
+ [virtualScroll]="params.virtualScroll"
188
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
189
+ [virtualScrollOptions]="params.virtualScrollOptions"
190
+ [overlayOptions]="params.overlayOptions"
191
+ [size]="params.size"
192
+ [ariaFilterLabel]="params.ariaFilterLabel"
193
+ [ariaLabel]="params.ariaLabel"
194
+ [ariaLabelledBy]="params.ariaLabelledBy"
195
+ [filterMatchMode]="params.filterMatchMode"
196
+ [maxlength]="params.maxlength"
197
+ [tooltip]="params.tooltip"
198
+ [tooltipPosition]="params.tooltipPosition || 'right'"
199
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
200
+ [tooltipStyleClass]="params.tooltipStyleClass"
201
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
202
+ [fluid]="params.fluid == undefined ? true : params.fluid"
203
+ [filterValue]="params.filterValue"
204
+ (onChange)="onChange($event)" />
205
+ `,
193
206
  imports: [FormsModule, ReactiveFormsModule, SelectModule],
194
207
  }]
195
208
  }], propDecorators: { input: [{
196
209
  type: ViewChild,
197
210
  args: ['input', { read: ViewContainerRef }]
198
211
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1lZGl0LXNlbGVjdEZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9jZWxsLWVkaXQvY2VsbC1lZGl0LXNlbGVjdEZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFpRXBDLE1BQU0sT0FBTyw0QkFBNEI7SUFNdkMsTUFBTSxDQUFDLE1BQXlCO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBQyxDQUFDO1lBQzFFLElBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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QU0sSUFBSSxHQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFRO1lBQ1gsTUFBTSxFQUFFLFNBQVM7WUFDakIsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNuQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1NBQ2xDLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUMvQyxDQUFDOytHQWxFVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixtSkFJWCxnQkFBZ0IsNkJBakVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBEVCwyREFDUyxXQUFXLGlnQkFBRSxtQkFBbUIsOEJBQUUsWUFBWTs7NEZBRTdDLDRCQUE0QjtrQkEvRHhDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBEVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDO2lCQUMxRDs4QkFLd0QsS0FBSztzQkFBM0QsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBJQ2VsbEVkaXRvckFuZ3VsYXJDb21wIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB0eXBlIHsgSUNlbGxFZGl0b3JQYXJhbXMgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgXG4gICA8cC1zZWxlY3RcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICBbc2Nyb2xsSGVpZ2h0XT1cInBhcmFtcy5zY3JvbGxIZWlnaHQgfHwgJzIwMHB4J1wiXG4gICAgW2ZpbHRlcl09XCJwYXJhbXMuZmlsdGVyXCJcbiAgICBbbmFtZV09XCJwYXJhbXMubmFtZVwiXG4gICAgW29wdGlvbnNdPVwicGFyYW1zLm9wdGlvbnNcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwYXJhbXMucGxhY2Vob2xkZXJcIlxuICAgIFtjbGFzc109XCJwYXJhbXMuY2xhc3NcIlxuICAgIFtzdHlsZV09XCJwYXJhbXMuc3R5bGVcIlxuICAgIFtwYW5lbFN0eWxlXT1cInBhcmFtcy5wYW5lbFN0eWxlXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cInBhcmFtcy5wYW5lbFN0eWxlQ2xhc3NcIlxuICAgIFtyZWFkb25seV09XCJwYXJhbXMucmVhZG9ubHlcIlxuICAgIFtlZGl0YWJsZV09XCJwYXJhbXMuZWRpdGFibGVcIlxuICAgIFthcHBlbmRUb109XCJwYXJhbXMuYXBwZW5kVG8gfHwgJ2JvZHknXCJcbiAgICBbdGFiaW5kZXhdPVwicGFyYW1zLnRhYmluZGV4XCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGFyYW1zLnBsYWNlaG9sZGVyXCJcbiAgICBbbG9hZGluZ0ljb25dPVwicGFyYW1zLmxvYWRpbmdJY29uXCJcbiAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwicGFyYW1zLmZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICBbZmlsdGVyTG9jYWxlXT1cInBhcmFtcy5maWx0ZXJMb2NhbGVcIlxuICAgIFt2YXJpYW50XT1cInBhcmFtcy52YXJpYW50XCJcbiAgICBbaW5wdXRJZF09XCJwYXJhbXMuaW5wdXRJZFwiXG4gICAgW2RhdGFLZXldPVwicGFyYW1zLmRhdGFLZXlcIlxuICAgIFtmaWx0ZXJCeV09XCJwYXJhbXMuZmlsdGVyQnlcIlxuICAgIFtmaWx0ZXJGaWVsZHNdPVwicGFyYW1zLmZpbHRlckZpZWxkc1wiXG4gICAgW2F1dG9mb2N1c109XCJwYXJhbXMuYXV0b2ZvY3VzID8/IHRydWVcIlxuICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJwYXJhbXMucmVzZXRGaWx0ZXJPbkhpZGVcIlxuICAgIFtjaGVja21hcmtdPVwicGFyYW1zLmNoZWNrbWFya1wiXG4gICAgW2Ryb3Bkb3duSWNvbl09XCJwYXJhbXMuZHJvcGRvd25JY29uXCJcbiAgICBbbG9hZGluZ109XCJwYXJhbXMubG9hZGluZ1wiXG4gICAgW29wdGlvbkxhYmVsXT1cInBhcmFtcy5vcHRpb25MYWJlbFwiXG4gICAgW29wdGlvblZhbHVlXT1cInBhcmFtcy5vcHRpb25WYWx1ZVwiXG4gICAgW29wdGlvbkRpc2FibGVkXT1cInBhcmFtcy5vcHRpb25EaXNhYmxlZFwiXG4gICAgW29wdGlvbkdyb3VwTGFiZWxdPVwicGFyYW1zLm9wdGlvbkdyb3VwTGFiZWxcIlxuICAgIFtvcHRpb25Hcm91cENoaWxkcmVuXT1cInBhcmFtcy5vcHRpb25Hcm91cENoaWxkcmVuIHx8ICdpdGVtcydcIlxuICAgIFtncm91cF09XCJwYXJhbXMuZ3JvdXBcIlxuICAgIFtzaG93Q2xlYXJdPVwicGFyYW1zLnNob3dDbGVhclwiXG4gICAgW2VtcHR5RmlsdGVyTWVzc2FnZV09XCJwYXJhbXMuZW1wdHlGaWx0ZXJNZXNzYWdlXCJcbiAgICBbZW1wdHlNZXNzYWdlXT1cInBhcmFtcy5lbXB0eU1lc3NhZ2VcIlxuICAgIFtsYXp5XT1cInBhcmFtcy5sYXp5XCJcbiAgICBbdmlydHVhbFNjcm9sbF09XCJwYXJhbXMudmlydHVhbFNjcm9sbFwiXG4gICAgW3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJwYXJhbXMudmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwicGFyYW1zLnZpcnR1YWxTY3JvbGxPcHRpb25zXCJcbiAgICBbb3ZlcmxheU9wdGlvbnNdPVwicGFyYW1zLm92ZXJsYXlPcHRpb25zXCJcbiAgICBbc2l6ZV09XCJwYXJhbXMuc2l6ZVwiXG4gICAgW2FyaWFGaWx0ZXJMYWJlbF09XCJwYXJhbXMuYXJpYUZpbHRlckxhYmVsXCJcbiAgICBbYXJpYUxhYmVsXT1cInBhcmFtcy5hcmlhTGFiZWxcIlxuICAgIFthcmlhTGFiZWxsZWRCeV09XCJwYXJhbXMuYXJpYUxhYmVsbGVkQnlcIlxuICAgIFtmaWx0ZXJNYXRjaE1vZGVdPVwicGFyYW1zLmZpbHRlck1hdGNoTW9kZVwiXG4gICAgW21heGxlbmd0aF09XCJwYXJhbXMubWF4bGVuZ3RoXCJcbiAgICBbdG9vbHRpcF09XCJwYXJhbXMudG9vbHRpcFwiXG4gICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJwYXJhbXMudG9vbHRpcFBvc2l0aW9uIHx8ICdyaWdodCdcIlxuICAgIFt0b29sdGlwUG9zaXRpb25TdHlsZV09XCJwYXJhbXMudG9vbHRpcFBvc2l0aW9uU3R5bGUgfHwgJ2Fic29sdXRlJ1wiXG4gICAgW3Rvb2x0aXBTdHlsZUNsYXNzXT1cInBhcmFtcy50b29sdGlwU3R5bGVDbGFzc1wiXG4gICAgW2ZvY3VzT25Ib3Zlcl09XCJwYXJhbXMuZm9jdXNPbkhvdmVyID09IHVuZGVmaW5lZCA/IHRydWUgOiBwYXJhbXMuZm9jdXNPbkhvdmVyXCJcbiAgICBbZmx1aWRdPVwicGFyYW1zLmZsdWlkID09IHVuZGVmaW5lZCA/IHRydWUgOiBwYXJhbXMuZmx1aWRcIlxuICAgIFtmaWx0ZXJWYWx1ZV09XCJwYXJhbXMuZmlsdGVyVmFsdWVcIlxuICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgYCxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBTZWxlY3RNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDZWxsRWRpdFNlbGVjdEZpZWxkQ29tcG9uZW50ICBpbXBsZW1lbnRzIElDZWxsRWRpdG9yQW5ndWxhckNvbXAge1xuICBwYXJhbXMhOiBhbnk7XG4gIHZhbHVlOiBhbnk7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHVibGljIGlucHV0ITogVmlld0NvbnRhaW5lclJlZjtcblxuICBhZ0luaXQocGFyYW1zOiBJQ2VsbEVkaXRvclBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIGlmKCF0aGlzLnBhcmFtcy5yYXdPcHRpb25zICYmIHR5cGVvZiB0aGlzLnBhcmFtcy5nZXRPcHRpb25zID09PSAnZnVuY3Rpb24nKXtcbiAgICAgIGlmKGlzT2JzZXJ2YWJsZSh0aGlzLnBhcmFtcy5nZXRPcHRpb25zKHRoaXMucGFyYW1zLmRhdGEpKSl7XG4gICAgICAgIHRoaXMucGFyYW1zLmdldE9wdGlvbnModGhpcy5wYXJhbXMuZGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucGFyYW1zLm9wdGlvbnMgPSByZXMuaGFzT3duUHJvcGVydHlzKCdkYXRhJykgPyByZXMuZGF0YSA6IChyZXMgfHwgW10pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyYW1zLm9wdGlvbnMgPSB0aGlzLnBhcmFtcy5nZXRPcHRpb25zKHRoaXMucGFyYW1zLmRhdGEpIHx8IFtdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1zLm9wdGlvbnMgPSB0aGlzLnBhcmFtcy5yYXdPcHRpb25zO1xuICAgIH1cbiAgICBpZih0aGlzLnBhcmFtcy5maWx0ZXJPcHRpb25zICYmIHR5cGVvZiB0aGlzLnBhcmFtcy5maWx0ZXJPcHRpb25zID09PSAnZnVuY3Rpb24nKXtcbiAgICAgIHRoaXMucGFyYW1zLm9wdGlvbnMgPSB0aGlzLnBhcmFtcy5maWx0ZXJPcHRpb25zKHRoaXMucGFyYW1zLm9wdGlvbnMsIHRoaXMucGFyYW1zLmRhdGEpIHx8IHRoaXMucGFyYW1zLm9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcmFtcy5kYXRhW3RoaXMucGFyYW1zLmNvbERlZi5maWVsZF07XG5cbiAgICBjb25zdCBjZWxsV2lkdGggPSBwYXJhbXMuY29sdW1uLmdldEFjdHVhbFdpZHRoKCk7XG4gICAgdGhpcy5wYXJhbXMuc3R5bGUgPSB7XG4gICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgd2lkdGg6IGAke2NlbGxXaWR0aH1weGAsXG4gICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciknLFxuICAgICAgaGVpZ2h0OiAnNDBweCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xuICAgIH07XG4gICAgdGhpcy5wYXJhbXMucGFuZWxTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiBgJHtjZWxsV2lkdGh9cHhgLFxuICAgIH07XG4gIH1cblxuICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09IG51bGwgPyBudWxsIDogdmFsdWU7XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgbmFtZUZpZWxkcyA9IHRoaXMucGFyYW1zLm5hbWVGaWVsZHMgfHwgW107XG4gICAgLy8gY29uc29sZS5sb2coJ2V2ZW50LS0tLS0nLGV2ZW50KVxuICAgIG5hbWVGaWVsZHMuZm9yRWFjaCgobmFtZUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTmFtZUZpZWxkKG5hbWVGaWVsZCwgZXZlbnQpO1xuICAgIH0pO1xuICB9XG4gIFxuICB1cGRhdGVOYW1lRmllbGQobmFtZUZpZWxkOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMucGFyYW1zLmRhdGFbbmFtZUZpZWxkLmZpZWxkXTtcbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy5wYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJhbXMub3B0aW9ucy5maW5kKChvcDogYW55KSA9PiBvcD8uW3ZhbHVlRmllbGRdID09PSBldmVudC52YWx1ZSlcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGl0ZW0gPyBpdGVtW25hbWVGaWVsZC5rZXldIDogbnVsbDtcbiAgICBjb25zdCBncmlkOiBHcmlkQ29tcG9uZW50ID0gdGhpcy5wYXJhbXMuZ3JpZCgpO1xuICAgIGxldCBlOiBhbnkgPSB7XG4gICAgICBjb2xEZWY6IG5hbWVGaWVsZCxcbiAgICAgIG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWUsXG4gICAgICByb3dJbmRleDogdGhpcy5wYXJhbXMubm9kZS5yb3dJbmRleCxcbiAgICAgIGRhdGE6IHsgaWQ6IHRoaXMucGFyYW1zLmRhdGEuaWQgfSxcbiAgICB9O1xuICAgIGdyaWQuY2VsbFZhbHVlQ2hhbmdlZChlKTtcbiAgICB0aGlzLnBhcmFtcy5kYXRhW25hbWVGaWVsZC5maWVsZF0gPSBuZXdWYWx1ZTtcbiAgfVxufVxuIl19
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1lZGl0LXNlbGVjdEZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9jZWxsLWVkaXQvY2VsbC1lZGl0LXNlbGVjdEZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFpRXBDLE1BQU0sT0FBTyw0QkFBNEI7SUFNeEMsTUFBTSxDQUFDLE1BQXlCO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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QVk7OzRGQUU1Qyw0QkFBNEI7a0JBL0R4QyxTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwRFQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQztpQkFDekQ7OEJBS3VELEtBQUs7c0JBQTNELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgSUNlbGxFZGl0b3JBbmd1bGFyQ29tcCB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XG5pbXBvcnQgdHlwZSB7IElDZWxsRWRpdG9yUGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3QnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxwLXNlbGVjdFxuXHRcdFx0WyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG5cdFx0XHRbc2Nyb2xsSGVpZ2h0XT1cInBhcmFtcy5zY3JvbGxIZWlnaHQgfHwgJzIwMHB4J1wiXG5cdFx0XHRbZmlsdGVyXT1cInBhcmFtcy5maWx0ZXJcIlxuXHRcdFx0W25hbWVdPVwicGFyYW1zLm5hbWVcIlxuXHRcdFx0W29wdGlvbnNdPVwicGFyYW1zLm9wdGlvbnNcIlxuXHRcdFx0W3BsYWNlaG9sZGVyXT1cInBhcmFtcy5wbGFjZWhvbGRlclwiXG5cdFx0XHRbY2xhc3NdPVwicGFyYW1zLmNsYXNzXCJcblx0XHRcdFtzdHlsZV09XCJwYXJhbXMuc3R5bGVcIlxuXHRcdFx0W3BhbmVsU3R5bGVdPVwicGFyYW1zLnBhbmVsU3R5bGVcIlxuXHRcdFx0W3BhbmVsU3R5bGVDbGFzc109XCJwYXJhbXMucGFuZWxTdHlsZUNsYXNzXCJcblx0XHRcdFtyZWFkb25seV09XCJwYXJhbXMucmVhZG9ubHlcIlxuXHRcdFx0W2VkaXRhYmxlXT1cInBhcmFtcy5lZGl0YWJsZVwiXG5cdFx0XHRbYXBwZW5kVG9dPVwicGFyYW1zLmFwcGVuZFRvIHx8ICdib2R5J1wiXG5cdFx0XHRbdGFiaW5kZXhdPVwicGFyYW1zLnRhYmluZGV4XCJcblx0XHRcdFtwbGFjZWhvbGRlcl09XCJwYXJhbXMucGxhY2Vob2xkZXJcIlxuXHRcdFx0W2xvYWRpbmdJY29uXT1cInBhcmFtcy5sb2FkaW5nSWNvblwiXG5cdFx0XHRbZmlsdGVyUGxhY2Vob2xkZXJdPVwicGFyYW1zLmZpbHRlclBsYWNlaG9sZGVyXCJcblx0XHRcdFtmaWx0ZXJMb2NhbGVdPVwicGFyYW1zLmZpbHRlckxvY2FsZVwiXG5cdFx0XHRbdmFyaWFudF09XCJwYXJhbXMudmFyaWFudFwiXG5cdFx0XHRbaW5wdXRJZF09XCJwYXJhbXMuaW5wdXRJZFwiXG5cdFx0XHRbZGF0YUtleV09XCJwYXJhbXMuZGF0YUtleVwiXG5cdFx0XHRbZmlsdGVyQnldPVwicGFyYW1zLmZpbHRlckJ5XCJcblx0XHRcdFtmaWx0ZXJGaWVsZHNdPVwicGFyYW1zLmZpbHRlckZpZWxkc1wiXG5cdFx0XHRbYXV0b2ZvY3VzXT1cInBhcmFtcy5hdXRvZm9jdXMgPz8gdHJ1ZVwiXG5cdFx0XHRbcmVzZXRGaWx0ZXJPbkhpZGVdPVwicGFyYW1zLnJlc2V0RmlsdGVyT25IaWRlXCJcblx0XHRcdFtjaGVja21hcmtdPVwicGFyYW1zLmNoZWNrbWFya1wiXG5cdFx0XHRbZHJvcGRvd25JY29uXT1cInBhcmFtcy5kcm9wZG93bkljb25cIlxuXHRcdFx0W2xvYWRpbmddPVwicGFyYW1zLmxvYWRpbmdcIlxuXHRcdFx0W29wdGlvbkxhYmVsXT1cInBhcmFtcy5vcHRpb25MYWJlbFwiXG5cdFx0XHRbb3B0aW9uVmFsdWVdPVwicGFyYW1zLm9wdGlvblZhbHVlXCJcblx0XHRcdFtvcHRpb25EaXNhYmxlZF09XCJwYXJhbXMub3B0aW9uRGlzYWJsZWRcIlxuXHRcdFx0W29wdGlvbkdyb3VwTGFiZWxdPVwicGFyYW1zLm9wdGlvbkdyb3VwTGFiZWxcIlxuXHRcdFx0W29wdGlvbkdyb3VwQ2hpbGRyZW5dPVwicGFyYW1zLm9wdGlvbkdyb3VwQ2hpbGRyZW4gfHwgJ2l0ZW1zJ1wiXG5cdFx0XHRbZ3JvdXBdPVwicGFyYW1zLmdyb3VwXCJcblx0XHRcdFtzaG93Q2xlYXJdPVwicGFyYW1zLnNob3dDbGVhclwiXG5cdFx0XHRbZW1wdHlGaWx0ZXJNZXNzYWdlXT1cInBhcmFtcy5lbXB0eUZpbHRlck1lc3NhZ2VcIlxuXHRcdFx0W2VtcHR5TWVzc2FnZV09XCJwYXJhbXMuZW1wdHlNZXNzYWdlXCJcblx0XHRcdFtsYXp5XT1cInBhcmFtcy5sYXp5XCJcblx0XHRcdFt2aXJ0dWFsU2Nyb2xsXT1cInBhcmFtcy52aXJ0dWFsU2Nyb2xsXCJcblx0XHRcdFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwicGFyYW1zLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG5cdFx0XHRbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwicGFyYW1zLnZpcnR1YWxTY3JvbGxPcHRpb25zXCJcblx0XHRcdFtvdmVybGF5T3B0aW9uc109XCJwYXJhbXMub3ZlcmxheU9wdGlvbnNcIlxuXHRcdFx0W3NpemVdPVwicGFyYW1zLnNpemVcIlxuXHRcdFx0W2FyaWFGaWx0ZXJMYWJlbF09XCJwYXJhbXMuYXJpYUZpbHRlckxhYmVsXCJcblx0XHRcdFthcmlhTGFiZWxdPVwicGFyYW1zLmFyaWFMYWJlbFwiXG5cdFx0XHRbYXJpYUxhYmVsbGVkQnldPVwicGFyYW1zLmFyaWFMYWJlbGxlZEJ5XCJcblx0XHRcdFtmaWx0ZXJNYXRjaE1vZGVdPVwicGFyYW1zLmZpbHRlck1hdGNoTW9kZVwiXG5cdFx0XHRbbWF4bGVuZ3RoXT1cInBhcmFtcy5tYXhsZW5ndGhcIlxuXHRcdFx0W3Rvb2x0aXBdPVwicGFyYW1zLnRvb2x0aXBcIlxuXHRcdFx0W3Rvb2x0aXBQb3NpdGlvbl09XCJwYXJhbXMudG9vbHRpcFBvc2l0aW9uIHx8ICdyaWdodCdcIlxuXHRcdFx0W3Rvb2x0aXBQb3NpdGlvblN0eWxlXT1cInBhcmFtcy50b29sdGlwUG9zaXRpb25TdHlsZSB8fCAnYWJzb2x1dGUnXCJcblx0XHRcdFt0b29sdGlwU3R5bGVDbGFzc109XCJwYXJhbXMudG9vbHRpcFN0eWxlQ2xhc3NcIlxuXHRcdFx0W2ZvY3VzT25Ib3Zlcl09XCJwYXJhbXMuZm9jdXNPbkhvdmVyID09IHVuZGVmaW5lZCA/IHRydWUgOiBwYXJhbXMuZm9jdXNPbkhvdmVyXCJcblx0XHRcdFtmbHVpZF09XCJwYXJhbXMuZmx1aWQgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHBhcmFtcy5mbHVpZFwiXG5cdFx0XHRbZmlsdGVyVmFsdWVdPVwicGFyYW1zLmZpbHRlclZhbHVlXCJcblx0XHRcdChvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgLz5cblx0YCxcblx0aW1wb3J0czogW0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBTZWxlY3RNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDZWxsRWRpdFNlbGVjdEZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgSUNlbGxFZGl0b3JBbmd1bGFyQ29tcCB7XG5cdHBhcmFtcyE6IGFueTtcblx0dmFsdWU6IGFueTtcblxuXHRAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwdWJsaWMgaW5wdXQhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG5cdGFnSW5pdChwYXJhbXM6IElDZWxsRWRpdG9yUGFyYW1zKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0aWYgKCF0aGlzLnBhcmFtcy5yYXdPcHRpb25zICYmIHR5cGVvZiB0aGlzLnBhcmFtcy5nZXRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHRoaXMucGFyYW1zLmdldE9wdGlvbnModGhpcy5wYXJhbXMuZGF0YSkpKSB7XG5cdFx0XHRcdHRoaXMucGFyYW1zLmdldE9wdGlvbnModGhpcy5wYXJhbXMuZGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGFyYW1zLm9wdGlvbnMgPSByZXMuaGFzT3duUHJvcGVydHlzKCdkYXRhJykgPyByZXMuZGF0YSA6IHJlcyB8fCBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5vcHRpb25zID0gdGhpcy5wYXJhbXMuZ2V0T3B0aW9ucyh0aGlzLnBhcmFtcy5kYXRhKSB8fCBbXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYXJhbXMub3B0aW9ucyA9IHRoaXMucGFyYW1zLnJhd09wdGlvbnM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBhcmFtcy5maWx0ZXJPcHRpb25zICYmIHR5cGVvZiB0aGlzLnBhcmFtcy5maWx0ZXJPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aGlzLnBhcmFtcy5vcHRpb25zID0gdGhpcy5wYXJhbXMuZmlsdGVyT3B0aW9ucyh0aGlzLnBhcmFtcy5vcHRpb25zLCB0aGlzLnBhcmFtcy5kYXRhKSB8fCB0aGlzLnBhcmFtcy5vcHRpb25zO1xuXHRcdH1cblx0XHR0aGlzLnZhbHVlID0gdGhpcy5wYXJhbXMuZGF0YVt0aGlzLnBhcmFtcy5jb2xEZWYuZmllbGRdO1xuXG5cdFx0Y29uc3QgY2VsbFdpZHRoID0gcGFyYW1zLmNvbHVtbi5nZXRBY3R1YWxXaWR0aCgpO1xuXHRcdHRoaXMucGFyYW1zLnN0eWxlID0ge1xuXHRcdFx0Ym9yZGVyOiAnbm9uZScsXG5cdFx0XHRib3hTaGFkb3c6ICdub25lJyxcblx0XHRcdHdpZHRoOiBgJHtjZWxsV2lkdGh9cHhgLFxuXHRcdFx0YmFja2dyb3VuZDogJ3ZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpJyxcblx0XHRcdGhlaWdodDogJzQwcHgnLFxuXHRcdFx0YWxpZ25JdGVtczogJ2NlbnRlcicsXG5cdFx0fTtcblx0XHR0aGlzLnBhcmFtcy5wYW5lbFN0eWxlID0ge1xuXHRcdFx0d2lkdGg6IGAke2NlbGxXaWR0aH1weGAsXG5cdFx0fTtcblx0fVxuXG5cdGdldFZhbHVlKCk6IGFueSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCA/IG51bGwgOiB2YWx1ZTtcblx0fVxuXG5cdG9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBuYW1lRmllbGRzID0gdGhpcy5wYXJhbXMubmFtZUZpZWxkcyB8fCBbXTtcblx0XHQvLyBjb25zb2xlLmxvZygnZXZlbnQtLS0tLScsZXZlbnQpXG5cdFx0bmFtZUZpZWxkcy5mb3JFYWNoKChuYW1lRmllbGQ6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy51cGRhdGVOYW1lRmllbGQobmFtZUZpZWxkLCBldmVudCk7XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGVOYW1lRmllbGQobmFtZUZpZWxkOiBhbnksIGV2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvbGRWYWx1ZSA9IHRoaXMucGFyYW1zLmRhdGE/LltuYW1lRmllbGQuZmllbGRdO1xuXHRcdGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnBhcmFtcy5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcmFtcy5vcHRpb25zLmZpbmQoKG9wOiBhbnkpID0+IG9wPy5bdmFsdWVGaWVsZF0gPT09IGV2ZW50LnZhbHVlKTtcblx0XHRjb25zdCBuZXdWYWx1ZSA9IGl0ZW0gPyBpdGVtW25hbWVGaWVsZC5rZXldIDogbnVsbDtcblx0XHRjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG5cdFx0aWYgKGdyaWQ/LmNlbGxWYWx1ZUNoYW5nZWQpIHtcblx0XHRcdGxldCBlOiBhbnkgPSB7XG5cdFx0XHRcdGNvbERlZjogbmFtZUZpZWxkLFxuXHRcdFx0XHRvbGRWYWx1ZSxcblx0XHRcdFx0bmV3VmFsdWUsXG5cdFx0XHRcdHJvd0luZGV4OiB0aGlzLnBhcmFtcy5ub2RlPy5yb3dJbmRleCxcblx0XHRcdFx0ZGF0YTogeyBpZDogdGhpcy5wYXJhbXMuZGF0YT8uaWQgfSxcblx0XHRcdH07XG5cdFx0XHRncmlkLmNlbGxWYWx1ZUNoYW5nZWQoZSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBhcmFtcy5kYXRhKSB7XG5cdFx0XHR0aGlzLnBhcmFtcy5kYXRhW25hbWVGaWVsZC5maWVsZF0gPSBuZXdWYWx1ZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEdyaWQoKTogR3JpZENvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLnBhcmFtcy5ncmlkID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJhbXMuZ3JpZCgpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHRoaXMucGFyYW1zLmNvbnRleHQ/LmdyaWQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcmFtcy5jb250ZXh0LmdyaWQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuIl19