@3kles/kles-material-dynamicforms 17.7.5 → 17.7.7

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.
@@ -8,6 +8,7 @@ export class MatErrorFormDirective {
8
8
  }
9
9
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MatErrorFormDirective, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
10
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MatErrorFormDirective, selector: "[matErrorForm]", inputs: { validations: "validations", asyncValidations: "asyncValidations", form: "form" }, ngImport: i0, template: `
11
+ @if(form && form.errors){
11
12
  @for (validation of validations; track validation.name) {
12
13
  @if (form?.hasError(validation.name) && validation.message) {
13
14
  {{validation.message | translate}}
@@ -18,6 +19,7 @@ export class MatErrorFormDirective {
18
19
  {{validation.message | translate}}
19
20
  }
20
21
  }
22
+ }
21
23
  `, isInline: true, dependencies: [{ kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
22
24
  }
23
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MatErrorFormDirective, decorators: [{
@@ -25,6 +27,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
25
27
  args: [{
26
28
  selector: '[matErrorForm]',
27
29
  template: `
30
+ @if(form && form.errors){
28
31
  @for (validation of validations; track validation.name) {
29
32
  @if (form?.hasError(validation.name) && validation.message) {
30
33
  {{validation.message | translate}}
@@ -35,6 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
35
38
  {{validation.message | translate}}
36
39
  }
37
40
  }
41
+ }
38
42
  `
39
43
  }]
40
44
  }], propDecorators: { validations: [{
@@ -47,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
47
51
  type: Input,
48
52
  args: [{ required: true }]
49
53
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWVycm9yLWZvcm0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xlcy1tYXRlcmlhbC1keW5hbWljZm9ybXMvc3JjL2xpYi9kaXJlY3RpdmUvbWF0LWVycm9yLWZvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFtQmpELE1BQU0sT0FBTyxxQkFBcUI7SUFmbEM7UUFnQjhCLGdCQUFXLEdBQWlDLEVBQUUsQ0FBQztRQUMvQyxxQkFBZ0IsR0FBcUMsRUFBRSxDQUFDO0tBRXJGOytHQUpZLHFCQUFxQjttR0FBckIscUJBQXFCLGtKQWJ0Qjs7Ozs7Ozs7Ozs7S0FXUDs7NEZBRVEscUJBQXFCO2tCQWZqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7S0FXUDtpQkFDSjs4QkFFNkIsV0FBVztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDQyxJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUtsZXNWYWxpZGF0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy92YWxpZGF0b3IuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbbWF0RXJyb3JGb3JtXScsXG4gIHRlbXBsYXRlOiBgXG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24ubmFtZSkge1xuICAgICAgICAgICAgQGlmIChmb3JtPy5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpICYmIHZhbGlkYXRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGFzeW5jVmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24ubmFtZSkge1xuICAgICAgICAgICAgQGlmIChmb3JtPy5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpICYmIHZhbGlkYXRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTWF0RXJyb3JGb3JtRGlyZWN0aXZlIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JzPltdID0gW107XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBhc3luY1ZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxBc3luY1ZhbGlkYXRvcj5bXSA9IFtdO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWVycm9yLWZvcm0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xlcy1tYXRlcmlhbC1keW5hbWljZm9ybXMvc3JjL2xpYi9kaXJlY3RpdmUvbWF0LWVycm9yLWZvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFxQmpELE1BQU0sT0FBTyxxQkFBcUI7SUFqQmxDO1FBa0I4QixnQkFBVyxHQUFpQyxFQUFFLENBQUM7UUFDL0MscUJBQWdCLEdBQXFDLEVBQUUsQ0FBQztLQUVyRjsrR0FKWSxxQkFBcUI7bUdBQXJCLHFCQUFxQixrSkFmdEI7Ozs7Ozs7Ozs7Ozs7S0FhUDs7NEZBRVEscUJBQXFCO2tCQWpCakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7S0FhUDtpQkFDSjs4QkFFNkIsV0FBVztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDQyxJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUtsZXNWYWxpZGF0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy92YWxpZGF0b3IuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbbWF0RXJyb3JGb3JtXScsXG4gIHRlbXBsYXRlOiBgXG4gICAgICBAaWYoZm9ybSAmJiBmb3JtLmVycm9ycyl7XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24ubmFtZSkge1xuICAgICAgICAgICAgQGlmIChmb3JtPy5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpICYmIHZhbGlkYXRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGFzeW5jVmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24ubmFtZSkge1xuICAgICAgICAgICAgQGlmIChmb3JtPy5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpICYmIHZhbGlkYXRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTWF0RXJyb3JGb3JtRGlyZWN0aXZlIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JzPltdID0gW107XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBhc3luY1ZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxBc3luY1ZhbGlkYXRvcj5bXSA9IFtdO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xufVxuIl19
@@ -174,7 +174,9 @@ export class KlesDynamicFormComponent {
174
174
  </ng-container>
175
175
  }
176
176
  }
177
- <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
177
+ @if (form && form.errors){
178
+ <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
179
+ }
178
180
  </form>
179
181
  `, isInline: true, styles: [".dynamic-form-column{display:flex;flex-direction:column}\n", ".dynamic-form-column>*{width:100%}\n", ".dynamic-form-row{display:inline-flex;flex-wrap:wrap;gap:10px}\n", ".dynamic-form-row>*{width:100%}\n", ".dynamic-form-grid{display:grid}\n", ".dynamic-form-inline-grid{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.KlesDynamicFieldDirective, selector: "[klesDynamicField]", inputs: ["field", "group", "siblingFields"] }, { kind: "component", type: i5.MatErrorFormDirective, selector: "[matErrorForm]", inputs: ["validations", "asyncValidations", "form"] }] }); }
180
182
  }
@@ -188,7 +190,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
188
190
  </ng-container>
189
191
  }
190
192
  }
191
- <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
193
+ @if (form && form.errors){
194
+ <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
195
+ }
192
196
  </form>
193
197
  `, styles: [".dynamic-form-column{display:flex;flex-direction:column}\n", ".dynamic-form-column>*{width:100%}\n", ".dynamic-form-row{display:inline-flex;flex-wrap:wrap;gap:10px}\n", ".dynamic-form-row>*{width:100%}\n", ".dynamic-form-grid{display:grid}\n", ".dynamic-form-inline-grid{display:inline-grid}\n"] }]
194
198
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }], propDecorators: { fields: [{
@@ -206,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
206
210
  }], formClass: [{
207
211
  type: Input
208
212
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2tsZXMtbWF0ZXJpYWwtZHluYW1pY2Zvcm1zL3NyYy9saWIvZHluYW1pYy1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQThHLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25MLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFJcEUsTUFBTSw0QkFBNEIsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBQ2hGLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUc7SUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sNEJBQTRCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLGdDQUFnQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBQy9FLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FB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QU8sQ0FBQyxDQUFDO2FBQ3pDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFckUsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQTJCO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBcktRLHdCQUF3QjttR0FBeEIsd0JBQXdCLG9UQXJCdkI7Ozs7Ozs7Ozs7S0FVVDs7NEZBV1Esd0JBQXdCO2tCQXhCcEMsU0FBUzsrQkFDSSxpQkFBaUIsWUFDakIsdUJBQXVCLFlBQ3ZCOzs7Ozs7Ozs7O0tBVVQ7dUZBWVEsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9yRm4sIEFzeW5jVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIEZvcm1Db250cm9sRGlyZWN0aXZlLCBGb3JtQ29udHJvbE5hbWUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21wb25lbnRNYXBwZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvY29tcG9uZW50LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bXMvdHlwZS5lbnVtJztcbmltcG9ydCB7IGtsZXNGaWVsZENvbnRyb2xGYWN0b3J5IH0gZnJvbSAnLi9mYWN0b3JpZXMvZmllbGQuZmFjdG9yeSc7XG5pbXBvcnQgeyBJS2xlc0ZpZWxkQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpZWxkLmNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUtsZXNWYWxpZGF0b3IgfSBmcm9tICcuL2ludGVyZmFjZXMvdmFsaWRhdG9yLmludGVyZmFjZSc7XG5cbmNvbnN0IG9yaWdpbkZvcm1Db250cm9sTmdPbkNoYW5nZXMgPSBGb3JtQ29udHJvbERpcmVjdGl2ZS5wcm90b3R5cGUubmdPbkNoYW5nZXM7XG5Gb3JtQ29udHJvbERpcmVjdGl2ZS5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mb3JtLm5hdGl2ZUVsZW1lbnQgPSB0aGlzLnZhbHVlQWNjZXNzb3IuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIG9yaWdpbkZvcm1Db250cm9sTmdPbkNoYW5nZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbmNvbnN0IG9yaWdpbkZvcm1Db250cm9sTmFtZU5nT25DaGFuZ2VzID0gRm9ybUNvbnRyb2xOYW1lLnByb3RvdHlwZS5uZ09uQ2hhbmdlcztcbkZvcm1Db250cm9sTmFtZS5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luRm9ybUNvbnRyb2xOYW1lTmdPbkNoYW5nZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmNvbnRyb2wubmF0aXZlRWxlbWVudCA9IHRoaXMudmFsdWVBY2Nlc3Nvci5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgZXhwb3J0QXM6ICdrbGVzRHluYW1pY0Zvcm0nLFxuICAgIHNlbGVjdG9yOiAnYXBwLWtsZXMtZHluYW1pYy1mb3JtJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxmb3JtIGNsYXNzPVwie3tvcmllbnRhdGlvbkNsYXNzfX1cIiBbbmdDbGFzc109XCJmb3JtQ2xhc3NcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGZvciAoZmllbGQgb2YgZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XG4gICAgICAgICAgICBAaWYgKGZpZWxkLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzRHluYW1pY0ZpZWxkIFtmaWVsZF09XCJmaWVsZFwiIFtncm91cF09XCJmb3JtXCIgW3NpYmxpbmdGaWVsZHNdPVwiZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1lcnJvciBtYXRFcnJvckZvcm0gW2Zvcm1dPVwiZm9ybVwiIFt2YWxpZGF0aW9uc109XCJ2YWxpZGF0b3JzXCIgW2FzeW5jVmFsaWRhdGlvbnNdPVwiYXN5bmNWYWxpZGF0b3JzXCI+PC9tYXQtZXJyb3I+XG4gICAgPC9mb3JtPlxuICAgIGAsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgICcuZHluYW1pYy1mb3JtLWNvbHVtbiB7IGRpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLWNvbHVtbiA+ICogeyB3aWR0aDogMTAwJTsgfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdyB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjEwcHg7IH0nLFxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1yb3cgPiAqIHsgd2lkdGg6IDEwMCU7IH0nLFxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1ncmlkIHsgZGlzcGxheTogZ3JpZDsgfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLWlubGluZS1ncmlkIHsgZGlzcGxheTogaW5saW5lLWdyaWQ7IH0nLFxuICAgIF1cblxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgZmllbGRzOiBJS2xlc0ZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICBASW5wdXQoKSB2YWxpZGF0b3JzOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JGbj5bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogSUtsZXNWYWxpZGF0b3I8QXN5bmNWYWxpZGF0b3JGbj5bXSA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBzdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIF9vbkxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2NvbHVtbicgfCAncm93JyB8ICdncmlkJyB8ICdpbmxpbmUtZ3JpZCcgPSAnY29sdW1uJztcbiAgICBASW5wdXQoKSBmb3JtQ2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdIHwgU2V0PHN0cmluZz4gfCB7IFtrbGFzczogc3RyaW5nXTogYW55OyB9O1xuXG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgICBvcmllbnRhdGlvbkNsYXNzOiAnZHluYW1pYy1mb3JtLWNvbHVtbicgfCAnZHluYW1pYy1mb3JtLXJvdycgfCAnZHluYW1pYy1mb3JtLWdyaWQnIHwgJ2R5bmFtaWMtZm9ybS1pbmxpbmUtZ3JpZCcgPSAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG5cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7IH1cblxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmZpZWxkcz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGFuZ2VzLnZhbGlkYXRvcnM/LmZpcnN0Q2hhbmdlICYmIHRoaXMuZm9ybSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoYW5nZXMuYXN5bmNWYWxpZGF0b3JzPy5maXJzdENoYW5nZSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMubWFwKHYgPT4gdi52YWxpZGF0b3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hhbmdlcy5kaXJlY3Rpb24/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3JvdycgPyAnZHluYW1pYy1mb3JtLXJvdycgOiAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uU3VibWl0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JpZW50YXRpb25DbGFzcygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyb3cnOlxuICAgICAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25DbGFzcyA9ICdkeW5hbWljLWZvcm0tcm93JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25DbGFzcyA9ICdkeW5hbWljLWZvcm0tZ3JpZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbmxpbmUtZ3JpZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gJ2R5bmFtaWMtZm9ybS1pbmxpbmUtZ3JpZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybSgpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpLmluY2x1ZGVzKGtleSk7XG4gICAgICAgIH0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmllbGRzXG4gICAgICAgICAgICAvLyAuZmlsdGVyKGZpZWxkID0+ICF0aGlzLmZvcm0uY29udHJvbHNbZmllbGQubmFtZV0pXG4gICAgICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVudW1UeXBlLmxpbmVCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy51cGRhdGVDb250cm9sKGZpZWxkLCB0aGlzLmZvcm0uY29udHJvbHNbZmllbGQubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0Q29udHJvbChmaWVsZC5uYW1lLCBjb250cm9sLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDb250cm9sKGZpZWxkOiBJS2xlc0ZpZWxkQ29uZmlnLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRW51bVR5cGUuYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk7XG4gICAgICAgICAgICAvKlRPRE8qL1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEVudW1UeXBlLmdyb3VwKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbGxlY3Rpb25zICYmIEFycmF5LmlzQXJyYXkoZmllbGQuY29sbGVjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5jb250cm9sc1tzdWJmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB0aGlzLnVwZGF0ZUNvbnRyb2woc3ViZmllbGQsIGdyb3VwLmNvbnRyb2xzW3N1YmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKHN1YmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuc2V0Q29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuYmluZFZhbGlkYXRpb25zKGZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSk7XG4gICAgICAgICAgICAvLyBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pKTtcbiAgICAgICAgICAgIC8vIGlmIChmaWVsZC52YWx1ZSAmJiBjb250cm9sLnZhbHVlICE9PSBmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnRyb2wuc2V0VmFsdWUoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIGlmIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50TWFwcGVyLmZpbmQoYyA9PiBjLnR5cGUgPT09IGZpZWxkLnR5cGUpPy5mYWN0b3J5XG4gICAgICAgICAgICAgICAgPyBjb21wb25lbnRNYXBwZXIuZmluZChjID0+IGMudHlwZSA9PT0gZmllbGQudHlwZSk/LmZhY3RvcnkoZmllbGQpIDoga2xlc0ZpZWxkQ29udHJvbEZhY3RvcnkoZmllbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudE1hcHBlci5maW5kKGMgPT4gYy5jb21wb25lbnQgPT09IGZpZWxkLmNvbXBvbmVudCk/LmZhY3RvcnkgP1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlci5maW5kKGMgPT4gYy5jb21wb25lbnQgPT09IGZpZWxkLmNvbXBvbmVudCk/LmZhY3RvcnkoZmllbGQpIDoga2xlc0ZpZWxkQ29udHJvbEZhY3RvcnkoZmllbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmFkZENvbnRyb2woZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGdyb3VwLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgICAgIGdyb3VwLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmFzeW5jVmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuXG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2tsZXMtbWF0ZXJpYWwtZHluYW1pY2Zvcm1zL3NyYy9saWIvZHluYW1pYy1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQThHLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25MLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFJcEUsTUFBTSw0QkFBNEIsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBQ2hGLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUc7SUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sNEJBQTRCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRixNQUFNLGdDQUFnQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBQy9FLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FB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QUFPLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQTJCO1FBQ3ZELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBcktVLHdCQUF3QjttR0FBeEIsd0JBQXdCLG9UQXZCekI7Ozs7Ozs7Ozs7OztLQVlQOzs0RkFXUSx3QkFBd0I7a0JBMUJwQyxTQUFTOytCQUNFLGlCQUFpQixZQUNqQix1QkFBdUIsWUFDdkI7Ozs7Ozs7Ozs7OztLQVlQO3VGQVlNLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybUNvbnRyb2xOYW1lIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29tcG9uZW50TWFwcGVyIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2NvbXBvbmVudC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRW51bVR5cGUgfSBmcm9tICcuL2VudW1zL3R5cGUuZW51bSc7XG5pbXBvcnQgeyBrbGVzRmllbGRDb250cm9sRmFjdG9yeSB9IGZyb20gJy4vZmFjdG9yaWVzL2ZpZWxkLmZhY3RvcnknO1xuaW1wb3J0IHsgSUtsZXNGaWVsZENvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWVsZC5jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElLbGVzVmFsaWRhdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xuXG5jb25zdCBvcmlnaW5Gb3JtQ29udHJvbE5nT25DaGFuZ2VzID0gRm9ybUNvbnRyb2xEaXJlY3RpdmUucHJvdG90eXBlLm5nT25DaGFuZ2VzO1xuRm9ybUNvbnRyb2xEaXJlY3RpdmUucHJvdG90eXBlLm5nT25DaGFuZ2VzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZvcm0ubmF0aXZlRWxlbWVudCA9IHRoaXMudmFsdWVBY2Nlc3Nvci5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgcmV0dXJuIG9yaWdpbkZvcm1Db250cm9sTmdPbkNoYW5nZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbmNvbnN0IG9yaWdpbkZvcm1Db250cm9sTmFtZU5nT25DaGFuZ2VzID0gRm9ybUNvbnRyb2xOYW1lLnByb3RvdHlwZS5uZ09uQ2hhbmdlcztcbkZvcm1Db250cm9sTmFtZS5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG9yaWdpbkZvcm1Db250cm9sTmFtZU5nT25DaGFuZ2VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMuY29udHJvbC5uYXRpdmVFbGVtZW50ID0gdGhpcy52YWx1ZUFjY2Vzc29yLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuQENvbXBvbmVudCh7XG4gIGV4cG9ydEFzOiAna2xlc0R5bmFtaWNGb3JtJyxcbiAgc2VsZWN0b3I6ICdhcHAta2xlcy1keW5hbWljLWZvcm0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxmb3JtIGNsYXNzPVwie3tvcmllbnRhdGlvbkNsYXNzfX1cIiBbbmdDbGFzc109XCJmb3JtQ2xhc3NcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGZvciAoZmllbGQgb2YgZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XG4gICAgICAgICAgICBAaWYgKGZpZWxkLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzRHluYW1pY0ZpZWxkIFtmaWVsZF09XCJmaWVsZFwiIFtncm91cF09XCJmb3JtXCIgW3NpYmxpbmdGaWVsZHNdPVwiZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmb3JtICYmIGZvcm0uZXJyb3JzKXtcbiAgICAgICAgICA8bWF0LWVycm9yIG1hdEVycm9yRm9ybSBbZm9ybV09XCJmb3JtXCIgW3ZhbGlkYXRpb25zXT1cInZhbGlkYXRvcnNcIiBbYXN5bmNWYWxpZGF0aW9uc109XCJhc3luY1ZhbGlkYXRvcnNcIj48L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgIDwvZm9ybT5cbiAgICBgLFxuICBzdHlsZXM6IFtcbiAgICAnLmR5bmFtaWMtZm9ybS1jb2x1bW4geyBkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0nLFxuICAgICcuZHluYW1pYy1mb3JtLWNvbHVtbiA+ICogeyB3aWR0aDogMTAwJTsgfScsXG4gICAgJy5keW5hbWljLWZvcm0tcm93IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6MTBweDsgfScsXG4gICAgJy5keW5hbWljLWZvcm0tcm93ID4gKiB7IHdpZHRoOiAxMDAlOyB9JyxcbiAgICAnLmR5bmFtaWMtZm9ybS1ncmlkIHsgZGlzcGxheTogZ3JpZDsgfScsXG4gICAgJy5keW5hbWljLWZvcm0taW5saW5lLWdyaWQgeyBkaXNwbGF5OiBpbmxpbmUtZ3JpZDsgfScsXG4gIF1cblxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGZpZWxkczogSUtsZXNGaWVsZENvbmZpZ1tdID0gW107XG4gIEBJbnB1dCgpIHZhbGlkYXRvcnM6IElLbGVzVmFsaWRhdG9yPFZhbGlkYXRvckZuPltdID0gW107XG4gIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogSUtsZXNWYWxpZGF0b3I8QXN5bmNWYWxpZGF0b3JGbj5bXSA9IFtdO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIF9vbkxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBkaXJlY3Rpb246ICdjb2x1bW4nIHwgJ3JvdycgfCAnZ3JpZCcgfCAnaW5saW5lLWdyaWQnID0gJ2NvbHVtbic7XG4gIEBJbnB1dCgpIGZvcm1DbGFzczogc3RyaW5nIHwgc3RyaW5nW10gfCBTZXQ8c3RyaW5nPiB8IHsgW2tsYXNzOiBzdHJpbmddOiBhbnk7IH07XG5cbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgb3JpZW50YXRpb25DbGFzczogJ2R5bmFtaWMtZm9ybS1jb2x1bW4nIHwgJ2R5bmFtaWMtZm9ybS1yb3cnIHwgJ2R5bmFtaWMtZm9ybS1ncmlkJyB8ICdkeW5hbWljLWZvcm0taW5saW5lLWdyaWQnID0gJ2R5bmFtaWMtZm9ybS1jb2x1bW4nO1xuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7IH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuc2V0T3JpZW50YXRpb25DbGFzcygpO1xuICAgIHRoaXMuX29uTG9hZGVkLmVtaXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIWNoYW5nZXMuZmllbGRzPy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JtKCk7XG4gICAgICB0aGlzLl9vbkxvYWRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VzLnZhbGlkYXRvcnM/LmZpcnN0Q2hhbmdlICYmIHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VzLmFzeW5jVmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VzLmRpcmVjdGlvbj8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMub3JpZW50YXRpb25DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93JyA6ICdkeW5hbWljLWZvcm0tY29sdW1uJztcbiAgICB9XG5cbiAgfVxuXG4gIG9uU3VibWl0KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0T3JpZW50YXRpb25DbGFzcygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdjb2x1bW4nOlxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gJ2R5bmFtaWMtZm9ybS1yb3cnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSAnZHluYW1pYy1mb3JtLWdyaWQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lubGluZS1ncmlkJzpcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gJ2R5bmFtaWMtZm9ybS1pbmxpbmUtZ3JpZCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykuZmlsdGVyKGtleSA9PiB7XG4gICAgICByZXR1cm4gIXRoaXMuZmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKS5pbmNsdWRlcyhrZXkpO1xuICAgIH0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpZWxkc1xuICAgICAgLy8gLmZpbHRlcihmaWVsZCA9PiAhdGhpcy5mb3JtLmNvbnRyb2xzW2ZpZWxkLm5hbWVdKVxuICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRW51bVR5cGUubGluZUJyZWFrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5uYW1lXSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnVwZGF0ZUNvbnRyb2woZmllbGQsIHRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5uYW1lXSk7XG4gICAgICAgICAgdGhpcy5mb3JtLnNldENvbnRyb2woZmllbGQubmFtZSwgY29udHJvbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woZmllbGQpO1xuICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2woZmllbGQ6IElLbGVzRmllbGRDb25maWcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IEVudW1UeXBlLmFycmF5KSB7XG4gICAgICBjb25zdCBhcnJheSA9IGNvbnRyb2wgYXMgRm9ybUFycmF5O1xuICAgICAgLypUT0RPKi9cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEVudW1UeXBlLmdyb3VwKSB7XG4gICAgICBjb25zdCBncm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgaWYgKGZpZWxkLmNvbGxlY3Rpb25zICYmIEFycmF5LmlzQXJyYXkoZmllbGQuY29sbGVjdGlvbnMpKSB7XG4gICAgICAgIGZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goc3ViZmllbGQgPT4ge1xuICAgICAgICAgIGlmIChncm91cC5jb250cm9sc1tzdWJmaWVsZF0pIHtcbiAgICAgICAgICAgIGNvbnRyb2wgPSB0aGlzLnVwZGF0ZUNvbnRyb2woc3ViZmllbGQsIGdyb3VwLmNvbnRyb2xzW3N1YmZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woc3ViZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgZ3JvdXAuc2V0Q29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5iaW5kVmFsaWRhdGlvbnMoZmllbGQudmFsaWRhdGlvbnMgfHwgW10pKTtcbiAgICAgIC8vIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYmluZEFzeW5jVmFsaWRhdGlvbnMoZmllbGQuYXN5bmNWYWxpZGF0aW9ucyB8fCBbXSkpO1xuICAgICAgLy8gaWYgKGZpZWxkLnZhbHVlICYmIGNvbnRyb2wudmFsdWUgIT09IGZpZWxkLnZhbHVlKSB7XG4gICAgICAvLyAgICAgY29udHJvbC5zZXRWYWx1ZShmaWVsZC52YWx1ZSk7XG4gICAgICAvLyB9XG4gICAgICByZXR1cm4gY29udHJvbDtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnRNYXBwZXIuZmluZChjID0+IGMudHlwZSA9PT0gZmllbGQudHlwZSk/LmZhY3RvcnlcbiAgICAgICAgPyBjb21wb25lbnRNYXBwZXIuZmluZChjID0+IGMudHlwZSA9PT0gZmllbGQudHlwZSk/LmZhY3RvcnkoZmllbGQpIDoga2xlc0ZpZWxkQ29udHJvbEZhY3RvcnkoZmllbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29tcG9uZW50TWFwcGVyLmZpbmQoYyA9PiBjLmNvbXBvbmVudCA9PT0gZmllbGQuY29tcG9uZW50KT8uZmFjdG9yeSA/XG4gICAgICAgIGNvbXBvbmVudE1hcHBlci5maW5kKGMgPT4gYy5jb21wb25lbnQgPT09IGZpZWxkLmNvbXBvbmVudCk/LmZhY3RvcnkoZmllbGQpIDoga2xlc0ZpZWxkQ29udHJvbEZhY3RvcnkoZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuXG4gICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKGZpZWxkKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2woZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBncm91cC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuICAgIGdyb3VwLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmFzeW5jVmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -62,28 +62,18 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
62
62
  }
63
63
  }
64
64
  this.searchControl.valueChanges.pipe(takeUntil(this._onDestroy), debounceTime(this.field.debounceTime || 0), startWith(this.searchControl.value), switchMap(value => {
65
- return concat(of({ loading: true, options: [] }), this.onSearchChange(value).pipe(map((options) => ({ loading: false, options }))));
65
+ return concat(of({ loading: true, options: [] }), this.onSearchChange(value).pipe(take(1), map((options) => ({ loading: false, options }))));
66
66
  })).subscribe(({ loading, options }) => {
67
67
  this.isLoading = loading;
68
68
  this.optionsFiltered$.next(options);
69
69
  this.ref.markForCheck();
70
70
  });
71
71
  if (this.field.multiple) {
72
- this.group.controls[this.field.name]
73
- .valueChanges.pipe(takeUntil(this._onDestroy), startWith(this.group.controls[this.field.name].value), map((selected) => ((this.field.property && selected) ? selected?.map(s => s[this.field.property]) : selected)), switchMap(selected => {
74
- return this.optionsFiltered$.pipe(map((options) => options?.filter((option) => !option?.disabled).map((option) => (this.field.property ? option[this.field.property] : option))), map(options => {
75
- if (!selected) {
76
- return false;
77
- }
78
- if (options.length < selected.length) {
79
- return options.length > 0 && options.every(o => selected.includes(o));
80
- }
81
- else {
82
- return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));
83
- }
84
- }));
85
- })).subscribe(isChecked => {
86
- this.selectAllControl.setValue(isChecked);
72
+ this.updateSelectAllControl(this.group.controls[this.field.name].value);
73
+ this.group.controls[this.field.name].registerOnChange((values, emitViewToModelChange) => {
74
+ if (emitViewToModelChange) {
75
+ this.updateSelectAllControl(values);
76
+ }
87
77
  });
88
78
  }
89
79
  }
