valtech-components 2.0.565 → 2.0.566

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.
@@ -1,5 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
2
+ import { Component, inject, Input } from '@angular/core';
3
+ import { PresetService } from '../../../services/presets';
3
4
  import { BoxComponent } from '../../atoms/box/box.component';
4
5
  import { IconComponent } from '../../atoms/icon/icon.component';
5
6
  import { TextComponent } from '../../atoms/text/text.component';
@@ -8,28 +9,67 @@ import * as i0 from "@angular/core";
8
9
  * val-alert-box
9
10
  *
10
11
  * Displays an alert box with an icon and text, using a styled box container.
12
+ * Supports presets for reusable configurations.
11
13
  *
12
- * @example
14
+ * @example With preset (recommended):
15
+ * <val-alert-box preset="warning" [props]="{ text: 'Advertencia!' }"></val-alert-box>
16
+ *
17
+ * @example Static (backwards compatible):
13
18
  * <val-alert-box [props]="{ box: {...}, icon: {...}, text: { content: 'Alerta' } }"></val-alert-box>
14
19
  *
15
- * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box
20
+ * @input preset: string - Name of preset to apply (e.g., 'info', 'success', 'warning', 'error')
21
+ * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box (overrides preset values)
16
22
  */
17
23
  export class AlertBoxComponent {
24
+ constructor() {
25
+ this.presets = inject(PresetService);
26
+ /**
27
+ * Alert box configuration object. Values here override preset values.
28
+ * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.
29
+ */
30
+ this.props = {};
31
+ /**
32
+ * Resolved props after merging preset + explicit props.
33
+ */
34
+ this.resolvedProps = {};
35
+ }
18
36
  /** Whether this is using the legacy props pattern */
19
37
  get isLegacyProps() {
20
- return 'text' in this.props && typeof this.props.text === 'object';
38
+ return 'text' in this.resolvedProps && typeof this.resolvedProps.text === 'object';
21
39
  }
22
40
  /** Get text props for legacy pattern */
23
41
  getLegacyTextProps() {
24
- return this.props.text;
42
+ return this.resolvedProps.text;
25
43
  }
26
44
  ngOnInit() {
45
+ this.resolveProps();
27
46
  if (!this.isLegacyProps) {
28
47
  this.initializeTextProps();
29
48
  }
30
49
  }
50
+ ngOnChanges(changes) {
51
+ if (changes['preset'] || changes['props']) {
52
+ this.resolveProps();
53
+ if (!this.isLegacyProps) {
54
+ this.initializeTextProps();
55
+ }
56
+ }
57
+ }
58
+ /**
59
+ * Merge preset configuration with explicit props.
60
+ * Explicit props take precedence over preset values.
61
+ */
62
+ resolveProps() {
63
+ const presetProps = this.preset
64
+ ? this.presets.get('alertBox', this.preset)
65
+ : {};
66
+ this.resolvedProps = {
67
+ ...presetProps,
68
+ ...this.props,
69
+ };
70
+ }
31
71
  initializeTextProps() {
32
- const reactiveProps = this.props;
72
+ const reactiveProps = this.resolvedProps;
33
73
  // Base text properties with styling
34
74
  this.computedTextProps = {
35
75
  size: reactiveProps.textStyle?.size || 'medium',
@@ -42,10 +82,10 @@ export class AlertBoxComponent {
42
82
  }
43
83
  }
44
84
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { props: "props" }, ngImport: i0, template: `
46
- <val-box [props]="props.box">
85
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: `
86
+ <val-box [props]="resolvedProps.box">
47
87
  <div class="content-container" body>
48
- <val-icon [props]="props.icon"></val-icon>
88
+ <val-icon [props]="resolvedProps.icon"></val-icon>
49
89
  <!-- Support both legacy and reactive patterns -->
50
90
  @if (isLegacyProps) {
51
91
  <val-text class="text" [props]="getLegacyTextProps()" />
@@ -59,9 +99,9 @@ export class AlertBoxComponent {
59
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertBoxComponent, decorators: [{
60
100
  type: Component,
61
101
  args: [{ selector: 'val-alert-box', standalone: true, imports: [CommonModule, BoxComponent, IconComponent, TextComponent], template: `
62
- <val-box [props]="props.box">
102
+ <val-box [props]="resolvedProps.box">
63
103
  <div class="content-container" body>
64
- <val-icon [props]="props.icon"></val-icon>
104
+ <val-icon [props]="resolvedProps.icon"></val-icon>
65
105
  <!-- Support both legacy and reactive patterns -->
66
106
  @if (isLegacyProps) {
67
107
  <val-text class="text" [props]="getLegacyTextProps()" />
@@ -71,7 +111,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
71
111
  </div>
72
112
  </val-box>
73
113
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.text{margin-left:.25rem}.content-container{display:flex;align-items:flex-start}\n"] }]
74
- }], propDecorators: { props: [{
114
+ }], propDecorators: { preset: [{
115
+ type: Input
116
+ }], props: [{
75
117
  type: Input
76
118
  }] } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvYWxlcnQtYm94L2FsZXJ0LWJveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQXNCaEU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQVc1QixxREFBcUQ7SUFDckQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFRLElBQUksQ0FBQyxLQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUM5RSxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLGtCQUFrQjtRQUNoQixPQUFRLElBQUksQ0FBQyxLQUEwQixDQUFDLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQWlDLENBQUM7UUFFN0Qsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksUUFBUTtZQUMvQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLO1lBQ3JDLElBQUksRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxLQUFLO1NBQzdDLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQzsrR0F6Q1UsaUJBQWlCO21HQUFqQixpQkFBaUIscUdBekJsQjs7Ozs7Ozs7Ozs7O0dBWVQsK3BGQWJTLFlBQVksK0JBQUUsWUFBWSw2RkFBRSxhQUFhLHdFQUFFLGFBQWE7OzRGQTBCdkQsaUJBQWlCO2tCQTdCN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLFlBQ3pEOzs7Ozs7Ozs7Ozs7R0FZVDs4QkFtQkQsS0FBSztzQkFESixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYm94L2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnRCb3hNZXRhZGF0YSwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1hbGVydC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCb3hDb21wb25lbnQsIEljb25Db21wb25lbnQsIFRleHRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx2YWwtYm94IFtwcm9wc109XCJwcm9wcy5ib3hcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiIGJvZHk+XG4gICAgICAgIDx2YWwtaWNvbiBbcHJvcHNdPVwicHJvcHMuaWNvblwiPjwvdmFsLWljb24+XG4gICAgICAgIDwhLS0gU3VwcG9ydCBib3RoIGxlZ2FjeSBhbmQgcmVhY3RpdmUgcGF0dGVybnMgLS0+XG4gICAgICAgIEBpZiAoaXNMZWdhY3lQcm9wcykge1xuICAgICAgICAgIDx2YWwtdGV4dCBjbGFzcz1cInRleHRcIiBbcHJvcHNdPVwiZ2V0TGVnYWN5VGV4dFByb3BzKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8dmFsLXRleHQgY2xhc3M9XCJ0ZXh0XCIgW3Byb3BzXT1cImNvbXB1dGVkVGV4dFByb3BzXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC92YWwtYm94PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hbGVydC1ib3guY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1hbGVydC1ib3hcbiAqXG4gKiBEaXNwbGF5cyBhbiBhbGVydCBib3ggd2l0aCBhbiBpY29uIGFuZCB0ZXh0LCB1c2luZyBhIHN0eWxlZCBib3ggY29udGFpbmVyLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLWFsZXJ0LWJveCBbcHJvcHNdPVwieyBib3g6IHsuLi59LCBpY29uOiB7Li4ufSwgdGV4dDogeyBjb250ZW50OiAnQWxlcnRhJyB9IH1cIj48L3ZhbC1hbGVydC1ib3g+XG4gKlxuICogQGlucHV0IHByb3BzOiBBbGVydEJveE1ldGFkYXRhIHwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFsZXJ0IGJveFxuICovXG5leHBvcnQgY2xhc3MgQWxlcnRCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogQWxlcnQgYm94IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBTdXBwb3J0cyBib3RoIGxlZ2FjeSBBbGVydEJveE1ldGFkYXRhIGFuZCBSZWFjdGl2ZUFsZXJ0Qm94TWV0YWRhdGEgcGF0dGVybnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogQWxlcnRCb3hNZXRhZGF0YSB8IFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YTtcblxuICAvKiogQ29tcHV0ZWQgdGV4dCBwcm9wZXJ0aWVzIGZvciByZWFjdGl2ZSBwYXR0ZXJuICovXG4gIGNvbXB1dGVkVGV4dFByb3BzOiBhbnk7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyB1c2luZyB0aGUgbGVnYWN5IHByb3BzIHBhdHRlcm4gKi9cbiAgZ2V0IGlzTGVnYWN5UHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICd0ZXh0JyBpbiB0aGlzLnByb3BzICYmIHR5cGVvZiAodGhpcy5wcm9wcyBhcyBhbnkpLnRleHQgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgLyoqIEdldCB0ZXh0IHByb3BzIGZvciBsZWdhY3kgcGF0dGVybiAqL1xuICBnZXRMZWdhY3lUZXh0UHJvcHMoKTogYW55IHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMgYXMgQWxlcnRCb3hNZXRhZGF0YSkudGV4dDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5pc0xlZ2FjeVByb3BzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0UHJvcHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUZXh0UHJvcHMoKSB7XG4gICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IHRoaXMucHJvcHMgYXMgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhO1xuXG4gICAgLy8gQmFzZSB0ZXh0IHByb3BlcnRpZXMgd2l0aCBzdHlsaW5nXG4gICAgdGhpcy5jb21wdXRlZFRleHRQcm9wcyA9IHtcbiAgICAgIHNpemU6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5zaXplIHx8ICdtZWRpdW0nLFxuICAgICAgY29sb3I6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5jb2xvcixcbiAgICAgIGJvbGQ6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5ib2xkIHx8IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY29udGVudCAtIHVzZSBzdGF0aWMgdGV4dCBvbmx5XG4gICAgaWYgKHJlYWN0aXZlUHJvcHMudGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbXB1dGVkVGV4dFByb3BzLmNvbnRlbnQgPSByZWFjdGl2ZVByb3BzLnRleHQ7XG4gICAgfVxuICB9XG59XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvYWxlcnQtYm94L2FsZXJ0LWJveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQXNCaEU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBbEM5QjtRQW1DVSxZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBV3hDOzs7V0FHRztRQUNNLFVBQUssR0FBeUQsRUFBRSxDQUFDO1FBRTFFOztXQUVHO1FBQ0gsa0JBQWEsR0FBZ0QsRUFBc0IsQ0FBQztLQTZEckY7SUF4REMscURBQXFEO0lBQ3JELElBQUksYUFBYTtRQUNmLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksT0FBUSxJQUFJLENBQUMsYUFBcUIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQzlGLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsa0JBQWtCO1FBQ2hCLE9BQVEsSUFBSSxDQUFDLGFBQWtDLENBQUMsSUFBSSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUEwRDtZQUNyRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxLQUFLO1NBQ2lDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBeUMsQ0FBQztRQUVyRSxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLElBQUksRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxRQUFRO1lBQy9DLEtBQUssRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLEtBQUs7WUFDckMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLEtBQUs7U0FDN0MsQ0FBQztRQUVGLHFDQUFxQztRQUNyQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDOytHQWpGVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw0SUE5QmxCOzs7Ozs7Ozs7Ozs7R0FZVCwrcEZBYlMsWUFBWSwrQkFBRSxZQUFZLDZGQUFFLGFBQWEsd0VBQUUsYUFBYTs7NEZBK0J2RCxpQkFBaUI7a0JBbEM3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsWUFDekQ7Ozs7Ozs7Ozs7OztHQVlUOzhCQTRCUSxNQUFNO3NCQUFkLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXRzJztcbmltcG9ydCB7IEJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2JveC9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IEFsZXJ0Qm94TWV0YWRhdGEsIFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYWxlcnQtYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQm94Q29tcG9uZW50LCBJY29uQ29tcG9uZW50LCBUZXh0Q29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLWJveCBbcHJvcHNdPVwicmVzb2x2ZWRQcm9wcy5ib3hcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiIGJvZHk+XG4gICAgICAgIDx2YWwtaWNvbiBbcHJvcHNdPVwicmVzb2x2ZWRQcm9wcy5pY29uXCI+PC92YWwtaWNvbj5cbiAgICAgICAgPCEtLSBTdXBwb3J0IGJvdGggbGVnYWN5IGFuZCByZWFjdGl2ZSBwYXR0ZXJucyAtLT5cbiAgICAgICAgQGlmIChpc0xlZ2FjeVByb3BzKSB7XG4gICAgICAgICAgPHZhbC10ZXh0IGNsYXNzPVwidGV4dFwiIFtwcm9wc109XCJnZXRMZWdhY3lUZXh0UHJvcHMoKVwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDx2YWwtdGV4dCBjbGFzcz1cInRleHRcIiBbcHJvcHNdPVwiY29tcHV0ZWRUZXh0UHJvcHNcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZhbC1ib3g+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2FsZXJ0LWJveC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWFsZXJ0LWJveFxuICpcbiAqIERpc3BsYXlzIGFuIGFsZXJ0IGJveCB3aXRoIGFuIGljb24gYW5kIHRleHQsIHVzaW5nIGEgc3R5bGVkIGJveCBjb250YWluZXIuXG4gKiBTdXBwb3J0cyBwcmVzZXRzIGZvciByZXVzYWJsZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHByZXNldCAocmVjb21tZW5kZWQpOlxuICogPHZhbC1hbGVydC1ib3ggcHJlc2V0PVwid2FybmluZ1wiIFtwcm9wc109XCJ7IHRleHQ6ICdBZHZlcnRlbmNpYSEnIH1cIj48L3ZhbC1hbGVydC1ib3g+XG4gKlxuICogQGV4YW1wbGUgU3RhdGljIChiYWNrd2FyZHMgY29tcGF0aWJsZSk6XG4gKiA8dmFsLWFsZXJ0LWJveCBbcHJvcHNdPVwieyBib3g6IHsuLi59LCBpY29uOiB7Li4ufSwgdGV4dDogeyBjb250ZW50OiAnQWxlcnRhJyB9IH1cIj48L3ZhbC1hbGVydC1ib3g+XG4gKlxuICogQGlucHV0IHByZXNldDogc3RyaW5nIC0gTmFtZSBvZiBwcmVzZXQgdG8gYXBwbHkgKGUuZy4sICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdlcnJvcicpXG4gKiBAaW5wdXQgcHJvcHM6IEFsZXJ0Qm94TWV0YWRhdGEgfCBSZWFjdGl2ZUFsZXJ0Qm94TWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgYWxlcnQgYm94IChvdmVycmlkZXMgcHJlc2V0IHZhbHVlcylcbiAqL1xuZXhwb3J0IGNsYXNzIEFsZXJ0Qm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBhbGVydCBjb25maWd1cmF0aW9uc1xuICAgKiAoY29sb3IsIGljb24sIGJveCBzdHlsZSkgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCBhdCBhcHAgbGV2ZWwuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDx2YWwtYWxlcnQtYm94IHByZXNldD1cIndhcm5pbmdcIiBbcHJvcHNdPVwieyB0ZXh0OiAnV2FybmluZyBtZXNzYWdlJyB9XCI+PC92YWwtYWxlcnQtYm94PlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGVydCBib3ggY29uZmlndXJhdGlvbiBvYmplY3QuIFZhbHVlcyBoZXJlIG92ZXJyaWRlIHByZXNldCB2YWx1ZXMuXG4gICAqIFN1cHBvcnRzIGJvdGggbGVnYWN5IEFsZXJ0Qm94TWV0YWRhdGEgYW5kIFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YSBwYXR0ZXJucy5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPEFsZXJ0Qm94TWV0YWRhdGEgfCBSZWFjdGl2ZUFsZXJ0Qm94TWV0YWRhdGE+ID0ge307XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIHByb3BzIGFmdGVyIG1lcmdpbmcgcHJlc2V0ICsgZXhwbGljaXQgcHJvcHMuXG4gICAqL1xuICByZXNvbHZlZFByb3BzOiBBbGVydEJveE1ldGFkYXRhIHwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhID0ge30gYXMgQWxlcnRCb3hNZXRhZGF0YTtcblxuICAvKiogQ29tcHV0ZWQgdGV4dCBwcm9wZXJ0aWVzIGZvciByZWFjdGl2ZSBwYXR0ZXJuICovXG4gIGNvbXB1dGVkVGV4dFByb3BzOiBhbnk7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyB1c2luZyB0aGUgbGVnYWN5IHByb3BzIHBhdHRlcm4gKi9cbiAgZ2V0IGlzTGVnYWN5UHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICd0ZXh0JyBpbiB0aGlzLnJlc29sdmVkUHJvcHMgJiYgdHlwZW9mICh0aGlzLnJlc29sdmVkUHJvcHMgYXMgYW55KS50ZXh0ID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIC8qKiBHZXQgdGV4dCBwcm9wcyBmb3IgbGVnYWN5IHBhdHRlcm4gKi9cbiAgZ2V0TGVnYWN5VGV4dFByb3BzKCk6IGFueSB7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkUHJvcHMgYXMgQWxlcnRCb3hNZXRhZGF0YSkudGV4dDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzb2x2ZVByb3BzKCk7XG4gICAgaWYgKCF0aGlzLmlzTGVnYWN5UHJvcHMpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHRQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sncHJlc2V0J10gfHwgY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgICAgIGlmICghdGhpcy5pc0xlZ2FjeVByb3BzKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHRQcm9wcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBwcmVzZXQgY29uZmlndXJhdGlvbiB3aXRoIGV4cGxpY2l0IHByb3BzLlxuICAgKiBFeHBsaWNpdCBwcm9wcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBwcmVzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc2V0UHJvcHMgPSB0aGlzLnByZXNldFxuICAgICAgPyAodGhpcy5wcmVzZXRzLmdldCgnYWxlcnRCb3gnLCB0aGlzLnByZXNldCkgYXMgUGFydGlhbDxBbGVydEJveE1ldGFkYXRhIHwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhPilcbiAgICAgIDoge307XG5cbiAgICB0aGlzLnJlc29sdmVkUHJvcHMgPSB7XG4gICAgICAuLi5wcmVzZXRQcm9wcyxcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgfSBhcyBBbGVydEJveE1ldGFkYXRhIHwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGV4dFByb3BzKCkge1xuICAgIGNvbnN0IHJlYWN0aXZlUHJvcHMgPSB0aGlzLnJlc29sdmVkUHJvcHMgYXMgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhO1xuXG4gICAgLy8gQmFzZSB0ZXh0IHByb3BlcnRpZXMgd2l0aCBzdHlsaW5nXG4gICAgdGhpcy5jb21wdXRlZFRleHRQcm9wcyA9IHtcbiAgICAgIHNpemU6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5zaXplIHx8ICdtZWRpdW0nLFxuICAgICAgY29sb3I6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5jb2xvcixcbiAgICAgIGJvbGQ6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5ib2xkIHx8IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY29udGVudCAtIHVzZSBzdGF0aWMgdGV4dCBvbmx5XG4gICAgaWYgKHJlYWN0aXZlUHJvcHMudGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbXB1dGVkVGV4dFByb3BzLmNvbnRlbnQgPSByZWFjdGl2ZVByb3BzLnRleHQ7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
3
  import { IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonIcon, } from '@ionic/angular/standalone';
4
+ import { PresetService } from '../../../services/presets';
4
5
  import { AvatarComponent } from '../../atoms/avatar/avatar.component';
5
6
  import { ButtonComponent } from '../../atoms/button/button.component';
6
7
  import { ImageComponent } from '../../atoms/image/image.component';
@@ -13,15 +14,37 @@ import * as i1 from "@angular/common";
13
14
  * val-card
14
15
  *
15
16
  * A flexible card component supporting images, titles, content, actions, and custom sections.
17
+ * Supports presets for reusable configurations.
16
18
  *
17
- * @example
18
- * <val-card [props]="{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }" (onClick)="handler($event)"></val-card>
19
+ * @example With preset (recommended):
20
+ * <val-card preset="feature" [props]="{ title: 'Card', image: 'url', content: '...' }" (onClick)="handler($event)"></val-card>
19
21
  *
20
- * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)
22
+ * @example Static (backwards compatible):
23
+ * <val-card [props]="{ type: 'native', title: 'Card', image: 'url', content: '...' }" (onClick)="handler($event)"></val-card>
24
+ *
25
+ * @input preset: string - Name of preset to apply (e.g., 'feature', 'compact')
26
+ * @input props: CardMetadata - Configuration for the card (overrides preset values)
21
27
  * @output onClick - Emits a CardClickEvent when the card or an action is clicked
22
28
  */
23
29
  export class CardComponent {
24
30
  constructor() {
31
+ this.presets = inject(PresetService);
32
+ /**
33
+ * Card configuration object. Values here override preset values.
34
+ * @type {CardMetadata}
35
+ * @property type - The card type (see CardType).
36
+ * @property title - The card title.
37
+ * @property image - The card image URL.
38
+ * @property content - The card content.
39
+ * @property actions - Array of action buttons (optional).
40
+ * @property sections - Custom card sections (optional).
41
+ * @property overtitle - Subtitle or overtitle (optional).
42
+ */
43
+ this.props = {};
44
+ /**
45
+ * Resolved props after merging preset + explicit props.
46
+ */
47
+ this.resolvedProps = {};
25
48
  /**
26
49
  * Event emitted when the card or an action is clicked.
27
50
  */
@@ -30,64 +53,82 @@ export class CardComponent {
30
53
  this.actionTypes = ToolbarActionType;
31
54
  this.sections = CardSection;
32
55
  }
33
- ngOnInit() { }
56
+ ngOnInit() {
57
+ this.resolveProps();
58
+ }
59
+ ngOnChanges(changes) {
60
+ if (changes['preset'] || changes['props']) {
61
+ this.resolveProps();
62
+ }
63
+ }
64
+ /**
65
+ * Merge preset configuration with explicit props.
66
+ * Explicit props take precedence over preset values.
67
+ */
68
+ resolveProps() {
69
+ const presetProps = this.preset ? this.presets.get('card', this.preset) : {};
70
+ this.resolvedProps = {
71
+ ...presetProps,
72
+ ...this.props,
73
+ };
74
+ }
34
75
  clickHandler(section, token) {
35
76
  this.onClick.emit({ section, token });
36
77
  }
37
78
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardComponent, isStandalone: true, selector: "val-card", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
39
- <ion-card *ngIf="props.type === types.native">
40
- <img alt="image" [src]="props.image" />
41
- <ion-card-header *ngIf="props.title || props.overtitle">
42
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
43
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardComponent, isStandalone: true, selector: "val-card", inputs: { preset: "preset", props: "props" }, outputs: { onClick: "onClick" }, usesOnChanges: true, ngImport: i0, template: `
80
+ <ion-card *ngIf="resolvedProps.type === types.native">
81
+ <img alt="image" [src]="resolvedProps.image" />
82
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
83
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
84
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
44
85
  </ion-card-header>
45
86
 
46
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
87
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
47
88
 
48
89
  <val-button
49
- *ngFor="let b of props.footerActions"
90
+ *ngFor="let b of resolvedProps.footerActions"
50
91
  [props]="b"
51
92
  (onClick)="clickHandler(sections.footer, b.token)"
52
93
  ></val-button>
53
94
  </ion-card>
54
95
 
55
96
  <ion-card
56
- *ngIf="props.type === types.tappable"
57
- (click)="clickHandler(sections.content, props.token)"
97
+ *ngIf="resolvedProps.type === types.tappable"
98
+ (click)="clickHandler(sections.content, resolvedProps.token)"
58
99
  class="tapable"
59
100
  >
60
- <img alt="image" [src]="props.image" />
61
- <ion-card-header *ngIf="props.title || props.overtitle">
62
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
63
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
101
+ <img alt="image" [src]="resolvedProps.image" />
102
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
103
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
104
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
64
105
  </ion-card-header>
65
106
 
66
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
107
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
67
108
  </ion-card>
68
109
 
69
110
  <ion-card
70
- *ngIf="props.type === types.checker"
71
- (click)="clickHandler(sections.content, props.token)"
111
+ *ngIf="resolvedProps.type === types.checker"
112
+ (click)="clickHandler(sections.content, resolvedProps.token)"
72
113
  class="tapable"
73
114
  >
74
- <ion-card-header *ngIf="props.title || props.overtitle" class="checker">
115
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="checker">
75
116
  <div>
76
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
77
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
117
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
118
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
78
119
  </div>
79
120
  <div>
80
- <ion-checkbox [checked]="props.selected"></ion-checkbox>
121
+ <ion-checkbox [checked]="resolvedProps.selected"></ion-checkbox>
81
122
  </div>
82
123
  </ion-card-header>
83
124
 
84
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
125
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
85
126
  </ion-card>
86
127
 
87
- <ion-card *ngIf="props.type === types.complex" class="complex">
128
+ <ion-card *ngIf="resolvedProps.type === types.complex" class="complex">
88
129
  <ion-card-header class="complex-header">
89
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.leftActions.length > 0">
90
- <ng-container *ngFor="let action of props.leftActions">
130
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.leftActions?.length > 0">
131
+ <ng-container *ngFor="let action of resolvedProps.leftActions">
91
132
  <ion-button
92
133
  *ngIf="action.type === actionTypes.ICON"
93
134
  (click)="clickHandler(sections.headerLeft, action.token)"
@@ -111,13 +152,13 @@ export class CardComponent {
111
152
  >
112
153
  {{ action.description }}
113
154
  </ion-button>
114
- <div *ngIf="props.headerText">
115
- <val-text [props]="{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }" />
155
+ <div *ngIf="resolvedProps.headerText">
156
+ <val-text [props]="{ content: resolvedProps.headerText, color: 'dark', bold: true, size: 'medium' }" />
116
157
  </div>
117
158
  </ng-container>
118
159
  </ion-buttons>
119
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.rightActions.length > 0">
120
- <ng-container *ngFor="let action of props.rightActions">
160
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.rightActions?.length > 0">
161
+ <ng-container *ngFor="let action of resolvedProps.rightActions">
121
162
  <ion-button
122
163
  *ngIf="action.type === actionTypes.ICON"
123
164
  (click)="clickHandler(sections.headerRight, action.token)"
@@ -145,27 +186,27 @@ export class CardComponent {
145
186
  </ion-buttons>
146
187
  </ion-card-header>
147
188
 
148
- <div class="tapable" (click)="clickHandler(sections.content, props.token)">
149
- <ion-card-header *ngIf="props.title || props.overtitle" class="complex-header">
189
+ <div class="tapable" (click)="clickHandler(sections.content, resolvedProps.token)">
190
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="complex-header">
150
191
  <div>
151
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
152
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
192
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
193
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
153
194
  </div>
154
195
  </ion-card-header>
155
196
 
156
- <img alt="image" [src]="props.image" />
157
- <ion-card-content *ngIf="props.content" class="complex-content">{{ props.content }}</ion-card-content>
197
+ <img alt="image" [src]="resolvedProps.image" />
198
+ <ion-card-content *ngIf="resolvedProps.content" class="complex-content">{{ resolvedProps.content }}</ion-card-content>
158
199
  </div>
159
200
  <val-button
160
- *ngFor="let b of props.footerActions"
201
+ *ngFor="let b of resolvedProps.footerActions"
161
202
  [props]="b"
162
203
  (onClick)="clickHandler(sections.footer, b.token)"
163
204
  ></val-button>
164
205
  <ion-buttons
165
206
  style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
166
- *ngIf="props.footerComplexActions.length > 0"
207
+ *ngIf="resolvedProps.footerComplexActions?.length > 0"
167
208
  >
168
- <ng-container *ngFor="let action of props.footerComplexActions">
209
+ <ng-container *ngFor="let action of resolvedProps.footerComplexActions">
169
210
  <ion-button
170
211
  *ngIf="action.type === actionTypes.ICON"
171
212
  (click)="clickHandler(sections.footerExtra, action.token)"
@@ -213,58 +254,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
213
254
  IonButton,
214
255
  IonIcon,
215
256
  ], template: `
216
- <ion-card *ngIf="props.type === types.native">
217
- <img alt="image" [src]="props.image" />
218
- <ion-card-header *ngIf="props.title || props.overtitle">
219
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
220
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
257
+ <ion-card *ngIf="resolvedProps.type === types.native">
258
+ <img alt="image" [src]="resolvedProps.image" />
259
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
260
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
261
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
221
262
  </ion-card-header>
222
263
 
223
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
264
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
224
265
 
225
266
  <val-button
226
- *ngFor="let b of props.footerActions"
267
+ *ngFor="let b of resolvedProps.footerActions"
227
268
  [props]="b"
228
269
  (onClick)="clickHandler(sections.footer, b.token)"
229
270
  ></val-button>
230
271
  </ion-card>
231
272
 
232
273
  <ion-card
233
- *ngIf="props.type === types.tappable"
234
- (click)="clickHandler(sections.content, props.token)"
274
+ *ngIf="resolvedProps.type === types.tappable"
275
+ (click)="clickHandler(sections.content, resolvedProps.token)"
235
276
  class="tapable"
236
277
  >
237
- <img alt="image" [src]="props.image" />
238
- <ion-card-header *ngIf="props.title || props.overtitle">
239
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
240
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
278
+ <img alt="image" [src]="resolvedProps.image" />
279
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
280
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
281
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
241
282
  </ion-card-header>
242
283
 
243
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
284
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
244
285
  </ion-card>
245
286
 
246
287
  <ion-card
247
- *ngIf="props.type === types.checker"
248
- (click)="clickHandler(sections.content, props.token)"
288
+ *ngIf="resolvedProps.type === types.checker"
289
+ (click)="clickHandler(sections.content, resolvedProps.token)"
249
290
  class="tapable"
250
291
  >
251
- <ion-card-header *ngIf="props.title || props.overtitle" class="checker">
292
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="checker">
252
293
  <div>
253
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
254
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
294
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
295
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
255
296
  </div>
256
297
  <div>
257
- <ion-checkbox [checked]="props.selected"></ion-checkbox>
298
+ <ion-checkbox [checked]="resolvedProps.selected"></ion-checkbox>
258
299
  </div>
259
300
  </ion-card-header>
260
301
 
261
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
302
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
262
303
  </ion-card>
263
304
 
264
- <ion-card *ngIf="props.type === types.complex" class="complex">
305
+ <ion-card *ngIf="resolvedProps.type === types.complex" class="complex">
265
306
  <ion-card-header class="complex-header">
266
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.leftActions.length > 0">
267
- <ng-container *ngFor="let action of props.leftActions">
307
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.leftActions?.length > 0">
308
+ <ng-container *ngFor="let action of resolvedProps.leftActions">
268
309
  <ion-button
269
310
  *ngIf="action.type === actionTypes.ICON"
270
311
  (click)="clickHandler(sections.headerLeft, action.token)"
@@ -288,13 +329,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
288
329
  >
289
330
  {{ action.description }}
290
331
  </ion-button>
291
- <div *ngIf="props.headerText">
292
- <val-text [props]="{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }" />
332
+ <div *ngIf="resolvedProps.headerText">
333
+ <val-text [props]="{ content: resolvedProps.headerText, color: 'dark', bold: true, size: 'medium' }" />
293
334
  </div>
294
335
  </ng-container>
295
336
  </ion-buttons>
296
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.rightActions.length > 0">
297
- <ng-container *ngFor="let action of props.rightActions">
337
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.rightActions?.length > 0">
338
+ <ng-container *ngFor="let action of resolvedProps.rightActions">
298
339
  <ion-button
299
340
  *ngIf="action.type === actionTypes.ICON"
300
341
  (click)="clickHandler(sections.headerRight, action.token)"
@@ -322,27 +363,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
322
363
  </ion-buttons>
323
364
  </ion-card-header>
324
365
 
325
- <div class="tapable" (click)="clickHandler(sections.content, props.token)">
326
- <ion-card-header *ngIf="props.title || props.overtitle" class="complex-header">
366
+ <div class="tapable" (click)="clickHandler(sections.content, resolvedProps.token)">
367
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="complex-header">
327
368
  <div>
328
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
329
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
369
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
370
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
330
371
  </div>
331
372
  </ion-card-header>
332
373
 
333
- <img alt="image" [src]="props.image" />
334
- <ion-card-content *ngIf="props.content" class="complex-content">{{ props.content }}</ion-card-content>
374
+ <img alt="image" [src]="resolvedProps.image" />
375
+ <ion-card-content *ngIf="resolvedProps.content" class="complex-content">{{ resolvedProps.content }}</ion-card-content>
335
376
  </div>
336
377
  <val-button
337
- *ngFor="let b of props.footerActions"
378
+ *ngFor="let b of resolvedProps.footerActions"
338
379
  [props]="b"
339
380
  (onClick)="clickHandler(sections.footer, b.token)"
340
381
  ></val-button>
341
382
  <ion-buttons
342
383
  style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
343
- *ngIf="props.footerComplexActions.length > 0"
384
+ *ngIf="resolvedProps.footerComplexActions?.length > 0"
344
385
  >
345
- <ng-container *ngFor="let action of props.footerComplexActions">
386
+ <ng-container *ngFor="let action of resolvedProps.footerComplexActions">
346
387
  <ion-button
347
388
  *ngIf="action.type === actionTypes.ICON"
348
389
  (click)="clickHandler(sections.footerExtra, action.token)"
@@ -371,9 +412,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
371
412
  </ion-buttons>
372
413
  </ion-card>
373
414
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-card.tapable{transition:transform .3s ease,box-shadow .3s ease}ion-card.tapable:hover{transform:scale(1.01);box-shadow:.1875rem .625rem .5rem #1219541a}.tapable{cursor:pointer}.checker{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-header{padding:10px;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-content{padding-left:10px;padding-top:4px;padding-bottom:10px}.complex{border-radius:16px}img{border-radius:24px}\n"] }]
374
- }], ctorParameters: () => [], propDecorators: { props: [{
415
+ }], ctorParameters: () => [], propDecorators: { preset: [{
416
+ type: Input
417
+ }], props: [{
375
418
  type: Input
376
419
  }], onClick: [{
377
420
  type: Output
378
421
  }] } });
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhcmQvY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsT0FBTyxHQUNSLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQWdDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQXNMOUU7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBeUJ4QjtRQVZBOztXQUVHO1FBRUgsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRTdDLFVBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxpQkFBaUIsQ0FBQztRQUNoQyxhQUFRLEdBQUcsV0FBVyxDQUFDO0lBRVIsQ0FBQztJQUVoQixRQUFRLEtBQUksQ0FBQztJQUViLFlBQVksQ0FBQyxPQUFvQixFQUFFLEtBQWM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQS9CVSxhQUFhO21HQUFiLGFBQWEsaUlBNUtkOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThKVCxxa0dBN0tDLFlBQVksZ1FBQ1osZUFBZSwwR0FDZixlQUFlLGdHQUNmLGNBQWMseUVBQ2QsYUFBYSx3RUFDYixPQUFPLHlMQUNQLGNBQWMsK0VBQ2QsYUFBYSxzR0FDYixZQUFZLHNGQUNaLGVBQWUseUZBQ2YsV0FBVyxxTUFDWCxVQUFVLDhFQUNWLFNBQVMsb1BBQ1QsT0FBTzs7NEZBOEtFLGFBQWE7a0JBL0x6QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxPQUFPO3FCQUNSLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEpUO3dEQTJCRCxLQUFLO3NCQURKLEtBQUs7Z0JBT04sT0FBTztzQkFETixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ2FyZCxcbiAgSW9uQ2FyZENvbnRlbnQsXG4gIElvbkNhcmRIZWFkZXIsXG4gIElvbkNhcmRTdWJ0aXRsZSxcbiAgSW9uQ2FyZFRpdGxlLFxuICBJb25DaGVja2JveCxcbiAgSW9uSWNvbixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENhcmRDbGlja0V2ZW50LCBDYXJkTWV0YWRhdGEsIENhcmRTZWN0aW9uLCBDYXJkVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgICBUZXh0Q29tcG9uZW50LFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uQ2FyZEhlYWRlcixcbiAgICBJb25DYXJkVGl0bGUsXG4gICAgSW9uQ2FyZFN1YnRpdGxlLFxuICAgIElvbkNoZWNrYm94LFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkljb24sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1jYXJkICpuZ0lmPVwicHJvcHMudHlwZSA9PT0gdHlwZXMubmF0aXZlXCI+XG4gICAgICA8aW1nIGFsdD1cImltYWdlXCIgW3NyY109XCJwcm9wcy5pbWFnZVwiIC8+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyICpuZ0lmPVwicHJvcHMudGl0bGUgfHwgcHJvcHMub3ZlcnRpdGxlXCI+XG4gICAgICAgIDxpb24tY2FyZC10aXRsZSAqbmdJZj1cInByb3BzLnRpdGxlXCI+e3sgcHJvcHMudGl0bGUgfX08L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgKm5nSWY9XCJwcm9wcy5vdmVydGl0bGVcIj57eyBwcm9wcy5vdmVydGl0bGUgfX08L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG5cbiAgICAgIDxpb24tY2FyZC1jb250ZW50ICpuZ0lmPVwicHJvcHMuY29udGVudFwiPnt7IHByb3BzLmNvbnRlbnQgfX08L2lvbi1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBiIG9mIHByb3BzLmZvb3RlckFjdGlvbnNcIlxuICAgICAgICBbcHJvcHNdPVwiYlwiXG4gICAgICAgIChvbkNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5mb290ZXIsIGIudG9rZW4pXCJcbiAgICAgID48L3ZhbC1idXR0b24+XG4gICAgPC9pb24tY2FyZD5cblxuICAgIDxpb24tY2FyZFxuICAgICAgKm5nSWY9XCJwcm9wcy50eXBlID09PSB0eXBlcy50YXBwYWJsZVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmNvbnRlbnQsIHByb3BzLnRva2VuKVwiXG4gICAgICBjbGFzcz1cInRhcGFibGVcIlxuICAgID5cbiAgICAgIDxpbWcgYWx0PVwiaW1hZ2VcIiBbc3JjXT1cInByb3BzLmltYWdlXCIgLz5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXIgKm5nSWY9XCJwcm9wcy50aXRsZSB8fCBwcm9wcy5vdmVydGl0bGVcIj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlICpuZ0lmPVwicHJvcHMudGl0bGVcIj57eyBwcm9wcy50aXRsZSB9fTwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZSAqbmdJZj1cInByb3BzLm92ZXJ0aXRsZVwiPnt7IHByb3BzLm92ZXJ0aXRsZSB9fTwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cblxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJwcm9wcy5jb250ZW50XCI+e3sgcHJvcHMuY29udGVudCB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuXG4gICAgPGlvbi1jYXJkXG4gICAgICAqbmdJZj1cInByb3BzLnR5cGUgPT09IHR5cGVzLmNoZWNrZXJcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5jb250ZW50LCBwcm9wcy50b2tlbilcIlxuICAgICAgY2xhc3M9XCJ0YXBhYmxlXCJcbiAgICA+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyICpuZ0lmPVwicHJvcHMudGl0bGUgfHwgcHJvcHMub3ZlcnRpdGxlXCIgY2xhc3M9XCJjaGVja2VyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlICpuZ0lmPVwicHJvcHMub3ZlcnRpdGxlXCI+e3sgcHJvcHMub3ZlcnRpdGxlIH19PC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICA8aW9uLWNhcmQtdGl0bGUgKm5nSWY9XCJwcm9wcy50aXRsZVwiPnt7IHByb3BzLnRpdGxlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlvbi1jaGVja2JveCBbY2hlY2tlZF09XCJwcm9wcy5zZWxlY3RlZFwiPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICA8aW9uLWNhcmQtY29udGVudCAqbmdJZj1cInByb3BzLmNvbnRlbnRcIj57eyBwcm9wcy5jb250ZW50IH19PC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG5cbiAgICA8aW9uLWNhcmQgKm5nSWY9XCJwcm9wcy50eXBlID09PSB0eXBlcy5jb21wbGV4XCIgY2xhc3M9XCJjb21wbGV4XCI+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyIGNsYXNzPVwiY29tcGxleC1oZWFkZXJcIj5cbiAgICAgICAgPGlvbi1idXR0b25zIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiICpuZ0lmPVwicHJvcHMubGVmdEFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBwcm9wcy5sZWZ0QWN0aW9uc1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuSUNPTlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuaGVhZGVyTGVmdCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwiYWN0aW9uLmRlc2NyaXB0aW9uXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDx2YWwtYXZhdGFyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHg7IGN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLkFWQVRBUlwiXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGltYWdlOiBhY3Rpb24uZGVzY3JpcHRpb24sIGRlZmF1bHQ6ICcnIH1cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuaGVhZGVyTGVmdCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+PC92YWwtYXZhdGFyPlxuICAgICAgICAgICAgPHZhbC1pbWFnZVxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5JTUFHRVwiXG4gICAgICAgICAgICAgIFtwcm9wc109XCJhY3Rpb24uaW1hZ2VcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmhlYWRlckxlZnQsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgICAgPjwvdmFsLWltYWdlPlxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuQlVUVE9OXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJMZWZ0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcHMuaGVhZGVyVGV4dFwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInsgY29udGVudDogcHJvcHMuaGVhZGVyVGV4dCwgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgc2l6ZTogJ21lZGl1bScgfVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgICAgPGlvbi1idXR0b25zIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiICpuZ0lmPVwicHJvcHMucmlnaHRBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcHJvcHMucmlnaHRBY3Rpb25zXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5JQ09OXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJSaWdodCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwiYWN0aW9uLmRlc2NyaXB0aW9uXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDx2YWwtYXZhdGFyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHg7IGN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLkFWQVRBUlwiXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGltYWdlOiBhY3Rpb24uZGVzY3JpcHRpb24sIGRlZmF1bHQ6ICcnIH1cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuaGVhZGVyUmlnaHQsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgICAgPjwvdmFsLWF2YXRhcj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2VcbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuSU1BR0VcIlxuICAgICAgICAgICAgICBbcHJvcHNdPVwiYWN0aW9uLmltYWdlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJSaWdodCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+PC92YWwtaW1hZ2U+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5CVVRUT05cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmhlYWRlclJpZ2h0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhcGFibGVcIiAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmNvbnRlbnQsIHByb3BzLnRva2VuKVwiPlxuICAgICAgICA8aW9uLWNhcmQtaGVhZGVyICpuZ0lmPVwicHJvcHMudGl0bGUgfHwgcHJvcHMub3ZlcnRpdGxlXCIgY2xhc3M9XCJjb21wbGV4LWhlYWRlclwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgKm5nSWY9XCJwcm9wcy5vdmVydGl0bGVcIj57eyBwcm9wcy5vdmVydGl0bGUgfX08L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlICpuZ0lmPVwicHJvcHMudGl0bGVcIj57eyBwcm9wcy50aXRsZSB9fTwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICAgIDxpbWcgYWx0PVwiaW1hZ2VcIiBbc3JjXT1cInByb3BzLmltYWdlXCIgLz5cbiAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJwcm9wcy5jb250ZW50XCIgY2xhc3M9XCJjb21wbGV4LWNvbnRlbnRcIj57eyBwcm9wcy5jb250ZW50IH19PC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgYiBvZiBwcm9wcy5mb290ZXJBY3Rpb25zXCJcbiAgICAgICAgW3Byb3BzXT1cImJcIlxuICAgICAgICAob25DbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuZm9vdGVyLCBiLnRva2VuKVwiXG4gICAgICA+PC92YWwtYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b25zXG4gICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgbWFyZ2luOiA4cHhcIlxuICAgICAgICAqbmdJZj1cInByb3BzLmZvb3RlckNvbXBsZXhBY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcHJvcHMuZm9vdGVyQ29tcGxleEFjdGlvbnNcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuSUNPTlwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmZvb3RlckV4dHJhLCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtuYW1lXT1cImFjdGlvbi5kZXNjcmlwdGlvblwiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDx2YWwtYXZhdGFyXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNHB4OyBjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuQVZBVEFSXCJcbiAgICAgICAgICAgIFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGltYWdlOiBhY3Rpb24uZGVzY3JpcHRpb24sIGRlZmF1bHQ6ICcnIH1cIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmZvb3RlckV4dHJhLCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICA+PC92YWwtYXZhdGFyPlxuICAgICAgICAgIDx2YWwtaW1hZ2VcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLklNQUdFXCJcbiAgICAgICAgICAgIFtwcm9wc109XCJhY3Rpb24uaW1hZ2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5mb290ZXJFeHRyYSwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgPjwvdmFsLWltYWdlPlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5CVVRUT05cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5mb290ZXJFeHRyYSwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGFjdGlvbi5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIDwvaW9uLWNhcmQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1jYXJkXG4gKlxuICogQSBmbGV4aWJsZSBjYXJkIGNvbXBvbmVudCBzdXBwb3J0aW5nIGltYWdlcywgdGl0bGVzLCBjb250ZW50LCBhY3Rpb25zLCBhbmQgY3VzdG9tIHNlY3Rpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLWNhcmQgW3Byb3BzXT1cInsgdHlwZTogJ25hdGl2ZScsIHRpdGxlOiAnQ2FyZCcsIGltYWdlOiAndXJsJywgY29udGVudDogJy4uLicsIGFjdGlvbnM6IFsuLi5dIH1cIiAob25DbGljayk9XCJoYW5kbGVyKCRldmVudClcIj48L3ZhbC1jYXJkPlxuICpcbiAqIEBpbnB1dCBwcm9wczogQ2FyZE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNhcmQgKHR5cGUsIHRpdGxlLCBpbWFnZSwgY29udGVudCwgYWN0aW9ucywgZXRjLilcbiAqIEBvdXRwdXQgb25DbGljayAtIEVtaXRzIGEgQ2FyZENsaWNrRXZlbnQgd2hlbiB0aGUgY2FyZCBvciBhbiBhY3Rpb24gaXMgY2xpY2tlZFxuICovXG5leHBvcnQgY2xhc3MgQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBDYXJkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAdHlwZSB7Q2FyZE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgdHlwZSAtIFRoZSBjYXJkIHR5cGUgKHNlZSBDYXJkVHlwZSkuXG4gICAqIEBwcm9wZXJ0eSB0aXRsZSAtIFRoZSBjYXJkIHRpdGxlLlxuICAgKiBAcHJvcGVydHkgaW1hZ2UgLSBUaGUgY2FyZCBpbWFnZSBVUkwuXG4gICAqIEBwcm9wZXJ0eSBjb250ZW50IC0gVGhlIGNhcmQgY29udGVudC5cbiAgICogQHByb3BlcnR5IGFjdGlvbnMgLSBBcnJheSBvZiBhY3Rpb24gYnV0dG9ucyAob3B0aW9uYWwpLlxuICAgKiBAcHJvcGVydHkgc2VjdGlvbnMgLSBDdXN0b20gY2FyZCBzZWN0aW9ucyAob3B0aW9uYWwpLlxuICAgKiBAcHJvcGVydHkgb3ZlcnRpdGxlIC0gU3VidGl0bGUgb3Igb3ZlcnRpdGxlIChvcHRpb25hbCkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogQ2FyZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNhcmQgb3IgYW4gYWN0aW9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZENsaWNrRXZlbnQ+KCk7XG5cbiAgdHlwZXMgPSBDYXJkVHlwZTtcbiAgYWN0aW9uVHlwZXMgPSBUb29sYmFyQWN0aW9uVHlwZTtcbiAgc2VjdGlvbnMgPSBDYXJkU2VjdGlvbjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGNsaWNrSGFuZGxlcihzZWN0aW9uOiBDYXJkU2VjdGlvbiwgdG9rZW4/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHNlY3Rpb24sIHRva2VuIH0pO1xuICB9XG59XG4iXX0=
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhcmQvY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsT0FBTyxHQUNSLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFnQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFzTDlFOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBd0N4QjtRQXZDUSxZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBV3hDOzs7Ozs7Ozs7O1dBVUc7UUFDTSxVQUFLLEdBQTBCLEVBQUUsQ0FBQztRQUUzQzs7V0FFRztRQUNILGtCQUFhLEdBQWlCLEVBQWtCLENBQUM7UUFFakQ7O1dBRUc7UUFFSCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFN0MsVUFBSyxHQUFHLFFBQVEsQ0FBQztRQUNqQixnQkFBVyxHQUFHLGlCQUFpQixDQUFDO1FBQ2hDLGFBQVEsR0FBRyxXQUFXLENBQUM7SUFFUixDQUFDO0lBRWhCLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUEyQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFeEcsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxLQUFLO1NBQ0UsQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQW9CLEVBQUUsS0FBYztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBbkVVLGFBQWE7bUdBQWIsYUFBYSx3S0FqTGQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEpULHFrR0E3S0MsWUFBWSxnUUFDWixlQUFlLDBHQUNmLGVBQWUsZ0dBQ2YsY0FBYyx5RUFDZCxhQUFhLHdFQUNiLE9BQU8seUxBQ1AsY0FBYywrRUFDZCxhQUFhLHNHQUNiLFlBQVksc0ZBQ1osZUFBZSx5RkFDZixXQUFXLHFNQUNYLFVBQVUsOEVBQ1YsU0FBUyxvUEFDVCxPQUFPOzs0RkFtTEUsYUFBYTtrQkFwTXpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87cUJBQ1IsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4SlQ7d0RBNkJRLE1BQU07c0JBQWQsS0FBSztnQkFhRyxLQUFLO3NCQUFiLEtBQUs7Z0JBV04sT0FBTztzQkFETixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNhcmQsXG4gIElvbkNhcmRDb250ZW50LFxuICBJb25DYXJkSGVhZGVyLFxuICBJb25DYXJkU3VidGl0bGUsXG4gIElvbkNhcmRUaXRsZSxcbiAgSW9uQ2hlY2tib3gsXG4gIElvbkljb24sXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNldHMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbGJhckFjdGlvblR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDYXJkQ2xpY2tFdmVudCwgQ2FyZE1ldGFkYXRhLCBDYXJkU2VjdGlvbiwgQ2FyZFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBJb25DYXJkLFxuICAgIElvbkNhcmRDb250ZW50LFxuICAgIElvbkNhcmRIZWFkZXIsXG4gICAgSW9uQ2FyZFRpdGxlLFxuICAgIElvbkNhcmRTdWJ0aXRsZSxcbiAgICBJb25DaGVja2JveCxcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25JY29uLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24tY2FyZCAqbmdJZj1cInJlc29sdmVkUHJvcHMudHlwZSA9PT0gdHlwZXMubmF0aXZlXCI+XG4gICAgICA8aW1nIGFsdD1cImltYWdlXCIgW3NyY109XCJyZXNvbHZlZFByb3BzLmltYWdlXCIgLz5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXIgKm5nSWY9XCJyZXNvbHZlZFByb3BzLnRpdGxlIHx8IHJlc29sdmVkUHJvcHMub3ZlcnRpdGxlXCI+XG4gICAgICAgIDxpb24tY2FyZC10aXRsZSAqbmdJZj1cInJlc29sdmVkUHJvcHMudGl0bGVcIj57eyByZXNvbHZlZFByb3BzLnRpdGxlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy5vdmVydGl0bGVcIj57eyByZXNvbHZlZFByb3BzLm92ZXJ0aXRsZSB9fTwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cblxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJyZXNvbHZlZFByb3BzLmNvbnRlbnRcIj57eyByZXNvbHZlZFByb3BzLmNvbnRlbnQgfX08L2lvbi1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBiIG9mIHJlc29sdmVkUHJvcHMuZm9vdGVyQWN0aW9uc1wiXG4gICAgICAgIFtwcm9wc109XCJiXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmZvb3RlciwgYi50b2tlbilcIlxuICAgICAgPjwvdmFsLWJ1dHRvbj5cbiAgICA8L2lvbi1jYXJkPlxuXG4gICAgPGlvbi1jYXJkXG4gICAgICAqbmdJZj1cInJlc29sdmVkUHJvcHMudHlwZSA9PT0gdHlwZXMudGFwcGFibGVcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5jb250ZW50LCByZXNvbHZlZFByb3BzLnRva2VuKVwiXG4gICAgICBjbGFzcz1cInRhcGFibGVcIlxuICAgID5cbiAgICAgIDxpbWcgYWx0PVwiaW1hZ2VcIiBbc3JjXT1cInJlc29sdmVkUHJvcHMuaW1hZ2VcIiAvPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlciAqbmdJZj1cInJlc29sdmVkUHJvcHMudGl0bGUgfHwgcmVzb2x2ZWRQcm9wcy5vdmVydGl0bGVcIj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy50aXRsZVwiPnt7IHJlc29sdmVkUHJvcHMudGl0bGUgfX08L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgKm5nSWY9XCJyZXNvbHZlZFByb3BzLm92ZXJ0aXRsZVwiPnt7IHJlc29sdmVkUHJvcHMub3ZlcnRpdGxlIH19PC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICA8aW9uLWNhcmQtY29udGVudCAqbmdJZj1cInJlc29sdmVkUHJvcHMuY29udGVudFwiPnt7IHJlc29sdmVkUHJvcHMuY29udGVudCB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuXG4gICAgPGlvbi1jYXJkXG4gICAgICAqbmdJZj1cInJlc29sdmVkUHJvcHMudHlwZSA9PT0gdHlwZXMuY2hlY2tlclwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmNvbnRlbnQsIHJlc29sdmVkUHJvcHMudG9rZW4pXCJcbiAgICAgIGNsYXNzPVwidGFwYWJsZVwiXG4gICAgPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlciAqbmdJZj1cInJlc29sdmVkUHJvcHMudGl0bGUgfHwgcmVzb2x2ZWRQcm9wcy5vdmVydGl0bGVcIiBjbGFzcz1cImNoZWNrZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgKm5nSWY9XCJyZXNvbHZlZFByb3BzLm92ZXJ0aXRsZVwiPnt7IHJlc29sdmVkUHJvcHMub3ZlcnRpdGxlIH19PC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICA8aW9uLWNhcmQtdGl0bGUgKm5nSWY9XCJyZXNvbHZlZFByb3BzLnRpdGxlXCI+e3sgcmVzb2x2ZWRQcm9wcy50aXRsZSB9fTwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxpb24tY2hlY2tib3ggW2NoZWNrZWRdPVwicmVzb2x2ZWRQcm9wcy5zZWxlY3RlZFwiPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICA8aW9uLWNhcmQtY29udGVudCAqbmdJZj1cInJlc29sdmVkUHJvcHMuY29udGVudFwiPnt7IHJlc29sdmVkUHJvcHMuY29udGVudCB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuXG4gICAgPGlvbi1jYXJkICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy50eXBlID09PSB0eXBlcy5jb21wbGV4XCIgY2xhc3M9XCJjb21wbGV4XCI+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyIGNsYXNzPVwiY29tcGxleC1oZWFkZXJcIj5cbiAgICAgICAgPGlvbi1idXR0b25zIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy5sZWZ0QWN0aW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByZXNvbHZlZFByb3BzLmxlZnRBY3Rpb25zXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5JQ09OXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJMZWZ0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJhY3Rpb24uZGVzY3JpcHRpb25cIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPHZhbC1hdmF0YXJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDRweDsgY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuQVZBVEFSXCJcbiAgICAgICAgICAgICAgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgaW1hZ2U6IGFjdGlvbi5kZXNjcmlwdGlvbiwgZGVmYXVsdDogJycgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJMZWZ0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID48L3ZhbC1hdmF0YXI+XG4gICAgICAgICAgICA8dmFsLWltYWdlXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLklNQUdFXCJcbiAgICAgICAgICAgICAgW3Byb3BzXT1cImFjdGlvbi5pbWFnZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuaGVhZGVyTGVmdCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+PC92YWwtaW1hZ2U+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5CVVRUT05cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmhlYWRlckxlZnQsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBhY3Rpb24uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXNvbHZlZFByb3BzLmhlYWRlclRleHRcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IGNvbnRlbnQ6IHJlc29sdmVkUHJvcHMuaGVhZGVyVGV4dCwgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgc2l6ZTogJ21lZGl1bScgfVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgICAgPGlvbi1idXR0b25zIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy5yaWdodEFjdGlvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcmVzb2x2ZWRQcm9wcy5yaWdodEFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLklDT05cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmhlYWRlclJpZ2h0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJhY3Rpb24uZGVzY3JpcHRpb25cIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPHZhbC1hdmF0YXJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDRweDsgY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuQVZBVEFSXCJcbiAgICAgICAgICAgICAgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgaW1hZ2U6IGFjdGlvbi5kZXNjcmlwdGlvbiwgZGVmYXVsdDogJycgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsaWNrSGFuZGxlcihzZWN0aW9ucy5oZWFkZXJSaWdodCwgYWN0aW9uLnRva2VuKVwiXG4gICAgICAgICAgICA+PC92YWwtYXZhdGFyPlxuICAgICAgICAgICAgPHZhbC1pbWFnZVxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5JTUFHRVwiXG4gICAgICAgICAgICAgIFtwcm9wc109XCJhY3Rpb24uaW1hZ2VcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmhlYWRlclJpZ2h0LCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgID48L3ZhbC1pbWFnZT5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLkJVVFRPTlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuaGVhZGVyUmlnaHQsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBhY3Rpb24uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFwYWJsZVwiIChjbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuY29udGVudCwgcmVzb2x2ZWRQcm9wcy50b2tlbilcIj5cbiAgICAgICAgPGlvbi1jYXJkLWhlYWRlciAqbmdJZj1cInJlc29sdmVkUHJvcHMudGl0bGUgfHwgcmVzb2x2ZWRQcm9wcy5vdmVydGl0bGVcIiBjbGFzcz1cImNvbXBsZXgtaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZSAqbmdJZj1cInJlc29sdmVkUHJvcHMub3ZlcnRpdGxlXCI+e3sgcmVzb2x2ZWRQcm9wcy5vdmVydGl0bGUgfX08L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlICpuZ0lmPVwicmVzb2x2ZWRQcm9wcy50aXRsZVwiPnt7IHJlc29sdmVkUHJvcHMudGl0bGUgfX08L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cblxuICAgICAgICA8aW1nIGFsdD1cImltYWdlXCIgW3NyY109XCJyZXNvbHZlZFByb3BzLmltYWdlXCIgLz5cbiAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJyZXNvbHZlZFByb3BzLmNvbnRlbnRcIiBjbGFzcz1cImNvbXBsZXgtY29udGVudFwiPnt7IHJlc29sdmVkUHJvcHMuY29udGVudCB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IGIgb2YgcmVzb2x2ZWRQcm9wcy5mb290ZXJBY3Rpb25zXCJcbiAgICAgICAgW3Byb3BzXT1cImJcIlxuICAgICAgICAob25DbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuZm9vdGVyLCBiLnRva2VuKVwiXG4gICAgICA+PC92YWwtYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b25zXG4gICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgbWFyZ2luOiA4cHhcIlxuICAgICAgICAqbmdJZj1cInJlc29sdmVkUHJvcHMuZm9vdGVyQ29tcGxleEFjdGlvbnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcmVzb2x2ZWRQcm9wcy5mb290ZXJDb21wbGV4QWN0aW9uc1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5JQ09OXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuZm9vdGVyRXh0cmEsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwiYWN0aW9uLmRlc2NyaXB0aW9uXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPHZhbC1hdmF0YXJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHg7IGN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlcy5BVkFUQVJcIlxuICAgICAgICAgICAgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgaW1hZ2U6IGFjdGlvbi5kZXNjcmlwdGlvbiwgZGVmYXVsdDogJycgfVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJjbGlja0hhbmRsZXIoc2VjdGlvbnMuZm9vdGVyRXh0cmEsIGFjdGlvbi50b2tlbilcIlxuICAgICAgICAgID48L3ZhbC1hdmF0YXI+XG4gICAgICAgICAgPHZhbC1pbWFnZVxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXMuSU1BR0VcIlxuICAgICAgICAgICAgW3Byb3BzXT1cImFjdGlvbi5pbWFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmZvb3RlckV4dHJhLCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICA+PC92YWwtaW1hZ2U+XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzLkJVVFRPTlwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKHNlY3Rpb25zLmZvb3RlckV4dHJhLCBhY3Rpb24udG9rZW4pXCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPC9pb24tY2FyZD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWNhcmRcbiAqXG4gKiBBIGZsZXhpYmxlIGNhcmQgY29tcG9uZW50IHN1cHBvcnRpbmcgaW1hZ2VzLCB0aXRsZXMsIGNvbnRlbnQsIGFjdGlvbnMsIGFuZCBjdXN0b20gc2VjdGlvbnMuXG4gKiBTdXBwb3J0cyBwcmVzZXRzIGZvciByZXVzYWJsZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHByZXNldCAocmVjb21tZW5kZWQpOlxuICogPHZhbC1jYXJkIHByZXNldD1cImZlYXR1cmVcIiBbcHJvcHNdPVwieyB0aXRsZTogJ0NhcmQnLCBpbWFnZTogJ3VybCcsIGNvbnRlbnQ6ICcuLi4nIH1cIiAob25DbGljayk9XCJoYW5kbGVyKCRldmVudClcIj48L3ZhbC1jYXJkPlxuICpcbiAqIEBleGFtcGxlIFN0YXRpYyAoYmFja3dhcmRzIGNvbXBhdGlibGUpOlxuICogPHZhbC1jYXJkIFtwcm9wc109XCJ7IHR5cGU6ICduYXRpdmUnLCB0aXRsZTogJ0NhcmQnLCBpbWFnZTogJ3VybCcsIGNvbnRlbnQ6ICcuLi4nIH1cIiAob25DbGljayk9XCJoYW5kbGVyKCRldmVudClcIj48L3ZhbC1jYXJkPlxuICpcbiAqIEBpbnB1dCBwcmVzZXQ6IHN0cmluZyAtIE5hbWUgb2YgcHJlc2V0IHRvIGFwcGx5IChlLmcuLCAnZmVhdHVyZScsICdjb21wYWN0JylcbiAqIEBpbnB1dCBwcm9wczogQ2FyZE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNhcmQgKG92ZXJyaWRlcyBwcmVzZXQgdmFsdWVzKVxuICogQG91dHB1dCBvbkNsaWNrIC0gRW1pdHMgYSBDYXJkQ2xpY2tFdmVudCB3aGVuIHRoZSBjYXJkIG9yIGFuIGFjdGlvbiBpcyBjbGlja2VkXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBjYXJkIGNvbmZpZ3VyYXRpb25zXG4gICAqICh0eXBlLCB2YXJpYW50LCBwYWRkaW5nLCBldGMuKSB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGF0IGFwcCBsZXZlbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHZhbC1jYXJkIHByZXNldD1cImZlYXR1cmVcIiBbcHJvcHNdPVwieyB0aXRsZTogJ015IENhcmQnIH1cIj48L3ZhbC1jYXJkPlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDYXJkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBWYWx1ZXMgaGVyZSBvdmVycmlkZSBwcmVzZXQgdmFsdWVzLlxuICAgKiBAdHlwZSB7Q2FyZE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgdHlwZSAtIFRoZSBjYXJkIHR5cGUgKHNlZSBDYXJkVHlwZSkuXG4gICAqIEBwcm9wZXJ0eSB0aXRsZSAtIFRoZSBjYXJkIHRpdGxlLlxuICAgKiBAcHJvcGVydHkgaW1hZ2UgLSBUaGUgY2FyZCBpbWFnZSBVUkwuXG4gICAqIEBwcm9wZXJ0eSBjb250ZW50IC0gVGhlIGNhcmQgY29udGVudC5cbiAgICogQHByb3BlcnR5IGFjdGlvbnMgLSBBcnJheSBvZiBhY3Rpb24gYnV0dG9ucyAob3B0aW9uYWwpLlxuICAgKiBAcHJvcGVydHkgc2VjdGlvbnMgLSBDdXN0b20gY2FyZCBzZWN0aW9ucyAob3B0aW9uYWwpLlxuICAgKiBAcHJvcGVydHkgb3ZlcnRpdGxlIC0gU3VidGl0bGUgb3Igb3ZlcnRpdGxlIChvcHRpb25hbCkuXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogUGFydGlhbDxDYXJkTWV0YWRhdGE+ID0ge307XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIHByb3BzIGFmdGVyIG1lcmdpbmcgcHJlc2V0ICsgZXhwbGljaXQgcHJvcHMuXG4gICAqL1xuICByZXNvbHZlZFByb3BzOiBDYXJkTWV0YWRhdGEgPSB7fSBhcyBDYXJkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY2FyZCBvciBhbiBhY3Rpb24gaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkQ2xpY2tFdmVudD4oKTtcblxuICB0eXBlcyA9IENhcmRUeXBlO1xuICBhY3Rpb25UeXBlcyA9IFRvb2xiYXJBY3Rpb25UeXBlO1xuICBzZWN0aW9ucyA9IENhcmRTZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcmVzZXQnXSB8fCBjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBwcmVzZXQgY29uZmlndXJhdGlvbiB3aXRoIGV4cGxpY2l0IHByb3BzLlxuICAgKiBFeHBsaWNpdCBwcm9wcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBwcmVzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc2V0UHJvcHMgPSB0aGlzLnByZXNldCA/ICh0aGlzLnByZXNldHMuZ2V0KCdjYXJkJywgdGhpcy5wcmVzZXQpIGFzIFBhcnRpYWw8Q2FyZE1ldGFkYXRhPikgOiB7fTtcblxuICAgIHRoaXMucmVzb2x2ZWRQcm9wcyA9IHtcbiAgICAgIC4uLnByZXNldFByb3BzLFxuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICB9IGFzIENhcmRNZXRhZGF0YTtcbiAgfVxuXG4gIGNsaWNrSGFuZGxlcihzZWN0aW9uOiBDYXJkU2VjdGlvbiwgdG9rZW4/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHNlY3Rpb24sIHRva2VuIH0pO1xuICB9XG59XG4iXX0=