@koobiq/components 18.3.0 → 18.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 (98) hide show
  1. package/code-block/_code-block-theme.scss +1 -1
  2. package/code-block/actionbar.component.d.ts +14 -4
  3. package/code-block/code-block-tokens.scss +4 -4
  4. package/code-block/code-block.component.d.ts +12 -15
  5. package/code-block/code-block.types.d.ts +12 -0
  6. package/core/common-behaviors/color.d.ts +1 -1
  7. package/core/forms/validators.d.ts +21 -0
  8. package/core/locales/en-US.d.ts +13 -0
  9. package/core/locales/es-LA.d.ts +13 -0
  10. package/core/locales/fa-IR.d.ts +13 -0
  11. package/core/locales/locale-service.d.ts +78 -0
  12. package/core/locales/pt-BR.d.ts +13 -0
  13. package/core/locales/ru-RU.d.ts +13 -0
  14. package/core/locales/zh-CN.d.ts +13 -0
  15. package/core/select/common.d.ts +2 -0
  16. package/core/services/theme.service.d.ts +2 -2
  17. package/core/styles/theming/_components-theming.scss +1 -1
  18. package/datepicker/_datepicker-theme.scss +1 -1
  19. package/datepicker/datepicker-tokens.scss +2 -2
  20. package/dropdown/_dropdown-theme.scss +1 -1
  21. package/dropdown/dropdown-tokens.scss +1 -1
  22. package/esm2022/code-block/actionbar.component.mjs +35 -8
  23. package/esm2022/code-block/code-block.component.mjs +28 -19
  24. package/esm2022/code-block/code-block.types.mjs +5 -2
  25. package/esm2022/core/common-behaviors/color.mjs +2 -2
  26. package/esm2022/core/forms/validators.mjs +32 -1
  27. package/esm2022/core/locales/en-US.mjs +14 -1
  28. package/esm2022/core/locales/es-LA.mjs +14 -1
  29. package/esm2022/core/locales/fa-IR.mjs +14 -1
  30. package/esm2022/core/locales/pt-BR.mjs +14 -1
  31. package/esm2022/core/locales/ru-RU.mjs +14 -1
  32. package/esm2022/core/locales/zh-CN.mjs +14 -1
  33. package/esm2022/core/select/common.mjs +7 -1
  34. package/esm2022/core/services/theme.service.mjs +3 -3
  35. package/esm2022/core/version.mjs +2 -2
  36. package/esm2022/datepicker/datepicker.component.mjs +3 -3
  37. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  38. package/esm2022/file-upload/file-upload.mjs +2 -3
  39. package/esm2022/file-upload/multiple-file-upload.component.mjs +57 -17
  40. package/esm2022/file-upload/single-file-upload.component.mjs +31 -19
  41. package/esm2022/markdown/markdown.values.mjs +4 -2
  42. package/esm2022/modal/modal.component.mjs +2 -2
  43. package/esm2022/navbar/navbar-item.component.mjs +2 -2
  44. package/esm2022/navbar/navbar.component.mjs +2 -2
  45. package/esm2022/navbar/vertical-navbar.component.mjs +2 -2
  46. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  47. package/esm2022/popover/popover.component.mjs +3 -3
  48. package/esm2022/select/select.component.mjs +1 -1
  49. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  50. package/esm2022/timezone/timezone-select.component.mjs +20 -10
  51. package/esm2022/tooltip/tooltip.component.mjs +13 -1
  52. package/fesm2022/koobiq-components-code-block.mjs +58 -24
  53. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-core.mjs +120 -5
  55. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-datepicker.mjs +2 -2
  57. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-dropdown.mjs +2 -2
  59. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-file-upload.mjs +76 -27
  61. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-markdown.mjs +3 -1
  63. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-modal.mjs +2 -2
  65. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-navbar.mjs +6 -6
  67. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-popover.mjs +4 -4
  69. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +2 -2
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-timezone.mjs +18 -8
  74. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tooltip.mjs +12 -0
  76. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  77. package/file-upload/_file-upload-theme.scss +6 -10
  78. package/file-upload/file-upload.d.ts +3 -0
  79. package/file-upload/file-upload.scss +6 -0
  80. package/file-upload/multiple-file-upload.component.d.ts +28 -5
  81. package/file-upload/multiple-file-upload.component.scss +0 -4
  82. package/file-upload/single-file-upload.component.d.ts +13 -4
  83. package/file-upload/single-file-upload.component.scss +0 -12
  84. package/markdown/markdown.values.d.ts +3 -0
  85. package/modal/_modal-theme.scss +1 -1
  86. package/modal/modal-tokens.scss +2 -2
  87. package/navbar/_navbar-theme.scss +1 -1
  88. package/navbar/navbar-tokens.scss +2 -8
  89. package/package.json +4 -4
  90. package/popover/_popover-theme.scss +2 -2
  91. package/popover/popover-tokens.scss +2 -2
  92. package/popover/popover.scss +2 -2
  93. package/schematics/ng-add/index.js +2 -2
  94. package/select/select.component.d.ts +1 -1
  95. package/sidepanel/_sidepanel-theme.scss +1 -1
  96. package/sidepanel/sidepanel-tokens.scss +2 -2
  97. package/timezone/timezone-select.component.d.ts +5 -6
  98. package/tooltip/tooltip.component.d.ts +9 -0