@@ -95,12 +85,12 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
95
85
  if (state.checked) {
96
86
  this.optionsFiltered$.pipe(take(1), map((options) => options.filter((option) => !option?.disabled))).subscribe(options => {
97
87
  if (options.length > 0) {
98
- this.group.controls[this.field.name].patchValue(options.slice());
88
+ this.group.controls[this.field.name].patchValue(options.slice(), { emitModelToViewChange: false });
99
89
  }
100
90
  });
101
91
  }
102
92
  else {
103
- this.group.controls[this.field.name].patchValue([]);
93
+ this.group.controls[this.field.name].patchValue([], { emitModelToViewChange: false });
104
94
  }
105
95
  }
106
96
  openChangeEvent() {
@@ -109,8 +99,9 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
109
99
  return this.onOpenChange(isOpen);
110
100
  }))
111
101
  .subscribe((options) => {
112
- this.options$.next(options);
113
102
  this.isLoading = false;
103
+ this.options$.next(options);
104
+ this.optionsFiltered$.next(options);
114
105
  this.ref.markForCheck();
115
106
  });
116
107
  }
@@ -173,6 +164,29 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
173
164
  }
174
165
  }
175
166
  }
167
+ selectionChange(selection) {
168
+ if (this.field.multiple) {
169
+ this.updateSelectAllControl(selection.value);
170
+ }
171
+ }
172
+ updateSelectAllControl(values) {
173
+ if (values) {
174
+ const selected = ((this.field.property && values) ? values?.map(s => s[this.field.property]) : values);
175
+ this.optionsFiltered$.pipe(take(1), map((options) => options?.filter((option) => !option?.disabled).map((option) => (this.field.property ? option[this.field.property] : option))), map(options => {
176
+ if (!selected) {
177
+ return false;
178
+ }
179
+ if (options.length < selected.length) {
180
+ return options.length > 0 && options.every(o => selected.includes(o));
181
+ }
182
+ else {
183
+ return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));
184
+ }
185
+ })).subscribe(isChecked => {
186
+ this.selectAllControl.setValue(isChecked, { emitEvent: false });
187
+ });
188
+ }
189
+ }
176
190
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: KlesFormSelectSearchComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
177
191
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: KlesFormSelectSearchComponent, selector: "kles-form-select-search", viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "options", predicate: MatOption, descendants: true }], usesInheritance: true, ngImport: i0, template: `
178
192
  <mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group" [appearance]="field.appearance">
@@ -182,7 +196,7 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
182
196
 
183
197
  <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass"
184
198
  (openedChange)="openChange($event)" [compareWith]="compareFn" [panelWidth]="field.panelWidth || 'auto'"
185
- [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
199
+ [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple" (selectionChange)="selectionChange($event)">
186
200
  @if (field.triggerComponent) {
187
201
  <mat-select-trigger>
188
202
  <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
@@ -310,7 +324,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
310
324
 
311
325
  <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass"
312
326
  (openedChange)="openChange($event)" [compareWith]="compareFn" [panelWidth]="field.panelWidth || 'auto'"
313
- [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
327
+ [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple" (selectionChange)="selectionChange($event)">
314
328
  @if (field.triggerComponent) {
315
329
  <mat-select-trigger>
316
330
  <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
@@ -434,4 +448,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
434
448
  type: ViewChildren,
435
449
  args: [MatOption]
436
450
  }] } });
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LnNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy9zcmMvbGliL2ZpZWxkcy9zZWxlY3Quc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQXFCLFNBQVMsRUFBZ0MsU0FBUyxFQUFFLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBMElyRCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsaUJBQWlCO0lBaUJsRSxZQUFzQixPQUF5QixFQUFZLEdBQXNCO1FBQy9FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURLLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFmakYsa0JBQWEsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDekMscUJBQWdCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLHFCQUFn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QUV6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRIWDtxSEF1QnNDLHdCQUF3QjtzQkFBNUQsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBQ1YsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb25jYXQsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEtsZXNGaWVsZEFic3RyYWN0IH0gZnJvbSAnLi9maWVsZC5hYnN0cmFjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tsZXMtZm9ybS1zZWxlY3Qtc2VhcmNoJyxcbiAgLy8gZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LWZvcm0tZmllbGQgW3N1YnNjcmlwdFNpemluZ109XCJmaWVsZC5zdWJzY3JpcHRTaXppbmdcIiBjbGFzcz1cIm1hcmdpbi10b3BcIiBbY29sb3JdPVwiZmllbGQuY29sb3JcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCIgW2FwcGVhcmFuY2VdPVwiZmllbGQuYXBwZWFyYW5jZVwiPlxuICAgICAgICBAaWYgKGZpZWxkLmxhYmVsKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ZmllbGQubGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgICAgICB9XG5cbiAgICAgICAgPG1hdC1zZWxlY3QgbWF0VG9vbHRpcD1cInt7ZmllbGQudG9vbHRpcH19XCIgW2F0dHIuaWRdPVwiZmllbGQuaWRcIiBbbmdDbGFzc109XCJmaWVsZC5uZ0NsYXNzXCJcbiAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvcGVuQ2hhbmdlKCRldmVudClcIiBbY29tcGFyZVdpdGhdPVwiY29tcGFyZUZuXCIgW3BhbmVsV2lkdGhdPVwiZmllbGQucGFuZWxXaWR0aCB8fCAnYXV0bydcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbbXVsdGlwbGVdPVwiZmllbGQubXVsdGlwbGVcIj5cbiAgICAgICAgQGlmIChmaWVsZC50cmlnZ2VyQ29tcG9uZW50KSB7XG4gICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIiBbdmFsdWVdPVwiZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmaWVsZC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckxhYmVsPVwiXCIgbm9FbnRyaWVzRm91bmRMYWJlbCA9XCJcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiZmllbGQuaXRlbVNpemUgfHwgNTBcIiBbc3R5bGUuaGVpZ2h0LnB4XT00KjQ4PlxuICAgICAgICAgICAgICAgIEBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwic2VsZWN0QWxsIG1hdC1tZGMtb3B0aW9uIG1kYy1saXN0LWl0ZW1cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0QWxsQ29udHJvbFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydzZWxlY3RBbGwnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNGaWx0ZXJlZCQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMDsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhmaWVsZC5wcm9wZXJ0eSA/IGl0ZW1bZmllbGQucHJvcGVydHldIDogaXRlbSkgfCBrbGVzVHJhbnNmb3JtOmZpZWxkLnBpcGVUcmFuc2Zvcm19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5tdWx0aXBsZSAmJiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zRmlsdGVyZWQkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiIFt2YWx1ZV09XCJpdGVtXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMDsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5tdWx0aXBsZSAmJiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiIFt2YWx1ZV09XCJpdGVtXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImhpZGUtY2hlY2tib3hcIiBkaXNhYmxlZD48ZGl2IGNsYXNzPVwibG9hZGluZ1NlbGVjdFwiPnt7J2xvYWRpbmcnIHwgdHJhbnNsYXRlfX0uLi4gPG1hdC1zcGlubmVyIGNsYXNzPVwic3Bpbm5lclwiIGRpYW1ldGVyPVwiMjBcIj48L21hdC1zcGlubmVyPjwvZGl2PjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckxhYmVsPVwiXCIgbm9FbnRyaWVzRm91bmRMYWJlbCA9XCJcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgQGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgQGlmIChmaWVsZC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwic2VsZWN0QWxsIG1hdC1tZGMtb3B0aW9uIG1kYy1saXN0LWl0ZW1cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0QWxsQ29udHJvbFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J3NlbGVjdEFsbCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBvcHRpb25zRmlsdGVyZWQkIHwgYXN5bmM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG9wdGlvbnNGaWx0ZXJlZCQgfCBhc3luYzsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIiBbZGlzYWJsZWRdPVwiaXRlbT8uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaGlkZS1jaGVja2JveFwiIGRpc2FibGVkPjxkaXYgY2xhc3M9XCJsb2FkaW5nU2VsZWN0XCI+e3snbG9hZGluZycgfCB0cmFuc2xhdGV9fS4uLiA8bWF0LXNwaW5uZXIgY2xhc3M9XCJzcGlubmVyXCIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5T3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaGlkZS1jaGVja2JveFwiIGRpc2FibGVkPjxkaXYgY2xhc3M9XCJsb2FkaW5nU2VsZWN0XCI+e3snbG9hZGluZycgfCB0cmFuc2xhdGV9fS4uLiA8bWF0LXNwaW5uZXIgY2xhc3M9XCJzcGlubmVyXCIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICBAaWYgKGZpZWxkLmhpbnQpIHtcbiAgICAgICAgICAgIDxtYXQtaGludD57e2ZpZWxkLmhpbnR9fTwvbWF0LWhpbnQ+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpZWxkLnN1YkNvbXBvbmVudHMgfHwgZmllbGQuY2xlYXJhYmxlKSB7XG4gICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxtYXQtZXJyb3IgbWF0RXJyb3JNZXNzYWdlIFt2YWxpZGF0aW9uc109XCJmaWVsZC52YWxpZGF0aW9uc1wiIFthc3luY1ZhbGlkYXRpb25zXT1cImZpZWxkLmFzeW5jVmFsaWRhdGlvbnNcIj48L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuYCxcbiAgc3R5bGVzOiBbJ21hdC1mb3JtLWZpZWxkIHt3aWR0aDogY2FsYygxMDAlKX0nLFxuICAgICc6Om5nLWRlZXAgLnNlbGVjdEFsbCB7cGFkZGluZzogMCAxNnB4IDAgNXB4ICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIHt3aWR0aDogMTAwJTt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIC5tZGMtbGFiZWwge3dpZHRoOiAxMDAlOyAgbWluLWhlaWdodDogNDhweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZGlzcGxheTogZmxleDt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIC5tZGMtY2hlY2tib3hfX3JpcHBsZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30nLFxuICAgIGA6Om5nLWRlZXAgLmhpZGUtY2hlY2tib3ggLm1hdC1wc2V1ZG8tY2hlY2tib3ggeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7ICB9YF0sXG4gIHN0eWxlVXJsczogWycuLi9zdHlsZXMvbG9hZGluZy1zZWxlY3Quc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEtsZXNGb3JtU2VsZWN0U2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgS2xlc0ZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgc2VsZWN0QWxsQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpO1xuXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0ZpbHRlcmVkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueVtdPigxKTtcblxuICBvcGVuQ2hhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIHByaXZhdGUgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICBAVmlld0NoaWxkcmVuKE1hdE9wdGlvbikgb3B0aW9uczogUXVlcnlMaXN0PE1hdE9wdGlvbj47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsIHByb3RlY3RlZCByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIodmlld1JlZik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuZmllbGQubGF6eSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oQXJyYXkuaXNBcnJheSh0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0udmFsdWUpID8gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlIDogW3RoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZV0pO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcGVuQ2hhbmdlRXZlbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zJCA9IHRoaXMuZmllbGQub3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLmZpZWxkLm9wdGlvbnMoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMkID0gb2YodGhpcy5maWVsZC5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSxcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmZpZWxkLmRlYm91bmNlVGltZSB8fCAwKSxcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLnNlYXJjaENvbnRyb2wudmFsdWUpLFxuICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdChcbiAgICAgICAgICBvZih7IGxvYWRpbmc6IHRydWUsIG9wdGlvbnM6IFtdIH0pLFxuICAgICAgICAgIHRoaXMub25TZWFyY2hDaGFuZ2UodmFsdWUpLnBpcGUobWFwKChvcHRpb25zKSA9PiAoeyBsb2FkaW5nOiBmYWxzZSwgb3B0aW9ucyB9KSkpXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgoeyBsb2FkaW5nLCBvcHRpb25zIH0pID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gbG9hZGluZztcbiAgICAgIHRoaXMub3B0aW9uc0ZpbHRlcmVkJC5uZXh0KG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5maWVsZC5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSxcbiAgICAgICAgICBzdGFydFdpdGgodGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlKSxcbiAgICAgICAgICBtYXAoKHNlbGVjdGVkKSA9PiAoKHRoaXMuZmllbGQucHJvcGVydHkgJiYgc2VsZWN0ZWQpID8gc2VsZWN0ZWQ/Lm1hcChzID0+IHNbdGhpcy5maWVsZC5wcm9wZXJ0eV0pIDogc2VsZWN0ZWQpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoc2VsZWN0ZWQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0ZpbHRlcmVkJC5waXBlKFxuICAgICAgICAgICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnM/LmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uPy5kaXNhYmxlZCkubWFwKChvcHRpb24pID0+ICh0aGlzLmZpZWxkLnByb3BlcnR5ID8gb3B0aW9uW3RoaXMuZmllbGQucHJvcGVydHldIDogb3B0aW9uKSkpLFxuICAgICAgICAgICAgICBtYXAob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPCBzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5ldmVyeShvID0+IHNlbGVjdGVkLmluY2x1ZGVzKG8pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmxlbmd0aCA9PT0gc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkLmV2ZXJ5KHMgPT4gb3B0aW9ucy5pbmNsdWRlcyhzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zdWJzY3JpYmUoaXNDaGVja2VkID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbENvbnRyb2wuc2V0VmFsdWUoaXNDaGVja2VkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cblxuICB0b2dnbGVBbGxTZWxlY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuY2hlY2tlZCkge1xuICAgICAgdGhpcy5vcHRpb25zRmlsdGVyZWQkLnBpcGUodGFrZSgxKSwgbWFwKChvcHRpb25zKSA9PiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uPy5kaXNhYmxlZCkpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0ucGF0Y2hWYWx1ZShvcHRpb25zLnNsaWNlKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0ucGF0Y2hWYWx1ZShbXSk7XG4gICAgfVxuICB9XG5cblxuICBwcm90ZWN0ZWQgb3BlbkNoYW5nZUV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSxcbiAgICAgICAgc3dpdGNoTWFwKChpc09wZW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vbk9wZW5DaGFuZ2UoaXNPcGVuKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgKHRoaXMub3B0aW9ucyQgYXMgQmVoYXZpb3JTdWJqZWN0PGFueVtdPikubmV4dChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW5DaGFuZ2UoaXNPcGVuOiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGlmIChpc09wZW4pIHtcblxuICAgICAgaWYgKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5vcHRpb25zLnBpcGUodGFrZSgxKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLmZpZWxkLm9wdGlvbnMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLm9wdGlvbnMoKS5waXBlKHRha2UoMSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmZpZWxkLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlICE9PSBudWxsXG4gICAgICAgID8gKEFycmF5LmlzQXJyYXkodGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlKSA/XG4gICAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlIDogW3RoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZV0pIDogW10pXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU2VhcmNoQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucyQucGlwZShtYXAob3B0aW9ucyA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb25zXG4gICAgICAgICAgLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuc2VhcmNoS2V5cyAmJiB0aGlzLmZpZWxkLnNlYXJjaEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnNlYXJjaEtleXMuc29tZShzZWFyY2hLZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25bc2VhcmNoS2V5XSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbltzZWFyY2hLZXldPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfSkgfHwgKHRoaXMuZmllbGQucHJvcGVydHkgP1xuICAgICAgICAgICAgICAgIG9wdGlvblt0aGlzLmZpZWxkLnByb3BlcnR5XT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xIDogZmFsc2UpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZC5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25bdGhpcy5maWVsZC5wcm9wZXJ0eV0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaCkgPiAtMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xO1xuICAgICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zJDtcbiAgICB9XG4gIH1cblxuICBvcGVuQ2hhbmdlKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZpZWxkLmxhenkpIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZSQubmV4dCgkZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpZWxkLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wYXJlRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLmZpZWxkLnByb3BlcnR5ICYmIG8xICYmIG8yKSB7XG4gICAgICByZXR1cm4gbzFbdGhpcy5maWVsZC5wcm9wZXJ0eV0gPT09IG8yW3RoaXMuZmllbGQucHJvcGVydHldO1xuICAgIH1cbiAgICByZXR1cm4gbzEgPT09IG8yO1xuICB9XG59XG4iXX0=
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LnNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy9zcmMvbGliL2ZpZWxkcy9zZWxlY3Quc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQXFCLFNBQVMsRUFBZ0MsU0FBUyxFQUFFLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQTBJckQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGlCQUFpQjtJQWlCbEUsWUFBc0IsT0FBeUIsRUFBWSxHQUFzQjtRQUMvRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFESyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFZLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBZmpGLGtCQUFhLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFHLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixxQkFB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QUM3RztZQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFFSCxDQUFDOytHQS9NVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix5SEFjN0Isd0JBQXdCLDZEQUNyQixTQUFTLHVFQXBKYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRIWDs7NEZBU1ksNkJBQTZCO2tCQXhJekMsU0FBUzsrQkFDRSx5QkFBeUIsWUFFekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E0SFg7cUhBdUJzQyx3QkFBd0I7c0JBQTVELFNBQVM7dUJBQUMsd0JBQXdCO2dCQUNWLE9BQU87c0JBQS9CLFlBQVk7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29uY2F0LCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBLbGVzRmllbGRBYnN0cmFjdCB9IGZyb20gJy4vZmllbGQuYWJzdHJhY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrbGVzLWZvcm0tc2VsZWN0LXNlYXJjaCcsXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG1hdC1mb3JtLWZpZWxkIFtzdWJzY3JpcHRTaXppbmddPVwiZmllbGQuc3Vic2NyaXB0U2l6aW5nXCIgY2xhc3M9XCJtYXJnaW4tdG9wXCIgW2NvbG9yXT1cImZpZWxkLmNvbG9yXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiIFthcHBlYXJhbmNlXT1cImZpZWxkLmFwcGVhcmFuY2VcIj5cbiAgICAgICAgQGlmIChmaWVsZC5sYWJlbCkge1xuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2ZpZWxkLmxhYmVsfX08L21hdC1sYWJlbD5cbiAgICAgICAgfVxuXG4gICAgICAgIDxtYXQtc2VsZWN0IG1hdFRvb2x0aXA9XCJ7e2ZpZWxkLnRvb2x0aXB9fVwiIFthdHRyLmlkXT1cImZpZWxkLmlkXCIgW25nQ2xhc3NdPVwiZmllbGQubmdDbGFzc1wiXG4gICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib3BlbkNoYW5nZSgkZXZlbnQpXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVGblwiIFtwYW5lbFdpZHRoXT1cImZpZWxkLnBhbmVsV2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgW211bHRpcGxlXT1cImZpZWxkLm11bHRpcGxlXCIgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgQGlmIChmaWVsZC50cmlnZ2VyQ29tcG9uZW50KSB7XG4gICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIiBbdmFsdWVdPVwiZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmaWVsZC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckxhYmVsPVwiXCIgbm9FbnRyaWVzRm91bmRMYWJlbCA9XCJcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiZmllbGQuaXRlbVNpemUgfHwgNTBcIiBbc3R5bGUuaGVpZ2h0LnB4XT00KjQ4PlxuICAgICAgICAgICAgICAgIEBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwic2VsZWN0QWxsIG1hdC1tZGMtb3B0aW9uIG1kYy1saXN0LWl0ZW1cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0QWxsQ29udHJvbFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydzZWxlY3RBbGwnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNGaWx0ZXJlZCQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMDsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhmaWVsZC5wcm9wZXJ0eSA/IGl0ZW1bZmllbGQucHJvcGVydHldIDogaXRlbSkgfCBrbGVzVHJhbnNmb3JtOmZpZWxkLnBpcGVUcmFuc2Zvcm19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5tdWx0aXBsZSAmJiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zRmlsdGVyZWQkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiIFt2YWx1ZV09XCJpdGVtXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMDsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5tdWx0aXBsZSAmJiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiIFt2YWx1ZV09XCJpdGVtXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImhpZGUtY2hlY2tib3hcIiBkaXNhYmxlZD48ZGl2IGNsYXNzPVwibG9hZGluZ1NlbGVjdFwiPnt7J2xvYWRpbmcnIHwgdHJhbnNsYXRlfX0uLi4gPG1hdC1zcGlubmVyIGNsYXNzPVwic3Bpbm5lclwiIGRpYW1ldGVyPVwiMjBcIj48L21hdC1zcGlubmVyPjwvZGl2PjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckxhYmVsPVwiXCIgbm9FbnRyaWVzRm91bmRMYWJlbCA9XCJcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgQGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgQGlmIChmaWVsZC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwic2VsZWN0QWxsIG1hdC1tZGMtb3B0aW9uIG1kYy1saXN0LWl0ZW1cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0QWxsQ29udHJvbFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J3NlbGVjdEFsbCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBvcHRpb25zRmlsdGVyZWQkIHwgYXN5bmM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG9wdGlvbnNGaWx0ZXJlZCQgfCBhc3luYzsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIiBbZGlzYWJsZWRdPVwiaXRlbT8uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaGlkZS1jaGVja2JveFwiIGRpc2FibGVkPjxkaXYgY2xhc3M9XCJsb2FkaW5nU2VsZWN0XCI+e3snbG9hZGluZycgfCB0cmFuc2xhdGV9fS4uLiA8bWF0LXNwaW5uZXIgY2xhc3M9XCJzcGlubmVyXCIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5T3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaGlkZS1jaGVja2JveFwiIGRpc2FibGVkPjxkaXYgY2xhc3M9XCJsb2FkaW5nU2VsZWN0XCI+e3snbG9hZGluZycgfCB0cmFuc2xhdGV9fS4uLiA8bWF0LXNwaW5uZXIgY2xhc3M9XCJzcGlubmVyXCIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICBAaWYgKGZpZWxkLmhpbnQpIHtcbiAgICAgICAgICAgIDxtYXQtaGludD57e2ZpZWxkLmhpbnR9fTwvbWF0LWhpbnQ+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpZWxkLnN1YkNvbXBvbmVudHMgfHwgZmllbGQuY2xlYXJhYmxlKSB7XG4gICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxtYXQtZXJyb3IgbWF0RXJyb3JNZXNzYWdlIFt2YWxpZGF0aW9uc109XCJmaWVsZC52YWxpZGF0aW9uc1wiIFthc3luY1ZhbGlkYXRpb25zXT1cImZpZWxkLmFzeW5jVmFsaWRhdGlvbnNcIj48L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuYCxcbiAgc3R5bGVzOiBbJ21hdC1mb3JtLWZpZWxkIHt3aWR0aDogY2FsYygxMDAlKX0nLFxuICAgICc6Om5nLWRlZXAgLnNlbGVjdEFsbCB7cGFkZGluZzogMCAxNnB4IDAgNXB4ICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIHt3aWR0aDogMTAwJTt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIC5tZGMtbGFiZWwge3dpZHRoOiAxMDAlOyAgbWluLWhlaWdodDogNDhweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZGlzcGxheTogZmxleDt9JyxcbiAgICAnOjpuZy1kZWVwIC5zZWxlY3RBbGwgLm1kYy1mb3JtLWZpZWxkIC5tZGMtY2hlY2tib3hfX3JpcHBsZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30nLFxuICAgIGA6Om5nLWRlZXAgLmhpZGUtY2hlY2tib3ggLm1hdC1wc2V1ZG8tY2hlY2tib3ggeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7ICB9YF0sXG4gIHN0eWxlVXJsczogWycuLi9zdHlsZXMvbG9hZGluZy1zZWxlY3Quc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEtsZXNGb3JtU2VsZWN0U2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgS2xlc0ZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgc2VsZWN0QWxsQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpO1xuXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0ZpbHRlcmVkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueVtdPigxKTtcblxuICBvcGVuQ2hhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIHByaXZhdGUgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICBAVmlld0NoaWxkcmVuKE1hdE9wdGlvbikgb3B0aW9uczogUXVlcnlMaXN0PE1hdE9wdGlvbj47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsIHByb3RlY3RlZCByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIodmlld1JlZik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuZmllbGQubGF6eSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oQXJyYXkuaXNBcnJheSh0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0udmFsdWUpID8gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlIDogW3RoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZV0pO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wZW5DaGFuZ2VFdmVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5maWVsZC5vcHRpb25zIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5maWVsZC5vcHRpb25zO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5maWVsZC5vcHRpb25zIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zJCA9IHRoaXMuZmllbGQub3B0aW9ucygpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyQgPSBvZih0aGlzLmZpZWxkLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpLFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZmllbGQuZGVib3VuY2VUaW1lIHx8IDApLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZSksXG4gICAgICBzd2l0Y2hNYXAodmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gY29uY2F0KFxuICAgICAgICAgIG9mKHsgbG9hZGluZzogdHJ1ZSwgb3B0aW9uczogW10gfSksXG4gICAgICAgICAgdGhpcy5vblNlYXJjaENoYW5nZSh2YWx1ZSkucGlwZSh0YWtlKDEpLCBtYXAoKG9wdGlvbnMpID0+ICh7IGxvYWRpbmc6IGZhbHNlLCBvcHRpb25zIH0pKSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgoeyBsb2FkaW5nLCBvcHRpb25zIH0pID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gbG9hZGluZztcbiAgICAgIHRoaXMub3B0aW9uc0ZpbHRlcmVkJC5uZXh0KG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5maWVsZC5tdWx0aXBsZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxDb250cm9sKHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZSk7XG5cbiAgICAgICh0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0gYXMgRm9ybUNvbnRyb2wpLnJlZ2lzdGVyT25DaGFuZ2UoKHZhbHVlcywgZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgIGlmIChlbWl0Vmlld1RvTW9kZWxDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbENvbnRyb2wodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cblxuICB0b2dnbGVBbGxTZWxlY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuY2hlY2tlZCkge1xuICAgICAgdGhpcy5vcHRpb25zRmlsdGVyZWQkLnBpcGUodGFrZSgxKSwgbWFwKChvcHRpb25zKSA9PiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uPy5kaXNhYmxlZCkpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQubmFtZV0ucGF0Y2hWYWx1ZShvcHRpb25zLnNsaWNlKCksIHsgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnBhdGNoVmFsdWUoW10sIHsgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuXG4gIHByb3RlY3RlZCBvcGVuQ2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpLFxuICAgICAgICBzd2l0Y2hNYXAoKGlzT3BlbikgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9uT3BlbkNoYW5nZShpc09wZW4pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAodGhpcy5vcHRpb25zJCBhcyBCZWhhdmlvclN1YmplY3Q8YW55W10+KS5uZXh0KG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNGaWx0ZXJlZCQubmV4dChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW5DaGFuZ2UoaXNPcGVuOiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGlmIChpc09wZW4pIHtcblxuICAgICAgaWYgKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5vcHRpb25zLnBpcGUodGFrZSgxKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLmZpZWxkLm9wdGlvbnMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLm9wdGlvbnMoKS5waXBlKHRha2UoMSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmZpZWxkLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlICE9PSBudWxsXG4gICAgICAgID8gKEFycmF5LmlzQXJyYXkodGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlKSA/XG4gICAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnZhbHVlIDogW3RoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZV0pIDogW10pXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU2VhcmNoQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucyQucGlwZShtYXAob3B0aW9ucyA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb25zXG4gICAgICAgICAgLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuc2VhcmNoS2V5cyAmJiB0aGlzLmZpZWxkLnNlYXJjaEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnNlYXJjaEtleXMuc29tZShzZWFyY2hLZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25bc2VhcmNoS2V5XSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbltzZWFyY2hLZXldPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfSkgfHwgKHRoaXMuZmllbGQucHJvcGVydHkgP1xuICAgICAgICAgICAgICAgIG9wdGlvblt0aGlzLmZpZWxkLnByb3BlcnR5XT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xIDogZmFsc2UpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZC5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25bdGhpcy5maWVsZC5wcm9wZXJ0eV0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaCkgPiAtMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xO1xuICAgICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zJDtcbiAgICB9XG4gIH1cblxuICBvcGVuQ2hhbmdlKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZpZWxkLmxhenkpIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZSQubmV4dCgkZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpZWxkLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wYXJlRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLmZpZWxkLnByb3BlcnR5ICYmIG8xICYmIG8yKSB7XG4gICAgICByZXR1cm4gbzFbdGhpcy5maWVsZC5wcm9wZXJ0eV0gPT09IG8yW3RoaXMuZmllbGQucHJvcGVydHldO1xuICAgIH1cbiAgICByZXR1cm4gbzEgPT09IG8yO1xuICB9XG5cbiAgc2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbikge1xuICAgIGlmICh0aGlzLmZpZWxkLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbENvbnRyb2woc2VsZWN0aW9uLnZhbHVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdEFsbENvbnRyb2wodmFsdWVzKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSAoKHRoaXMuZmllbGQucHJvcGVydHkgJiYgdmFsdWVzKSA/IHZhbHVlcz8ubWFwKHMgPT4gc1t0aGlzLmZpZWxkLnByb3BlcnR5XSkgOiB2YWx1ZXMpO1xuICAgICAgdGhpcy5vcHRpb25zRmlsdGVyZWQkLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucz8uZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24/LmRpc2FibGVkKS5tYXAoKG9wdGlvbikgPT4gKHRoaXMuZmllbGQucHJvcGVydHkgPyBvcHRpb25bdGhpcy5maWVsZC5wcm9wZXJ0eV0gOiBvcHRpb24pKSksXG4gICAgICAgIG1hcChvcHRpb25zID0+IHtcbiAgICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoIDwgc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5sZW5ndGggPiAwICYmIG9wdGlvbnMuZXZlcnkobyA9PiBzZWxlY3RlZC5pbmNsdWRlcyhvKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5sZW5ndGggPT09IHNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZC5ldmVyeShzID0+IG9wdGlvbnMuaW5jbHVkZXMocykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpLnN1YnNjcmliZShpc0NoZWNrZWQgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ29udHJvbC5zZXRWYWx1ZShpc0NoZWNrZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
@@ -284,6 +284,7 @@ class MatErrorFormDirective {
284
284
  }
285
285
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MatErrorFormDirective, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
286
286
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MatErrorFormDirective, selector: "[matErrorForm]", inputs: { validations: "validations", asyncValidations: "asyncValidations", form: "form" }, ngImport: i0, template: `
287
+ @if(form && form.errors){
287
288
  @for (validation of validations; track validation.name) {
288
289
  @if (form?.hasError(validation.name) && validation.message) {
289
290
  {{validation.message | translate}}
@@ -294,6 +295,7 @@ class MatErrorFormDirective {
294
295
  {{validation.message | translate}}
295
296
  }
296
297
  }
298
+ }
297
299
  `, isInline: true, dependencies: [{ kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
298
300
  }
299
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MatErrorFormDirective, decorators: [{
@@ -301,6 +303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
301
303
  args: [{
302
304
  selector: '[matErrorForm]',
303
305
  template: `
306
+ @if(form && form.errors){
304
307
  @for (validation of validations; track validation.name) {
305
308
  @if (form?.hasError(validation.name) && validation.message) {
306
309
  {{validation.message | translate}}
@@ -311,6 +314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
311
314
  {{validation.message | translate}}
312
315
  }
313
316
  }
317
+ }
314
318
  `
315
319
  }]
316
320
  }], propDecorators: { validations: [{
@@ -489,7 +493,9 @@ class KlesDynamicFormComponent {
489
493
  </ng-container>
490
494
  }
491
495
  }
492
- <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
496
+ @if (form && form.errors){
497
+ <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
498
+ }
493
499
  </form>
494
500
  `, isInline: true, styles: [".dynamic-form-column{display:flex;flex-direction:column}\n", ".dynamic-form-column>*{width:100%}\n", ".dynamic-form-row{display:inline-flex;flex-wrap:wrap;gap:10px}\n", ".dynamic-form-row>*{width:100%}\n", ".dynamic-form-grid{display:grid}\n", ".dynamic-form-inline-grid{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: KlesDynamicFieldDirective, selector: "[klesDynamicField]", inputs: ["field", "group", "siblingFields"] }, { kind: "component", type: MatErrorFormDirective, selector: "[matErrorForm]", inputs: ["validations", "asyncValidations", "form"] }] }); }
495
501
  }
@@ -503,7 +509,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
503
509
  </ng-container>
504
510
  }
