@po-ui/ng-components 14.2.1 → 14.4.0

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 (70) hide show
  1. package/esm2020/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.mjs +30 -3
  2. package/esm2020/lib/components/po-accordion/po-accordion.component.mjs +2 -2
  3. package/esm2020/lib/components/po-accordion/services/po-accordion.service.mjs +1 -1
  4. package/esm2020/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.mjs +5 -3
  5. package/esm2020/lib/components/po-button/po-button-base.component.mjs +58 -8
  6. package/esm2020/lib/components/po-button/po-button-size.enum.mjs +6 -0
  7. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  8. package/esm2020/lib/components/po-button-group/po-button-group-base.component.mjs +8 -1
  9. package/esm2020/lib/components/po-button-group/po-button-group.component.mjs +3 -3
  10. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  11. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +12 -12
  12. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox-base.component.mjs +11 -2
  13. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.component.mjs +24 -12
  14. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +14 -20
  15. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.mjs +5 -4
  16. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +74 -43
  17. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +16 -14
  18. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +2 -1
  19. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +25 -2
  20. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +5 -5
  21. package/esm2020/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +28 -2
  22. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.mjs +28 -2
  23. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +4 -4
  24. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +5 -3
  25. package/esm2020/lib/components/po-field/po-lookup/services/po-lookup-modal.service.mjs +6 -2
  26. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +9 -9
  27. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +90 -25
  28. package/esm2020/lib/components/po-field/po-switch/po-switch.component.mjs +38 -34
  29. package/esm2020/lib/components/po-field/po-upload/po-upload-base.service.mjs +4 -2
  30. package/esm2020/lib/components/po-list-view/po-list-view.component.mjs +3 -3
  31. package/esm2020/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.mjs +2 -2
  32. package/esm2020/lib/components/po-table/po-table-base.component.mjs +23 -4
  33. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +3 -3
  34. package/esm2020/lib/components/po-table/po-table.component.mjs +6 -5
  35. package/esm2020/lib/components/po-widget/po-widget-base.component.mjs +3 -2
  36. package/esm2020/lib/components/po-widget/po-widget.component.mjs +24 -12
  37. package/esm2020/lib/utils/util.mjs +20 -1
  38. package/fesm2015/po-ui-ng-components.mjs +849 -503
  39. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  40. package/fesm2020/po-ui-ng-components.mjs +828 -490
  41. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  42. package/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.d.ts +10 -3
  43. package/lib/components/po-accordion/services/po-accordion.service.d.ts +3 -2
  44. package/lib/components/po-button/po-button-base.component.d.ts +29 -4
  45. package/lib/components/po-button/po-button-size.enum.d.ts +4 -0
  46. package/lib/components/po-button-group/po-button-group-base.component.d.ts +7 -0
  47. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +18 -0
  48. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +2 -1
  49. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +2 -1
  50. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +27 -22
  51. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +13 -1
  52. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +21 -1
  53. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +21 -1
  54. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +4 -0
  55. package/lib/components/po-field/po-select/po-select.component.d.ts +36 -7
  56. package/lib/components/po-field/po-switch/po-switch.component.d.ts +12 -2
  57. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  58. package/lib/components/po-table/po-table.component.d.ts +1 -0
  59. package/lib/components/po-widget/po-widget-base.component.d.ts +1 -0
  60. package/lib/utils/util.d.ts +2 -0
  61. package/package.json +4 -4
  62. package/po-ui-ng-components-14.4.0.tgz +0 -0
  63. package/schematics/ng-add/index.js +1 -1
  64. package/schematics/ng-update/v14/index.js +1 -1
  65. package/schematics/ng-update/v2/index.js +1 -1
  66. package/schematics/ng-update/v3/index.js +1 -1
  67. package/schematics/ng-update/v4/index.js +1 -1
  68. package/schematics/ng-update/v5/index.js +1 -1
  69. package/schematics/ng-update/v6/index.js +1 -1
  70. package/po-ui-ng-components-14.2.1.tgz +0 -0
@@ -1,11 +1,11 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, ViewChild, Input, Output, EventEmitter } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
4
- import { isMobile, removeDuplicatedOptions, removeUndefinedAndNullOptions, validValue } from '../../../utils/util';
5
- import { PoControlPositionService } from './../../../services/po-control-position/po-control-position.service';
2
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild } from '@angular/core';
3
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { isMobile, removeDuplicatedOptions, removeDuplicatedOptionsWithFieldValue, removeUndefinedAndNullOptions, removeUndefinedAndNullOptionsWithFieldValue, validValue } from '../../../utils/util';
6
5
  import { PoKeyCodeEnum } from './../../../enums/po-key-code.enum';
7
- import { PoFieldValidateModel } from '../po-field-validate.model';
6
+ import { PoControlPositionService } from './../../../services/po-control-position/po-control-position.service';
8
7
  import { InputBoolean } from '../../../decorators';
8
+ import { PoFieldValidateModel } from '../po-field-validate.model';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "./../../../services/po-control-position/po-control-position.service";
11
11
  import * as i2 from "@angular/common";
@@ -28,9 +28,9 @@ function PoSelectComponent_option_4_Template(rf, ctx) { if (rf & 1) {
28
28
  } if (rf & 2) {
29
29
  const option_r7 = ctx.$implicit;
30
30
  const ctx_r2 = i0.ɵɵnextContext();
31
- i0.ɵɵproperty("disabled", ctx_r2.readonly)("value", option_r7.value);
31
+ i0.ɵɵproperty("disabled", ctx_r2.readonly)("value", option_r7 == null ? null : option_r7[ctx_r2.fieldValue]);
32
32
  i0.ɵɵadvance(1);
33
- i0.ɵɵtextInterpolate1(" ", option_r7 == null ? null : option_r7.label, " ");
33
+ i0.ɵɵtextInterpolate1(" ", option_r7 == null ? null : option_r7[ctx_r2.fieldLabel], " ");
34
34
  } }