@@ -1,17 +1,33 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { KBQ_LOCALE_SERVICE, KbqLocaleService } from '@koobiq/components/core';
2
4
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
3
5
  import { filter } from 'rxjs/operators';
6
+ import { KBQ_CODE_BLOCK_CONFIGURATION, KBQ_CODE_BLOCK_DEFAULT_CONFIGURATION } from './code-block.types';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "@koobiq/components/button";
6
9
  import * as i2 from "@koobiq/components/tooltip";
7
10
  import * as i3 from "@koobiq/components/icon";
11
+ import * as i4 from "@koobiq/components/core";
8
12
  export class KbqActionBarComponent {
9
- constructor() {
13
+ constructor(changeDetectorRef, configuration, localeService) {
14
+ this.changeDetectorRef = changeDetectorRef;
15
+ this.configuration = configuration;
16
+ this.localeService = localeService;
10
17
  this.selectedTabIndex = 0;
11
18
  this.toggleSoftWrap = new EventEmitter();
12
19
  this.downloadCode = new EventEmitter();
13
20
  this.copyCode = new EventEmitter();
14
21
  this.openExternalSystem = new EventEmitter();
22
+ this.updateLocaleParams = () => {
23
+ this.config = this.configuration || this.localeService?.getParams('codeBlock');
24
+ this.copyTooltipText = this.config.copyTooltip;
25
+ this.changeDetectorRef.markForCheck();
26
+ };
27
+ this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);
28
+ if (!this.localeService) {
29
+ this.initDefaultParams();
30
+ }
15
31
  }
16
32
  ngAfterViewInit() {
17
33
  this.copyTooltipText = this.config.copyTooltip;
@@ -28,19 +44,30 @@ export class KbqActionBarComponent {
28
44
  this.copyTooltip.show();
29
45
  });
30
46
  }
