@skyux/tabs 6.16.0 → 7.0.0-alpha.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 (48) hide show
  1. package/documentation.json +1025 -471
  2. package/esm2020/lib/modules/sectioned-form/sectioned-form-section.component.mjs +5 -5
  3. package/esm2020/lib/modules/sectioned-form/sectioned-form.component.mjs +4 -4
  4. package/esm2020/lib/modules/sectioned-form/sectioned-form.module.mjs +8 -10
  5. package/esm2020/lib/modules/sectioned-form/sectioned-form.service.mjs +3 -3
  6. package/esm2020/lib/modules/shared/sky-tabs-resources.module.mjs +6 -5
  7. package/esm2020/lib/modules/tabs/tab-button.component.mjs +5 -5
  8. package/esm2020/lib/modules/tabs/tab.component.mjs +3 -3
  9. package/esm2020/lib/modules/tabs/tabs.module.mjs +11 -13
  10. package/esm2020/lib/modules/tabs/tabset-adapter.service.mjs +3 -3
  11. package/esm2020/lib/modules/tabs/tabset-nav-button-type.mjs +2 -0
  12. package/esm2020/lib/modules/tabs/tabset-nav-button.component.mjs +132 -89
  13. package/esm2020/lib/modules/tabs/tabset-permalink.service.mjs +3 -3
  14. package/esm2020/lib/modules/tabs/tabset.component.mjs +20 -10
  15. package/esm2020/lib/modules/tabs/tabset.service.mjs +3 -3
  16. package/esm2020/lib/modules/vertical-tabset/vertical-tab-media-query.service.mjs +3 -3
  17. package/esm2020/lib/modules/vertical-tabset/vertical-tab.component.mjs +6 -6
  18. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-adapter.service.mjs +3 -3
  19. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-group.component.mjs +7 -7
  20. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.component.mjs +7 -7
  21. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.module.mjs +11 -13
  22. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.service.mjs +3 -3
  23. package/esm2020/testing/tabs/tab-fixture-tab.mjs +1 -1
  24. package/esm2020/testing/tabs/tabset-fixture.mjs +2 -1
  25. package/fesm2015/skyux-tabs-testing.mjs +1 -0
  26. package/fesm2015/skyux-tabs-testing.mjs.map +1 -1
  27. package/fesm2015/skyux-tabs.mjs +221 -173
  28. package/fesm2015/skyux-tabs.mjs.map +1 -1
  29. package/fesm2020/skyux-tabs-testing.mjs +1 -0
  30. package/fesm2020/skyux-tabs-testing.mjs.map +1 -1
  31. package/fesm2020/skyux-tabs.mjs +219 -173
  32. package/fesm2020/skyux-tabs.mjs.map +1 -1
  33. package/lib/modules/sectioned-form/sectioned-form-section.component.d.ts +1 -1
  34. package/lib/modules/sectioned-form/sectioned-form.component.d.ts +1 -1
  35. package/lib/modules/tabs/tab-button.component.d.ts +1 -1
  36. package/lib/modules/tabs/tab.component.d.ts +1 -1
  37. package/lib/modules/tabs/tabset-nav-button-type.d.ts +4 -0
  38. package/lib/modules/tabs/tabset-nav-button.component.d.ts +34 -21
  39. package/lib/modules/tabs/tabset.component.d.ts +4 -1
  40. package/lib/modules/vertical-tabset/vertical-tab.component.d.ts +1 -1
  41. package/lib/modules/vertical-tabset/vertical-tabset-group.component.d.ts +1 -1
  42. package/lib/modules/vertical-tabset/vertical-tabset.component.d.ts +1 -1
  43. package/package.json +17 -17
  44. package/testing/{skyux-tabs-testing.d.ts → index.d.ts} +0 -0
  45. package/testing/tabs/tab-fixture-tab.d.ts +1 -0
  46. package/testing/tabs/tabset-fixture.d.ts +1 -0
  47. package/skyux-tabs.d.ts +0 -5
  48. package/testing/package.json +0 -10
@@ -1,117 +1,160 @@
1
- import { ChangeDetectorRef, Component, Input, } from '@angular/core';
2
- import { SkyLibResourcesService } from '@skyux/i18n';
3
- import { forkJoin } from 'rxjs';
4
- import { take } from 'rxjs/operators';
1
+ var _SkyTabsetNavButtonComponent_instances, _SkyTabsetNavButtonComponent__buttonType, _SkyTabsetNavButtonComponent__disabled, _SkyTabsetNavButtonComponent__tabset, _SkyTabsetNavButtonComponent_activeIndexNumber, _SkyTabsetNavButtonComponent_activeSkyTabIndex, _SkyTabsetNavButtonComponent_currentTabsetSub, _SkyTabsetNavButtonComponent_logger, _SkyTabsetNavButtonComponent_tabCount, _SkyTabsetNavButtonComponent_tabToSelect, _SkyTabsetNavButtonComponent_ngUnsubscribe, _SkyTabsetNavButtonComponent_updateButtonVisibility, _SkyTabsetNavButtonComponent_updateButtonProperties, _SkyTabsetNavButtonComponent_updateTabToSelect;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { Component, Input } from '@angular/core';
4
+ import { SkyLogService } from '@skyux/core';
5
+ import { Subject } from 'rxjs';
6
+ import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
5
7
  import { SkyTabsetComponent } from './tabset.component';
