@seniorsistemas/angular-components 18.1.0 → 18.1.2

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.
Files changed (21) hide show
  1. package/checkbox/lib/checkbox/checkbox.component.d.ts +13 -3
  2. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +21 -12
  3. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +2 -1
  4. package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +4 -4
  5. package/esm2022/file-upload/lib/file-upload/file-upload.module.mjs +13 -30
  6. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +2 -34
  7. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +1 -1
  8. package/esm2022/select/lib/select/select.component.mjs +2 -2
  9. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +20 -11
  10. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  11. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -0
  12. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  13. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +7 -24
  14. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs.map +1 -1
  15. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +1 -33
  16. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  17. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  18. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  19. package/file-upload/lib/file-upload/file-upload.module.d.ts +1 -1
  20. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +0 -15
  21. package/package.json +7 -7
@@ -3,17 +3,27 @@ import * as i0 from "@angular/core";
3
3
  export declare class CheckboxComponent implements ControlValueAccessor {
4
4
  disabled: import("@angular/core").ModelSignal<boolean>;
5
5
  checked: import("@angular/core").ModelSignal<boolean>;
6
- indeterminate: import("@angular/core").ModelSignal<boolean>;
6
+ indeterminate: import("@angular/core").InputSignal<boolean>;
7
7
  label: import("@angular/core").InputSignal<string>;
8
+ /**
9
+ * Event emitted when the checkbox value changes through user interaction.
10
+ */
11
+ readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
8
12
  private _onChange;
9
13
  private _onTouched;
14
+ private _hasUserInteracted;
15
+ /**
16
+ * Checks if the checkbox should display the indeterminate state.
17
+ * Computed signal that only recalculates when dependencies change.
18
+ */
19
+ readonly isIndeterminate: import("@angular/core").Signal<boolean>;
10
20
  toggle(): void;
11
- emit(value: boolean): void;
21
+ private emit;
12
22
  writeValue(value: any): void;
13
23
  registerOnChange(onChange: (value: boolean) => void): void;
14
24
  registerOnTouched(onTouched: () => void): void;
15
25
  setDisabledState(disabled: boolean): void;
16
26
  onBlur(): void;
17
27
  static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
18
- static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "s-checkbox", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "checked": "checkedChange"; "indeterminate": "indeterminateChange"; }, never, never, true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "s-checkbox", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
19
29
  }