31
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqActionBarComponent, selector: "kbq-actionbar-block", inputs: { config: "config", codeFiles: "codeFiles", selectedTabIndex: "selectedTabIndex", multiLine: "multiLine", softWrap: "softWrap", canLoad: "canLoad" }, outputs: { toggleSoftWrap: "toggleSoftWrap", downloadCode: "downloadCode", copyCode: "copyCode", openExternalSystem: "openExternalSystem" }, host: { classAttribute: "kbq-code-block-actionbar" }, viewQueries: [{ propertyName: "copyTooltip", first: true, predicate: ["copyTooltip"], descendants: true }], ngImport: i0, template: "<div class=\"kbq-code-block__fade-gradient\"></div>\n\n<div class=\"kbq-actionbar-block__button-stack layout-row\">\n @if (multiLine) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\"\n >\n @if (!softWrap) {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n }\n </button>\n }\n\n @if (canLoad) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n <button\n #copyTooltip=\"kbqTooltip\"\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n\n @if (codeFiles[selectedTabIndex].link) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n</div>\n", styles: [".kbq-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:-48px;right:0;margin:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}.kbq-code-block-actionbar .kbq-actionbar-block__button-stack{gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block-actionbar .kbq-code-block__fade-gradient{display:none;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block-actionbar.kbq-actionbar-block_floating{top:0;margin:unset;background:transparent!important}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-code-block__fade-gradient{display:block;align-self:stretch}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-actionbar-block__button-stack{padding:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}\n"], dependencies: [{ kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["color", "tabIndex", "kbqStyle", "disabled"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: i2.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
47
+ initDefaultParams() {
48
+ this.config = KBQ_CODE_BLOCK_DEFAULT_CONFIGURATION;
49
+ }
50
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionBarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: KBQ_CODE_BLOCK_CONFIGURATION, optional: true }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
51
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqActionBarComponent, selector: "kbq-actionbar-block", inputs: { codeFiles: "codeFiles", selectedTabIndex: "selectedTabIndex", multiLine: "multiLine", softWrap: "softWrap", canLoad: "canLoad" }, outputs: { toggleSoftWrap: "toggleSoftWrap", downloadCode: "downloadCode", copyCode: "copyCode", openExternalSystem: "openExternalSystem" }, host: { classAttribute: "kbq-code-block-actionbar" }, viewQueries: [{ propertyName: "copyTooltip", first: true, predicate: ["copyTooltip"], descendants: true }], ngImport: i0, template: "<div class=\"kbq-code-block__fade-gradient\"></div>\n\n<div class=\"kbq-actionbar-block__button-stack layout-row\">\n @if (multiLine) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\"\n >\n @if (!softWrap) {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n }\n </button>\n }\n\n @if (canLoad) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n <button\n #copyTooltip=\"kbqTooltip\"\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n\n @if (codeFiles[selectedTabIndex].link) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n</div>\n", styles: [".kbq-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:-48px;right:0;margin:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}.kbq-code-block-actionbar .kbq-actionbar-block__button-stack{gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block-actionbar .kbq-code-block__fade-gradient{display:none;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block-actionbar.kbq-actionbar-block_floating{top:0;margin:unset;background:transparent!important}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-code-block__fade-gradient{display:block;align-self:stretch}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-actionbar-block__button-stack{padding:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}\n"], dependencies: [{ kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["color", "tabIndex", "kbqStyle", "disabled"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: i2.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
33
52
  }
34
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionBarComponent, decorators: [{
35
54
  type: Component,
36
55
  args: [{ selector: 'kbq-actionbar-block', host: {
37
56
  class: 'kbq-code-block-actionbar'
38
57
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kbq-code-block__fade-gradient\"></div>\n\n<div class=\"kbq-actionbar-block__button-stack layout-row\">\n @if (multiLine) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\"\n >\n @if (!softWrap) {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n }\n </button>\n }\n\n @if (canLoad) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n <button\n #copyTooltip=\"kbqTooltip\"\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n\n @if (codeFiles[selectedTabIndex].link) {\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n</div>\n", styles: [".kbq-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:-48px;right:0;margin:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}.kbq-code-block-actionbar .kbq-actionbar-block__button-stack{gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block-actionbar .kbq-code-block__fade-gradient{display:none;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block-actionbar.kbq-actionbar-block_floating{top:0;margin:unset;background:transparent!important}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-code-block__fade-gradient{display:block;align-self:stretch}.kbq-code-block-actionbar.kbq-actionbar-block_floating .kbq-actionbar-block__button-stack{padding:var(--kbq-code-block-size-actionbar-padding-vertical) var(--kbq-code-block-size-actionbar-padding-horizontal)}\n"] }]
39
- }], propDecorators: { copyTooltip: [{
58
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
59
+ type: Optional
60
+ }, {
61
+ type: Inject,
62
+ args: [KBQ_CODE_BLOCK_CONFIGURATION]
63
+ }] }, { type: i4.KbqLocaleService, decorators: [{
64
+ type: Optional
65
+ }, {
66
+ type: Inject,
67
+ args: [KBQ_LOCALE_SERVICE]
68
+ }] }], propDecorators: { copyTooltip: [{
40
69
  type: ViewChild,
41
70
  args: ['copyTooltip']
42
- }], config: [{
43
- type: Input
44
71
  }], codeFiles: [{
45
72
  type: Input
46
73
  }], selectedTabIndex: [{
@@ -60,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
60
87
  }], openExternalSystem: [{
61
88
  type: Output
62
89
  }] } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29kZS1ibG9jay9hY3Rpb25iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb2RlLWJsb2NrL2FjdGlvbmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFheEMsTUFBTSxPQUFPLHFCQUFxQjtJQVZsQztRQWVhLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUtwQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDMUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FzQjNEO0lBbEJHLGVBQWU7UUFDWCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRS9DLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFFLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztpSUFsQ1EscUJBQXFCO3FIQUFyQixxQkFBcUIsd2dCQ3hCbEMsa29EQXVEQTs7MkZEL0JhLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDSSxxQkFBcUIsUUFHekI7d0JBQ0YsS0FBSyxFQUFFLDBCQUEwQjtxQkFDcEMsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFHckIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLYnFUb29sdGlwVHJpZ2dlciB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEticUNvZGVCbG9ja0NvbmZpZ3VyYXRpb24sIEticUNvZGVGaWxlIH0gZnJvbSAnLi9jb2RlLWJsb2NrLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYnEtYWN0aW9uYmFyLWJsb2NrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb25iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWNvZGUtYmxvY2stYWN0aW9uYmFyJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBLYnFBY3Rpb25CYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkKCdjb3B5VG9vbHRpcCcpIGNvcHlUb29sdGlwOiBLYnFUb29sdGlwVHJpZ2dlcjtcblxuICAgIEBJbnB1dCgpIGNvbmZpZzogS2JxQ29kZUJsb2NrQ29uZmlndXJhdGlvbjtcbiAgICBASW5wdXQoKSBjb2RlRmlsZXM6IEticUNvZGVGaWxlW107XG4gICAgQElucHV0KCkgc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgQElucHV0KCkgbXVsdGlMaW5lOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNvZnRXcmFwOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhbkxvYWQ6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlU29mdFdyYXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGRvd25sb2FkQ29kZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgY29weUNvZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIG9wZW5FeHRlcm5hbFN5c3RlbSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIGNvcHlUb29sdGlwVGV4dDogc3RyaW5nO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvcHlUb29sdGlwVGV4dCA9IHRoaXMuY29uZmlnLmNvcHlUb29sdGlwO1xuXG4gICAgICAgIHRoaXMuY29weVRvb2x0aXAudmlzaWJsZUNoYW5nZS5waXBlKGZpbHRlcigoc3RhdGUpID0+ICFzdGF0ZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb3B5VG9vbHRpcFRleHQgPT09IHRoaXMuY29uZmlnLmNvcGllZFRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sdGlwVGV4dCA9IHRoaXMuY29uZmlnLmNvcHlUb29sdGlwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNvcHkoKSB7XG4gICAgICAgIHRoaXMuY29weUNvZGUuZW1pdCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb3B5VG9vbHRpcFRleHQgPSB0aGlzLmNvbmZpZy5jb3BpZWRUb29sdGlwO1xuICAgICAgICAgICAgdGhpcy5jb3B5VG9vbHRpcC5zaG93KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJrYnEtY29kZS1ibG9ja19fZmFkZS1ncmFkaWVudFwiPjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwia2JxLWFjdGlvbmJhci1ibG9ja19fYnV0dG9uLXN0YWNrIGxheW91dC1yb3dcIj5cbiAgICBAaWYgKG11bHRpTGluZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICBba2JxVG9vbHRpcF09XCJzb2Z0V3JhcCA/IGNvbmZpZy5zb2Z0V3JhcE9mZlRvb2x0aXAgOiBjb25maWcuc29mdFdyYXBPblRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvZnRXcmFwLmVtaXQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoIXNvZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtd3JhcC10ZXh0XzE2XCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzb2Z0V3JhcCkge1xuICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXdyYXAtdGV4dC1zbGFzaF8xNlwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuXG4gICAgQGlmIChjYW5Mb2FkKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImNvbmZpZy5kb3dubG9hZFRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ29kZS5lbWl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1hcnJvdy1kb3duLXRvLWxpbmVfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cblxuICAgIDxidXR0b25cbiAgICAgICAgI2NvcHlUb29sdGlwPVwia2JxVG9vbHRpcFwiXG4gICAgICAgIGticS1idXR0b25cbiAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtrYnFUb29sdGlwXT1cImNvcHlUb29sdGlwVGV4dFwiXG4gICAgICAgIChjbGljayk9XCJvbkNvcHkoKVwiXG4gICAgPlxuICAgICAgICA8aSBrYnEtaWNvbj1cImticS1maWxlLW11bHRpcGxlLW9fMTZcIj48L2k+XG4gICAgPC9idXR0b24+XG5cbiAgICBAaWYgKGNvZGVGaWxlc1tzZWxlY3RlZFRhYkluZGV4XS5saW5rKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImNvbmZpZy5vcGVuRXh0ZXJuYWxTeXN0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuRXh0ZXJuYWxTeXN0ZW0uZW1pdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmVfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbjwvZGl2PlxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29kZS1ibG9jay9hY3Rpb25iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb2RlLWJsb2NrL2FjdGlvbmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLG9DQUFvQyxFQUd2QyxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFZNUIsTUFBTSxPQUFPLHFCQUFxQjtJQW9COUIsWUFDWSxpQkFBb0MsRUFDZ0IsYUFBeUMsRUFDbkQsYUFBZ0M7UUFGMUUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNnQixrQkFBYSxHQUFiLGFBQWEsQ0FBNEI7UUFDbkQsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBbkI3RSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFLcEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBdUNoRCx1QkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRS9FLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQWhDRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUxRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUUsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDbkQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXJCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBVU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsb0NBQW9DLENBQUM7SUFDdkQsQ0FBQztpSUE3RFEscUJBQXFCLG1EQXNCTiw0QkFBNEIsNkJBQzVCLGtCQUFrQjtxSEF2QmpDLHFCQUFxQixzZkNsQ2xDLGtvREF1REE7OzJGRHJCYSxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0kscUJBQXFCLFFBR3pCO3dCQUNGLEtBQUssRUFBRSwwQkFBMEI7cUJBQ3BDLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQXdCMUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEI7OzBCQUMvQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjt5Q0F0QmhCLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgS0JRX0xPQ0FMRV9TRVJWSUNFLCBLYnFMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxVG9vbHRpcFRyaWdnZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIEtCUV9DT0RFX0JMT0NLX0NPTkZJR1VSQVRJT04sXG4gICAgS0JRX0NPREVfQkxPQ0tfREVGQVVMVF9DT05GSUdVUkFUSU9OLFxuICAgIEticUNvZGVCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgS2JxQ29kZUZpbGVcbn0gZnJvbSAnLi9jb2RlLWJsb2NrLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYnEtYWN0aW9uYmFyLWJsb2NrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb25iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWNvZGUtYmxvY2stYWN0aW9uYmFyJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBLYnFBY3Rpb25CYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkKCdjb3B5VG9vbHRpcCcpIGNvcHlUb29sdGlwOiBLYnFUb29sdGlwVHJpZ2dlcjtcblxuICAgIEBJbnB1dCgpIGNvZGVGaWxlczogS2JxQ29kZUZpbGVbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICBASW5wdXQoKSBtdWx0aUxpbmU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc29mdFdyYXA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2FuTG9hZDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSB0b2dnbGVTb2Z0V3JhcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgZG93bmxvYWRDb2RlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBjb3B5Q29kZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgb3BlbkV4dGVybmFsU3lzdGVtID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgY29weVRvb2x0aXBUZXh0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbmZpZzogS2JxQ29kZUJsb2NrQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChLQlFfQ09ERV9CTE9DS19DT05GSUdVUkFUSU9OKSBwcm90ZWN0ZWQgY29uZmlndXJhdGlvbj86IEticUNvZGVCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoS0JRX0xPQ0FMRV9TRVJWSUNFKSBwcm90ZWN0ZWQgbG9jYWxlU2VydmljZT86IEticUxvY2FsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb3B5VG9vbHRpcFRleHQgPSB0aGlzLmNvbmZpZy5jb3B5VG9vbHRpcDtcblxuICAgICAgICB0aGlzLmNvcHlUb29sdGlwLnZpc2libGVDaGFuZ2UucGlwZShmaWx0ZXIoKHN0YXRlKSA9PiAhc3RhdGUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29weVRvb2x0aXBUZXh0ID09PSB0aGlzLmNvbmZpZy5jb3BpZWRUb29sdGlwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbHRpcFRleHQgPSB0aGlzLmNvbmZpZy5jb3B5VG9vbHRpcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Db3B5KCkge1xuICAgICAgICB0aGlzLmNvcHlDb2RlLmVtaXQoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29weVRvb2x0aXBUZXh0ID0gdGhpcy5jb25maWcuY29waWVkVG9vbHRpcDtcbiAgICAgICAgICAgIHRoaXMuY29weVRvb2x0aXAuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24gfHwgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRQYXJhbXMoJ2NvZGVCbG9jaycpO1xuXG4gICAgICAgIHRoaXMuY29weVRvb2x0aXBUZXh0ID0gdGhpcy5jb25maWcuY29weVRvb2x0aXA7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBLQlFfQ09ERV9CTE9DS19ERUZBVUxUX0NPTkZJR1VSQVRJT047XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImticS1jb2RlLWJsb2NrX19mYWRlLWdyYWRpZW50XCI+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJrYnEtYWN0aW9uYmFyLWJsb2NrX19idXR0b24tc3RhY2sgbGF5b3V0LXJvd1wiPlxuICAgIEBpZiAobXVsdGlMaW5lKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cInNvZnRXcmFwID8gY29uZmlnLnNvZnRXcmFwT2ZmVG9vbHRpcCA6IGNvbmZpZy5zb2Z0V3JhcE9uVG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29mdFdyYXAuZW1pdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmICghc29mdFdyYXApIHtcbiAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS13cmFwLXRleHRfMTZcIj48L2k+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNvZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtd3JhcC10ZXh0LXNsYXNoXzE2XCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG5cbiAgICBAaWYgKGNhbkxvYWQpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICAgICAgW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwiY29uZmlnLmRvd25sb2FkVG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDb2RlLmVtaXQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLWFycm93LWRvd24tdG8tbGluZV8xNlwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuXG4gICAgPGJ1dHRvblxuICAgICAgICAjY29weVRvb2x0aXA9XCJrYnFUb29sdGlwXCJcbiAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgW2ticVRvb2x0aXBdPVwiY29weVRvb2x0aXBUZXh0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ29weSgpXCJcbiAgICA+XG4gICAgICAgIDxpIGticS1pY29uPVwia2JxLWZpbGUtbXVsdGlwbGUtb18xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIEBpZiAoY29kZUZpbGVzW3NlbGVjdGVkVGFiSW5kZXhdLmxpbmspIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICAgICAgW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwiY29uZmlnLm9wZW5FeHRlcm5hbFN5c3RlbVRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5FeHRlcm5hbFN5c3RlbS5lbWl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1hcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZV8xNlwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuPC9kaXY+XG4iXX0=