@agorapulse/ui-components 16.2.10 → 16.2.11

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.
@@ -94,7 +94,7 @@ export class TextareaComponent {
94
94
  useExisting: TextareaComponent,
95
95
  multi: true,
96
96
  },
97
- ], queries: [{ propertyName: "symbols", predicate: SymbolComponent }], ngImport: i0, template: "<label\n *ngIf=\"label\"\n [for]=\"textareaId\">\n <span>\n {{ label }}\n </span>\n <span\n *ngIf=\"description\"\n class=\"description\">\n {{ description }}\n </span>\n</label>\n\n<textarea\n [class.with-error]=\"errorMessage\"\n [class.with-success]=\"successMessage\"\n [class.with-resize]=\"resize\"\n [placeholder]=\"placeholder\"\n [attr.data-test]=\"hostDataTest() ? hostDataTest() : name\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"textareaId\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange()\"></textarea>\n<div\n *ngIf=\"errorMessage\"\n class=\"form-message error\">\n <ap-symbol\n symbolId=\"alert-circle\"\n size=\"micro\" />\n <span>\n {{ errorMessage }}\n </span>\n</div>\n\n<div\n *ngIf=\"successMessage\"\n class=\"form-message success\">\n <ap-symbol\n symbolId=\"check-circle\"\n size=\"micro\" />\n <span>\n {{ successMessage }}\n </span>\n</div>\n", styles: ["ap-textarea{display:flex;flex-direction:column;gap:var(--ref-spacing-xxs);--border-width: 1px}ap-textarea label{display:flex;flex-direction:column;gap:var(--comp-forms-label-spacing-vertical);font-size:var(--comp-forms-label-size);font-weight:var(--comp-forms-label-font-weight);line-height:var(--comp-forms-label-line-height);font-family:var(--comp-forms-label-font-family);color:var(--comp-forms-label-text-color)}ap-textarea label .description{font-size:var(--comp-forms-label-description-text-size);font-weight:var(--comp-forms-label-description-text-font-weight);line-height:var(--comp-forms-label-description-text-line-height);font-family:var(--comp-forms-label-description-text-font-family);color:var(--comp-forms-label-description-text-color)}ap-textarea textarea{resize:none;width:256px;border:1px solid var(--ref-color-grey-60);background-color:var(--ref-color-white);padding:var(--ref-spacing-xxs) var(--ref-spacing-xs) var(--ref-spacing-xxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm)}ap-textarea textarea::placeholder{color:var(--ref-color-grey-80)}ap-textarea textarea:not(.transparent):not(.valid):not(.invalid):not(:focus):not([disabled]):hover{border-color:var(--ref-color-grey-80)}ap-textarea textarea:active{border-color:var(--ref-color-electric-blue-100)}ap-textarea textarea:disabled{border-color:var(--ref-color-grey-20);background-color:var(--ref-color-grey-20);cursor:default}ap-textarea textarea.with-error{border-color:var(--ref-color-red-100)}ap-textarea textarea.with-success{border-color:var(--ref-color-green-100)}ap-textarea textarea.with-resize{resize:vertical}.form-message{font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);font-family:var(--sys-text-style-body-font-family);margin:0;display:flex;gap:var(--ref-spacing-xxxs)}.form-message.error{color:var(--ref-color-red-100)}.form-message.error ap-symbol{color:var(--ref-color-red-100)}.form-message.success{color:var(--ref-color-green-150)}.form-message.success ap-symbol{color:var(--ref-color-green-100)}form.ng-submitted ap-textarea.ng-valid textarea{border-color:var(--ref-color-green-100)}form.ng-submitted ap-textarea.ng-invalid textarea{border-color:var(--ref-color-red-100)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["color", "symbolId", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
97
+ ], queries: [{ propertyName: "symbols", predicate: SymbolComponent }], ngImport: i0, template: "<label\n *ngIf=\"label\"\n [for]=\"textareaId\">\n <span>\n {{ label }}\n </span>\n <span\n *ngIf=\"description\"\n class=\"description\">\n {{ description }}\n </span>\n</label>\n\n<textarea\n [class.with-error]=\"errorMessage\"\n [class.with-success]=\"successMessage\"\n [class.with-resize]=\"resize\"\n [placeholder]=\"placeholder\"\n [attr.data-test]=\"hostDataTest() ? hostDataTest() : name\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"textareaId\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange()\"></textarea>\n<div\n *ngIf=\"errorMessage\"\n class=\"form-message error\">\n <ap-symbol\n symbolId=\"alert-circle\"\n size=\"micro\" />\n <span>\n {{ errorMessage }}\n </span>\n</div>\n\n<div\n *ngIf=\"successMessage\"\n class=\"form-message success\">\n <ap-symbol\n symbolId=\"check-circle\"\n size=\"micro\" />\n <span>\n {{ successMessage }}\n </span>\n</div>\n", styles: ["ap-textarea{display:flex;flex-direction:column;gap:var(--ref-spacing-xxs);--border-width: 1px}ap-textarea label{display:flex;flex-direction:column;gap:var(--comp-forms-label-spacing-vertical);font-size:var(--comp-forms-label-size);font-weight:var(--comp-forms-label-font-weight);line-height:var(--comp-forms-label-line-height);font-family:var(--comp-forms-label-font-family);color:var(--comp-forms-label-text-color)}ap-textarea label .description{font-size:var(--comp-forms-label-description-text-size);font-weight:var(--comp-forms-label-description-text-font-weight);line-height:var(--comp-forms-label-description-text-line-height);font-family:var(--comp-forms-label-description-text-font-family);color:var(--comp-forms-label-description-text-color)}ap-textarea textarea{resize:none;width:256px;border:var(--border-width) solid var(--comp-input-border-default-color);background-color:var(--ref-color-white);padding:var(--ref-spacing-xxs) var(--ref-spacing-xs) var(--ref-spacing-xxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm)}ap-textarea textarea::placeholder{color:var(--comp-input-text-placeholder-color)}ap-textarea textarea:not(.transparent):not(.valid):not(.invalid):not(:focus):not([disabled]):hover{border-color:var(--comp-input-border-hover-color)}ap-textarea textarea:active{border-color:var(--comp-input-border-focused-color)}ap-textarea textarea:disabled{background-color:var(--comp-input-fill-disabled-color);cursor:default}ap-textarea textarea.with-error{border-color:var(--comp-input-border-error-color)}ap-textarea textarea.with-success{border-color:var(--comp-input-border-success-color)}ap-textarea textarea.with-resize{resize:vertical}.form-message{font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);font-family:var(--sys-text-style-body-font-family);margin:0;display:flex;gap:var(--ref-spacing-xxxs)}.form-message.error{color:var(--comp-forms-status-text-error-color)}.form-message.error ap-symbol{color:var(--comp-forms-status-icon-error-color)}.form-message.success{color:var(--comp-forms-status-text-success-color)}.form-message.success ap-symbol{color:var(--comp-forms-status-icon-success-color)}form.ng-submitted ap-textarea.ng-valid textarea{border-color:var(--comp-input-border-success-color)}form.ng-submitted ap-textarea.ng-invalid textarea{border-color:var(--comp-input-border-error-color)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["color", "symbolId", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
98
98
  }