505
511
  }
506
- <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
512
+ @if (form && form.errors){
513
+ <mat-error matErrorForm [form]="form" [validations]="validators" [asyncValidations]="asyncValidators"></mat-error>
514
+ }
507
515
  </form>
508
516
  `, styles: [".dynamic-form-column{display:flex;flex-direction:column}\n", ".dynamic-form-column>*{width:100%}\n", ".dynamic-form-row{display:inline-flex;flex-wrap:wrap;gap:10px}\n", ".dynamic-form-row>*{width:100%}\n", ".dynamic-form-grid{display:grid}\n", ".dynamic-form-inline-grid{display:inline-grid}\n"] }]
509
517
  }], ctorParameters: () => [{ type: i2$1.UntypedFormBuilder }], propDecorators: { fields: [{
@@ -2822,28 +2830,18 @@ class KlesFormSelectSearchComponent extends KlesFieldAbstract {
2822
2830
  }
2823
2831
  }
2824
2832
  this.searchControl.valueChanges.pipe(takeUntil(this._onDestroy), debounceTime(this.field.debounceTime || 0), startWith(this.searchControl.value), switchMap(value => {
2825
- return concat(of({ loading: true, options: [] }), this.onSearchChange(value).pipe(map((options) => ({ loading: false, options }))));
2833
+ return concat(of({ loading: true, options: [] }), this.onSearchChange(value).pipe(take(1), map((options) => ({ loading: false, options }))));
2826
2834
  })).subscribe(({ loading, options }) => {
2827
2835
  this.isLoading = loading;
2828
2836
  this.optionsFiltered$.next(options);
2829
2837
  this.ref.markForCheck();
2830
2838
  });
2831
2839
  if (this.field.multiple) {
2832
- this.group.controls[this.field.name]
2833
- .valueChanges.pipe(takeUntil(this._onDestroy), startWith(this.group.controls[this.field.name].value), map((selected) => ((this.field.property && selected) ? selected?.map(s => s[this.field.property]) : selected)), switchMap(selected => {
2834
- return this.optionsFiltered$.pipe(map((options) => options?.filter((option) => !option?.disabled).map((option) => (this.field.property ? option[this.field.property] : option))), map(options => {
2835
- if (!selected) {
2836
- return false;
2837
- }
2838
- if (options.length < selected.length) {
2839
- return options.length > 0 && options.every(o => selected.includes(o));
2840
- }
2841
- else {
2842
- return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));
2843
- }
2844
- }));
2845
- })).subscribe(isChecked => {
2846
- this.selectAllControl.setValue(isChecked);
2840
+ this.updateSelectAllControl(this.group.controls[this.field.name].value);
2841
+ this.group.controls[this.field.name].registerOnChange((values, emitViewToModelChange) => {
2842
+ if (emitViewToModelChange) {
2843
+ this.updateSelectAllControl(values);
2844
+ }
2847
2845
  });
2848
2846
  }
2849
2847
  }
@@ -2855,12 +2853,12 @@ class KlesFormSelectSearchComponent extends KlesFieldAbstract {
2855
2853
  if (state.checked) {
2856
2854
  this.optionsFiltered$.pipe(take(1), map((options) => options.filter((option) => !option?.disabled))).subscribe(options => {
2857
2855
  if (options.length > 0) {
2858
- this.group.controls[this.field.name].patchValue(options.slice());
2856
+ this.group.controls[this.field.name].patchValue(options.slice(), { emitModelToViewChange: false });
2859
2857
  }
2860
2858
  });
2861
2859
  }
2862
2860
  else {
2863
- this.group.controls[this.field.name].patchValue([]);
2861
+ this.group.controls[this.field.name].patchValue([], { emitModelToViewChange: false });
2864
2862
  }
2865
2863
  }
2866
2864
  openChangeEvent() {
@@ -2869,8 +2867,9 @@ class KlesFormSelectSearchComponent extends KlesFieldAbstract {
2869
2867
  return this.onOpenChange(isOpen);
2870
2868
  }))
2871
2869
  .subscribe((options) => {
2872
- this.options$.next(options);
2873
2870
  this.isLoading = false;
2871
+ this.options$.next(options);
2872
+ this.optionsFiltered$.next(options);
2874
2873
  this.ref.markForCheck();
2875
2874
  });
2876
2875
  }
@@ -2933,6 +2932,29 @@ class KlesFormSelectSearchComponent extends KlesFieldAbstract {
2933
2932
  }
2934
2933
  }
2935
2934
  }
2935
+ selectionChange(selection) {
2936
+ if (this.field.multiple) {
2937
+ this.updateSelectAllControl(selection.value);
2938
+ }
2939
+ }
2940
+ updateSelectAllControl(values) {
2941
+ if (values) {
2942
+ const selected = ((this.field.property && values) ? values?.map(s => s[this.field.property]) : values);
2943
+ this.optionsFiltered$.pipe(take(1), map((options) => options?.filter((option) => !option?.disabled).map((option) => (this.field.property ? option[this.field.property] : option))), map(options => {
2944
+ if (!selected) {
2945
+ return false;
2946
+ }
2947
+ if (options.length < selected.length) {
2948
+ return options.length > 0 && options.every(o => selected.includes(o));
2949
+ }
2950
+ else {
2951
+ return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));
2952
+ }
2953
+ })).subscribe(isChecked => {
2954
+ this.selectAllControl.setValue(isChecked, { emitEvent: false });
2955
+ });
2956
+ }
2957
+ }
2936
2958
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: KlesFormSelectSearchComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2937
2959
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: KlesFormSelectSearchComponent, selector: "kles-form-select-search", viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "options", predicate: MatOption, descendants: true }], usesInheritance: true, ngImport: i0, template: `
2938
2960
  <mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group" [appearance]="field.appearance">
@@ -2942,7 +2964,7 @@ class KlesFormSelectSearchComponent extends KlesFieldAbstract {
2942
2964
 
2943
2965
  <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass"
2944
2966
  (openedChange)="openChange($event)" [compareWith]="compareFn" [panelWidth]="field.panelWidth || 'auto'"
2945
- [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
2967
+ [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple" (selectionChange)="selectionChange($event)">
2946
2968
  @if (field.triggerComponent) {
2947
2969
  <mat-select-trigger>
2948
2970
  <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
@@ -3070,7 +3092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
3070
3092
 
3071
3093
  <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass"
3072
3094
  (openedChange)="openChange($event)" [compareWith]="compareFn" [panelWidth]="field.panelWidth || 'auto'"
3073
- [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
3095
+ [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple" (selectionChange)="selectionChange($event)">
3074
3096
  @if (field.triggerComponent) {
3075
3097
  <mat-select-trigger>
3076
3098
  <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>