6
8
  import * as i0 from "@angular/core";
7
- import * as i1 from "@skyux/i18n";
8
- import * as i2 from "@skyux/theme";
9
+ import * as i1 from "@skyux/core";
10
+ import * as i2 from "@angular/common";
11
+ import * as i3 from "@skyux/i18n";
9
12
  const buttonTypeNext = 'next';
10
13
  const buttonTypePrevious = 'previous';
11
- /**
12
- * @internal
13
- */
14
+ const buttonTypeFinish = 'finish';
14
15
  export class SkyTabsetNavButtonComponent {
15
- constructor(resourceService, changeDetector) {
16
- this.resourceService = resourceService;
17
- this.changeDetector = changeDetector;
16
+ constructor(logger) {
17
+ _SkyTabsetNavButtonComponent_instances.add(this);
18
+ this.isVisible = false;
19
+ _SkyTabsetNavButtonComponent__buttonType.set(this, void 0);
20
+ _SkyTabsetNavButtonComponent__disabled.set(this, void 0);
21
+ _SkyTabsetNavButtonComponent__tabset.set(this, void 0);
22
+ _SkyTabsetNavButtonComponent_activeIndexNumber.set(this, void 0);
23
+ _SkyTabsetNavButtonComponent_activeSkyTabIndex.set(this, void 0);
24
+ _SkyTabsetNavButtonComponent_currentTabsetSub.set(this, void 0);
25
+ _SkyTabsetNavButtonComponent_logger.set(this, void 0);
26
+ _SkyTabsetNavButtonComponent_tabCount.set(this, void 0);
27
+ _SkyTabsetNavButtonComponent_tabToSelect.set(this, void 0);
28
+ _SkyTabsetNavButtonComponent_ngUnsubscribe.set(this, new Subject());
29
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_logger, logger, "f");
18
30
  }
19
- set buttonText(value) {
20
- this._buttonText = value;
21
- }
22
- get buttonText() {
23
- if (this._buttonText) {
24
- return this._buttonText;
31
+ /**
32
+ * Specifies the tabset wizard component to associate with the nav button.
33
+ * @required
34
+ */
35
+ set tabset(value) {
36
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__tabset, value, "f");
37
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, "f")) {
38
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, "f").unsubscribe();
25
39
  }
26
- switch (this.buttonType) {
27
- case buttonTypePrevious:
28
- return this.previousButtonText;
29
- case buttonTypeNext:
30
- return this.nextButtonText;
31
- /* istanbul ignore next */
32
- default:
33
- return '';
40
+ if (value) {
41
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeFinish) {
42
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").hasFinishButton = true;
43
+ }
44
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").activeChange
45
+ .pipe(distinctUntilChanged(), takeUntil(__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f")))
46
+ .subscribe((index) => {
47
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_activeSkyTabIndex, index, "f");
48
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_tabCount, __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").tabs.length, "f");
49
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateTabToSelect).call(this);
50
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonVisibility).call(this);
51
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonProperties).call(this);
52
+ }), "f");
34
53
  }
35
- }
36
- get disabled() {
37
- let tabToSelect;
38
- switch (this.buttonType) {
39
- case buttonTypePrevious:
40
- tabToSelect = this.previousTab;
41
- break;
42
- case buttonTypeNext:
43
- tabToSelect = this.nextTab;
44
- break;
45
- /* istanbul ignore next */
46
- default:
47
- break;
54
+ else {
55
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_logger, "f").error('The SkyTabsetNavButtonComponent requires a reference to the SkyTabsetComponent it controls.');
48
56
  }
49
- return !tabToSelect || tabToSelect.disabled;
50
57
  }
51
- get selectedTab() {
52
- let selectedTab;
53
- if (this.tabset && this.tabset.tabs) {
54
- selectedTab = this.tabset.tabs.find((tab) => tab.tabIndex === this.tabset.lastActiveTabIndex);
55
- }
56
- return selectedTab;
58
+ /**
59
+ * Specifies the type of nav button to include.
60
+ * @required
61
+ */
62
+ get buttonType() {
63
+ return __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f");
57
64
  }
58
- get nextTab() {
59
- const selectedTab = this.selectedTab;
60
- if (selectedTab) {
61
- const tabs = this.tabset.tabs.toArray();
62
- return tabs[tabs.indexOf(selectedTab) + 1];
65
+ set buttonType(value) {
66
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__buttonType, value, "f");
67
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateTabToSelect).call(this);
68
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonProperties).call(this);
69
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonVisibility).call(this);
70
+ if (value === buttonTypeFinish) {
71
+ this.type = 'submit';
72
+ }
73
+ else {
74
+ this.type = 'button';
63
75
  }
64
- return undefined;
65
76
  }