35
35
  function PoSelectComponent_li_15_ng_container_2_Template(rf, ctx) { if (rf & 1) {
36
36
  i0.ɵɵelementContainer(0);
@@ -41,8 +41,9 @@ function PoSelectComponent_li_15_ng_template_3_Template(rf, ctx) { if (rf & 1) {
41
41
  i0.ɵɵelementEnd();
42
42
  } if (rf & 2) {
43
43
  const option_r10 = i0.ɵɵnextContext().$implicit;
44
+ const ctx_r13 = i0.ɵɵnextContext();
44
45
  i0.ɵɵadvance(1);
45
- i0.ɵɵtextInterpolate(option_r10 == null ? null : option_r10.label);
46
+ i0.ɵɵtextInterpolate(option_r10 == null ? null : option_r10[ctx_r13.fieldLabel]);
46
47
  } }
47
48
  function PoSelectComponent_li_15_ng_template_5_Template(rf, ctx) { }
48
49
  const _c4 = function (a0) { return { $implicit: a0 }; };
@@ -60,8 +61,8 @@ function PoSelectComponent_li_15_Template(rf, ctx) { if (rf & 1) {
60
61
  const _r12 = i0.ɵɵreference(4);
61
62
  const _r14 = i0.ɵɵreference(6);
62
63
  const ctx_r6 = i0.ɵɵnextContext();
63
- i0.ɵɵclassProp("po-select-item-selected", ctx_r6.selectedValue === option_r10.value);
64
- i0.ɵɵproperty("value", option_r10.value);
64
+ i0.ɵɵclassProp("po-select-item-selected", ctx_r6.selectedValue === (option_r10 == null ? null : option_r10[ctx_r6.fieldLabel]));
65
+ i0.ɵɵproperty("value", option_r10 == null ? null : option_r10[ctx_r6.fieldValue]);
65
66
  i0.ɵɵadvance(2);
66
67
  i0.ɵɵproperty("ngIf", ctx_r6.selectOptionTemplate)("ngIfThen", _r14)("ngIfElse", _r12);
67
68
  i0.ɵɵadvance(3);
@@ -73,6 +74,8 @@ const _c7 = function (a0, a1) { return { "po-field-icon-disabled": a0, "po-field
73
74
  const _c8 = function (a0) { return { "po-invisible": a0 }; };
74
75
  const poSelectContentOffset = 8;
75
76
  const poSelectContentPositionDefault = 'bottom';
77
+ const PO_SELECT_FIELD_LABEL_DEFAULT = 'label';
78
+ const PO_SELECT_FIELD_VALUE_DEFAULT = 'value';
76
79
  /**
77
80
  * @docsExtends PoFieldValidateModel
78
81
  *
@@ -96,6 +99,11 @@ const poSelectContentPositionDefault = 'bottom';
96
99
  * <file name='sample-po-select-customer-registration/sample-po-select-customer-registration.component.po.ts'> </file>
97
100
  * </example>
98
101
  *
102
+ * <example name="po-select-companies" title="PO Select Companies">
103
+ * <file name="sample-po-select-companies/sample-po-select-companies.component.html"> </file>
104
+ * <file name="sample-po-select-companies/sample-po-select-companies.component.ts"> </file>
105
+ * </example>
106
+ *
99
107
  * @description
100
108
  *
101
109
  * O componente po-select exibe uma lista de valores e permite que o usuário selecione um desses valores.
@@ -146,6 +154,8 @@ export class PoSelectComponent extends PoFieldValidateModel {
146
154
  this.isMobile = isMobile();
147
155
  this.open = false;
148
156
  this.selectIcon = 'po-icon-arrow-down';
157
+ this._fieldLabel = PO_SELECT_FIELD_LABEL_DEFAULT;
158
+ this._fieldValue = PO_SELECT_FIELD_VALUE_DEFAULT;
149
159
  this.onScroll = () => {
150
160
  this.controlPosition.adjustPosition(poSelectContentPositionDefault);
151
161
  };
@@ -168,14 +178,55 @@ export class PoSelectComponent extends PoFieldValidateModel {
168
178
  * ```
169
179
  */
170
180
  set options(options) {
171
- this._options = options;
172
- removeDuplicatedOptions(this._options);
173
- removeUndefinedAndNullOptions(this._options);
181
+ if (this.fieldLabel && this.fieldValue) {
182
+ options.map(option => {
183
+ option.label = option[this.fieldLabel];
184
+ option.value = option[this.fieldValue];
185
+ });
186
+ }
187
+ this.validateOptions([...options]);
174
188
  this.onUpdateOptions();
189
+ this._options = [...options];
175
190
  }
176
191
  get options() {
177
192
  return this._options;
178
193
  }
194
+ /**
195
+ * @optional
196
+ *
197
+ * @description
198
+ * Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
199
+ * (`p-options`), esta propriedade será responsável pelo texto de apresentação de cada item da lista.
200
+ *
201
+ * @default `label`
202
+ */
203
+ set fieldLabel(value) {
204
+ this._fieldLabel = value || PO_SELECT_FIELD_LABEL_DEFAULT;
205
+ if (this.options && this.options.length > 0) {
206
+ this.options = [...this.options];
207
+ }
208
+ }
209
+ get fieldLabel() {
210
+ return this._fieldLabel;
211
+ }
212
+ /**
213
+ * @optional
214
+ *
215
+ * @description
216
+ * Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
217
+ * (`p-options`), esta propriedade será responsável pelo valor de cada item da lista.
218
+ *
219
+ * @default `value`
220
+ */
221
+ set fieldValue(value) {
222
+ this._fieldValue = value || PO_SELECT_FIELD_VALUE_DEFAULT;
223
+ if (this.options && this.options.length > 0) {
224
+ this.options = [...this.options];
225
+ }
226
+ }
227
+ get fieldValue() {
228
+ return this._fieldValue;
229
+ }
179
230
  get isInvisibleSelectNative() {
180
231
  return this.readonly && this.isMobile;
181
232
  }
@@ -209,6 +260,8 @@ export class PoSelectComponent extends PoFieldValidateModel {
209
260
  if (change) {
210
261
  removeDuplicatedOptions(this.options);
211
262
  removeUndefinedAndNullOptions(this.options);
263
+ removeDuplicatedOptionsWithFieldValue(this.options, this.fieldValue);
264
+ removeUndefinedAndNullOptionsWithFieldValue(this.options, this.fieldValue);
212
265
  }
213
266
  }
214
267
  /**
@@ -275,12 +328,12 @@ export class PoSelectComponent extends PoFieldValidateModel {
275
328
  }
276
329
  // Atualiza valores
277
330
  updateValues(option) {
278
- if (this.selectedValue !== option.value) {
279
- this.selectedValue = option.value;
280
- this.selectElement.nativeElement.value = option.value;
281
- this.updateModel(option.value);
282
- this.displayValue = option.label;
283
- this.emitChange(option.value);
331
+ if (this.selectedValue !== option[this.fieldValue]) {
332
+ this.selectedValue = option[this.fieldValue];
333
+ this.selectElement.nativeElement.value = option[this.fieldValue];
334
+ this.updateModel(option[this.fieldValue]);
335
+ this.displayValue = option[this.fieldLabel];
336
+ this.emitChange(option[this.fieldValue]);
284
337
  }
285
338
  }
286
339
  // Esconde Content do Select quando for clicado fora
@@ -295,9 +348,9 @@ export class PoSelectComponent extends PoFieldValidateModel {
295
348
  const optionFound = this.findOptionValue(value);
296
349
  if (optionFound) {
297
350
  this.selectElement.nativeElement.value = optionFound.value;
298
- this.selectedValue = optionFound.value;
299
- this.displayValue = optionFound.label;
300
- this.setScrollPosition(optionFound.value);
351
+ this.selectedValue = optionFound[this.fieldValue];
352
+ this.displayValue = optionFound[this.fieldLabel];
353
+ this.setScrollPosition(optionFound[this.fieldValue]);
301
354
  }
302
355
  else if (validValue(this.selectedValue)) {
303
356
  this.selectElement.nativeElement.value = undefined;
@@ -380,6 +433,12 @@ export class PoSelectComponent extends PoFieldValidateModel {
380
433
  }
381
434
  }
382
435
  }
436
+ validateOptions(options) {
437
+ removeDuplicatedOptions(options);
438
+ removeUndefinedAndNullOptions(options);
439
+ removeDuplicatedOptionsWithFieldValue(options, this.fieldValue);
440
+ removeUndefinedAndNullOptionsWithFieldValue(options, this.fieldValue);
441
+ }
383
442
  }
384
443
  PoSelectComponent.ɵfac = function PoSelectComponent_Factory(t) { return new (t || PoSelectComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i1.PoControlPositionService)); };
385
444
  PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectComponent, selectors: [["po-select"]], viewQuery: function PoSelectComponent_Query(rf, ctx) { if (rf & 1) {
@@ -395,7 +454,7 @@ PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectC
395
454
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectButtonElement = _t.first);
396
455
  } }, hostBindings: function PoSelectComponent_HostBindings(rf, ctx) { if (rf & 1) {
397
456
  i0.ɵɵlistener("keydown", function PoSelectComponent_keydown_HostBindingHandler($event) { return ctx.onKeydown($event); });
398
- } }, inputs: { readonly: ["p-readonly", "readonly"], placeholder: ["p-placeholder", "placeholder"], options: ["p-options", "options"] }, outputs: { ngModelChange: "ngModelChange" }, features: [i0.ɵɵProvidersFeature([
457
+ } }, inputs: { readonly: ["p-readonly", "readonly"], placeholder: ["p-placeholder", "placeholder"], options: ["p-options", "options"], fieldLabel: ["p-field-label", "fieldLabel"], fieldValue: ["p-field-value", "fieldValue"] }, outputs: { ngModelChange: "ngModelChange" }, features: [i0.ɵɵProvidersFeature([
399
458
  {
400
459
  provide: NG_VALUE_ACCESSOR,
401
460
  useExisting: forwardRef(() => PoSelectComponent),
@@ -464,7 +523,7 @@ __decorate([
464
523
  multi: true
465
524
  },
466
525
  PoControlPositionService
467
- ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <select\n #select\n class=\"po-select\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'po-select-mobile': isMobile, 'po-invisible': isInvisibleSelectNative }\"\n [required]=\"required\"\n (change)=\"onSelectChange($event.target.value)\"\n (blur)=\"onBlur()\"\n >\n <option *ngIf=\"isMobile\" disabled hidden selected></option>\n <option *ngFor=\"let option of options\" [disabled]=\"readonly\" [value]=\"option.value\" (click)=\"onOptionClick(option)\">\n {{ option?.label }}\n </option>\n </select>\n\n <div class=\"po-select-container\">\n <div\n #selectButton\n class=\"po-select-button\"\n [ngClass]=\"{ 'po-select-button-disabled': disabled, 'po-select-button-readonly': readonly }\"\n (click)=\"toggleButton()\"\n >\n <span>{{ displayValue || placeholder }}</span>\n\n <div class=\"po-field-icon-container-right\">\n <span\n #icon\n class=\"po-icon {{ selectIcon }} po-field-icon\"\n [ngClass]=\"{ 'po-field-icon-disabled': disabled, 'po-field-icon-readonly': readonly }\"\n ></span>\n </div>\n </div>\n\n <ul #contentList class=\"po-select-content\" [ngClass]=\"{ 'po-invisible': isMobile }\">\n <li\n *ngFor=\"let option of options\"\n [class.po-select-item-selected]=\"selectedValue === option.value\"\n [value]=\"option.value\"\n (click)=\"onOptionClick(option)\"\n >\n <div class=\"po-select-item\">\n <ng-container *ngIf=\"selectOptionTemplate; then optionTemplate; else defaultOptionTemplate\"></ng-container>\n\n <ng-template #defaultOptionTemplate>\n <span>{{ option?.label }}</span>\n </ng-template>\n\n <ng-template\n #optionTemplate\n [ngTemplateOutlet]=\"selectOptionTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n >\n </ng-template>\n </div>\n </li>\n </ul>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
526
+ ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <select\n #select\n class=\"po-select\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'po-select-mobile': isMobile, 'po-invisible': isInvisibleSelectNative }\"\n [required]=\"required\"\n (change)=\"onSelectChange($event.target.value)\"\n (blur)=\"onBlur()\"\n >\n <option *ngIf=\"isMobile\" disabled hidden selected></option>\n <option\n *ngFor=\"let option of options\"\n [disabled]=\"readonly\"\n [value]=\"option?.[this.fieldValue]\"\n (click)=\"onOptionClick(option)\"\n >\n {{ option?.[this.fieldLabel] }}\n </option>\n </select>\n\n <div class=\"po-select-container\">\n <div\n #selectButton\n class=\"po-select-button\"\n [ngClass]=\"{ 'po-select-button-disabled': disabled, 'po-select-button-readonly': readonly }\"\n (click)=\"toggleButton()\"\n >\n <span>{{ displayValue || placeholder }}</span>\n\n <div class=\"po-field-icon-container-right\">\n <span\n #icon\n class=\"po-icon {{ selectIcon }} po-field-icon\"\n [ngClass]=\"{ 'po-field-icon-disabled': disabled, 'po-field-icon-readonly': readonly }\"\n ></span>\n </div>\n </div>\n\n <ul #contentList class=\"po-select-content\" [ngClass]=\"{ 'po-invisible': isMobile }\">\n <li\n *ngFor=\"let option of options\"\n [class.po-select-item-selected]=\"selectedValue === option?.[this.fieldLabel]\"\n [value]=\"option?.[this.fieldValue]\"\n (click)=\"onOptionClick(option)\"\n >\n <div class=\"po-select-item\">\n <ng-container *ngIf=\"selectOptionTemplate; then optionTemplate; else defaultOptionTemplate\"></ng-container>\n\n <ng-template #defaultOptionTemplate>\n <span>{{ option?.[this.fieldLabel] }}</span>\n </ng-template>\n\n <ng-template\n #optionTemplate\n [ngTemplateOutlet]=\"selectOptionTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n >\n </ng-template>\n </div>\n </li>\n </ul>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
468
527
  }], function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.Renderer2 }, { type: i1.PoControlPositionService }]; }, { contentList: [{
469
528
  type: ViewChild,
470
529
  args: ['contentList', { read: ElementRef, static: true }]
@@ -489,8 +548,14 @@ __decorate([
489
548
  }], options: [{
490
549
  type: Input,
491
550
  args: ['p-options']
551
+ }], fieldLabel: [{
552
+ type: Input,
553
+ args: ['p-field-label']
554
+ }], fieldValue: [{
555
+ type: Input,
556
+ args: ['p-field-value']
492
557
  }], onKeydown: [{
493
558
  type: HostListener,
494
559
  args: ['keydown', ['$event']]
495
560
  }] }); })();
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBR3ZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7OztJQ2QvQyw2QkFBMkQ7Ozs7SUFDM0Qsa0NBQW9IO0lBQWhDLDhOQUFTLGVBQUEsK0JBQXFCLENBQUEsSUFBQztJQUNqSCxZQUNGO0lBQUEsaUJBQVM7Ozs7SUFGOEIsMENBQXFCLDBCQUFBO0lBQzFELGVBQ0Y7SUFERSwyRUFDRjs7O0lBNkJNLHdCQUEyRzs7O0lBR3pHLDRCQUFNO0lBQUEsWUFB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QUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNRLG1CQUFtQjtrQkFBakYsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFnQnBDLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQVdjLFFBQVE7a0JBQTVDLEtBQUs7bUJBQUMsWUFBWTtZQUdLLFdBQVc7a0JBQWxDLEtBQUs7bUJBQUMsZUFBZTtZQW9DRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUEwQm1CLFNBQVM7a0JBQTdDLFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBpc01vYmlsZSwgcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnMsIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zLCB2YWxpZFZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWNvbnRyb2wtcG9zaXRpb24vcG8tY29udHJvbC1wb3NpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuXG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcblxuY29uc3QgcG9TZWxlY3RDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20nO1xuXG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0ZpZWxkVmFsaWRhdGVNb2RlbFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1iYXNpY1wiIHRpdGxlPVwiUE8gU2VsZWN0IEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1iYXNpYy9zYW1wbGUtcG8tc2VsZWN0LWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1sYWJzXCIgdGl0bGU9XCJQTyBTZWxlY3QgTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1sYWJzL3NhbXBsZS1wby1zZWxlY3QtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb25cIiB0aXRsZT1cIlBPIFNlbGVjdCAtIEN1c3RvbWVyIHJlZ2lzdHJhdGlvblwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPSdzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuZTJlLXNwZWMudHMnPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5wby50cyc+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGNvbXBvbmVudGUgcG8tc2VsZWN0IGV4aWJlIHVtYSBsaXN0YSBkZSB2YWxvcmVzIGUgcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBzZWxlY2lvbmUgdW0gZGVzc2VzIHZhbG9yZXMuXG4gKiBPcyB2YWxvcmVzIGxpc3RhZG9zIHBvZGVtIHNlciBmaXhvcyBvdSBkaW7Dom1pY29zIGRlIGFjb3JkbyBjb20gYSBuZWNlc3NpZGFkZSBkbyBkZXNlbnZvbHZlZG9yLCBkYW5kbyBtYWlzIGZsZXhpYmlsaWRhZGUgYW8gY29tcG9uZW50ZS5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBpbmZvcm1lIHVtIHZhbG9yIGRpZmVyZW50ZSBkb3MgdmFsb3JlcyBsaXN0YWRvcywgaXNzbyBnYXJhbnRlIGEgY29uc2lzdMOqbmNpYSBkYSBpbmZvcm1hw6fDo28uXG4gKiBPIHBvLXNlbGVjdCBuw6NvIHBlcm1pdGUgcXVlIHNlamFtIHBhc3NhZG9zIHZhbG9yZXMgZHVwbGljYWRvcywgdW5kZWZpbmVkIGUgbnVsbCBwYXJhIGFzIG9ww6fDtWVzLCBleGNsdWluZG8tb3MgZGEgbGlzdGEuXG4gKlxuICogPiBBbyBwYXNzYXIgdW0gdmFsb3IgcGFyYSBvIF9tb2RlbF8gcXVlIG7Do28gZXN0w6EgbmEgbGlzdGEgZGUgb3DDp8O1ZXMsIG8gbWVzbW8gc2Vyw6EgZGVmaW5pZG8gY29tbyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBUYW1iw6ltIGV4aXN0ZSBhIHBvc3NpYmlsaWRhZGUgZGUgdXRpbGl6YXIgdW0gX3RlbXBsYXRlXyBwYXJhIGEgZXhpYmnDp8OjbyBkb3MgaXRlbnMgZGEgbGlzdGEsXG4gKiB2ZWphIG1haXMgZW0gKipbcC1jb21iby1vcHRpb24tdGVtcGxhdGVdKC9kb2N1bWVudGF0aW9uL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZSkqKi5cbiAqXG4gKiA+IE9iczogbyB0ZW1wbGF0ZSAqKltwLXNlbGVjdC1vcHRpb24tdGVtcGxhdGVdKC9kb2N1bWVudGF0aW9uL3BvLXNlbGVjdC1vcHRpb24tdGVtcGxhdGUpKiogc2Vyw6EgZGVwcmVjaWFkbyBuYSB2ZXJzw6NvIDE0LngueC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgUG9GaWVsZFZhbGlkYXRlTW9kZWw8YW55PiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBAVmlld0NoaWxkKCdjb250ZW50TGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRMaXN0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHNlbGVjdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHNlbGVjdEJ1dHRvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcGFyYSBhdHVhbGl6YXIgbyBuZ01vZGVsIGRvIGNvbXBvbmVudGUsIG5lY2Vzc8OhcmlvIHF1YW5kbyBuw6NvIGZvciB1dGlsaXphZG8gZGVudHJvIGRhIHRhZyBmb3JtLlxuICAgKlxuICAgKiBOYSB2ZXJzw6NvIDEyLjIuMCBkbyBBbmd1bGFyIGEgdmVyaWZpY2HDp8OjbyBgc3RyaWN0VGVtcGxhdGVzYCB2ZW0gdHJ1ZSBjb21vIGRlZmF1bHQuIFBvcnRhbnRvLCBwYXJhIHV0aWxpemFyXG4gICAqIHR3by13YXkgYmluZGluZyBubyBjb21wb25lbnRlIGRldmUgc2UgdXRpbGl6YXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tc2VsZWN0IC4uLiBbbmdNb2RlbF09XCJzZWxlY3RNb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdE1vZGVsID0gJGV2ZW50XCI+IDwvcG8tc2VsZWN0PlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoJ25nTW9kZWxDaGFuZ2UnKSBuZ01vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBzb21lbnRlIHBhcmEgbGVpdHVyYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlYWRvbmx5JykgQElucHV0Qm9vbGVhbigpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE1lbnNhZ2VtIHF1ZSBhcGFyZWNlcsOhIGVucXVhbnRvIG5lbmh1bWEgb3DDp8OjbyBlc3RpdmVyIHNlbGVjaW9uYWRhLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICBkaXNwbGF5VmFsdWU7XG4gIGlzTW9iaWxlOiBhbnkgPSBpc01vYmlsZSgpO1xuICBtb2RlbFZhbHVlOiBhbnk7XG4gIG9uTW9kZWxDaGFuZ2U6IGFueTtcbiAgb3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIHNlbGVjdE9wdGlvblRlbXBsYXRlOiBhbnk7XG4gIHNlbGVjdEljb246IHN0cmluZyA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICBzY3JvbGxQb3NpdGlvbjogbnVtYmVyO1xuXG4gIGV2ZW50TGlzdGVuZXJGdW5jdGlvbjogKCkgPT4gdm9pZDtcbiAgZXZlbnRSZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBvbk1vZGVsVG91Y2hlZDogYW55O1xuICBwcm90ZWN0ZWQgY2xpY2tvdXRMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBkaWZmZXI6IGFueTtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9TZWxlY3RPcHRpb24+O1xuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBkZWZpbmlkbyB1bWEgY29sZcOnw6NvIGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIGBQb1NlbGVjdE9wdGlvbmAuXG4gICAqXG4gICAqIENhc28gZXN0YSBsaXN0YSBlc3RpdmVyIHZhemlhLCBvIG1vZGVsIHNlcsOhIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgw6kgaW11dMOhdmVsLCBvdSBzZWphLCBzZW1wcmUgcXVlIHF1aXNlciBhdHVhbGl6YXIgYSBsaXN0YSBkZSBvcMOnw7VlcyBkaXNwb27DrXZlaXNcbiAgICogYXR1YWxpemUgYSByZWZlcsOqbmNpYSBkbyBvYmpldG86XG4gICAqXG4gICAqIGBgYFxuICAgKiAvLyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBnYXJhbnRpbmRvIGEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCB7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9XTtcbiAgICpcbiAgICogLy8gZXZpdGUsIHBvaXMgbsOjbyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBwb2RlbmRvIGdlcmFyIGF0cmFzb3MgbmEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMucHVzaCh7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9KTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9ucycpIHNldCBvcHRpb25zKG9wdGlvbnM6IEFycmF5PFBvU2VsZWN0T3B0aW9uPikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIHRoaXMub25VcGRhdGVPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgZ2V0IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5ICYmIHRoaXMuaXNNb2JpbGU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duKCRldmVudD86IGFueSkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gJGV2ZW50LndoaWNoIHx8ICRldmVudC5rZXlDb2RlO1xuXG4gICAgLy8gVHJhdGFtZW50b3MgcGFyYSBxdWFuZG8gbyByZWFkb25seSBmb3IgYXRpdmFkby5cbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgLy8gZGV2ZSBtYXRhciBvIGV2ZW50byBkbyB0ZWNsYWRvIGRldmlkbyBhIGFsdGVyYXIgbyB2YWxvciBkbyBtb2RlbCBtZXNtbyBjb20gb3Mgb3B0aW9ucyBmZWNoYWRvc1xuICAgICAgaWYgKGNoYXJDb2RlICE9PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgICB0aGlzLmRpc2FibGVEZWZhdWx0RXZlbnRBbmRUb2dnbGVCdXR0b24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2VsZWNpb25hIG9zIGl0ZW5zIGNvbSBhcyB0ZWNsYXMgXCJ1cFwiIGUgXCJkb3duXCJcbiAgICBpZiAoKCF0aGlzLm9wZW4gfHwgJGV2ZW50LmFsdEtleSkgJiYgKGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLmFycm93RG93biB8fCBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd1VwKSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLy8gQWJyZSBvIHBvLXNlbGVjdCBjb20gYXMgdGVjbGFzIFwiZW50ZXJcIiBlIFwiZXNwYcOnb1wiXG4gICAgaWYgKGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLmVudGVyIHx8IGNoYXJDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICB0aGlzLmRpc2FibGVEZWZhdWx0RXZlbnRBbmRUb2dnbGVCdXR0b24oKTtcbiAgICB9XG5cbiAgICAvLyBGZWNoYSBvIHBvLXNlbGVjdCBjb20gYSB0ZWNsYSBcInRhYlwiXG4gICAgaWYgKHRoaXMub3BlbiAmJiBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgY29uc3QgY2hhbmdlID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9TZWxlY3RDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvU2VsZWN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWxlY3Q6IFBvU2VsZWN0Q29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c1NlbGVjdCgpIHtcbiAgICogICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVEcm9wRG93bigpIHtcbiAgICB0aGlzLnNlbGVjdEljb24gPSAncG8taWNvbi1hcnJvdy1kb3duJztcbiAgICB0aGlzLnNlbGVjdG9yKCcucG8tc2VsZWN0LWNvbnRhaW5lcicpLmNsYXNzTGlzdC5yZW1vdmUoJ3BvLXNlbGVjdC1zaG93Jyk7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQ/LigpO1xuICB9XG5cbiAgb25PcHRpb25DbGljayhvcHRpb246IFBvU2VsZWN0T3B0aW9uKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZUJ1dHRvbigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogUG9TZWxlY3RPcHRpb24gPSB0aGlzLmZpbmRPcHRpb25WYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlcyhvcHRpb25Gb3VuZCk7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ob3B0aW9uRm91bmQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uVXBkYXRlT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlKHRoaXMubW9kZWxWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVmFsdWUoaW5kZXgsIGNsaWVudEhlaWdodCkge1xuICAgIGNvbnN0IGhlaWdodFNjcm9sbFZhbHVlOiBudW1iZXIgPSBpbmRleCAqIHRoaXMuZ2V0U2VsZWN0SXRlbUhlaWdodCgpO1xuXG4gICAgcmV0dXJuICh0aGlzLnNjcm9sbFBvc2l0aW9uID0gaGVpZ2h0U2Nyb2xsVmFsdWUgPiBjbGllbnRIZWlnaHQgPyBoZWlnaHRTY3JvbGxWYWx1ZSA6IDApO1xuICB9XG5cbiAgc2VsZWN0b3IocXVlcnk6IHN0cmluZyk6IEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHF1ZXJ5KTtcbiAgfVxuXG4gIHRvZ2dsZUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4gPyB0aGlzLmhpZGVEcm9wRG93bigpIDogdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgfVxuXG4gIC8vIEF0dWFsaXphIHZhbG9yZXNcbiAgdXBkYXRlVmFsdWVzKG9wdGlvbjogUG9TZWxlY3RPcHRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICE9PSBvcHRpb24udmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChvcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBvcHRpb24ubGFiZWw7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBFc2NvbmRlIENvbnRlbnQgZG8gU2VsZWN0IHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNlbGVjdEJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5pY29uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjZWJlIGFzIGFsdGVyYcOnw7VlcyBkbyBtb2RlbFxuICBvbldyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbkZvdW5kOiBQb1NlbGVjdE9wdGlvbiA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kLnZhbHVlO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBvcHRpb25Gb3VuZC5sYWJlbDtcbiAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ob3B0aW9uRm91bmQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsaWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZXh0cmFWYWxpZGF0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBuZWNlc3PDoXJpbyBwYXJhIGJsb3F1ZWFyIG8gZXZlbnRvIGRlZmF1bHQgZG8gc2VsZWN0IG5hdGl2by5cbiAgLy8gQW8gdXRpbGl6YXIgZXZlbnQucHJldmVudERlZmF1bHQoKSwgbm9zIG5hdmVnYWRvcmVzIEZpcmVmb3ggZSBJRSBvIG1lc21vIG7Do28gY2FuY2VsYSBvIGV2ZW50by5cbiAgcHJpdmF0ZSBkaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCkge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9wdGlvblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdEl0ZW1IZWlnaHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbSA9IHRoaXMuc2VsZWN0b3IoJ2Rpdi5wby1zZWxlY3QtaXRlbScpO1xuXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW0gJiYgc2VsZWN0SXRlbS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja291dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250ZW50TGlzdC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9TZWxlY3RDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5zZWxlY3RCdXR0b25FbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbFBvc2l0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB1bERyb3BkcHduID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwucG8tc2VsZWN0LWNvbnRlbnQnKTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uRm91bmQ6IFBvU2VsZWN0T3B0aW9uID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaW5kZXhPZihvcHRpb25Gb3VuZCk7XG4gICAgICAgIHVsRHJvcGRwd24uc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxWYWx1ZShpbmRleCwgdWxEcm9wZHB3bi5jbGllbnRIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Ryb3Bkb3duKCkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0SWNvbiA9ICdwby1pY29uLWFycm93LXVwJztcbiAgICAgIHRoaXMuc2VsZWN0b3IoJy5wby1zZWxlY3QtY29udGFpbmVyJykuY2xhc3NMaXN0LmFkZCgncG8tc2VsZWN0LXNob3cnKTtcbiAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPHNlbGVjdFxuICAgICNzZWxlY3RcbiAgICBjbGFzcz1cInBvLXNlbGVjdFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3BvLXNlbGVjdC1tb2JpbGUnOiBpc01vYmlsZSwgJ3BvLWludmlzaWJsZSc6IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICA+XG4gICAgPG9wdGlvbiAqbmdJZj1cImlzTW9iaWxlXCIgZGlzYWJsZWQgaGlkZGVuIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKG9wdGlvbilcIj5cbiAgICAgIHt7IG9wdGlvbj8ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXNlbGVjdC1jb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICAjc2VsZWN0QnV0dG9uXG4gICAgICBjbGFzcz1cInBvLXNlbGVjdC1idXR0b25cIlxuICAgICAgW25nQ2xhc3NdPVwieyAncG8tc2VsZWN0LWJ1dHRvbi1kaXNhYmxlZCc6IGRpc2FibGVkLCAncG8tc2VsZWN0LWJ1dHRvbi1yZWFkb25seSc6IHJlYWRvbmx5IH1cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUJ1dHRvbigpXCJcbiAgICA+XG4gICAgICA8c3Bhbj57eyBkaXNwbGF5VmFsdWUgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNpY29uXG4gICAgICAgICAgY2xhc3M9XCJwby1pY29uIHt7IHNlbGVjdEljb24gfX0gcG8tZmllbGQtaWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAncG8tZmllbGQtaWNvbi1kaXNhYmxlZCc6IGRpc2FibGVkLCAncG8tZmllbGQtaWNvbi1yZWFkb25seSc6IHJlYWRvbmx5IH1cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8dWwgI2NvbnRlbnRMaXN0IGNsYXNzPVwicG8tc2VsZWN0LWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7ICdwby1pbnZpc2libGUnOiBpc01vYmlsZSB9XCI+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICAgICAgW2NsYXNzLnBvLXNlbGVjdC1pdGVtLXNlbGVjdGVkXT1cInNlbGVjdGVkVmFsdWUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhvcHRpb24pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE9wdGlvblRlbXBsYXRlOyB0aGVuIG9wdGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24/LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNvcHRpb25UZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0T3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG4iXX0=
561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixxQ0FBcUMsRUFDckMsNkJBQTZCLEVBQzdCLDJDQUEyQyxFQUMzQyxVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7SUNsQjlELDZCQUEyRDs7OztJQUMzRCxrQ0FLQztJQURDLDhOQUFTLGVBQUEsK0JBQXFCLENBQUEsSUFBQztJQUUvQixZQUNGO0lBQUEsaUJBQVM7Ozs7SUFMUCwwQ0FBcUIsa0VBQUE7SUFJckIsZUFDRjtJQURFLHdGQUNGOzs7SUE2Qk0sd0JB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QVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgaXNNb2JpbGUsXG4gIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zLFxuICByZW1vdmVEdXBsaWNhdGVkT3B0aW9uc1dpdGhGaWVsZFZhbHVlLFxuICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9ucyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgdmFsaWRWYWx1ZVxufSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBwb1NlbGVjdENvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9TZWxlY3RDb250ZW50UG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRWYWxpZGF0ZU1vZGVsXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWJhc2ljXCIgdGl0bGU9XCJQTyBTZWxlY3QgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtYmFzaWMvc2FtcGxlLXBvLXNlbGVjdC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWxhYnNcIiB0aXRsZT1cIlBPIFNlbGVjdCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtbGFicy9zYW1wbGUtcG8tc2VsZWN0LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvblwiIHRpdGxlPVwiUE8gU2VsZWN0IC0gQ3VzdG9tZXIgcmVnaXN0cmF0aW9uXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5lMmUtc3BlYy50cyc+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT0nc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnBvLnRzJz4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zZWxlY3QtY29tcGFuaWVzXCIgdGl0bGU9XCJQTyBTZWxlY3QgQ29tcGFuaWVzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBwby1zZWxlY3QgZXhpYmUgdW1hIGxpc3RhIGRlIHZhbG9yZXMgZSBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIHNlbGVjaW9uZSB1bSBkZXNzZXMgdmFsb3Jlcy5cbiAqIE9zIHZhbG9yZXMgbGlzdGFkb3MgcG9kZW0gc2VyIGZpeG9zIG91IGRpbsOibWljb3MgZGUgYWNvcmRvIGNvbSBhIG5lY2Vzc2lkYWRlIGRvIGRlc2Vudm9sdmVkb3IsIGRhbmRvIG1haXMgZmxleGliaWxpZGFkZSBhbyBjb21wb25lbnRlLlxuICogTyBwby1zZWxlY3QgbsOjbyBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGluZm9ybWUgdW0gdmFsb3IgZGlmZXJlbnRlIGRvcyB2YWxvcmVzIGxpc3RhZG9zLCBpc3NvIGdhcmFudGUgYSBjb25zaXN0w6puY2lhIGRhIGluZm9ybWHDp8Ojby5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgc2VqYW0gcGFzc2Fkb3MgdmFsb3JlcyBkdXBsaWNhZG9zLCB1bmRlZmluZWQgZSBudWxsIHBhcmEgYXMgb3DDp8O1ZXMsIGV4Y2x1aW5kby1vcyBkYSBsaXN0YS5cbiAqXG4gKiA+IEFvIHBhc3NhciB1bSB2YWxvciBwYXJhIG8gX21vZGVsXyBxdWUgbsOjbyBlc3TDoSBuYSBsaXN0YSBkZSBvcMOnw7VlcywgbyBtZXNtbyBzZXLDoSBkZWZpbmlkbyBjb21vIGB1bmRlZmluZWRgLlxuICpcbiAqIFRhbWLDqW0gZXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSB1dGlsaXphciB1bSBfdGVtcGxhdGVfIHBhcmEgYSBleGliacOnw6NvIGRvcyBpdGVucyBkYSBsaXN0YSxcbiAqIHZlamEgbWFpcyBlbSAqKltwLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlKSoqLlxuICpcbiAqID4gT2JzOiBvIHRlbXBsYXRlICoqW3Atc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZSkqKiBzZXLDoSBkZXByZWNpYWRvIG5hIHZlcnPDo28gMTQueC54LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb1NlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBQb0ZpZWxkVmFsaWRhdGVNb2RlbDxhbnk+IGltcGxlbWVudHMgRG9DaGVjayB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRMaXN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGVudExpc3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0QnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1zZWxlY3QgLi4uIFtuZ01vZGVsXT1cInNlbGVjdE1vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0TW9kZWwgPSAkZXZlbnRcIj4gPC9wby1zZWxlY3Q+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgcGFyYSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBASW5wdXRCb29sZWFuKCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbmVuaHVtYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEuICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlcicpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIGRpc3BsYXlWYWx1ZTtcbiAgaXNNb2JpbGU6IGFueSA9IGlzTW9iaWxlKCk7XG4gIG1vZGVsVmFsdWU6IGFueTtcbiAgb25Nb2RlbENoYW5nZTogYW55O1xuICBvcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkVmFsdWU6IGFueTtcbiAgc2VsZWN0T3B0aW9uVGVtcGxhdGU6IGFueTtcbiAgc2VsZWN0SWNvbjogc3RyaW5nID0gJ3BvLWljb24tYXJyb3ctZG93bic7XG4gIHNjcm9sbFBvc2l0aW9uOiBudW1iZXI7XG5cbiAgZXZlbnRMaXN0ZW5lckZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuICBldmVudFJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIG9uTW9kZWxUb3VjaGVkOiBhbnk7XG4gIHByb3RlY3RlZCBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGRpZmZlcjogYW55O1xuICBwcml2YXRlIF9maWVsZExhYmVsPzogc3RyaW5nID0gUE9fU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVDtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9TZWxlY3RPcHRpb24+IHwgQXJyYXk8YW55PjtcblxuICAvKipcbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgZGVmaW5pZG8gdW1hIGNvbGXDp8OjbyBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9TZWxlY3RPcHRpb25gLlxuICAgKlxuICAgKiBDYXNvIGVzdGEgbGlzdGEgZXN0aXZlciB2YXppYSwgbyBtb2RlbCBzZXLDoSBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogPiBFc3NhIHByb3ByaWVkYWRlIMOpIGltdXTDoXZlbCwgb3Ugc2VqYSwgc2VtcHJlIHF1ZSBxdWlzZXIgYXR1YWxpemFyIGEgbGlzdGEgZGUgb3DDp8O1ZXMgZGlzcG9uw612ZWlzXG4gICAqIGF0dWFsaXplIGEgcmVmZXLDqm5jaWEgZG8gb2JqZXRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogLy8gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gZ2FyYW50aW5kbyBhIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9ucywgeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfV07XG4gICAqXG4gICAqIC8vIGV2aXRlLCBwb2lzIG7Do28gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gcG9kZW5kbyBnZXJhciBhdHJhc29zIG5hIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zLnB1c2goeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbnMnKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZmllbGRMYWJlbCAmJiB0aGlzLmZpZWxkVmFsdWUpIHtcbiAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICBvcHRpb24udmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKFsuLi5vcHRpb25zXSk7XG4gICAgdGhpcy5vblVwZGF0ZU9wdGlvbnMoKTtcbiAgICB0aGlzLl9vcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSB8fCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVDtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX1NFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGdldCBpc0ludmlzaWJsZVNlbGVjdE5hdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSAmJiB0aGlzLmlzTW9iaWxlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bigkZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9ICRldmVudC53aGljaCB8fCAkZXZlbnQua2V5Q29kZTtcblxuICAgIC8vIFRyYXRhbWVudG9zIHBhcmEgcXVhbmRvIG8gcmVhZG9ubHkgZm9yIGF0aXZhZG8uXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIC8vIGRldmUgbWF0YXIgbyBldmVudG8gZG8gdGVjbGFkbyBkZXZpZG8gYSBhbHRlcmFyIG8gdmFsb3IgZG8gbW9kZWwgbWVzbW8gY29tIG9zIG9wdGlvbnMgZmVjaGFkb3NcbiAgICAgIGlmIChjaGFyQ29kZSAhPT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlbGVjaW9uYSBvcyBpdGVucyBjb20gYXMgdGVjbGFzIFwidXBcIiBlIFwiZG93blwiXG4gICAgaWYgKCghdGhpcy5vcGVuIHx8ICRldmVudC5hbHRLZXkpICYmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24gfHwgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dVcCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZURlZmF1bHRFdmVudEFuZFRvZ2dsZUJ1dHRvbigpO1xuICAgIH1cblxuICAgIC8vIEFicmUgbyBwby1zZWxlY3QgY29tIGFzIHRlY2xhcyBcImVudGVyXCIgZSBcImVzcGHDp29cIlxuICAgIGlmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlciB8fCBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLy8gRmVjaGEgbyBwby1zZWxlY3QgY29tIGEgdGVjbGEgXCJ0YWJcIlxuICAgIGlmICh0aGlzLm9wZW4gJiYgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0udGFiKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5vcHRpb25zKTtcbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICByZW1vdmVEdXBsaWNhdGVkT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSh0aGlzLm9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9TZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdDogUG9TZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzU2VsZWN0KCkge1xuICAgKiAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZURyb3BEb3duKCkge1xuICAgIHRoaXMuc2VsZWN0SWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICAgIHRoaXMuc2VsZWN0b3IoJy5wby1zZWxlY3QtY29udGFpbmVyJykuY2xhc3NMaXN0LnJlbW92ZSgncG8tc2VsZWN0LXNob3cnKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZUJ1dHRvbigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogYW55ID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uRm91bmQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZU9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZSh0aGlzLm1vZGVsVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFZhbHVlKGluZGV4LCBjbGllbnRIZWlnaHQpIHtcbiAgICBjb25zdCBoZWlnaHRTY3JvbGxWYWx1ZTogbnVtYmVyID0gaW5kZXggKiB0aGlzLmdldFNlbGVjdEl0ZW1IZWlnaHQoKTtcblxuICAgIHJldHVybiAodGhpcy5zY3JvbGxQb3NpdGlvbiA9IGhlaWdodFNjcm9sbFZhbHVlID4gY2xpZW50SGVpZ2h0ID8gaGVpZ2h0U2Nyb2xsVmFsdWUgOiAwKTtcbiAgfVxuXG4gIHNlbGVjdG9yKHF1ZXJ5OiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG4gIH1cblxuICB0b2dnbGVCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID8gdGhpcy5oaWRlRHJvcERvd24oKSA6IHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICAvLyBBdHVhbGl6YSB2YWxvcmVzXG4gIHVwZGF0ZVZhbHVlcyhvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVzY29uZGUgQ29udGVudCBkbyBTZWxlY3QgcXVhbmRvIGZvciBjbGljYWRvIGZvcmFcbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2VsZWN0QnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5oaWRlRHJvcERvd24oKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNlYmUgYXMgYWx0ZXJhw6fDtWVzIGRvIG1vZGVsXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH0gZWxzZSBpZiAodmFsaWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZXh0cmFWYWxpZGF0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBuZWNlc3PDoXJpbyBwYXJhIGJsb3F1ZWFyIG8gZXZlbnRvIGRlZmF1bHQgZG8gc2VsZWN0IG5hdGl2by5cbiAgLy8gQW8gdXRpbGl6YXIgZXZlbnQucHJldmVudERlZmF1bHQoKSwgbm9zIG5hdmVnYWRvcmVzIEZpcmVmb3ggZSBJRSBvIG1lc21vIG7Do28gY2FuY2VsYSBvIGV2ZW50by5cbiAgcHJpdmF0ZSBkaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCkge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9wdGlvblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdEl0ZW1IZWlnaHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbSA9IHRoaXMuc2VsZWN0b3IoJ2Rpdi5wby1zZWxlY3QtaXRlbScpO1xuXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW0gJiYgc2VsZWN0SXRlbS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja291dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250ZW50TGlzdC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9TZWxlY3RDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5zZWxlY3RCdXR0b25FbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbFBvc2l0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB1bERyb3BkcHduID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwucG8tc2VsZWN0LWNvbnRlbnQnKTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbkZvdW5kKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2Yob3B0aW9uRm91bmQpO1xuICAgICAgICB1bERyb3BkcHduLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVmFsdWUoaW5kZXgsIHVsRHJvcGRwd24uY2xpZW50SGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdEljb24gPSAncG8taWNvbi1hcnJvdy11cCc7XG4gICAgICB0aGlzLnNlbGVjdG9yKCcucG8tc2VsZWN0LWNvbnRhaW5lcicpLmNsYXNzTGlzdC5hZGQoJ3BvLXNlbGVjdC1zaG93Jyk7XG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUob3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKG9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPHNlbGVjdFxuICAgICNzZWxlY3RcbiAgICBjbGFzcz1cInBvLXNlbGVjdFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3BvLXNlbGVjdC1tb2JpbGUnOiBpc01vYmlsZSwgJ3BvLWludmlzaWJsZSc6IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICA+XG4gICAgPG9wdGlvbiAqbmdJZj1cImlzTW9iaWxlXCIgZGlzYWJsZWQgaGlkZGVuIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgIDxvcHRpb25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgW3ZhbHVlXT1cIm9wdGlvbj8uW3RoaXMuZmllbGRWYWx1ZV1cIlxuICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgPlxuICAgICAge3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cblxuICA8ZGl2IGNsYXNzPVwicG8tc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXZcbiAgICAgICNzZWxlY3RCdXR0b25cbiAgICAgIGNsYXNzPVwicG8tc2VsZWN0LWJ1dHRvblwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdwby1zZWxlY3QtYnV0dG9uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1zZWxlY3QtYnV0dG9uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQnV0dG9uKClcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGRpc3BsYXlWYWx1ZSB8fCBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgI2ljb25cbiAgICAgICAgICBjbGFzcz1cInBvLWljb24ge3sgc2VsZWN0SWNvbiB9fSBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwby1maWVsZC1pY29uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1maWVsZC1pY29uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDx1bCAjY29udGVudExpc3QgY2xhc3M9XCJwby1zZWxlY3QtY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ3BvLWludmlzaWJsZSc6IGlzTW9iaWxlIH1cIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbY2xhc3MucG8tc2VsZWN0LWl0ZW0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRWYWx1ZSA9PT0gb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXVwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24/Llt0aGlzLmZpZWxkVmFsdWVdXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1zZWxlY3QtaXRlbVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RPcHRpb25UZW1wbGF0ZTsgdGhlbiBvcHRpb25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T3B0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjb3B0aW9uVGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdE9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19
@@ -4,9 +4,14 @@ import { PoFieldModel } from '../po-field.model';
4
4
  import { PoKeyCodeEnum } from './../../../enums/po-key-code.enum';
5
5
  import { PoSwitchLabelPosition } from './po-switch-label-position.enum';
6
6
  import * as i0 from "@angular/core";
7
- import * as i1 from "../po-field-container/po-field-container-bottom/po-field-container-bottom.component";
8
- import * as i2 from "../po-field-container/po-field-container.component";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "../po-field-container/po-field-container-bottom/po-field-container-bottom.component";
9
+ import * as i3 from "../po-field-container/po-field-container.component";
10
+ import * as i4 from "../../po-icon/po-icon.component";
9
11
  const _c0 = ["switchContainer"];
12
+ function PoSwitchComponent_po_icon_7_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelement(0, "po-icon", 9);
14
+ } }
10
15
  /**
11
16
  * @docsExtends PoFieldModel
12
17
  *
@@ -15,13 +20,24 @@ const _c0 = ["switchContainer"];
15
20
  * O componente `po-switch` é um [checkbox](/documentation/po-checkbox-group) mais intuitivo, pois faz analogia a um interruptor.
16
21
  * Deve ser usado quando deseja-se transmitir a ideia de ligar / desligar uma funcionalidade específica.
17
22
  *
18
- * Pode-se ligar ou deligar o botão utilizando a tecla de espaço ou o clique do mouse.
23
+ * Pode-se ligar ou desligar o switch utilizando a tecla de espaço ou o clique do mouse.
19
24
  *
20
25
  * O texto exibido pode ser alterado de acordo com o valor setado aumentando as possibilidades de uso do componente,
21
26
  * portanto, recomenda-se informar textos que contextualizem seu uso para que facilite a compreensão do usuário.
22
27
  *
23
28
  * > O componente não altera o valor incial informado no *model*, portanto indica-se inicializa-lo caso ter necessidade.
24
29
  *
30
+ * #### Boas práticas
31
+ *
32
+ * - Evite `labels` extensos que quebram o layout do `po-switch`, use `labels` diretos, curtos e intuitivos.
33
+ *
34
+ * #### Acessibilidade tratada no componente
35
+ *
36
+ * Algumas diretrizes de acessibilidade já são tratadas no componente, internamente, e não podem ser alteradas pelo proprietário do conteúdo. São elas:
37
+ *
38
+ * - Quando em foco, o switch é ativado usando a tecla de Espaço. [W3C WAI-ARIA 3.5 Switch - Keyboard Interaction](https://www.w3.org/WAI/ARIA/apg/patterns/switch/#keyboard-interaction-19)
39
+ * - A área do foco precisar ter uma espessura de pelo menos 2 pixels CSS e o foco não pode ficar escondido por outros elementos da tela. [WCAG 2.4.12: Focus Appearance](https://www.w3.org/WAI/WCAG22/Understanding/focus-appearance-enhanced)
40
+ *
25
41
  * @example
26
42
  *
27
43
  * <example name="po-switch-basic" title="PO Switch Basic">
@@ -127,16 +143,6 @@ export class PoSwitchComponent extends PoFieldModel {
127
143
  return 'right';
128
144
  }
129
145
  }
130
- getSwitchPosition() {
131
- switch (this.labelPosition) {
132
- case PoSwitchLabelPosition.Left:
133
- return 'right';
134
- case PoSwitchLabelPosition.Right:
135
- return 'left';
136
- default:
137
- return 'left';
138
- }
139
- }
140
146
  onKeyDown(event) {
141
147
  if (event.which === PoKeyCodeEnum.space || event.keyCode === PoKeyCodeEnum.space) {
142
148
  event.preventDefault();
@@ -174,34 +180,32 @@ PoSwitchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSwitchC
174
180
  useExisting: forwardRef(() => PoSwitchComponent),
175
181
  multi: true
176
182
  }
177
- ]), i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 25, consts: [[3, "p-label", "p-help"], [1, "po-field-container-content", "po-switch-content"], [1, "po-switch-container", "po-clickable", 3, "tabindex", "click", "keydown", "blur"], ["switchContainer", ""], [1, "po-switch-button"], [3, "click"]], template: function PoSwitchComponent_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "po-field-container", 0)(1, "div", 1)(2, "div", 2, 3);
179
- i0.ɵɵlistener("click", function PoSwitchComponent_Template_div_click_2_listener() { return ctx.eventClick(); })("keydown", function PoSwitchComponent_Template_div_keydown_2_listener($event) { return ctx.onKeyDown($event); })("blur", function PoSwitchComponent_Template_div_blur_2_listener() { return ctx.onBlur(); });
180
- i0.ɵɵelementStart(4, "div", 4);
181
- i0.ɵɵelement(5, "span");
182
- i0.ɵɵelementEnd()();
183
- i0.ɵɵelementStart(6, "span", 5);
184
- i0.ɵɵlistener("click", function PoSwitchComponent_Template_span_click_6_listener() { return ctx.eventClick(); });
185
- i0.ɵɵtext(7);
186
- i0.ɵɵelementEnd()();
187
- i0.ɵɵelement(8, "po-field-container-bottom");
183
+ ]), i0.ɵɵInheritDefinitionFeature], decls: 11, vars: 10, consts: [[3, "p-label", "p-help"], [1, "po-field-container-content"], [1, "po-switch"], ["role", "switch", 1, "po-switch-container", 3, "tabindex", "blur", "click", "keydown"], ["switchContainer", ""], [1, "po-switch-track"], [1, "po-switch-toggle"], ["class", "po-switch-icon", "p-icon", "po-icon-ok", 4, "ngIf"], [1, "po-switch-label", 3, "click"], ["p-icon", "po-icon-ok", 1, "po-switch-icon"]], template: function PoSwitchComponent_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "po-field-container", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3, 4);
185
+ i0.ɵɵlistener("blur", function PoSwitchComponent_Template_div_blur_3_listener() { return ctx.onBlur(); })("click", function PoSwitchComponent_Template_div_click_3_listener() { return ctx.eventClick(); })("keydown", function PoSwitchComponent_Template_div_keydown_3_listener($event) { return ctx.onKeyDown($event); });
186
+ i0.ɵɵelementStart(5, "div", 5)(6, "div", 6);
187
+ i0.ɵɵtemplate(7, PoSwitchComponent_po_icon_7_Template, 1, 0, "po-icon", 7);
188
+ i0.ɵɵelementEnd()()();
189
+ i0.ɵɵelementStart(8, "span", 8);
190
+ i0.ɵɵlistener("click", function PoSwitchComponent_Template_span_click_8_listener() { return ctx.eventClick(); });
191
+ i0.ɵɵtext(9);
192
+ i0.ɵɵelementEnd()()();
193
+ i0.ɵɵelement(10, "po-field-container-bottom");
188
194
  i0.ɵɵelementEnd();
189
195
  } if (rf & 2) {
190
196
  i0.ɵɵproperty("p-label", ctx.label)("p-help", ctx.help);
191
197
  i0.ɵɵadvance(1);
192
198
  i0.ɵɵattribute("name", ctx.name);
193
199
  i0.ɵɵadvance(1);
194
- i0.ɵɵclassProp("po-switch-container-disabled", ctx.disabled)("po-switch-container-off", ctx.value === false && !ctx.disabled)("po-switch-container-on", ctx.value === true && !ctx.disabled)("po-switch-container-right", ctx.getSwitchPosition() === "right");
200
+ i0.ɵɵattribute("data-label-position", ctx.getLabelPosition());
201
+ i0.ɵɵadvance(1);
195
202
  i0.ɵɵproperty("tabindex", ctx.disabled ? -1 : 0);
203
+ i0.ɵɵattribute("aria-checked", ctx.value)("aria-disabled", ctx.disabled)("aria-label", ctx.value === true ? ctx.labelOn : ctx.labelOff);
204
+ i0.ɵɵadvance(4);
205
+ i0.ɵɵproperty("ngIf", ctx.value === true);
196
206
  i0.ɵɵadvance(2);
197
- i0.ɵɵclassProp("po-switch-button-on", ctx.value === true)("po-switch-button-off", ctx.value === false)("po-switch-button-disabled", ctx.disabled);
198
- i0.ɵɵadvance(1);
199
- i0.ɵɵclassMapInterpolate1("po-icon po-icon-", ctx.value === true ? "ok" : "close", "");
200
- i0.ɵɵadvance(1);
201
- i0.ɵɵclassMapInterpolate1("po-switch-label po-clickable po-switch-label-", ctx.getLabelPosition(), "");
202
- i0.ɵɵadvance(1);
203
207
  i0.ɵɵtextInterpolate1(" ", ctx.value === true ? ctx.labelOn : ctx.labelOff, " ");
204
- } }, dependencies: [i1.PoFieldContainerBottomComponent, i2.PoFieldContainerComponent], encapsulation: 2, changeDetection: 0 });
208
+ } }, dependencies: [i1.NgIf, i2.PoFieldContainerBottomComponent, i3.PoFieldContainerComponent, i4.PoIconComponent], encapsulation: 2, changeDetection: 0 });
205
209
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoSwitchComponent, [{
206
210
  type: Component,
207
211
  args: [{ selector: 'po-switch', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -210,7 +214,7 @@ PoSwitchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSwitchC
210
214
  useExisting: forwardRef(() => PoSwitchComponent),
211
215
  multi: true
212
216
  }
213
- ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\">\n <div class=\"po-field-container-content po-switch-content\" [attr.name]=\"name\">\n <div\n class=\"po-switch-container po-clickable\"\n #switchContainer\n [class.po-switch-container-disabled]=\"disabled\"\n [class.po-switch-container-off]=\"value === false && !disabled\"\n [class.po-switch-container-on]=\"value === true && !disabled\"\n [class.po-switch-container-right]=\"getSwitchPosition() === 'right'\"\n [tabindex]=\"disabled ? -1 : 0\"\n (click)=\"eventClick()\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n >\n <div\n class=\"po-switch-button\"\n [class.po-switch-button-on]=\"value === true\"\n [class.po-switch-button-off]=\"value === false\"\n [class.po-switch-button-disabled]=\"disabled\"\n >\n <span class=\"po-icon po-icon-{{ value === true ? 'ok' : 'close' }}\"></span>\n </div>\n </div>\n\n <span class=\"po-switch-label po-clickable po-switch-label-{{ getLabelPosition() }}\" (click)=\"eventClick()\">\n {{ value === true ? labelOn : labelOff }}\n </span>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
217
+ ], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\">\n <div class=\"po-field-container-content\" [attr.name]=\"name\">\n <div class=\"po-switch\" [attr.data-label-position]=\"getLabelPosition()\">\n <div\n #switchContainer\n class=\"po-switch-container\"\n role=\"switch\"\n [attr.aria-checked]=\"value\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"value === true ? labelOn : labelOff\"\n [tabindex]=\"disabled ? -1 : 0\"\n (blur)=\"onBlur()\"\n (click)=\"eventClick()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <div class=\"po-switch-track\">\n <div class=\"po-switch-toggle\">\n <po-icon *ngIf=\"value === true\" class=\"po-switch-icon\" p-icon=\"po-icon-ok\"></po-icon>\n </div>\n </div>\n </div>\n\n <span class=\"po-switch-label\" (click)=\"eventClick()\">\n {{ value === true ? labelOn : labelOff }}\n </span>\n </div>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
214
218
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { switchContainer: [{
215
219
  type: ViewChild,
216
220
  args: ['switchContainer', { static: true }]
@@ -224,4 +228,4 @@ PoSwitchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSwitchC
224
228
  type: Input,
225
229
  args: ['p-label-on']
226
230
  }] }); })();
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zd2l0Y2gvcG8tc3dpdGNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zd2l0Y2gvcG8tc3dpdGNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQWFILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFxQjtJQW9EMUQsWUFBb0IsY0FBaUM7UUFDbkQsS0FBSyxFQUFFLENBQUM7UUFEVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFqRHJELFVBQUssR0FBRyxLQUFLLENBQUM7UUFFTixjQUFTLEdBQVcsT0FBTyxDQUFDO1FBQzVCLGFBQVEsR0FBVyxNQUFNLENBQUM7UUFDMUIsbUJBQWMsR0FBMEIscUJBQXFCLENBQUMsS0FBSyxDQUFDO0lBK0M1RSxDQUFDO0lBN0NEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBK0IsYUFBYSxDQUFDLFFBQStCO1FBQzFFLElBQUksQ0FBQyxjQUFjLEdB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dGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQb0ZpZWxkTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcblxuaW1wb3J0IHsgUG9Td2l0Y2hMYWJlbFBvc2l0aW9uIH0gZnJvbSAnLi9wby1zd2l0Y2gtbGFiZWwtcG9zaXRpb24uZW51bSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRNb2RlbFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBgcG8tc3dpdGNoYCDDqSB1bSBbY2hlY2tib3hdKC9kb2N1bWVudGF0aW9uL3BvLWNoZWNrYm94LWdyb3VwKSBtYWlzIGludHVpdGl2bywgcG9pcyBmYXogYW5hbG9naWEgYSB1bSBpbnRlcnJ1cHRvci5cbiAqIERldmUgc2VyIHVzYWRvIHF1YW5kbyBkZXNlamEtc2UgdHJhbnNtaXRpciBhIGlkZWlhIGRlIGxpZ2FyIC8gZGVzbGlnYXIgdW1hIGZ1bmNpb25hbGlkYWRlIGVzcGVjw61maWNhLlxuICpcbiAqIFBvZGUtc2UgbGlnYXIgb3UgZGVsaWdhciBvIGJvdMOjbyB1dGlsaXphbmRvIGEgdGVjbGEgZGUgZXNwYcOnbyBvdSBvIGNsaXF1ZSBkbyBtb3VzZS5cbiAqXG4gKiBPIHRleHRvIGV4aWJpZG8gcG9kZSBzZXIgYWx0ZXJhZG8gZGUgYWNvcmRvIGNvbSBvIHZhbG9yIHNldGFkbyBhdW1lbnRhbmRvIGFzIHBvc3NpYmlsaWRhZGVzIGRlIHVzbyBkbyBjb21wb25lbnRlLFxuICogcG9ydGFudG8sIHJlY29tZW5kYS1zZSBpbmZvcm1hciB0ZXh0b3MgcXVlIGNvbnRleHR1YWxpemVtIHNldSB1c28gcGFyYSBxdWUgZmFjaWxpdGUgYSBjb21wcmVlbnPDo28gZG8gdXN1w6FyaW8uXG4gKlxuICogPiBPIGNvbXBvbmVudGUgbsOjbyBhbHRlcmEgbyB2YWxvciBpbmNpYWwgaW5mb3JtYWRvIG5vICptb2RlbCosIHBvcnRhbnRvIGluZGljYS1zZSBpbmljaWFsaXphLWxvIGNhc28gdGVyIG5lY2Vzc2lkYWRlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXN3aXRjaC1iYXNpY1wiIHRpdGxlPVwiUE8gU3dpdGNoIEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLWJhc2ljL3NhbXBsZS1wby1zd2l0Y2gtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1iYXNpYy9zYW1wbGUtcG8tc3dpdGNoLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXN3aXRjaC1sYWJzXCIgdGl0bGU9XCJQTyBTd2l0Y2ggTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1sYWJzL3NhbXBsZS1wby1zd2l0Y2gtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLWxhYnMvc2FtcGxlLXBvLXN3aXRjaC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLWxhYnMvc2FtcGxlLXBvLXN3aXRjaC1sYWJzLmNvbXBvbmVudC5lMmUtc3BlYy50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLWxhYnMvc2FtcGxlLXBvLXN3aXRjaC1sYWJzLmNvbXBvbmVudC5wby50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXN3aXRjaC1vcmRlclwiIHRpdGxlPVwiUE8gU3dpdGNoIC0gT3JkZXIgU3VtbWFyeVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1vcmRlci9zYW1wbGUtcG8tc3dpdGNoLW9yZGVyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zd2l0Y2gtb3JkZXIvc2FtcGxlLXBvLXN3aXRjaC1vcmRlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zd2l0Y2gtb3JkZXItcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gU3dpdGNoIC0gT3JkZXIgU3VtbWFyeSBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLW9yZGVyLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLXN3aXRjaC1vcmRlci1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zd2l0Y2gtb3JkZXItcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tc3dpdGNoLW9yZGVyLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tc3dpdGNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXN3aXRjaC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvU3dpdGNoQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvU3dpdGNoQ29tcG9uZW50IGV4dGVuZHMgUG9GaWVsZE1vZGVsPGJvb2xlYW4+IHtcbiAgQFZpZXdDaGlsZCgnc3dpdGNoQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgc3dpdGNoQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIHZhbHVlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfbGFiZWxPZmY6IHN0cmluZyA9ICdmYWxzZSc7XG4gIHByaXZhdGUgX2xhYmVsT246IHN0cmluZyA9ICd0cnVlJztcbiAgcHJpdmF0ZSBfbGFiZWxQb3NpdGlvbjogUG9Td2l0Y2hMYWJlbFBvc2l0aW9uID0gUG9Td2l0Y2hMYWJlbFBvc2l0aW9uLlJpZ2h0O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBvc2nDp8OjbyBkZSBleGliacOnw6NvIGRvIHLDs3R1bG8uXG4gICAqXG4gICAqID4gUG9yIHBhZHLDo28gZXhpYmUgw6AgZGlyZWl0YS5cbiAgICovXG4gIEBJbnB1dCgncC1sYWJlbC1wb3NpdGlvbicpIHNldCBsYWJlbFBvc2l0aW9uKHBvc2l0aW9uOiBQb1N3aXRjaExhYmVsUG9zaXRpb24pIHtcbiAgICB0aGlzLl9sYWJlbFBvc2l0aW9uID0gcG9zaXRpb24gaW4gUG9Td2l0Y2hMYWJlbFBvc2l0aW9uID8gcGFyc2VJbnQoPGFueT5wb3NpdGlvbiwgMTApIDogUG9Td2l0Y2hMYWJlbFBvc2l0aW9uLlJpZ2h0O1xuICB9XG5cbiAgZ2V0IGxhYmVsUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsUG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogVGV4dG8gZXhpYmlkbyBxdWFuZG8gbyB2YWxvciBkbyBjb21wb25lbnRlIGZvciBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtbGFiZWwtb2ZmJykgc2V0IGxhYmVsT2ZmKGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbE9mZiA9IGxhYmVsIHx8ICdmYWxzZSc7XG4gIH1cblxuICBnZXQgbGFiZWxPZmYoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsT2ZmO1xuICB9XG5cbiAgLyoqXG4gICAqIFRleHRvIGV4aWJpZG8gcXVhbmRvIG8gdmFsb3IgZG8gY29tcG9uZW50ZSBmb3IgYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCgncC1sYWJlbC1vbicpIHNldCBsYWJlbE9uKGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbE9uID0gbGFiZWwgfHwgJ3RydWUnO1xuICB9XG5cbiAgZ2V0IGxhYmVsT24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsT247XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIHRlciBhIGluc3TDom5jaWEgZG8gY29tcG9uZW50ZSBubyBET00sIHBvZGVuZG8gc2VyIHV0aWxpemFkbyBvIFZpZXdDaGlsZCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7IFBvU3dpdGNoQ29tcG9uZW50IH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuICAgKlxuICAgKiAuLi5cbiAgICpcbiAgICogQFZpZXdDaGlsZChQb1N3aXRjaENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgc3dpdGNoOiBQb1N3aXRjaENvbXBvbmVudDtcbiAgICpcbiAgICogZm9jdXNTd2l0Y2goKSB7XG4gICAqICAgdGhpcy5zd2l0Y2guZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zd2l0Y2hDb250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gIH1cblxuICBnZXRMYWJlbFBvc2l0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5sYWJlbFBvc2l0aW9uKSB7XG4gICAgICBjYXNlIFBvU3dpdGNoTGFiZWxQb3NpdGlvbi5MZWZ0OlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSBQb1N3aXRjaExhYmVsUG9zaXRpb24uUmlnaHQ6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3dpdGNoUG9zaXRpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLmxhYmVsUG9zaXRpb24pIHtcbiAgICAgIGNhc2UgUG9Td2l0Y2hMYWJlbFBvc2l0aW9uLkxlZnQ6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgY2FzZSBQb1N3aXRjaExhYmVsUG9zaXRpb24uUmlnaHQ6XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5RG93bihldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSB8fCBldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5ldmVudENsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh2YWx1ZSk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZXZlbnRDbGljaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlVmFsdWUoIXRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gISF2YWx1ZTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIj5cbiAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLXN3aXRjaC1jb250ZW50XCIgW2F0dHIubmFtZV09XCJuYW1lXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwby1zd2l0Y2gtY29udGFpbmVyIHBvLWNsaWNrYWJsZVwiXG4gICAgICAjc3dpdGNoQ29udGFpbmVyXG4gICAgICBbY2xhc3MucG8tc3dpdGNoLWNvbnRhaW5lci1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbY2xhc3MucG8tc3dpdGNoLWNvbnRhaW5lci1vZmZdPVwidmFsdWUgPT09IGZhbHNlICYmICFkaXNhYmxlZFwiXG4gICAgICBbY2xhc3MucG8tc3dpdGNoLWNvbnRhaW5lci1vbl09XCJ2YWx1ZSA9PT0gdHJ1ZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLnBvLXN3aXRjaC1jb250YWluZXItcmlnaHRdPVwiZ2V0U3dpdGNoUG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG4gICAgICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgKGNsaWNrKT1cImV2ZW50Q2xpY2soKVwiXG4gICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBvLXN3aXRjaC1idXR0b25cIlxuICAgICAgICBbY2xhc3MucG8tc3dpdGNoLWJ1dHRvbi1vbl09XCJ2YWx1ZSA9PT0gdHJ1ZVwiXG4gICAgICAgIFtjbGFzcy5wby1zd2l0Y2gtYnV0dG9uLW9mZl09XCJ2YWx1ZSA9PT0gZmFsc2VcIlxuICAgICAgICBbY2xhc3MucG8tc3dpdGNoLWJ1dHRvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicG8taWNvbiBwby1pY29uLXt7IHZhbHVlID09PSB0cnVlID8gJ29rJyA6ICdjbG9zZScgfX1cIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxzcGFuIGNsYXNzPVwicG8tc3dpdGNoLWxhYmVsIHBvLWNsaWNrYWJsZSBwby1zd2l0Y2gtbGFiZWwte3sgZ2V0TGFiZWxQb3NpdGlvbigpIH19XCIgKGNsaWNrKT1cImV2ZW50Q2xpY2soKVwiPlxuICAgICAge3sgdmFsdWUgPT09IHRydWUgPyBsYWJlbE9uIDogbGFiZWxPZmYgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zd2l0Y2gvcG8tc3dpdGNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zd2l0Y2gvcG8tc3dpdGNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7O0lDRzVELDZCQUFxRjs7QUREakc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFhSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBcUI7SUFvRDFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBakRyRCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRU4sY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUM1QixhQUFRLEdBQVcsTUFBTSxDQUFDO1FBQzFCLG1CQUFjLEdBQTBCLHFCQUFxQixDQUFDLEtBQUssQ0FBQztJQStDNUUsQ0FBQztJQTdDRDs7Ozs7Ozs7T0FRRztJQUNILElBQStCLGFBQWEsQ0FBQyxR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OEJBQTZCLGFBQUE7UUFFekIsMEVBQXFGO1FBQ3ZGLGlCQUFNLEVBQUEsRUFBQTtRQUlWLCtCQUFxRDtRQUF2Qiw0RkFBUyxnQkFBWSxJQUFDO1FBQ2xELFlBQ0Y7UUFBQSxpQkFBTyxFQUFBLEVBQUE7UUFJWCw2Q0FBdUQ7UUFDekQsaUJBQXFCOztRQTdCRCxtQ0FBaUIsb0JBQUE7UUFDSyxlQUFrQjtRQUFsQixnQ0FBa0I7UUFDakMsZUFBK0M7UUFBL0MsNkRBQStDO1FBUWxFLGVBQThCO1FBQTlCLGdEQUE4QjtRQUg5Qix5Q0FBMkIsK0JBQUEsK0RBQUE7UUFVYixlQUFvQjtRQUFwQix5Q0FBb0I7UUFNbEMsZUFDRjtRQURFLGdGQUNGOzt1RkRzRE8saUJBQWlCO2NBWjdCLFNBQVM7MkJBQ0UsV0FBVyxtQkFFSix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3dCQUNoRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjtvRUFHK0MsZUFBZTtrQkFBOUQsU0FBUzttQkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFpQmYsYUFBYTtrQkFBM0MsS0FBSzttQkFBQyxrQkFBa0I7WUFhQyxRQUFRO2tCQUFqQyxLQUFLO21CQUFDLGFBQWE7WUFhSyxPQUFPO2tCQUEvQixLQUFLO21CQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQb0ZpZWxkTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcblxuaW1wb3J0IHsgUG9Td2l0Y2hMYWJlbFBvc2l0aW9uIH0gZnJvbSAnLi9wby1zd2l0Y2gtbGFiZWwtcG9zaXRpb24uZW51bSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRNb2RlbFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBgcG8tc3dpdGNoYCDDqSB1bSBbY2hlY2tib3hdKC9kb2N1bWVudGF0aW9uL3BvLWNoZWNrYm94LWdyb3VwKSBtYWlzIGludHVpdGl2bywgcG9pcyBmYXogYW5hbG9naWEgYSB1bSBpbnRlcnJ1cHRvci5cbiAqIERldmUgc2VyIHVzYWRvIHF1YW5kbyBkZXNlamEtc2UgdHJhbnNtaXRpciBhIGlkZWlhIGRlIGxpZ2FyIC8gZGVzbGlnYXIgdW1hIGZ1bmNpb25hbGlkYWRlIGVzcGVjw61maWNhLlxuICpcbiAqIFBvZGUtc2UgbGlnYXIgb3UgZGVzbGlnYXIgbyBzd2l0Y2ggdXRpbGl6YW5kbyBhIHRlY2xhIGRlIGVzcGHDp28gb3UgbyBjbGlxdWUgZG8gbW91c2UuXG4gKlxuICogTyB0ZXh0byBleGliaWRvIHBvZGUgc2VyIGFsdGVyYWRvIGRlIGFjb3JkbyBjb20gbyB2YWxvciBzZXRhZG8gYXVtZW50YW5kbyBhcyBwb3NzaWJpbGlkYWRlcyBkZSB1c28gZG8gY29tcG9uZW50ZSxcbiAqIHBvcnRhbnRvLCByZWNvbWVuZGEtc2UgaW5mb3JtYXIgdGV4dG9zIHF1ZSBjb250ZXh0dWFsaXplbSBzZXUgdXNvIHBhcmEgcXVlIGZhY2lsaXRlIGEgY29tcHJlZW5zw6NvIGRvIHVzdcOhcmlvLlxuICpcbiAqID4gTyBjb21wb25lbnRlIG7Do28gYWx0ZXJhIG8gdmFsb3IgaW5jaWFsIGluZm9ybWFkbyBubyAqbW9kZWwqLCBwb3J0YW50byBpbmRpY2Etc2UgaW5pY2lhbGl6YS1sbyBjYXNvIHRlciBuZWNlc3NpZGFkZS5cbiAqXG4gKiAjIyMjIEJvYXMgcHLDoXRpY2FzXG4gKlxuICogLSBFdml0ZSBgbGFiZWxzYCBleHRlbnNvcyBxdWUgcXVlYnJhbSBvIGxheW91dCBkbyBgcG8tc3dpdGNoYCwgdXNlIGBsYWJlbHNgIGRpcmV0b3MsIGN1cnRvcyBlIGludHVpdGl2b3MuXG4gKlxuICogIyMjIyBBY2Vzc2liaWxpZGFkZSB0cmF0YWRhIG5vIGNvbXBvbmVudGVcbiAqXG4gKiBBbGd1bWFzIGRpcmV0cml6ZXMgZGUgYWNlc3NpYmlsaWRhZGUgasOhIHPDo28gdHJhdGFkYXMgbm8gY29tcG9uZW50ZSwgaW50ZXJuYW1lbnRlLCBlIG7Do28gcG9kZW0gc2VyIGFsdGVyYWRhcyBwZWxvIHByb3ByaWV0w6FyaW8gZG8gY29udGXDumRvLiBTw6NvIGVsYXM6XG4gKlxuICogLSBRdWFuZG8gZW0gZm9jbywgbyBzd2l0Y2ggw6kgYXRpdmFkbyB1c2FuZG8gYSB0ZWNsYSBkZSBFc3Bhw6dvLiBbVzNDIFdBSS1BUklBIDMuNSBTd2l0Y2ggLSBLZXlib2FyZCBJbnRlcmFjdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy9zd2l0Y2gvI2tleWJvYXJkLWludGVyYWN0aW9uLTE5KVxuICogLSBBIMOhcmVhIGRvIGZvY28gcHJlY2lzYXIgdGVyIHVtYSBlc3Blc3N1cmEgZGUgcGVsbyBtZW5vcyAyIHBpeGVscyBDU1MgZSBvIGZvY28gbsOjbyBwb2RlIGZpY2FyIGVzY29uZGlkbyBwb3Igb3V0cm9zIGVsZW1lbnRvcyBkYSB0ZWxhLiBbV0NBRyAyLjQuMTI6IEZvY3VzIEFwcGVhcmFuY2VdKGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvV0NBRzIyL1VuZGVyc3RhbmRpbmcvZm9jdXMtYXBwZWFyYW5jZS1lbmhhbmNlZClcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zd2l0Y2gtYmFzaWNcIiB0aXRsZT1cIlBPIFN3aXRjaCBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1iYXNpYy9zYW1wbGUtcG8tc3dpdGNoLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zd2l0Y2gtYmFzaWMvc2FtcGxlLXBvLXN3aXRjaC1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zd2l0Y2gtbGFic1wiIHRpdGxlPVwiUE8gU3dpdGNoIExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zd2l0Y2gtbGFicy9zYW1wbGUtcG8tc3dpdGNoLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1sYWJzL3NhbXBsZS1wby1zd2l0Y2gtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1sYWJzL3NhbXBsZS1wby1zd2l0Y2gtbGFicy5jb21wb25lbnQuZTJlLXNwZWMudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1sYWJzL3NhbXBsZS1wby1zd2l0Y2gtbGFicy5jb21wb25lbnQucG8udHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zd2l0Y2gtb3JkZXJcIiB0aXRsZT1cIlBPIFN3aXRjaCAtIE9yZGVyIFN1bW1hcnlcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zd2l0Y2gtb3JkZXIvc2FtcGxlLXBvLXN3aXRjaC1vcmRlci5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLW9yZGVyL3NhbXBsZS1wby1zd2l0Y2gtb3JkZXIuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc3dpdGNoLW9yZGVyLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIFN3aXRjaCAtIE9yZGVyIFN1bW1hcnkgUmVhY3RpdmUgRm9ybVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXN3aXRjaC1vcmRlci1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1zd2l0Y2gtb3JkZXItcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc3dpdGNoLW9yZGVyLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLXN3aXRjaC1vcmRlci1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXN3aXRjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb1N3aXRjaENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb1N3aXRjaENvbXBvbmVudCBleHRlbmRzIFBvRmllbGRNb2RlbDxib29sZWFuPiB7XG4gIEBWaWV3Q2hpbGQoJ3N3aXRjaENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIHN3aXRjaENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICB2YWx1ZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xhYmVsT2ZmOiBzdHJpbmcgPSAnZmFsc2UnO1xuICBwcml2YXRlIF9sYWJlbE9uOiBzdHJpbmcgPSAndHJ1ZSc7XG4gIHByaXZhdGUgX2xhYmVsUG9zaXRpb246IFBvU3dpdGNoTGFiZWxQb3NpdGlvbiA9IFBvU3dpdGNoTGFiZWxQb3NpdGlvbi5SaWdodDtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQb3Npw6fDo28gZGUgZXhpYmnDp8OjbyBkbyByw7N0dWxvLlxuICAgKlxuICAgKiA+IFBvciBwYWRyw6NvIGV4aWJlIMOgIGRpcmVpdGEuXG4gICAqL1xuICBASW5wdXQoJ3AtbGFiZWwtcG9zaXRpb24nKSBzZXQgbGFiZWxQb3NpdGlvbihwb3NpdGlvbjogUG9Td2l0Y2hMYWJlbFBvc2l0aW9uKSB7XG4gICAgdGhpcy5fbGFiZWxQb3NpdGlvbiA9IHBvc2l0aW9uIGluIFBvU3dpdGNoTGFiZWxQb3NpdGlvbiA/IHBhcnNlSW50KDxhbnk+cG9zaXRpb24sIDEwKSA6IFBvU3dpdGNoTGFiZWxQb3NpdGlvbi5SaWdodDtcbiAgfVxuXG4gIGdldCBsYWJlbFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRleHRvIGV4aWJpZG8gcXVhbmRvIG8gdmFsb3IgZG8gY29tcG9uZW50ZSBmb3IgYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsLW9mZicpIHNldCBsYWJlbE9mZihsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGFiZWxPZmYgPSBsYWJlbCB8fCAnZmFsc2UnO1xuICB9XG5cbiAgZ2V0IGxhYmVsT2ZmKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbE9mZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXh0byBleGliaWRvIHF1YW5kbyBvIHZhbG9yIGRvIGNvbXBvbmVudGUgZm9yIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoJ3AtbGFiZWwtb24nKSBzZXQgbGFiZWxPbihsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGFiZWxPbiA9IGxhYmVsIHx8ICd0cnVlJztcbiAgfVxuXG4gIGdldCBsYWJlbE9uKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbE9uO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb1N3aXRjaENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9Td2l0Y2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHN3aXRjaDogUG9Td2l0Y2hDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzU3dpdGNoKCkge1xuICAgKiAgIHRoaXMuc3dpdGNoLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3dpdGNoQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQ/LigpO1xuICB9XG5cbiAgZ2V0TGFiZWxQb3NpdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMubGFiZWxQb3NpdGlvbikge1xuICAgICAgY2FzZSBQb1N3aXRjaExhYmVsUG9zaXRpb24uTGVmdDpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgIGNhc2UgUG9Td2l0Y2hMYWJlbFBvc2l0aW9uLlJpZ2h0OlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5RG93bihldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSB8fCBldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5ldmVudENsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh2YWx1ZSk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZXZlbnRDbGljaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlVmFsdWUoIXRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gISF2YWx1ZTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIj5cbiAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50XCIgW2F0dHIubmFtZV09XCJuYW1lXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvLXN3aXRjaFwiIFthdHRyLmRhdGEtbGFiZWwtcG9zaXRpb25dPVwiZ2V0TGFiZWxQb3NpdGlvbigpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNzd2l0Y2hDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJwby1zd2l0Y2gtY29udGFpbmVyXCJcbiAgICAgICAgcm9sZT1cInN3aXRjaFwiXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJ2YWx1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInZhbHVlID09PSB0cnVlID8gbGFiZWxPbiA6IGxhYmVsT2ZmXCJcbiAgICAgICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAoY2xpY2spPVwiZXZlbnRDbGljaygpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tc3dpdGNoLXRyYWNrXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXN3aXRjaC10b2dnbGVcIj5cbiAgICAgICAgICAgIDxwby1pY29uICpuZ0lmPVwidmFsdWUgPT09IHRydWVcIiBjbGFzcz1cInBvLXN3aXRjaC1pY29uXCIgcC1pY29uPVwicG8taWNvbi1va1wiPjwvcG8taWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJwby1zd2l0Y2gtbGFiZWxcIiAoY2xpY2spPVwiZXZlbnRDbGljaygpXCI+XG4gICAgICAgIHt7IHZhbHVlID09PSB0cnVlID8gbGFiZWxPbiA6IGxhYmVsT2ZmIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19