99
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: TextareaComponent, decorators: [{
100
100
  type: Component,
@@ -105,7 +105,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
105
105
  useExisting: TextareaComponent,
106
106
  multi: true,
107
107
  },
108
- ], encapsulation: ViewEncapsulation.None, template: "<label\n *ngIf=\"label\"\n [for]=\"textareaId\">\n <span>\n {{ label }}\n </span>\n <span\n *ngIf=\"description\"\n class=\"description\">\n {{ description }}\n </span>\n</label>\n\n<textarea\n [class.with-error]=\"errorMessage\"\n [class.with-success]=\"successMessage\"\n [class.with-resize]=\"resize\"\n [placeholder]=\"placeholder\"\n [attr.data-test]=\"hostDataTest() ? hostDataTest() : name\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"textareaId\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange()\"></textarea>\n<div\n *ngIf=\"errorMessage\"\n class=\"form-message error\">\n <ap-symbol\n symbolId=\"alert-circle\"\n size=\"micro\" />\n <span>\n {{ errorMessage }}\n </span>\n</div>\n\n<div\n *ngIf=\"successMessage\"\n class=\"form-message success\">\n <ap-symbol\n symbolId=\"check-circle\"\n size=\"micro\" />\n <span>\n {{ successMessage }}\n </span>\n</div>\n", styles: ["ap-textarea{display:flex;flex-direction:column;gap:var(--ref-spacing-xxs);--border-width: 1px}ap-textarea label{display:flex;flex-direction:column;gap:var(--comp-forms-label-spacing-vertical);font-size:var(--comp-forms-label-size);font-weight:var(--comp-forms-label-font-weight);line-height:var(--comp-forms-label-line-height);font-family:var(--comp-forms-label-font-family);color:var(--comp-forms-label-text-color)}ap-textarea label .description{font-size:var(--comp-forms-label-description-text-size);font-weight:var(--comp-forms-label-description-text-font-weight);line-height:var(--comp-forms-label-description-text-line-height);font-family:var(--comp-forms-label-description-text-font-family);color:var(--comp-forms-label-description-text-color)}ap-textarea textarea{resize:none;width:256px;border:1px solid var(--ref-color-grey-60);background-color:var(--ref-color-white);padding:var(--ref-spacing-xxs) var(--ref-spacing-xs) var(--ref-spacing-xxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm)}ap-textarea textarea::placeholder{color:var(--ref-color-grey-80)}ap-textarea textarea:not(.transparent):not(.valid):not(.invalid):not(:focus):not([disabled]):hover{border-color:var(--ref-color-grey-80)}ap-textarea textarea:active{border-color:var(--ref-color-electric-blue-100)}ap-textarea textarea:disabled{border-color:var(--ref-color-grey-20);background-color:var(--ref-color-grey-20);cursor:default}ap-textarea textarea.with-error{border-color:var(--ref-color-red-100)}ap-textarea textarea.with-success{border-color:var(--ref-color-green-100)}ap-textarea textarea.with-resize{resize:vertical}.form-message{font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);font-family:var(--sys-text-style-body-font-family);margin:0;display:flex;gap:var(--ref-spacing-xxxs)}.form-message.error{color:var(--ref-color-red-100)}.form-message.error ap-symbol{color:var(--ref-color-red-100)}.form-message.success{color:var(--ref-color-green-150)}.form-message.success ap-symbol{color:var(--ref-color-green-100)}form.ng-submitted ap-textarea.ng-valid textarea{border-color:var(--ref-color-green-100)}form.ng-submitted ap-textarea.ng-invalid textarea{border-color:var(--ref-color-red-100)}\n"] }]
108
+ ], encapsulation: ViewEncapsulation.None, template: "<label\n *ngIf=\"label\"\n [for]=\"textareaId\">\n <span>\n {{ label }}\n </span>\n <span\n *ngIf=\"description\"\n class=\"description\">\n {{ description }}\n </span>\n</label>\n\n<textarea\n [class.with-error]=\"errorMessage\"\n [class.with-success]=\"successMessage\"\n [class.with-resize]=\"resize\"\n [placeholder]=\"placeholder\"\n [attr.data-test]=\"hostDataTest() ? hostDataTest() : name\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"textareaId\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange()\"></textarea>\n<div\n *ngIf=\"errorMessage\"\n class=\"form-message error\">\n <ap-symbol\n symbolId=\"alert-circle\"\n size=\"micro\" />\n <span>\n {{ errorMessage }}\n </span>\n</div>\n\n<div\n *ngIf=\"successMessage\"\n class=\"form-message success\">\n <ap-symbol\n symbolId=\"check-circle\"\n size=\"micro\" />\n <span>\n {{ successMessage }}\n </span>\n</div>\n", styles: ["ap-textarea{display:flex;flex-direction:column;gap:var(--ref-spacing-xxs);--border-width: 1px}ap-textarea label{display:flex;flex-direction:column;gap:var(--comp-forms-label-spacing-vertical);font-size:var(--comp-forms-label-size);font-weight:var(--comp-forms-label-font-weight);line-height:var(--comp-forms-label-line-height);font-family:var(--comp-forms-label-font-family);color:var(--comp-forms-label-text-color)}ap-textarea label .description{font-size:var(--comp-forms-label-description-text-size);font-weight:var(--comp-forms-label-description-text-font-weight);line-height:var(--comp-forms-label-description-text-line-height);font-family:var(--comp-forms-label-description-text-font-family);color:var(--comp-forms-label-description-text-color)}ap-textarea textarea{resize:none;width:256px;border:var(--border-width) solid var(--comp-input-border-default-color);background-color:var(--ref-color-white);padding:var(--ref-spacing-xxs) var(--ref-spacing-xs) var(--ref-spacing-xxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm)}ap-textarea textarea::placeholder{color:var(--comp-input-text-placeholder-color)}ap-textarea textarea:not(.transparent):not(.valid):not(.invalid):not(:focus):not([disabled]):hover{border-color:var(--comp-input-border-hover-color)}ap-textarea textarea:active{border-color:var(--comp-input-border-focused-color)}ap-textarea textarea:disabled{background-color:var(--comp-input-fill-disabled-color);cursor:default}ap-textarea textarea.with-error{border-color:var(--comp-input-border-error-color)}ap-textarea textarea.with-success{border-color:var(--comp-input-border-success-color)}ap-textarea textarea.with-resize{resize:vertical}.form-message{font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);font-family:var(--sys-text-style-body-font-family);margin:0;display:flex;gap:var(--ref-spacing-xxxs)}.form-message.error{color:var(--comp-forms-status-text-error-color)}.form-message.error ap-symbol{color:var(--comp-forms-status-icon-error-color)}.form-message.success{color:var(--comp-forms-status-text-success-color)}.form-message.success ap-symbol{color:var(--comp-forms-status-icon-success-color)}form.ng-submitted ap-textarea.ng-valid textarea{border-color:var(--comp-input-border-success-color)}form.ng-submitted ap-textarea.ng-invalid textarea{border-color:var(--comp-input-border-error-color)}\n"] }]
109
109
  }], ctorParameters: function () { return []; }, propDecorators: { symbols: [{
110
110
  type: ContentChildren,
111
111
  args: [SymbolComponent]
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
149
149
  }], symbolPosition: [{
150
150
  type: Input
151
151
  }] } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL3RleHRhcmVhL3NyYy90ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvdGV4dGFyZWEvc3JjL3RleHRhcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBR0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXZJLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHO0lBQzlDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFtQkYsTUFBTSxPQUFPLGlCQUFpQjtJQUNqQixVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLGNBQWMsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRS9CLE9BQU8sQ0FBOEI7SUFFOUQsU0FBUyxDQUFVO0lBRW5CLGNBQWMsQ0FBVTtJQUV4QixlQUFlLENBQVU7SUFFekIsUUFBUSxHQUFZLEtBQUss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Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVrQyxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR3RDLFdBQVc7c0JBRFYsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTeW1ib2xDb21wb25lbnQsIFN5bWJvbFJlZ2lzdHJ5LCBhcEFsZXJ0Q2lyY2xlLCBhcENoZWNrQ2lyY2xlIH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktc3ltYm9sJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFdyaXRhYmxlU2lnbmFsLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY29uc3QgQVBfVEVYVEFSRUFfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0YXJlYUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2FwLXRleHRhcmVhJyxcbiAgICBzdHlsZVVybHM6IFsnLi90ZXh0YXJlYS5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBTeW1ib2xDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBBUF9URVhUQVJFQV9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRleHRhcmVhQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRhcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICByZWFkb25seSBzeW1ib2xSZWdpc3RyeTogU3ltYm9sUmVnaXN0cnkgPSBpbmplY3QoU3ltYm9sUmVnaXN0cnkpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihTeW1ib2xDb21wb25lbnQpIHN5bWJvbHMhOiBRdWVyeUxpc3Q8U3ltYm9sQ29tcG9uZW50PjtcblxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbGxlZEJ5ITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYXJpYURlc2NyaWJlZEJ5ITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRleHRhcmVhSWQ/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoe1xuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgIG5hbWUhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgcm93czogbnVtYmVyID0gMztcblxuICAgIEBJbnB1dCgpIGNvbHM6IG51bWJlciA9IDIwO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9yZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgcmVzaXplOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzeW1ib2xQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XG5cbiAgICBwcml2YXRlIF9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuITogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkO1xuXG4gICAgaG9zdERhdGFUZXN0OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHZhbHVlITogc3RyaW5nIHwgbnVsbDtcblxuICAgIG9uVG91Y2hlZCE6ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWwgJiYgIXRoaXMudGV4dGFyZWFJZCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBoYXZlIHRvIHByb3ZpZGUgYW4gdGV4dGFyZWEgaWQgaWQgaWYgeW91IHdhbnQgdG8gdXNlIGEgbGFiZWwuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0RGF0YVRlc3Quc2V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXN0JykpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtdGVzdCcpO1xuICAgICAgICB0aGlzLnN5bWJvbFJlZ2lzdHJ5LnJlZ2lzdGVyU3ltYm9scyhbYXBBbGVydENpcmNsZSwgYXBDaGVja0NpcmNsZV0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sYWJlbCAmJiAhdGhpcy50ZXh0YXJlYUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignWW91IGhhdmUgdG8gcHJvdmlkZSBhbiB0ZXh0YXJlYSBpZCBpZiB5b3Ugd2FudCB0byB1c2UgYSBsYWJlbC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvc3REYXRhVGVzdC5zZXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlc3QnKSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gU29tZXRpbWVzIGF0dHJpYnV0ZXMgbGlrZSB0aGUgaWQsIG9yIHRoZSBkYXRhLXRlc3QgYXJlIGR5bmFtaWMgYW5kIGNhbiBjaGFuZ2UgYmV0d2VlbiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBJbiBvcmRlciB0byBoYXZlIHRoZSBsYXN0IGF0dHJpYnV0ZXMgdmFsdWUgd2UgY2hlY2sgaWYgaXQgY2hhbmdlcywgYW5kIGlmIGl0IGRvZXMsIHdlIHJ1biBhIG1hcmsgZm9yIGNoZWNrIHRvIHVwZGF0ZSB0aGUgdmlldy5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvc3REYXRhVGVzdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgICAgIGlmIChob3N0RGF0YVRlc3QgJiYgdGhpcy5ob3N0RGF0YVRlc3QoKSAhPT0gaG9zdERhdGFUZXN0KSB7XG4gICAgICAgICAgICB0aGlzLmhvc3REYXRhVGVzdC5zZXQoaG9zdERhdGFUZXN0KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZSh7IHZhbHVlIH06IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGNvbnN0IGlzTm90VmFsaWQgPSAhdGhpcy52YWx1ZSAmJiB0aGlzLnJlcXVpcmVkO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNOb3RWYWxpZCAmJiB7XG4gICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4gPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG59XG4iLCI8bGFiZWxcbiAgICAqbmdJZj1cImxhYmVsXCJcbiAgICBbZm9yXT1cInRleHRhcmVhSWRcIj5cbiAgICA8c3Bhbj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAge3sgZGVzY3JpcHRpb24gfX1cbiAgICA8L3NwYW4+XG48L2xhYmVsPlxuXG48dGV4dGFyZWFcbiAgICBbY2xhc3Mud2l0aC1lcnJvcl09XCJlcnJvck1lc3NhZ2VcIlxuICAgIFtjbGFzcy53aXRoLXN1Y2Nlc3NdPVwic3VjY2Vzc01lc3NhZ2VcIlxuICAgIFtjbGFzcy53aXRoLXJlc2l6ZV09XCJyZXNpemVcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2F0dHIuZGF0YS10ZXN0XT1cImhvc3REYXRhVGVzdCgpID8gaG9zdERhdGFUZXN0KCkgOiBuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtpZF09XCJ0ZXh0YXJlYUlkXCJcbiAgICBbY29sc109XCJjb2xzXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnkgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnkgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZD8udG9TdHJpbmcoKVwiXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgpXCI+PC90ZXh0YXJlYT5cbjxkaXZcbiAgICAqbmdJZj1cImVycm9yTWVzc2FnZVwiXG4gICAgY2xhc3M9XCJmb3JtLW1lc3NhZ2UgZXJyb3JcIj5cbiAgICA8YXAtc3ltYm9sXG4gICAgICAgIHN5bWJvbElkPVwiYWxlcnQtY2lyY2xlXCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCIgLz5cbiAgICA8c3Bhbj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdJZj1cInN1Y2Nlc3NNZXNzYWdlXCJcbiAgICBjbGFzcz1cImZvcm0tbWVzc2FnZSBzdWNjZXNzXCI+XG4gICAgPGFwLXN5bWJvbFxuICAgICAgICBzeW1ib2xJZD1cImNoZWNrLWNpcmNsZVwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiIC8+XG4gICAgPHNwYW4+XG4gICAgICAgIHt7IHN1Y2Nlc3NNZXNzYWdlIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL3RleHRhcmVhL3NyYy90ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvdGV4dGFyZWEvc3JjL3RleHRhcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBR0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXZJLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHO0lBQzlDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFtQkYsTUFBTSxPQUFPLGlCQUFpQjtJQUNqQixVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLGNBQWMsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRS9CLE9BQU8sQ0FBOEI7SUFFOUQsU0FBUyxDQUFVO0lBRW5CLGNBQWMsQ0FBVTtJQUV4QixlQUFlLENBQVU7SUFFekIsUUFBUSxHQUFZLEtBQUss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Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVrQyxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR3RDLFdBQVc7c0JBRFYsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTeW1ib2xDb21wb25lbnQsIFN5bWJvbFJlZ2lzdHJ5LCBhcEFsZXJ0Q2lyY2xlLCBhcENoZWNrQ2lyY2xlIH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktc3ltYm9sJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFdyaXRhYmxlU2lnbmFsLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY29uc3QgQVBfVEVYVEFSRUFfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0YXJlYUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2FwLXRleHRhcmVhJyxcbiAgICBzdHlsZVVybHM6IFsnLi90ZXh0YXJlYS5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBTeW1ib2xDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBBUF9URVhUQVJFQV9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRleHRhcmVhQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRhcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICByZWFkb25seSBzeW1ib2xSZWdpc3RyeTogU3ltYm9sUmVnaXN0cnkgPSBpbmplY3QoU3ltYm9sUmVnaXN0cnkpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihTeW1ib2xDb21wb25lbnQpIHN5bWJvbHMhOiBRdWVyeUxpc3Q8U3ltYm9sQ29tcG9uZW50PjtcblxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbGxlZEJ5ITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYXJpYURlc2NyaWJlZEJ5ITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRleHRhcmVhSWQ/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoe1xuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgIG5hbWUhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgcm93czogbnVtYmVyID0gMztcblxuICAgIEBJbnB1dCgpIGNvbHM6IG51bWJlciA9IDIwO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9yZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgcmVzaXplOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzeW1ib2xQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XG5cbiAgICBwcml2YXRlIF9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuITogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkO1xuXG4gICAgaG9zdERhdGFUZXN0OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHZhbHVlITogc3RyaW5nIHwgbnVsbDtcblxuICAgIG9uVG91Y2hlZCE6ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWwgJiYgIXRoaXMudGV4dGFyZWFJZCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBoYXZlIHRvIHByb3ZpZGUgYW4gdGV4dGFyZWEgaWQgaWQgaWYgeW91IHdhbnQgdG8gdXNlIGEgbGFiZWwuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0RGF0YVRlc3Quc2V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXN0JykpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtdGVzdCcpO1xuICAgICAgICB0aGlzLnN5bWJvbFJlZ2lzdHJ5LnJlZ2lzdGVyU3ltYm9scyhbYXBBbGVydENpcmNsZSwgYXBDaGVja0NpcmNsZV0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sYWJlbCAmJiAhdGhpcy50ZXh0YXJlYUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignWW91IGhhdmUgdG8gcHJvdmlkZSBhbiB0ZXh0YXJlYSBpZCBpZiB5b3Ugd2FudCB0byB1c2UgYSBsYWJlbC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvc3REYXRhVGVzdC5zZXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlc3QnKSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gU29tZXRpbWVzIGF0dHJpYnV0ZXMgbGlrZSB0aGUgaWQsIG9yIHRoZSBkYXRhLXRlc3QgYXJlIGR5bmFtaWMgYW5kIGNhbiBjaGFuZ2UgYmV0d2VlbiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBJbiBvcmRlciB0byBoYXZlIHRoZSBsYXN0IGF0dHJpYnV0ZXMgdmFsdWUgd2UgY2hlY2sgaWYgaXQgY2hhbmdlcywgYW5kIGlmIGl0IGRvZXMsIHdlIHJ1biBhIG1hcmsgZm9yIGNoZWNrIHRvIHVwZGF0ZSB0aGUgdmlldy5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvc3REYXRhVGVzdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgICAgIGlmIChob3N0RGF0YVRlc3QgJiYgdGhpcy5ob3N0RGF0YVRlc3QoKSAhPT0gaG9zdERhdGFUZXN0KSB7XG4gICAgICAgICAgICB0aGlzLmhvc3REYXRhVGVzdC5zZXQoaG9zdERhdGFUZXN0KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZSh7IHZhbHVlIH06IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGNvbnN0IGlzTm90VmFsaWQgPSAhdGhpcy52YWx1ZSAmJiB0aGlzLnJlcXVpcmVkO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNOb3RWYWxpZCAmJiB7XG4gICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4gPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG59XG4iLCI8bGFiZWxcbiAgICAqbmdJZj1cImxhYmVsXCJcbiAgICBbZm9yXT1cInRleHRhcmVhSWRcIj5cbiAgICA8c3Bhbj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAge3sgZGVzY3JpcHRpb24gfX1cbiAgICA8L3NwYW4+XG48L2xhYmVsPlxuXG48dGV4dGFyZWFcbiAgICBbY2xhc3Mud2l0aC1lcnJvcl09XCJlcnJvck1lc3NhZ2VcIlxuICAgIFtjbGFzcy53aXRoLXN1Y2Nlc3NdPVwic3VjY2Vzc01lc3NhZ2VcIlxuICAgIFtjbGFzcy53aXRoLXJlc2l6ZV09XCJyZXNpemVcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2F0dHIuZGF0YS10ZXN0XT1cImhvc3REYXRhVGVzdCgpID8gaG9zdERhdGFUZXN0KCkgOiBuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtpZF09XCJ0ZXh0YXJlYUlkXCJcbiAgICBbY29sc109XCJjb2xzXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnkgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnkgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZD8udG9TdHJpbmcoKVwiXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgpXCI+PC90ZXh0YXJlYT5cbjxkaXZcbiAgICAqbmdJZj1cImVycm9yTWVzc2FnZVwiXG4gICAgY2xhc3M9XCJmb3JtLW1lc3NhZ2UgZXJyb3JcIj5cbiAgICA8YXAtc3ltYm9sXG4gICAgICAgIHN5bWJvbElkPVwiYWxlcnQtY2lyY2xlXCJcbiAgICAgICAgc2l6ZT1cIm1pY3JvXCIgLz5cbiAgICA8c3Bhbj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdJZj1cInN1Y2Nlc3NNZXNzYWdlXCJcbiAgICBjbGFzcz1cImZvcm0tbWVzc2FnZSBzdWNjZXNzXCI+XG4gICAgPGFwLXN5bWJvbFxuICAgICAgICBzeW1ib2xJZD1cImNoZWNrLWNpcmNsZVwiXG4gICAgICAgIHNpemU9XCJtaWNyb1wiIC8+XG4gICAgPHNwYW4+XG4gICAgICAgIHt7IHN1Y2Nlc3NNZXNzYWdlIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=