@@ -1,23 +1,33 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, forwardRef, input, model } from '@angular/core';
2
+ import { Component, computed, forwardRef, input, model, output, signal } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
6
  export class CheckboxComponent {
7
7
  disabled = model(false);
8
8
  checked = model(false);
9
- indeterminate = model(false);
9
+ indeterminate = input(false);
10
10
  label = input('');
11
+ /**
12
+ * Event emitted when the checkbox value changes through user interaction.
13
+ */
14
+ checkedChange = output();
11
15
  _onChange = () => { };
12
16
  _onTouched = () => { };
17
+ _hasUserInteracted = signal(false);
18
+ /**
19
+ * Checks if the checkbox should display the indeterminate state.
20
+ * Computed signal that only recalculates when dependencies change.
21
+ */
22
+ isIndeterminate = computed(() => this.indeterminate() && !this._hasUserInteracted());
13
23
  toggle() {
14
24
  if (this.disabled()) {
15
25
  return;
16
26
  }
17
- if (this.indeterminate()) {
18
- this.indeterminate.set(false);
19
- this.checked.set(false);
20
- this.emit(false);
27
+ if (this.indeterminate() && !this._hasUserInteracted()) {
28
+ this._hasUserInteracted.set(true);
29
+ this.checked.set(true);
30
+ this.emit(true);
21
31
  }
22
32
  else {
23
33
  const newValue = !this.checked();
@@ -27,8 +37,7 @@ export class CheckboxComponent {
27
37
  }
28
38
  emit(value) {
29
39
  this._onChange(value);
30
- this.checked.set(value);
31
- this.indeterminate.set(value);
40
+ this.checkedChange.emit(value);
32
41
  }
33
42
  writeValue(value) {
34
43
  this.checked.set(!!value);
@@ -46,13 +55,13 @@ export class CheckboxComponent {
46
55
  this._onTouched();
47
56
  }
48
57
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange", indeterminate: "indeterminateChange" }, providers: [
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange", checkedChange: "checkedChange" }, providers: [
50
59
  {
51
60
  provide: NG_VALUE_ACCESSOR,
52
61
  useExisting: forwardRef(() => CheckboxComponent),
53
62
  multi: true,
54
63
  },
55
- ], ngImport: i0, template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center rounded border border-grayscale-30 transition-all duration-200 hover:border-grayscale-50\"\n [ngClass]=\"{\n 'bg-primary hover:bg-tarawera-500': checked() || indeterminate(),\n 'bg-grayscale-0': !checked() && !indeterminate(),\n 'border-primary hover:border-tarawera-500': checked() || indeterminate(),\n 'opacity-50': disabled(),\n }\"\n >\n @if (indeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90\"\n >\n {{ label() }}\n </span>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
64
+ ], ngImport: i0, template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center rounded border border-grayscale-30 transition-all duration-200 hover:border-grayscale-50\"\n [ngClass]=\"{\n 'bg-primary hover:bg-tarawera-500': checked() || isIndeterminate(),\n 'bg-grayscale-0': !checked() && !isIndeterminate(),\n 'border-primary hover:border-tarawera-500': checked() || isIndeterminate(),\n 'opacity-50': disabled(),\n }\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90\"\n >\n {{ label() }}\n </span>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
56
65
  }
57
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, decorators: [{
58
67
  type: Component,
@@ -62,6 +71,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
62
71
  useExisting: forwardRef(() => CheckboxComponent),
63
72
  multi: true,
64
73
  },
65
- ], template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center rounded border border-grayscale-30 transition-all duration-200 hover:border-grayscale-50\"\n [ngClass]=\"{\n 'bg-primary hover:bg-tarawera-500': checked() || indeterminate(),\n 'bg-grayscale-0': !checked() && !indeterminate(),\n 'border-primary hover:border-tarawera-500': checked() || indeterminate(),\n 'opacity-50': disabled(),\n }\"\n >\n @if (indeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90\"\n >\n {{ label() }}\n </span>\n</div>\n" }]
74
+ ], template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center rounded border border-grayscale-30 transition-all duration-200 hover:border-grayscale-50\"\n [ngClass]=\"{\n 'bg-primary hover:bg-tarawera-500': checked() || isIndeterminate(),\n 'bg-grayscale-0': !checked() && !isIndeterminate(),\n 'border-primary hover:border-tarawera-500': checked() || isIndeterminate(),\n 'opacity-50': disabled(),\n }\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90\"\n >\n {{ label() }}\n </span>\n</div>\n" }]
66
75
  }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFlekUsTUFBTSxPQUFPLGlCQUFpQjtJQUNyQixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXpCLFNBQVMsR0FBNkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsR0FBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEMsTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSSxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFrQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBcUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7d0dBakRVLGlCQUFpQjs0RkFBakIsaUJBQWlCLHFyQkFUakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDZkgsaXdEQXFEQSwyQ0Q3Q1ksWUFBWTs7NEZBVVgsaUJBQWlCO2tCQWI3QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsYUFDWjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGlucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3MtY2hlY2tib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuICBwdWJsaWMgY2hlY2tlZCA9IG1vZGVsKGZhbHNlKTtcbiAgcHVibGljIGluZGV0ZXJtaW5hdGUgPSBtb2RlbChmYWxzZSk7XG4gIHB1YmxpYyBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKCkpIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jaGVja2VkLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVtaXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9ICF0aGlzLmNoZWNrZWQoKTtcbiAgICAgIHRoaXMuY2hlY2tlZC5zZXQobmV3VmFsdWUpO1xuICAgICAgdGhpcy5lbWl0KG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLmNoZWNrZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrZWQuc2V0KCEhdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGdhcC0zXCJcbiAgICBbY2xhc3MuY3Vyc29yLW5vdC1hbGxvd2VkXT1cImRpc2FibGVkKClcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaW5kZXRlcm1pbmF0ZSgpID8gJ21peGVkJyA6IGNoZWNrZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZSgpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6Ym9yZGVyLWdyYXlzY2FsZS01MFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdiZy1wcmltYXJ5IGhvdmVyOmJnLXRhcmF3ZXJhLTUwMCc6IGNoZWNrZWQoKSB8fCBpbmRldGVybWluYXRlKCksXG4gICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAnOiAhY2hlY2tlZCgpICYmICFpbmRldGVybWluYXRlKCksXG4gICAgICAgICAgICAnYm9yZGVyLXByaW1hcnkgaG92ZXI6Ym9yZGVyLXRhcmF3ZXJhLTUwMCc6IGNoZWNrZWQoKSB8fCBpbmRldGVybWluYXRlKCksXG4gICAgICAgICAgICAnb3BhY2l0eS01MCc6IGRpc2FibGVkKCksXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgQGlmIChpbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMyB3LTMgdGV4dC1ncmF5c2NhbGUtMFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTJoMTJcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChjaGVja2VkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13aGl0ZSBoLTMgdy0zXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC41IDEyLjc1bDUuNSA1LjUgOS41LTkuNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8c3BhblxuICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXlzY2FsZS05MFwiXG4gICAgPlxuICAgICAgICB7eyBsYWJlbCgpIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFlekUsTUFBTSxPQUFPLGlCQUFpQjtJQUNyQixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRWpDOztPQUVHO0lBQ2EsYUFBYSxHQUFHLE1BQU0sRUFBVyxDQUFDO0lBRTFDLFNBQVMsR0FBNkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsR0FBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDOzs7T0FHRztJQUNhLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQzlDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUNuRCxDQUFDO0lBRUssTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLElBQUksQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBa0M7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFNBQXFCO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO3dHQTlEVSxpQkFBaUI7NEZBQWpCLGlCQUFpQiwrcUJBVGpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ2ZILDJ3REFxREEsMkNEN0NZLFlBQVk7OzRGQVVYLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1o7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZm9yd2FyZFJlZiwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLWNoZWNrYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcbiAgcHVibGljIGNoZWNrZWQgPSBtb2RlbChmYWxzZSk7XG4gIHB1YmxpYyBpbmRldGVybWluYXRlID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNoZWNrYm94IHZhbHVlIGNoYW5nZXMgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNoZWNrZWRDaGFuZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgX2hhc1VzZXJJbnRlcmFjdGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjaGVja2JveCBzaG91bGQgZGlzcGxheSB0aGUgaW5kZXRlcm1pbmF0ZSBzdGF0ZS5cbiAgICogQ29tcHV0ZWQgc2lnbmFsIHRoYXQgb25seSByZWNhbGN1bGF0ZXMgd2hlbiBkZXBlbmRlbmNpZXMgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzSW5kZXRlcm1pbmF0ZSA9IGNvbXB1dGVkKCgpID0+IFxuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSgpICYmICF0aGlzLl9oYXNVc2VySW50ZXJhY3RlZCgpXG4gICk7XG5cbiAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSgpICYmICF0aGlzLl9oYXNVc2VySW50ZXJhY3RlZCgpKSB7XG4gICAgICB0aGlzLl9oYXNVc2VySW50ZXJhY3RlZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmNoZWNrZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lbWl0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9ICF0aGlzLmNoZWNrZWQoKTtcbiAgICAgIHRoaXMuY2hlY2tlZC5zZXQobmV3VmFsdWUpO1xuICAgICAgdGhpcy5lbWl0KG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tlZC5zZXQoISF2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGRpc2FibGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgZ2FwLTNcIlxuICAgIFtjbGFzcy5jdXJzb3Itbm90LWFsbG93ZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICByb2xlPVwiY2hlY2tib3hcIlxuICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc0luZGV0ZXJtaW5hdGUoKSA/ICdtaXhlZCcgOiBjaGVja2VkKClcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGUoKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5c2NhbGUtMzAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOmJvcmRlci1ncmF5c2NhbGUtNTBcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctcHJpbWFyeSBob3ZlcjpiZy10YXJhd2VyYS01MDAnOiBjaGVja2VkKCkgfHwgaXNJbmRldGVybWluYXRlKCksXG4gICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAnOiAhY2hlY2tlZCgpICYmICFpc0luZGV0ZXJtaW5hdGUoKSxcbiAgICAgICAgICAgICdib3JkZXItcHJpbWFyeSBob3Zlcjpib3JkZXItdGFyYXdlcmEtNTAwJzogY2hlY2tlZCgpIHx8IGlzSW5kZXRlcm1pbmF0ZSgpLFxuICAgICAgICAgICAgJ29wYWNpdHktNTAnOiBkaXNhYmxlZCgpLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIEBpZiAoaXNJbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMyB3LTMgdGV4dC1ncmF5c2NhbGUtMFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTJoMTJcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChjaGVja2VkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13aGl0ZSBoLTMgdy0zXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC41IDEyLjc1bDUuNSA1LjUgOS41LTkuNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8c3BhblxuICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXlzY2FsZS05MFwiXG4gICAgPlxuICAgICAgICB7eyBsYWJlbCgpIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=