66
- get previousTab() {
67
- const selectedTab = this.selectedTab;
68
- if (selectedTab) {
69
- const tabs = this.tabset.tabs.toArray();
70
- return tabs[tabs.indexOf(selectedTab) - 1];
77
+ /**
78
+ * Indicates whether to disable the nav button.
79
+ * Defaults to the disabled state of the next tab for `next`, the existence of a previous tab for `previous`,
80
+ * and false for `finish`.
81
+ */
82
+ set disabled(value) {
83
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__disabled, value, "f");
84
+ }
85
+ get disabled() {
86
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__disabled, "f") !== undefined) {
87
+ return __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__disabled, "f");
71
88
  }
72
- return undefined;
89
+ else if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeFinish) {
90
+ return false;
91
+ }
92
+ return !__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f") || __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f").disabled;
73
93
  }
74
- ngAfterViewInit() {
75
- forkJoin([
76
- this.resourceService.getString('skyux_tabs_navigator_previous'),
77
- this.resourceService.getString('skyux_tabs_navigator_next'),
78
- ])
79
- .pipe(take(1))
80
- .subscribe((resources) => {
81
- this.previousButtonText = resources[0];
82
- this.nextButtonText = resources[1];
83
- this.changeDetector.detectChanges();
84
- });
94
+ ngOnDestroy() {
95
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f").next();
96
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f").complete();
85
97
  }
86
98
  buttonClick() {
87
- let tabToSelect;
88
- switch (this.buttonType) {
89
- case buttonTypePrevious:
90
- tabToSelect = this.previousTab;
91
- break;
92
- case buttonTypeNext:
93
- tabToSelect = this.nextTab;
94
- break;
95
- /* istanbul ignore next */
96
- default:
97
- break;
98
- }
99
99
  /* istanbul ignore else */
100
- if (tabToSelect && !tabToSelect.disabled) {
101
- this.tabset.active = tabToSelect.tabIndex;
100
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f") && !__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f").disabled) {
101
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").active = __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f").tabIndex;
102
102
  }
103
103
  }
104
104
  }
105
- SkyTabsetNavButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyTabsetNavButtonComponent, deps: [{ token: i1.SkyLibResourcesService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
106
- SkyTabsetNavButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyTabsetNavButtonComponent, selector: "sky-tabset-nav-button", inputs: { tabset: "tabset", buttonType: "buttonType", buttonText: "buttonText" }, ngImport: i0, template: "<button\n class=\"sky-btn\"\n type=\"button\"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-primary': 'modern'\n }\"\n (click)=\"buttonClick()\"\n>\n {{ buttonText }}\n</button>\n", directives: [{ type: i2.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }] });
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyTabsetNavButtonComponent, decorators: [{
105
+ _SkyTabsetNavButtonComponent__buttonType = new WeakMap(), _SkyTabsetNavButtonComponent__disabled = new WeakMap(), _SkyTabsetNavButtonComponent__tabset = new WeakMap(), _SkyTabsetNavButtonComponent_activeIndexNumber = new WeakMap(), _SkyTabsetNavButtonComponent_activeSkyTabIndex = new WeakMap(), _SkyTabsetNavButtonComponent_currentTabsetSub = new WeakMap(), _SkyTabsetNavButtonComponent_logger = new WeakMap(), _SkyTabsetNavButtonComponent_tabCount = new WeakMap(), _SkyTabsetNavButtonComponent_tabToSelect = new WeakMap(), _SkyTabsetNavButtonComponent_ngUnsubscribe = new WeakMap(), _SkyTabsetNavButtonComponent_instances = new WeakSet(), _SkyTabsetNavButtonComponent_updateButtonVisibility = function _SkyTabsetNavButtonComponent_updateButtonVisibility() {
106
+ const isLastStep = __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") === __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabCount, "f") - 1;
107
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeFinish) {
108
+ this.isVisible = isLastStep;
109
+ return;
110
+ }
111
+ // Hide the next button on the last step only if a finish button exists.
112
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeNext &&
113
+ isLastStep &&
114
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").hasFinishButton) {
115
+ this.isVisible = false;
116
+ return;
117
+ }
118
+ this.isVisible = true;
119
+ }, _SkyTabsetNavButtonComponent_updateButtonProperties = function _SkyTabsetNavButtonComponent_updateButtonProperties() {
120
+ if ((__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeNext ||
121
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeFinish) &&
122
+ __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f")?.hasFinishButton) {
123
+ this.buttonClassName = 'sky-btn-primary';
124
+ }
125
+ else {
126
+ this.buttonClassName = 'sky-btn-default';
127
+ }
128
+ this.ariaControls = __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabToSelect, "f")?.tabPanelId;
129
+ }, _SkyTabsetNavButtonComponent_updateTabToSelect = function _SkyTabsetNavButtonComponent_updateTabToSelect() {
130
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f")?.tabs) {
131
+ const tabs = __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f").tabs.toArray();
132
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_tabToSelect, undefined, "f");
133
+ // tab index can be a number or a string, but we need the actual number index
134
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, tabs.findIndex((tab) => tab.tabIndex === __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeSkyTabIndex, "f")), "f");
135
+ /* istanbul ignore else */
136
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") !== undefined) {
137
+ if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypeNext) {
138
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_tabToSelect, tabs[__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") + 1], "f");
139
+ }
140
+ else if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f") === buttonTypePrevious) {
141
+ __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_tabToSelect, tabs[__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") - 1], "f");
142
+ }
143
+ }
144
+ }
145
+ };
146
+ SkyTabsetNavButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTabsetNavButtonComponent, deps: [{ token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component });
147
+ SkyTabsetNavButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SkyTabsetNavButtonComponent, selector: "sky-tabset-nav-button", inputs: { tabset: "tabset", buttonType: "buttonType", buttonText: "buttonText", disabled: "disabled" }, ngImport: i0, template: "<button\n *ngIf=\"isVisible\"\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"disabled\"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n>\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n</button>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }] });
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTabsetNavButtonComponent, decorators: [{
108
149
  type: Component,
109
- args: [{ selector: 'sky-tabset-nav-button', template: "<button\n class=\"sky-btn\"\n type=\"button\"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-primary': 'modern'\n }\"\n (click)=\"buttonClick()\"\n>\n {{ buttonText }}\n</button>\n" }]
110
- }], ctorParameters: function () { return [{ type: i1.SkyLibResourcesService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabset: [{
150
+ args: [{ selector: 'sky-tabset-nav-button', template: "<button\n *ngIf=\"isVisible\"\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"disabled\"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n>\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n</button>\n" }]
151
+ }], ctorParameters: function () { return [{ type: i1.SkyLogService }]; }, propDecorators: { tabset: [{
111
152
  type: Input
112
153
  }], buttonType: [{
113
154
  type: Input
114
155
  }], buttonText: [{
115
156
  type: Input
157
+ }], disabled: [{
158
+ type: Input
116
159
  }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUV4RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFFdEM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sMkJBQTJCO0lBb0Z0QyxZQUNVLGVBQXVDLEVBQ3ZDLGNBQWlDO1FBRGpDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUN2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7SUFDeEMsQ0FBQztJQWhGSixJQUNXLFVBQVUsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN6QjtRQUVELFFB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LENBQUM7Z0JBQzNCLE1BQU07WUFDUiwwQkFBMEI7WUFDMUI7Z0JBQ0UsTUFBTTtTQUNUO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQzs7d0hBekhVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLCtJQ3pCeEMsK09BWUE7MkZEYWEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLHVCQUF1Qjs2SUFLMUIsTUFBTTtzQkFEWixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUssVUFBVTtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUYWJDb21wb25lbnQgfSBmcm9tICcuL3RhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGFic2V0Q29tcG9uZW50IH0gZnJvbSAnLi90YWJzZXQuY29tcG9uZW50JztcblxuY29uc3QgYnV0dG9uVHlwZU5leHQgPSAnbmV4dCc7XG5cbmNvbnN0IGJ1dHRvblR5cGVQcmV2aW91cyA9ICdwcmV2aW91cyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWJzZXQtbmF2LWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzZXQtbmF2LWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreVRhYnNldE5hdkJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFic2V0OiBTa3lUYWJzZXRDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGJ1dHRvblR5cGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGJ1dHRvblRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2J1dHRvblRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnV0dG9uVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9idXR0b25UZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnV0dG9uVGV4dDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuYnV0dG9uVHlwZSkge1xuICAgICAgY2FzZSBidXR0b25UeXBlUHJldmlvdXM6XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzQnV0dG9uVGV4dDtcbiAgICAgIGNhc2UgYnV0dG9uVHlwZU5leHQ6XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRCdXR0b25UZXh0O1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGxldCB0YWJUb1NlbGVjdDogU2t5VGFiQ29tcG9uZW50O1xuXG4gICAgc3dpdGNoICh0aGlzLmJ1dHRvblR5cGUpIHtcbiAgICAgIGNhc2UgYnV0dG9uVHlwZVByZXZpb3VzOlxuICAgICAgICB0YWJUb1NlbGVjdCA9IHRoaXMucHJldmlvdXNUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBidXR0b25UeXBlTmV4dDpcbiAgICAgICAgdGFiVG9TZWxlY3QgPSB0aGlzLm5leHRUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiAhdGFiVG9TZWxlY3QgfHwgdGFiVG9TZWxlY3QuZGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBzZWxlY3RlZFRhYigpOiBTa3lUYWJDb21wb25lbnQge1xuICAgIGxldCBzZWxlY3RlZFRhYjogU2t5VGFiQ29tcG9uZW50O1xuXG4gICAgaWYgKHRoaXMudGFic2V0ICYmIHRoaXMudGFic2V0LnRhYnMpIHtcbiAgICAgIHNlbGVjdGVkVGFiID0gdGhpcy50YWJzZXQudGFicy5maW5kKFxuICAgICAgICAodGFiKSA9PiB0YWIudGFiSW5kZXggPT09IHRoaXMudGFic2V0Lmxhc3RBY3RpdmVUYWJJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRUYWI7XG4gIH1cblxuICBwcml2YXRlIGdldCBuZXh0VGFiKCk6IFNreVRhYkNvbXBvbmVudCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWIgPSB0aGlzLnNlbGVjdGVkVGFiO1xuXG4gICAgaWYgKHNlbGVjdGVkVGFiKSB7XG4gICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzZXQudGFicy50b0FycmF5KCk7XG4gICAgICByZXR1cm4gdGFic1t0YWJzLmluZGV4T2Yoc2VsZWN0ZWRUYWIpICsgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHByZXZpb3VzVGFiKCk6IFNreVRhYkNvbXBvbmVudCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWIgPSB0aGlzLnNlbGVjdGVkVGFiO1xuXG4gICAgaWYgKHNlbGVjdGVkVGFiKSB7XG4gICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzZXQudGFicy50b0FycmF5KCk7XG4gICAgICByZXR1cm4gdGFic1t0YWJzLmluZGV4T2Yoc2VsZWN0ZWRUYWIpIC0gMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2J1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBwcmV2aW91c0J1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBuZXh0QnV0dG9uVGV4dDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfdGFic19uYXZpZ2F0b3JfcHJldmlvdXMnKSxcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfdGFic19uYXZpZ2F0b3JfbmV4dCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2VzKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlvdXNCdXR0b25UZXh0ID0gcmVzb3VyY2VzWzBdO1xuICAgICAgICB0aGlzLm5leHRCdXR0b25UZXh0ID0gcmVzb3VyY2VzWzFdO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGJ1dHRvbkNsaWNrKCkge1xuICAgIGxldCB0YWJUb1NlbGVjdDogU2t5VGFiQ29tcG9uZW50O1xuXG4gICAgc3dpdGNoICh0aGlzLmJ1dHRvblR5cGUpIHtcbiAgICAgIGNhc2UgYnV0dG9uVHlwZVByZXZpb3VzOlxuICAgICAgICB0YWJUb1NlbGVjdCA9IHRoaXMucHJldmlvdXNUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBidXR0b25UeXBlTmV4dDpcbiAgICAgICAgdGFiVG9TZWxlY3QgPSB0aGlzLm5leHRUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRhYlRvU2VsZWN0ICYmICF0YWJUb1NlbGVjdC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJzZXQuYWN0aXZlID0gdGFiVG9TZWxlY3QudGFiSW5kZXg7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gIGNsYXNzPVwic2t5LWJ0blwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgJ3NreS1idG4tZGVmYXVsdCc6ICdkZWZhdWx0JyxcbiAgICAnc2t5LWJ0bi1wcmltYXJ5JzogJ21vZGVybidcbiAgfVwiXG4gIChjbGljayk9XCJidXR0b25DbGljaygpXCJcbj5cbiAge3sgYnV0dG9uVGV4dCB9fVxuPC9idXR0b24+XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFFeEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0FBTWxDLE1BQU0sT0FBTywyQkFBMkI7SUFtR3RDLFlBQVksTUFBcUI7O1FBZjFCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJekIsMkRBQThDO1FBQzlDLHlEQUFnQztRQUNoQyx1REFBNkI7UUFDN0IsaUVBQTJCO1FBQzNCLGlFQUFnQztRQUNoQyxnRUFBZ0M7UUFDaEMsc0RBQXVCO1FBQ3ZCLHdEQUFrQjtRQUNsQiwyREFBMEM7UUFDMUMscURBQWlCLElBQUksT0FBTyxFQUFRLEVBQUM7UUFHbkMsdUJBQUEsSUFBSSx1Q0FBVyxNQUFNLE1BQUEsQ0FBQztJQUN4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QUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssdUJBQUEsSUFBSSxzREFBbUIsQ0FDbEQsTUFBQSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLElBQUksdUJBQUEsSUFBSSxzREFBbUIsS0FBSyxTQUFTLEVBQUU7WUFDekMsSUFBSSx1QkFBQSxJQUFJLGdEQUFhLEtBQUssY0FBYyxFQUFFO2dCQUN4Qyx1QkFBQSxJQUFJLDRDQUFnQixJQUFJLENBQUMsdUJBQUEsSUFBSSxzREFBbUIsR0FBRyxDQUFDLENBQUMsTUFBQSxDQUFDO2FBQ3ZEO2lCQUFNLElBQUksdUJBQUEsSUFBSSxnREFBYSxLQUFLLGtCQUFrQixFQUFFO2dCQUNuRCx1QkFBQSxJQUFJLDRDQUFnQixJQUFJLENBQUMsdUJBQUEsSUFBSSxzREFBbUIsR0FBRyxDQUFDLENBQUMsTUFBQSxDQUFDO2FBQ3ZEO1NBQ0Y7S0FDRjtBQUNILENBQUM7d0hBektVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHFLQ25CeEMsZ1dBV0E7MkZEUWEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLHVCQUF1QjtvR0FTdEIsTUFBTTtzQkFEaEIsS0FBSztnQkFrQ0ssVUFBVTtzQkFEcEIsS0FBSztnQkF1QkMsVUFBVTtzQkFEaEIsS0FBSztnQkFTSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMb2dTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRhYkluZGV4IH0gZnJvbSAnLi90YWItaW5kZXgnO1xuaW1wb3J0IHsgU2t5VGFiQ29tcG9uZW50IH0gZnJvbSAnLi90YWIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRhYnNldE5hdkJ1dHRvblR5cGUgfSBmcm9tICcuL3RhYnNldC1uYXYtYnV0dG9uLXR5cGUnO1xuaW1wb3J0IHsgU2t5VGFic2V0Q29tcG9uZW50IH0gZnJvbSAnLi90YWJzZXQuY29tcG9uZW50JztcblxuY29uc3QgYnV0dG9uVHlwZU5leHQgPSAnbmV4dCc7XG5jb25zdCBidXR0b25UeXBlUHJldmlvdXMgPSAncHJldmlvdXMnO1xuY29uc3QgYnV0dG9uVHlwZUZpbmlzaCA9ICdmaW5pc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGFic2V0LW5hdi1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUYWJzZXROYXZCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0YWJzZXQgd2l6YXJkIGNvbXBvbmVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbmF2IGJ1dHRvbi5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRhYnNldCh2YWx1ZTogU2t5VGFic2V0Q29tcG9uZW50KSB7XG4gICAgdGhpcy4jX3RhYnNldCA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuI2N1cnJlbnRUYWJzZXRTdWIpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRUYWJzZXRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLiNfYnV0dG9uVHlwZSA9PT0gYnV0dG9uVHlwZUZpbmlzaCkge1xuICAgICAgICB0aGlzLiNfdGFic2V0Lmhhc0ZpbmlzaEJ1dHRvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2N1cnJlbnRUYWJzZXRTdWIgPSB0aGlzLiNfdGFic2V0LmFjdGl2ZUNoYW5nZVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGluZGV4OiBTa3lUYWJJbmRleCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2FjdGl2ZVNreVRhYkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy4jdGFiQ291bnQgPSB0aGlzLiNfdGFic2V0LnRhYnMubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZVRhYlRvU2VsZWN0KCk7XG4gICAgICAgICAgdGhpcy4jdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUJ1dHRvblByb3BlcnRpZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5lcnJvcihcbiAgICAgICAgJ1RoZSBTa3lUYWJzZXROYXZCdXR0b25Db21wb25lbnQgcmVxdWlyZXMgYSByZWZlcmVuY2UgdG8gdGhlIFNreVRhYnNldENvbXBvbmVudCBpdCBjb250cm9scy4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgbmF2IGJ1dHRvbiB0byBpbmNsdWRlLlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgYnV0dG9uVHlwZSgpOiBTa3lUYWJzZXROYXZCdXR0b25UeXBlIHwgc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2J1dHRvblR5cGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGJ1dHRvblR5cGUodmFsdWU6IFNreVRhYnNldE5hdkJ1dHRvblR5cGUgfCBzdHJpbmcpIHtcbiAgICB0aGlzLiNfYnV0dG9uVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVRhYlRvU2VsZWN0KCk7XG4gICAgdGhpcy4jdXBkYXRlQnV0dG9uUHJvcGVydGllcygpO1xuICAgIHRoaXMuI3VwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gYnV0dG9uVHlwZUZpbmlzaCkge1xuICAgICAgdGhpcy50eXBlID0gJ3N1Ym1pdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZSA9ICdidXR0b24nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxhYmVsIHRvIGRpc3BsYXkgb24gdGhlIG5hdiBidXR0b24uIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBkZWZhdWx0cyBmb3IgZWFjaCBgYnV0dG9uVHlwZWAuXG4gICAqIGBuZXh0YCA9IFwiTmV4dFwiLCBgcHJldmlvdXNgID0gXCJQcmV2aW91c1wiLCBgZmluaXNoYCA9IFwiRmluaXNoXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBidXR0b25UZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBuYXYgYnV0dG9uLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIG5leHQgdGFiIGZvciBgbmV4dGAsIHRoZSBleGlzdGVuY2Ugb2YgYSBwcmV2aW91cyB0YWIgZm9yIGBwcmV2aW91c2AsXG4gICAqIGFuZCBmYWxzZSBmb3IgYGZpbmlzaGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLiNfZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI19idXR0b25UeXBlID09PSBidXR0b25UeXBlRmluaXNoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzLiN0YWJUb1NlbGVjdCB8fCB0aGlzLiN0YWJUb1NlbGVjdC5kaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBidXR0b25DbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBwdWJsaWMgdHlwZTogJ3N1Ym1pdCcgfCAnYnV0dG9uJztcbiAgcHVibGljIGFyaWFDb250cm9sczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNfYnV0dG9uVHlwZTogU2t5VGFic2V0TmF2QnV0dG9uVHlwZSB8IHN0cmluZztcbiAgI19kaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgI190YWJzZXQ6IFNreVRhYnNldENvbXBvbmVudDtcbiAgI2FjdGl2ZUluZGV4TnVtYmVyOiBudW1iZXI7XG4gICNhY3RpdmVTa3lUYWJJbmRleDogU2t5VGFiSW5kZXg7XG4gICNjdXJyZW50VGFic2V0U3ViOiBTdWJzY3JpcHRpb247XG4gICNsb2dnZXI6IFNreUxvZ1NlcnZpY2U7XG4gICN0YWJDb3VudDogbnVtYmVyO1xuICAjdGFiVG9TZWxlY3Q6IFNreVRhYkNvbXBvbmVudCB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ2dlcjogU2t5TG9nU2VydmljZSkge1xuICAgIHRoaXMuI2xvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYnV0dG9uQ2xpY2soKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jdGFiVG9TZWxlY3QgJiYgIXRoaXMuI3RhYlRvU2VsZWN0LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfdGFic2V0LmFjdGl2ZSA9IHRoaXMuI3RhYlRvU2VsZWN0LnRhYkluZGV4O1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTGFzdFN0ZXAgPSB0aGlzLiNhY3RpdmVJbmRleE51bWJlciA9PT0gdGhpcy4jdGFiQ291bnQgLSAxO1xuXG4gICAgaWYgKHRoaXMuI19idXR0b25UeXBlID09PSBidXR0b25UeXBlRmluaXNoKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IGlzTGFzdFN0ZXA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGlkZSB0aGUgbmV4dCBidXR0b24gb24gdGhlIGxhc3Qgc3RlcCBvbmx5IGlmIGEgZmluaXNoIGJ1dHRvbiBleGlzdHMuXG4gICAgaWYgKFxuICAgICAgdGhpcy4jX2J1dHRvblR5cGUgPT09IGJ1dHRvblR5cGVOZXh0ICYmXG4gICAgICBpc0xhc3RTdGVwICYmXG4gICAgICB0aGlzLiNfdGFic2V0Lmhhc0ZpbmlzaEJ1dHRvblxuICAgICkge1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICAjdXBkYXRlQnV0dG9uUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAodGhpcy4jX2J1dHRvblR5cGUgPT09IGJ1dHRvblR5cGVOZXh0IHx8XG4gICAgICAgIHRoaXMuI19idXR0b25UeXBlID09PSBidXR0b25UeXBlRmluaXNoKSAmJlxuICAgICAgdGhpcy4jX3RhYnNldD8uaGFzRmluaXNoQnV0dG9uXG4gICAgKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsYXNzTmFtZSA9ICdza3ktYnRuLXByaW1hcnknO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsYXNzTmFtZSA9ICdza3ktYnRuLWRlZmF1bHQnO1xuICAgIH1cblxuICAgIHRoaXMuYXJpYUNvbnRyb2xzID0gdGhpcy4jdGFiVG9TZWxlY3Q/LnRhYlBhbmVsSWQ7XG4gIH1cblxuICAjdXBkYXRlVGFiVG9TZWxlY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI190YWJzZXQ/LnRhYnMpIHtcbiAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLiNfdGFic2V0LnRhYnMudG9BcnJheSgpO1xuICAgICAgdGhpcy4jdGFiVG9TZWxlY3QgPSB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIHRhYiBpbmRleCBjYW4gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGJ1dCB3ZSBuZWVkIHRoZSBhY3R1YWwgbnVtYmVyIGluZGV4XG4gICAgICB0aGlzLiNhY3RpdmVJbmRleE51bWJlciA9IHRhYnMuZmluZEluZGV4KFxuICAgICAgICAodGFiKSA9PiB0YWIudGFiSW5kZXggPT09IHRoaXMuI2FjdGl2ZVNreVRhYkluZGV4XG4gICAgICApO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuI2FjdGl2ZUluZGV4TnVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuI19idXR0b25UeXBlID09PSBidXR0b25UeXBlTmV4dCkge1xuICAgICAgICAgIHRoaXMuI3RhYlRvU2VsZWN0ID0gdGFic1t0aGlzLiNhY3RpdmVJbmRleE51bWJlciArIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI19idXR0b25UeXBlID09PSBidXR0b25UeXBlUHJldmlvdXMpIHtcbiAgICAgICAgICB0aGlzLiN0YWJUb1NlbGVjdCA9IHRhYnNbdGhpcy4jYWN0aXZlSW5kZXhOdW1iZXIgLSAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImlzVmlzaWJsZVwiXG4gIGNsYXNzPVwic2t5LWJ0biBza3ktbWFyZ2luLWlubGluZS1zbVwiXG4gIFthdHRyLmFyaWEtY29udHJvbHNdPVwiYXJpYUNvbnRyb2xzXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW25nQ2xhc3NdPVwiYnV0dG9uQ2xhc3NOYW1lXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gIChjbGljayk9XCJidXR0b25UeXBlID09PSAnZmluaXNoJyA/IG51bGwgOiBidXR0b25DbGljaygpXCJcbj5cbiAge3sgYnV0dG9uVGV4dCB8fCAoJ3NreXV4X3RhYnNfbmF2aWdhdG9yXycgKyBidXR0b25UeXBlIHwgc2t5TGliUmVzb3VyY2VzKSB9fVxuPC9idXR0b24+XG4iXX0=
@@ -116,9 +116,9 @@ export class SkyTabsetPermalinkService {
116
116
  return params;
117
117
  }
118
118
  }
119
- SkyTabsetPermalinkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyTabsetPermalinkService, deps: [{ token: i1.ActivatedRoute }, { token: i2.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
120
- SkyTabsetPermalinkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyTabsetPermalinkService });
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyTabsetPermalinkService, decorators: [{
119
+ SkyTabsetPermalinkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTabsetPermalinkService, deps: [{ token: i1.ActivatedRoute }, { token: i2.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
120
+ SkyTabsetPermalinkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTabsetPermalinkService });
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTabsetPermalinkService, decorators: [{
122
122
  type: Injectable
123
123
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.Location }, { type: i1.Router }]; } });
124
124
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFjLE9BQU8sRUFBb0IsTUFBTSxNQUFNLENBQUM7Ozs7QUFTN0Q7O0dBRUc7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBU3BDLFlBQ1UsY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsTUFBYztRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFQaEIsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBUTNDLENBQUM7SUFaSixJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFZTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVE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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O3NIQXBJVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uTGlrZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgUGVybWFsaW5rUGFyYW1zIHtcbiAgW186IHN0cmluZ106IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZ2V0IHBvcFN0YXRlQ2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wb3BTdGF0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BvcFN0YXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uTGlrZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fcG9wU3RhdGVDaGFuZ2UubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgVVJMIHF1ZXJ5IHBhcmFtLlxuICAgKi9cbiAgcHVibGljIGdldFBhcmFtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyYW1zKClbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBVUkwgcXVlcnkgcGFyYW0uXG4gICAqL1xuICBwdWJsaWMgc2V0UGFyYW0obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0UGFyYW1zKCk7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSBwYXJhbXNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgVVJMIHdpdGhvdXQgdHJpZ2dlcmluZyBhIG5hdmlnYXRpb24gc3RhdGUgY2hhbmdlLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2NDg2Njc3XG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXJcbiAgICAgIC5jcmVhdGVVcmxUcmVlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KVxuICAgICAgLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBBYm9ydCByZWRpcmVjdCBpZiB0aGUgY3VycmVudCBVUkwgaXMgZXF1YWwgdG8gdGhlIG5ldyBVUkwuXG4gICAgaWYgKHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8odXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9jYXRpb24uZ28odXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbSBmcm9tIHRoZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJQYXJhbShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtKG5hbWUsIG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWxhdGl2ZSBVUkwgdGhhdCBpbmNsdWRlcyB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVyLiBUaGUgdmFsdWUgaXMgaW50ZWRlZCB0byBiZVxuICAgKiB1c2VkIGJ5IGFuIEhUTUwgYW5jaG9yIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFyYW1IcmVmKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICBwYXJhbXNbbmFtZV0gPSB2YWx1ZTtcblxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnPycpWzBdO1xuICAgIGNvbnN0IHBhcmFtU3RyaW5nID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgLm1hcCgoaykgPT4gYCR7a309JHtwYXJhbXNba119YClcbiAgICAgIC5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5wcmVwYXJlRXh0ZXJuYWxVcmwoYCR7YmFzZVVybH0/JHtwYXJhbVN0cmluZ31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQgc3RyaW5nIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBzYWZlbHkgdXNlZCBpbiBhIFVSTC5cbiAgICovXG4gIHB1YmxpYyB1cmxpZnkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbml0aXplZCA9IHZhbHVlXG4gICAgICAudG9Mb3dlckNhc2UoKVxuXG4gICAgICAvLyBSZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgICAgLnJlcGxhY2UoL1tffmBAISMkJV4mKigpW1xcXXt9OzonL1xcXFw8PiwuPz0rfFwiXS9nLCAnJylcblxuICAgICAgLy8gUmVwbGFjZSBzcGFjZSBjaGFyYWN0ZXJzIHdpdGggYSBkYXNoLlxuICAgICAgLnJlcGxhY2UoL1xccy9nLCAnLScpXG5cbiAgICAgIC8vIFJlbW92ZSBhbnkgZG91YmxlLWRhc2hlcy5cbiAgICAgIC5yZXBsYWNlKC8tLS9nLCAnLScpO1xuXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBxdWVyeSBwYXJhbXMgdGhhdCBleGlzdCBpbiB0aGUgY3VycmVudCBVUkwuXG4gICAqL1xuICBwcml2YXRlIGdldFBhcmFtcygpOiBQZXJtYWxpbmtQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogUGVybWFsaW5rUGFyYW1zID0ge307XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XG4gICAgaWYgKHBhdGguaW5kZXhPZignPycpID09PSAtMSkge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1BhcmFtUGFpcnMgPSBwYXRoLnNwbGl0KCc/JylbMV0uc3BsaXQoJyYnKTtcbiAgICBleGlzdGluZ1BhcmFtUGFpcnMuZm9yRWFjaCgocGFpcikgPT4ge1xuICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgcGFyYW1zW2ZyYWdtZW50c1swXV0gPSBkZWNvZGVVUklDb21wb25lbnQoZnJhZ21lbnRzWzFdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cbiJdfQ==