@skyux/indicators 6.18.0 → 6.20.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 (60) hide show
  1. package/documentation.json +1715 -563
  2. package/esm2020/index.mjs +2 -1
  3. package/esm2020/lib/modules/icon/icon-stack.component.mjs +1 -1
  4. package/esm2020/lib/modules/icon/icon.component.mjs +1 -10
  5. package/esm2020/lib/modules/key-info/key-info-layout-type.mjs +2 -0
  6. package/esm2020/lib/modules/key-info/key-info.component.mjs +1 -1
  7. package/esm2020/lib/modules/status-indicator/status-indicator.component.mjs +6 -6
  8. package/esm2020/lib/modules/tokens/token.component.mjs +31 -29
  9. package/esm2020/lib/modules/tokens/tokens.component.mjs +100 -86
  10. package/esm2020/lib/modules/tokens/types/token.mjs +1 -1
  11. package/esm2020/lib/modules/wait/wait-adapter.service.mjs +131 -128
  12. package/esm2020/lib/modules/wait/wait-page.component.mjs +1 -1
  13. package/esm2020/lib/modules/wait/wait.component.mjs +83 -36
  14. package/esm2020/lib/modules/wait/wait.service.mjs +80 -73
  15. package/esm2020/testing/alert/alert-harness-filters.mjs +1 -1
  16. package/esm2020/testing/alert/alert-harness.mjs +53 -8
  17. package/esm2020/testing/key-info/key-info-harness-filters.mjs +2 -0
  18. package/esm2020/testing/key-info/key-info-harness.mjs +49 -0
  19. package/esm2020/testing/key-info/key-info-label-harness.mjs +18 -0
  20. package/esm2020/testing/key-info/key-info-value-harness.mjs +18 -0
  21. package/esm2020/testing/label/label-harness-filters.mjs +2 -0
  22. package/esm2020/testing/label/label-harness.mjs +94 -0
  23. package/esm2020/testing/public-api.mjs +7 -3
  24. package/esm2020/testing/tokens/token-harness.mjs +6 -3
  25. package/esm2020/testing/tokens/tokens-harness.mjs +4 -1
  26. package/esm2020/testing/wait-fixture.mjs +1 -1
  27. package/fesm2015/skyux-indicators-testing.mjs +329 -85
  28. package/fesm2015/skyux-indicators-testing.mjs.map +1 -1
  29. package/fesm2015/skyux-indicators.mjs +423 -364
  30. package/fesm2015/skyux-indicators.mjs.map +1 -1
  31. package/fesm2020/skyux-indicators-testing.mjs +297 -75
  32. package/fesm2020/skyux-indicators-testing.mjs.map +1 -1
  33. package/fesm2020/skyux-indicators.mjs +422 -364
  34. package/fesm2020/skyux-indicators.mjs.map +1 -1
  35. package/index.d.ts +1 -0
  36. package/lib/modules/icon/icon-stack.component.d.ts +1 -1
  37. package/lib/modules/icon/icon.component.d.ts +4 -4
  38. package/lib/modules/key-info/key-info-layout-type.d.ts +1 -0
  39. package/lib/modules/key-info/key-info.component.d.ts +2 -1
  40. package/lib/modules/status-indicator/status-indicator.component.d.ts +8 -8
  41. package/lib/modules/tokens/token.component.d.ts +10 -27
  42. package/lib/modules/tokens/tokens.component.d.ts +17 -34
  43. package/lib/modules/tokens/types/token.d.ts +2 -1
  44. package/lib/modules/wait/wait-adapter.service.d.ts +3 -13
  45. package/lib/modules/wait/wait-page.component.d.ts +2 -2
  46. package/lib/modules/wait/wait.component.d.ts +12 -16
  47. package/lib/modules/wait/wait.service.d.ts +1 -11
  48. package/package.json +5 -5
  49. package/testing/alert/alert-harness-filters.d.ts +0 -1
  50. package/testing/alert/alert-harness.d.ts +12 -2
  51. package/testing/key-info/key-info-harness-filters.d.ts +6 -0
  52. package/testing/key-info/key-info-harness.d.ts +31 -0
  53. package/testing/key-info/key-info-label-harness.d.ts +15 -0
  54. package/testing/key-info/key-info-value-harness.d.ts +15 -0
  55. package/testing/label/label-harness-filters.d.ts +6 -0
  56. package/testing/label/label-harness.d.ts +35 -0
  57. package/testing/public-api.d.ts +6 -2
  58. package/testing/tokens/token-harness.d.ts +3 -0
  59. package/testing/tokens/tokens-harness.d.ts +3 -0
  60. package/testing/wait-fixture.d.ts +1 -1
@@ -1,5 +1,8 @@
1
+ var _SkyWaitAdapterService_instances, _SkyWaitAdapterService_focusableElements, _SkyWaitAdapterService_renderer, _SkyWaitAdapterService_focusNextElement, _SkyWaitAdapterService_isShift, _SkyWaitAdapterService_isElementHidden, _SkyWaitAdapterService_isElementBusyOrHidden, _SkyWaitAdapterService_clearDocumentFocus, _SkyWaitAdapterService_getFocusableElements, _SkyWaitAdapterService_clearListeners;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
1
3
  import { Injectable, RendererFactory2, } from '@angular/core';
2
4
  import * as i0 from "@angular/core";
5
+ const busyElements = {};
3
6
  // Need to add the following to classes which contain static methods.
4
7
  // See: https://github.com/ng-packagr/ng-packagr/issues/641
5
8
  /**
@@ -8,19 +11,21 @@ import * as i0 from "@angular/core";
8
11
  */
9
12
  export class SkyWaitAdapterService {
10
13
  constructor(rendererFactory) {
11
- this.rendererFactory = rendererFactory;
12
- this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
14
+ _SkyWaitAdapterService_instances.add(this);
15
+ _SkyWaitAdapterService_focusableElements.set(this, void 0);
16
+ _SkyWaitAdapterService_renderer.set(this, void 0);
17
+ __classPrivateFieldSet(this, _SkyWaitAdapterService_renderer, rendererFactory.createRenderer(undefined, null), "f");
13
18
  }
14
19
  ngOnDestroy() {
15
- this.clearListeners();
20
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearListeners).call(this);
16
21
  }
17
22
  setWaitBounds(waitEl) {
18
- this.renderer.setStyle(waitEl.nativeElement.parentElement, 'position', 'relative');
23
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").setStyle(waitEl.nativeElement.parentElement, 'position', 'relative');
19
24
  }
20
25
  removeWaitBounds(waitEl) {
21
- this.renderer.removeStyle(waitEl.nativeElement.parentElement, 'position');
26
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").removeStyle(waitEl.nativeElement.parentElement, 'position');
22
27
  }
23
- setBusyState(waitEl, isFullPage, isWaiting, isNonBlocking = false, waitComponentId) {
28
+ setBusyState(waitEl, isFullPage, isWaiting, isNonBlocking, waitComponentId) {
24
29
  const busyEl = isFullPage
25
30
  ? document.body
26
31
  : waitEl.nativeElement.parentElement;
@@ -28,18 +33,18 @@ export class SkyWaitAdapterService {
28
33
  if (isWaiting) {
29
34
  let restoreFocusElement = undefined;
30
35
  let restoreFocusCheckElement = undefined;
31
- this.renderer.setAttribute(busyEl, 'aria-busy', 'true');
36
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").setAttribute(busyEl, 'aria-busy', 'true');
32
37
  // Remove focus from page when full page blocking wait
33
38
  if (isFullPage || busyEl.contains(document.activeElement)) {
34
39
  if (document.activeElement !== document.body) {
35
40
  restoreFocusElement = document.activeElement;
36
41
  }
37
- this.clearDocumentFocus();
42
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
38
43
  restoreFocusCheckElement = document.activeElement;
39
44
  }
40
45
  if (isFullPage) {
41
46
  SkyWaitAdapterService.isPageWaitActive = true;
42
- const endListenerFunc = this.renderer.listen(document.body, 'keydown', (event) => {
47
+ const endListenerFunc = __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").listen(document.body, 'keydown', (event) => {
43
48
  /*istanbul ignore else */
44
49
  if (event.key) {
45
50
  /* istanbul ignore else */
@@ -48,171 +53,169 @@ export class SkyWaitAdapterService {
48
53
  event.preventDefault();
49
54
  event.stopPropagation();
50
55
  event.stopImmediatePropagation();
51
- this.clearDocumentFocus();
56
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
52
57
  }
53
58
  }
54
59
  });
55
- SkyWaitAdapterService.busyElements[waitComponentId] = {
56
- listener: endListenerFunc,
57
- busyEl: undefined,
58
- restoreFocusElement,
59
- restoreFocusCheckElement,
60
- };
60
+ if (waitComponentId) {
61
+ busyElements[waitComponentId] = {
62
+ listener: endListenerFunc,
63
+ busyEl: undefined,
64
+ restoreFocusElement,
65
+ restoreFocusCheckElement,
66
+ };
67
+ }
61
68
  }
62
69
  else {
63
- const endListenerFunc = this.renderer.listen(busyEl, 'focusin', (event) => {
70
+ const endListenerFunc = __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").listen(busyEl, 'focusin', (event) => {
64
71
  /* istanbul ignore else */
65
72
  if (!isNonBlocking) {
66
73
  event.preventDefault();
67
74
  event.stopPropagation();
68
75
  event.stopImmediatePropagation();
69
76
  if (SkyWaitAdapterService.isPageWaitActive) {
70
- this.clearDocumentFocus();
77
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
71
78
  }
72
79
  else {
73
80
  // Propagate tab navigation if attempted into waited element
74
81
  const target = event.target;
75
- target.blur();
76
- this.focusNextElement(target, this.isShift(event), busyEl);
82
+ if (target) {
83
+ target.blur();
84
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_focusNextElement).call(this, target, __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isShift).call(this, event));
85
+ }
77
86
  }
78
87
  }
79
88
  });
80
- SkyWaitAdapterService.busyElements[waitComponentId] = {
81
- listener: endListenerFunc,
82
- busyEl: busyEl,
83
- restoreFocusElement,
84
- restoreFocusCheckElement,
85
- };
89
+ if (waitComponentId) {
90
+ busyElements[waitComponentId] = {
91
+ listener: endListenerFunc,
92
+ busyEl,
93
+ restoreFocusElement,
94
+ restoreFocusCheckElement,
95
+ };
96
+ }
86
97
  }
87
98
  }
88
99
  else {
89
- this.renderer.removeAttribute(busyEl, 'aria-busy');
100
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").removeAttribute(busyEl, 'aria-busy');
90
101
  if (isFullPage) {
91
102
  SkyWaitAdapterService.isPageWaitActive = false;
92
103
  }
93
- if (waitComponentId in SkyWaitAdapterService.busyElements) {
94
- SkyWaitAdapterService.busyElements[waitComponentId].listener();
104
+ if (waitComponentId && waitComponentId in busyElements) {
105
+ const busyElement = busyElements[waitComponentId];
106
+ busyElement.listener();
95
107
  // If there is a restore focus element and the focus has not moved, restore focus.
96
- if (SkyWaitAdapterService.busyElements[waitComponentId]
97
- .restoreFocusElement &&
98
- SkyWaitAdapterService.busyElements[waitComponentId]
99
- .restoreFocusCheckElement === document.activeElement) {
100
- SkyWaitAdapterService.busyElements[waitComponentId].restoreFocusElement.focus();
108
+ if (busyElement.restoreFocusCheckElement === document.activeElement) {
109
+ busyElement.restoreFocusElement?.focus();
101
110
  }
102
- delete SkyWaitAdapterService.busyElements[waitComponentId];
111
+ delete busyElements[waitComponentId];
103
112
  }
104
113
  }
105
114
  }
106
115
  }
107
- focusNextElement(targetElement, shiftKey, busyEl) {
108
- const focussable = this.getFocussableElements();
109
- // If shift tab, go in the other direction
110
- const modifier = shiftKey ? -1 : 1;
111
- // Find the next navigable element that isn't waiting
112
- const startingIndex = focussable.indexOf(targetElement);
113
- let curIndex = startingIndex + modifier;
114
- while (focussable[curIndex] &&
115
- this.isElementBusyOrHidden(focussable[curIndex])) {
116
+ }
117
+ _SkyWaitAdapterService_focusableElements = new WeakMap(), _SkyWaitAdapterService_renderer = new WeakMap(), _SkyWaitAdapterService_instances = new WeakSet(), _SkyWaitAdapterService_focusNextElement = function _SkyWaitAdapterService_focusNextElement(targetElement, shiftKey) {
118
+ const focusable = __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_getFocusableElements).call(this);
119
+ // If shift tab, go in the other direction
120
+ const modifier = shiftKey ? -1 : 1;
121
+ // Find the next navigable element that isn't waiting
122
+ const startingIndex = focusable.indexOf(targetElement);
123
+ let curIndex = startingIndex + modifier;
124
+ while (focusable[curIndex] &&
125
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
126
+ curIndex += modifier;
127
+ }
128
+ if (focusable[curIndex] &&
129
+ !__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
130
+ focusable[curIndex].focus();
131
+ }
132
+ else {
133
+ // Try wrapping the navigation
134
+ /* istanbul ignore next */
135
+ /* sanity check */
136
+ curIndex = modifier > 0 ? 0 : focusable.length - 1;
137
+ while (curIndex !== startingIndex &&
138
+ focusable[curIndex] &&
139
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
140
+ /* istanbul ignore next */
141
+ /* sanity check */
116
142
  curIndex += modifier;
117
143
  }
118
- if (focussable[curIndex] &&
119
- !this.isElementBusyOrHidden(focussable[curIndex])) {
120
- focussable[curIndex].focus();
144
+ /* istanbul ignore else */
145
+ /* sanity check */
146
+ if (focusable[curIndex] &&
147
+ !__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
148
+ focusable[curIndex].focus();
121
149
  }
122
150
  else {
123
- // Try wrapping the navigation
124
- /* istanbul ignore next */
125
- /* sanity check */
126
- curIndex = modifier > 0 ? 0 : focussable.length - 1;
127
- while (curIndex !== startingIndex &&
128
- focussable[curIndex] &&
129
- this.isElementBusyOrHidden(focussable[curIndex])) {
130
- /* istanbul ignore next */
131
- /* sanity check */
132
- curIndex += modifier;
133
- }
134
- /* istanbul ignore else */
135
- /* sanity check */
136
- if (focussable[curIndex] &&
137
- !this.isElementBusyOrHidden(focussable[curIndex])) {
138
- focussable[curIndex].focus();
139
- }
140
- else {
141
- // No valid target, wipe focus
142
- this.clearDocumentFocus();
143
- }
151
+ // No valid target, wipe focus
152
+ __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
144
153
  }
145
- // clear focussableElements list
146
- this.focussableElements = undefined;
147
154
  }
148
- isShift(event) {
149
- // Determine if shift+tab was used based on element order
150
- const elements = this.getFocussableElements().filter((elem) => !this.isElementHidden(elem));
151
- const previousInd = elements.indexOf(event.relatedTarget);
152
- const currentInd = elements.indexOf(event.target);
153
- return (previousInd === currentInd + 1 ||
154
- (previousInd === 0 && currentInd === elements.length - 1) ||
155
- previousInd > currentInd ||
156
- !event.relatedTarget);
155
+ // clear focusableElements list
156
+ __classPrivateFieldSet(this, _SkyWaitAdapterService_focusableElements, undefined, "f");
157
+ }, _SkyWaitAdapterService_isShift = function _SkyWaitAdapterService_isShift(event) {
158
+ // Determine if shift+tab was used based on element order
159
+ const elements = __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_getFocusableElements).call(this).filter((elem) => !__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementHidden).call(this, elem));
160
+ const previousInd = elements.indexOf(event.relatedTarget);
161
+ const currentInd = elements.indexOf(event.target);
162
+ return (previousInd === currentInd + 1 ||
163
+ (previousInd === 0 && currentInd === elements.length - 1) ||
164
+ previousInd > currentInd ||
165
+ !event.relatedTarget);
166
+ }, _SkyWaitAdapterService_isElementHidden = function _SkyWaitAdapterService_isElementHidden(element) {
167
+ const style = window.getComputedStyle(element);
168
+ return style.display === 'none' || style.visibility === 'hidden';
169
+ }, _SkyWaitAdapterService_isElementBusyOrHidden = function _SkyWaitAdapterService_isElementBusyOrHidden(element) {
170
+ if (__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementHidden).call(this, element)) {
171
+ return true;
157
172
  }
158
- isElementHidden(element) {
159
- const style = window.getComputedStyle(element);
160
- return style.display === 'none' || style.visibility === 'hidden';
161
- }
162
- isElementBusyOrHidden(element) {
163
- if (this.isElementHidden(element)) {
173
+ for (const key of Object.keys(busyElements)) {
174
+ const parentElement = busyElements[key].busyEl;
175
+ if (parentElement && parentElement.contains(element)) {
164
176
  return true;
165
177
  }
166
- for (const key of Object.keys(SkyWaitAdapterService.busyElements)) {
167
- const parentElement = SkyWaitAdapterService.busyElements[key].busyEl;
168
- if (parentElement && parentElement.contains(element)) {
169
- return true;
170
- }
171
- }
172
- return false;
173
178
  }
174
- clearDocumentFocus() {
175
- /* istanbul ignore else */
176
- if (document.activeElement && document.activeElement.blur) {
177
- document.activeElement.blur();
178
- }
179
- document.body.focus();
179
+ return false;
180
+ }, _SkyWaitAdapterService_clearDocumentFocus = function _SkyWaitAdapterService_clearDocumentFocus() {
181
+ const activeElement = document.activeElement;
182
+ /* istanbul ignore else */
183
+ if (activeElement) {
184
+ activeElement.blur();
180
185
  }
181
- getFocussableElements() {
182
- // Keep this cached so we can reduce querys
183
- if (this.focussableElements) {
184
- return this.focussableElements;
185
- }
186
- // Select all possible focussable elements
187
- const focussableElements = 'a[href], ' +
188
- 'area[href], ' +
189
- "input:not([disabled]):not([tabindex='-1']), " +
190
- "button:not([disabled]):not([tabindex='-1']), " +
191
- "select:not([disabled]):not([tabindex='-1']), " +
192
- "textarea:not([disabled]):not([tabindex='-1']), " +
193
- 'iframe, object, embed, ' +
194
- "*[tabindex]:not([tabindex='-1']), " +
195
- '*[contenteditable=true]';
196
- this.focussableElements = Array.prototype.filter.call(document.body.querySelectorAll(focussableElements), (element) => {
197
- return (element.offsetWidth > 0 ||
198
- element.offsetHeight > 0 ||
199
- element === document.activeElement);
200
- });
201
- return this.focussableElements;
186
+ document.body.focus();
187
+ }, _SkyWaitAdapterService_getFocusableElements = function _SkyWaitAdapterService_getFocusableElements() {
188
+ // Keep this cached so we can reduce queries
189
+ if (__classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f")) {
190
+ return __classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f");
202
191
  }
203
- clearListeners() {
204
- SkyWaitAdapterService.isPageWaitActive = false;
205
- for (const key of Object.keys(SkyWaitAdapterService.busyElements)) {
206
- SkyWaitAdapterService.busyElements[key].listener();
207
- delete SkyWaitAdapterService.busyElements[key];
208
- }
192
+ // Select all possible focusable elements
193
+ const focusableElements = 'a[href], ' +
194
+ 'area[href], ' +
195
+ "input:not([disabled]):not([tabindex='-1']), " +
196
+ "button:not([disabled]):not([tabindex='-1']), " +
197
+ "select:not([disabled]):not([tabindex='-1']), " +
198
+ "textarea:not([disabled]):not([tabindex='-1']), " +
199
+ 'iframe, object, embed, ' +
200
+ "*[tabindex]:not([tabindex='-1']), " +
201
+ '*[contenteditable=true]';
202
+ __classPrivateFieldSet(this, _SkyWaitAdapterService_focusableElements, Array.prototype.filter.call(document.body.querySelectorAll(focusableElements), (element) => {
203
+ return (element.offsetWidth > 0 ||
204
+ element.offsetHeight > 0 ||
205
+ element === document.activeElement);
206
+ }), "f");
207
+ return __classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f");
208
+ }, _SkyWaitAdapterService_clearListeners = function _SkyWaitAdapterService_clearListeners() {
209
+ SkyWaitAdapterService.isPageWaitActive = false;
210
+ for (const key of Object.keys(busyElements)) {
211
+ busyElements[key].listener();
212
+ delete busyElements[key];
209
213
  }
210
- }
214
+ };
211
215
  SkyWaitAdapterService.isPageWaitActive = false;
212
- SkyWaitAdapterService.busyElements = {};
213
216
  SkyWaitAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyWaitAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
214
217
  SkyWaitAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyWaitAdapterService });
215
218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyWaitAdapterService, decorators: [{
216
219
  type: Injectable
217
220
  }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsVUFBVSxFQUdWLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQzs7QUFFdkIscUVBQXFFO0FBQ3JFLDJEQUEyRDtBQUMzRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBZWhDLFlBQW9CLGVBQWlDO1FBQWpDLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUFrQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQ2xDLFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sWUFBWSxDQUNqQixNQUFrQixFQUNsQixVQUFtQixFQUNuQixTQUFrQixFQUNsQixhQUFhLEdBQUcsS0FBSyxFQUNyQixlQUF3QjtRQUV4QixNQUFNLE1BQU0sR0FBRyxVQUFVO1lBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUV2QyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksbUJBQW1CLEdBQTRCLFNBQVMsQ0FBQztnQkFDN0QsSUFBSSx3QkFBd0IsR0FBNEIsU0FBUyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV4RCxzREFBc0Q7Z0JBQ3RELElBQUksVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUN6RCxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTt3QkFDNUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQTRCLENBQUM7cUJBQzdEO29CQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUMxQix3QkFBd0IsR0FBRyxRQUFRLENBQUMsYUFBNEIsQ0FBQztpQkFDbEU7Z0JBRUQsSUFBSSxVQUFVLEVBQUU7b0JBQ2QscUJBQXFCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO29CQUM5QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDMUMsUUFBUSxDQUFDLElBQUksRUFDYixTQUFTLEVBQ1QsQ0FBQyxLQUFvQixFQUFFLEVBQUU7d0JBQ3ZCLHlCQUF5Qjt3QkFDekIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFOzRCQUNiLDBCQUEwQjs0QkFDMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRTtnQ0FDcEMsS0FBSyxDQUFDLE1BQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQ0FDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dDQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0NBQ3hCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dDQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs2QkFDM0I7eUJBQ0Y7b0JBQ0gsQ0FBQyxDQUNGLENBQUM7b0JBQ0YscUJBQXFCLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHO3dCQUNwRCxRQUFRLEVBQUUsZUFBZTt3QkFDekIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3FCQUN6QixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUMxQyxNQUFNLEVBQ04sU0FBUyxFQUNULENBQUMsS0FBb0IsRUFBRSxFQUFFO3dCQUN2QiwwQkFBMEI7d0JBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUU7NEJBQ2xCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN4QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzs0QkFFakMsSUFBSSxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRTtnQ0FDMUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7NkJBQzNCO2lDQUFNO2dDQUNMLDREQUE0RDtnQ0FDNUQsTUFBTSxNQUFNLEdBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQ0FDakMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dDQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzs2QkFDNUQ7eUJBQ0Y7b0JBQ0gsQ0FBQyxDQUNGLENBQUM7b0JBQ0YscUJBQXFCLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHO3dCQUNwRCxRQUFRLEVBQUUsZUFBZTt3QkFDekIsTUFBTSxFQUFFLE1BQU07d0JBQ2QsbUJBQW1CO3dCQUNuQix3QkFBd0I7cUJBQ3pCLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRW5ELElBQUksVUFBVSxFQUFFO29CQUNkLHFCQUFxQixDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztpQkFDaEQ7Z0JBQ0QsSUFBSSxlQUFlLElBQUkscUJBQXFCLENBQUMsWUFBWSxFQUFFO29CQUN6RCxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQy9ELGtGQUFrRjtvQkFDbEYsSUFDRSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO3lCQUNoRCxtQkFBbUI7d0JBQ3RCLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7NkJBQ2hELHdCQUF3QixLQUFLLFFBQVEsQ0FBQyxhQUFhLEVBQ3REO3dCQUNBLHFCQUFxQixDQUFDLFlBQVksQ0FDaEMsZUFBZSxDQUNoQixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUMvQjtvQkFDRCxPQUFPLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDNUQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixhQUEwQixFQUMxQixRQUFpQixFQUNqQixNQUFlO1FBRWYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFaEQsMENBQTBDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQyxxREFBcUQ7UUFDckQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxJQUFJLFFBQVEsR0FBRyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLE9BQ0UsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hEO1lBQ0EsUUFBUSxJQUFJLFFBQVEsQ0FBQztTQUN0QjtRQUVELElBQ0UsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDakQ7WUFDQSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDOUI7YUFBTTtZQUNMLDhCQUE4QjtZQUM5QiwwQkFBMEI7WUFDMUIsa0JBQWtCO1lBQ2xCLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQ0UsUUFBUSxLQUFLLGFBQWE7Z0JBQzFCLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDaEQ7Z0JBQ0EsMEJBQTBCO2dCQUMxQixrQkFBa0I7Z0JBQ2xCLFFBQVEsSUFBSSxRQUFRLENBQUM7YUFDdEI7WUFFRCwwQkFBMEI7WUFDMUIsa0JBQWtCO1lBQ2xCLElBQ0UsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDcEIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2pEO2dCQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCw4QkFBOEI7Z0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQVk7UUFDMUIseURBQXlEO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FDbEQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUUsS0FBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsQ0FBQztRQUVqRSxPQUFPLENBQ0wsV0FBVyxLQUFLLFVBQVUsR0FBRyxDQUFDO1lBQzlCLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxVQUFVLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsV0FBVyxHQUFHLFVBQVU7WUFDeEIsQ0FBRSxLQUFhLENBQUMsYUFBYSxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFZO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDO0lBQ25FLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFZO1FBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDckUsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEQsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLDBCQUEwQjtRQUMxQixJQUFJLFFBQVEsQ0FBQyxhQUFhLElBQUssUUFBUSxDQUFDLGFBQXFCLENBQUMsSUFBSSxFQUFFO1lBQ2pFLFFBQVEsQ0FBQyxhQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNoQztRQUVELDBDQUEwQztRQUMxQyxNQUFNLGtCQUFrQixHQUN0QixXQUFXO1lBQ1gsY0FBYztZQUNkLDhDQUE4QztZQUM5QywrQ0FBK0M7WUFDL0MsK0NBQStDO1lBQy9DLGlEQUFpRDtZQUNqRCx5QkFBeUI7WUFDekIsb0NBQW9DO1lBQ3BDLHlCQUF5QixDQUFDO1FBRTVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25ELFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsRUFDbEQsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FDTCxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQztnQkFDeEIsT0FBTyxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQ25DLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLHFCQUFxQixDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUMvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDakUscUJBQXFCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25ELE9BQU8scUJBQXFCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQzs7QUFyUmMsc0NBQWdCLEdBQUcsS0FBTSxDQUFBO0FBQ3pCLGtDQUFZLEdBT3ZCLEVBQUcsQ0FBQTtrSEFUSSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBOZWVkIHRvIGFkZCB0aGUgZm9sbG93aW5nIHRvIGNsYXNzZXMgd2hpY2ggY29udGFpbiBzdGF0aWMgbWV0aG9kcy5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25nLXBhY2thZ3IvbmctcGFja2Fnci9pc3N1ZXMvNjQxXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVdhaXRBZGFwdGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGljIGlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgYnVzeUVsZW1lbnRzOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgYnVzeUVsOiBIVE1MRWxlbWVudDtcbiAgICAgIGxpc3RlbmVyOiBhbnk7XG4gICAgICByZXN0b3JlRm9jdXNFbGVtZW50PzogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9ID0ge307XG5cbiAgcHJpdmF0ZSBmb2N1c3NhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG5cbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0V2FpdEJvdW5kcyh3YWl0RWw6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgd2FpdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCxcbiAgICAgICdwb3NpdGlvbicsXG4gICAgICAncmVsYXRpdmUnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVXYWl0Qm91bmRzKHdhaXRFbDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUod2FpdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0QnVzeVN0YXRlKFxuICAgIHdhaXRFbDogRWxlbWVudFJlZixcbiAgICBpc0Z1bGxQYWdlOiBib29sZWFuLFxuICAgIGlzV2FpdGluZzogYm9vbGVhbixcbiAgICBpc05vbkJsb2NraW5nID0gZmFsc2UsXG4gICAgd2FpdENvbXBvbmVudElkPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJ1c3lFbCA9IGlzRnVsbFBhZ2VcbiAgICAgID8gZG9jdW1lbnQuYm9keVxuICAgICAgOiB3YWl0RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgaWYgKCFpc05vbkJsb2NraW5nKSB7XG4gICAgICBpZiAoaXNXYWl0aW5nKSB7XG4gICAgICAgIGxldCByZXN0b3JlRm9jdXNFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3RvcmVGb2N1c0NoZWNrRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGJ1c3lFbCwgJ2FyaWEtYnVzeScsICd0cnVlJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZvY3VzIGZyb20gcGFnZSB3aGVuIGZ1bGwgcGFnZSBibG9ja2luZyB3YWl0XG4gICAgICAgIGlmIChpc0Z1bGxQYWdlIHx8IGJ1c3lFbC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICByZXN0b3JlRm9jdXNFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbGVhckRvY3VtZW50Rm9jdXMoKTtcbiAgICAgICAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRnVsbFBhZ2UpIHtcbiAgICAgICAgICBTa3lXYWl0QWRhcHRlclNlcnZpY2UuaXNQYWdlV2FpdEFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgY29uc3QgZW5kTGlzdGVuZXJGdW5jID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LFxuICAgICAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBhbnkpLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckRvY3VtZW50Rm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIFNreVdhaXRBZGFwdGVyU2VydmljZS5idXN5RWxlbWVudHNbd2FpdENvbXBvbmVudElkXSA9IHtcbiAgICAgICAgICAgIGxpc3RlbmVyOiBlbmRMaXN0ZW5lckZ1bmMsXG4gICAgICAgICAgICBidXN5RWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1c0VsZW1lbnQsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmRMaXN0ZW5lckZ1bmMgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIGJ1c3lFbCxcbiAgICAgICAgICAgICdmb2N1c2luJyxcbiAgICAgICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoIWlzTm9uQmxvY2tpbmcpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFNreVdhaXRBZGFwdGVyU2VydmljZS5pc1BhZ2VXYWl0QWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRG9jdW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGFiIG5hdmlnYXRpb24gaWYgYXR0ZW1wdGVkIGludG8gd2FpdGVkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldDogYW55ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0RWxlbWVudCh0YXJnZXQsIHRoaXMuaXNTaGlmdChldmVudCksIGJ1c3lFbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBTa3lXYWl0QWRhcHRlclNlcnZpY2UuYnVzeUVsZW1lbnRzW3dhaXRDb21wb25lbnRJZF0gPSB7XG4gICAgICAgICAgICBsaXN0ZW5lcjogZW5kTGlzdGVuZXJGdW5jLFxuICAgICAgICAgICAgYnVzeUVsOiBidXN5RWwsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXNFbGVtZW50LFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGJ1c3lFbCwgJ2FyaWEtYnVzeScpO1xuXG4gICAgICAgIGlmIChpc0Z1bGxQYWdlKSB7XG4gICAgICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FpdENvbXBvbmVudElkIGluIFNreVdhaXRBZGFwdGVyU2VydmljZS5idXN5RWxlbWVudHMpIHtcbiAgICAgICAgICBTa3lXYWl0QWRhcHRlclNlcnZpY2UuYnVzeUVsZW1lbnRzW3dhaXRDb21wb25lbnRJZF0ubGlzdGVuZXIoKTtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlc3RvcmUgZm9jdXMgZWxlbWVudCBhbmQgdGhlIGZvY3VzIGhhcyBub3QgbW92ZWQsIHJlc3RvcmUgZm9jdXMuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmJ1c3lFbGVtZW50c1t3YWl0Q29tcG9uZW50SWRdXG4gICAgICAgICAgICAgIC5yZXN0b3JlRm9jdXNFbGVtZW50ICYmXG4gICAgICAgICAgICBTa3lXYWl0QWRhcHRlclNlcnZpY2UuYnVzeUVsZW1lbnRzW3dhaXRDb21wb25lbnRJZF1cbiAgICAgICAgICAgICAgLnJlc3RvcmVGb2N1c0NoZWNrRWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmJ1c3lFbGVtZW50c1tcbiAgICAgICAgICAgICAgd2FpdENvbXBvbmVudElkXG4gICAgICAgICAgICBdLnJlc3RvcmVGb2N1c0VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIFNreVdhaXRBZGFwdGVyU2VydmljZS5idXN5RWxlbWVudHNbd2FpdENvbXBvbmVudElkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0RWxlbWVudChcbiAgICB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBzaGlmdEtleTogYm9vbGVhbixcbiAgICBidXN5RWw6IEVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNzYWJsZUVsZW1lbnRzKCk7XG5cbiAgICAvLyBJZiBzaGlmdCB0YWIsIGdvIGluIHRoZSBvdGhlciBkaXJlY3Rpb25cbiAgICBjb25zdCBtb2RpZmllciA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xuXG4gICAgLy8gRmluZCB0aGUgbmV4dCBuYXZpZ2FibGUgZWxlbWVudCB0aGF0IGlzbid0IHdhaXRpbmdcbiAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gZm9jdXNzYWJsZS5pbmRleE9mKHRhcmdldEVsZW1lbnQpO1xuICAgIGxldCBjdXJJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyBtb2RpZmllcjtcbiAgICB3aGlsZSAoXG4gICAgICBmb2N1c3NhYmxlW2N1ckluZGV4XSAmJlxuICAgICAgdGhpcy5pc0VsZW1lbnRCdXN5T3JIaWRkZW4oZm9jdXNzYWJsZVtjdXJJbmRleF0pXG4gICAgKSB7XG4gICAgICBjdXJJbmRleCArPSBtb2RpZmllcjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb2N1c3NhYmxlW2N1ckluZGV4XSAmJlxuICAgICAgIXRoaXMuaXNFbGVtZW50QnVzeU9ySGlkZGVuKGZvY3Vzc2FibGVbY3VySW5kZXhdKVxuICAgICkge1xuICAgICAgZm9jdXNzYWJsZVtjdXJJbmRleF0uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJ5IHdyYXBwaW5nIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBjdXJJbmRleCA9IG1vZGlmaWVyID4gMCA/IDAgOiBmb2N1c3NhYmxlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGN1ckluZGV4ICE9PSBzdGFydGluZ0luZGV4ICYmXG4gICAgICAgIGZvY3Vzc2FibGVbY3VySW5kZXhdICYmXG4gICAgICAgIHRoaXMuaXNFbGVtZW50QnVzeU9ySGlkZGVuKGZvY3Vzc2FibGVbY3VySW5kZXhdKVxuICAgICAgKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBjdXJJbmRleCArPSBtb2RpZmllcjtcbiAgICAgIH1cblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgaWYgKFxuICAgICAgICBmb2N1c3NhYmxlW2N1ckluZGV4XSAmJlxuICAgICAgICAhdGhpcy5pc0VsZW1lbnRCdXN5T3JIaWRkZW4oZm9jdXNzYWJsZVtjdXJJbmRleF0pXG4gICAgICApIHtcbiAgICAgICAgZm9jdXNzYWJsZVtjdXJJbmRleF0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHZhbGlkIHRhcmdldCwgd2lwZSBmb2N1c1xuICAgICAgICB0aGlzLmNsZWFyRG9jdW1lbnRGb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyIGZvY3Vzc2FibGVFbGVtZW50cyBsaXN0XG4gICAgdGhpcy5mb2N1c3NhYmxlRWxlbWVudHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzU2hpZnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgLy8gRGV0ZXJtaW5lIGlmIHNoaWZ0K3RhYiB3YXMgdXNlZCBiYXNlZCBvbiBlbGVtZW50IG9yZGVyXG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmdldEZvY3Vzc2FibGVFbGVtZW50cygpLmZpbHRlcihcbiAgICAgIChlbGVtKSA9PiAhdGhpcy5pc0VsZW1lbnRIaWRkZW4oZWxlbSlcbiAgICApO1xuXG4gICAgY29uc3QgcHJldmlvdXNJbmQgPSBlbGVtZW50cy5pbmRleE9mKChldmVudCBhcyBhbnkpLnJlbGF0ZWRUYXJnZXQpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmQgPSBlbGVtZW50cy5pbmRleE9mKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcHJldmlvdXNJbmQgPT09IGN1cnJlbnRJbmQgKyAxIHx8XG4gICAgICAocHJldmlvdXNJbmQgPT09IDAgJiYgY3VycmVudEluZCA9PT0gZWxlbWVudHMubGVuZ3RoIC0gMSkgfHxcbiAgICAgIHByZXZpb3VzSW5kID4gY3VycmVudEluZCB8fFxuICAgICAgIShldmVudCBhcyBhbnkpLnJlbGF0ZWRUYXJnZXRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VsZW1lbnRIaWRkZW4oZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICByZXR1cm4gc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8IHN0eWxlLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VsZW1lbnRCdXN5T3JIaWRkZW4oZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNFbGVtZW50SGlkZGVuKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTa3lXYWl0QWRhcHRlclNlcnZpY2UuYnVzeUVsZW1lbnRzKSkge1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IFNreVdhaXRBZGFwdGVyU2VydmljZS5idXN5RWxlbWVudHNba2V5XS5idXN5RWw7XG4gICAgICBpZiAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIGFueSkuYmx1cikge1xuICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgYW55KS5ibHVyKCk7XG4gICAgfVxuICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9jdXNzYWJsZUVsZW1lbnRzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIC8vIEtlZXAgdGhpcyBjYWNoZWQgc28gd2UgY2FuIHJlZHVjZSBxdWVyeXNcbiAgICBpZiAodGhpcy5mb2N1c3NhYmxlRWxlbWVudHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3Vzc2FibGVFbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBTZWxlY3QgYWxsIHBvc3NpYmxlIGZvY3Vzc2FibGUgZWxlbWVudHNcbiAgICBjb25zdCBmb2N1c3NhYmxlRWxlbWVudHMgPVxuICAgICAgJ2FbaHJlZl0sICcgK1xuICAgICAgJ2FyZWFbaHJlZl0sICcgK1xuICAgICAgXCJpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD0nLTEnXSksIFwiICtcbiAgICAgIFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Jy0xJ10pLCBcIiArXG4gICAgICBcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgJ2lmcmFtZSwgb2JqZWN0LCBlbWJlZCwgJyArXG4gICAgICBcIipbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9Jy0xJ10pLCBcIiArXG4gICAgICAnKltjb250ZW50ZWRpdGFibGU9dHJ1ZV0nO1xuXG4gICAgdGhpcy5mb2N1c3NhYmxlRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoXG4gICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoZm9jdXNzYWJsZUVsZW1lbnRzKSxcbiAgICAgIChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCB8fFxuICAgICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCB8fFxuICAgICAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB0aGlzLmZvY3Vzc2FibGVFbGVtZW50cztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTa3lXYWl0QWRhcHRlclNlcnZpY2UuYnVzeUVsZW1lbnRzKSkge1xuICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmJ1c3lFbGVtZW50c1trZXldLmxpc3RlbmVyKCk7XG4gICAgICBkZWxldGUgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmJ1c3lFbGVtZW50c1trZXldO1xuICAgIH1cbiAgfVxufVxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxVQUFVLEVBR1YsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDOztBQUV2QixNQUFNLFlBQVksR0FPZCxFQUFFLENBQUM7QUFFUCxxRUFBcUU7QUFDckUsMkRBQTJEO0FBQzNEOzs7R0FHRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7SUFNaEMsWUFBWSxlQUFpQzs7UUFIN0MsMkRBQThDO1FBQzlDLGtEQUFxQjtRQUduQix1QkFBQSxJQUFJLG1DQUFhLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFBLENBQUM7SUFDbkUsQ0FBQztJQUVNLFdBQVc7UUFDaEIsdUJBQUEsSUFBSSwrRUFBZ0IsTUFBcEIsSUFBSSxDQUFrQixDQUFDO0lBQ3pCLENBQUM7SUFFTSxhQUFhLENBQUMsTUFBa0I7UUFDckMsdUJBQUEsSUFBSSx1Q0FBVSxDQUFDLFFBQVEsQ0FDckIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQ2xDLFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUN4Qyx1QkFBQSxJQUFJLHVDQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxZQUFZLENBQ2pCLE1BQWtCLEVBQ2xCLFVBQW1CLEVBQ25CLFNBQWtCLEVBQ2xCLGFBQXNCLEVBQ3RCLGVBQXdCO1FBRXhCLE1BQU0sTUFBTSxHQUFHLFVBQVU7WUFDdkIsQ0FBQyxDQUFDLFFBQVEsQ0FB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N0IsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDMUI7QUFDSCxDQUFDO0FBbFJhLHNDQUFnQixHQUFHLEtBQU0sQ0FBQTtrSEFENUIscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlckZhY3RvcnkyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgYnVzeUVsZW1lbnRzOiB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICBidXN5RWw6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIGxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICAgIHJlc3RvcmVGb2N1c0VsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgfTtcbn0gPSB7fTtcblxuLy8gTmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBjbGFzc2VzIHdoaWNoIGNvbnRhaW4gc3RhdGljIG1ldGhvZHMuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wYWNrYWdyL25nLXBhY2thZ3IvaXNzdWVzLzY0MVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkeW5hbWljXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lXYWl0QWRhcHRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgc3RhdGljIGlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcblxuICAjZm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gfCB1bmRlZmluZWQ7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jY2xlYXJMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRXYWl0Qm91bmRzKHdhaXRFbDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgd2FpdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCxcbiAgICAgICdwb3NpdGlvbicsXG4gICAgICAncmVsYXRpdmUnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVXYWl0Qm91bmRzKHdhaXRFbDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZVN0eWxlKHdhaXRFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsICdwb3NpdGlvbicpO1xuICB9XG5cbiAgcHVibGljIHNldEJ1c3lTdGF0ZShcbiAgICB3YWl0RWw6IEVsZW1lbnRSZWYsXG4gICAgaXNGdWxsUGFnZTogYm9vbGVhbixcbiAgICBpc1dhaXRpbmc6IGJvb2xlYW4sXG4gICAgaXNOb25CbG9ja2luZzogYm9vbGVhbixcbiAgICB3YWl0Q29tcG9uZW50SWQ/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYnVzeUVsID0gaXNGdWxsUGFnZVxuICAgICAgPyBkb2N1bWVudC5ib2R5XG4gICAgICA6IHdhaXRFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoIWlzTm9uQmxvY2tpbmcpIHtcbiAgICAgIGlmIChpc1dhaXRpbmcpIHtcbiAgICAgICAgbGV0IHJlc3RvcmVGb2N1c0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGJ1c3lFbCwgJ2FyaWEtYnVzeScsICd0cnVlJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZvY3VzIGZyb20gcGFnZSB3aGVuIGZ1bGwgcGFnZSBibG9ja2luZyB3YWl0XG4gICAgICAgIGlmIChpc0Z1bGxQYWdlIHx8IGJ1c3lFbC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICByZXN0b3JlRm9jdXNFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4jY2xlYXJEb2N1bWVudEZvY3VzKCk7XG4gICAgICAgICAgcmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bGxQYWdlKSB7XG4gICAgICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IGVuZExpc3RlbmVyRnVuYyA9IHRoaXMuI3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAna2V5ZG93bicsXG4gICAgICAgICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2NsZWFyRG9jdW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAod2FpdENvbXBvbmVudElkKSB7XG4gICAgICAgICAgICBidXN5RWxlbWVudHNbd2FpdENvbXBvbmVudElkXSA9IHtcbiAgICAgICAgICAgICAgbGlzdGVuZXI6IGVuZExpc3RlbmVyRnVuYyxcbiAgICAgICAgICAgICAgYnVzeUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHJlc3RvcmVGb2N1c0VsZW1lbnQsXG4gICAgICAgICAgICAgIHJlc3RvcmVGb2N1c0NoZWNrRWxlbWVudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVuZExpc3RlbmVyRnVuYyA9IHRoaXMuI3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIGJ1c3lFbCxcbiAgICAgICAgICAgICdmb2N1c2luJyxcbiAgICAgICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoIWlzTm9uQmxvY2tpbmcpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFNreVdhaXRBZGFwdGVyU2VydmljZS5pc1BhZ2VXYWl0QWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiNjbGVhckRvY3VtZW50Rm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRhYiBuYXZpZ2F0aW9uIGlmIGF0dGVtcHRlZCBpbnRvIHdhaXRlZCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZm9jdXNOZXh0RWxlbWVudCh0YXJnZXQsIHRoaXMuI2lzU2hpZnQoZXZlbnQpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHdhaXRDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgYnVzeUVsZW1lbnRzW3dhaXRDb21wb25lbnRJZF0gPSB7XG4gICAgICAgICAgICAgIGxpc3RlbmVyOiBlbmRMaXN0ZW5lckZ1bmMsXG4gICAgICAgICAgICAgIGJ1c3lFbCxcbiAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzRWxlbWVudCxcbiAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShidXN5RWwsICdhcmlhLWJ1c3knKTtcblxuICAgICAgICBpZiAoaXNGdWxsUGFnZSkge1xuICAgICAgICAgIFNreVdhaXRBZGFwdGVyU2VydmljZS5pc1BhZ2VXYWl0QWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FpdENvbXBvbmVudElkICYmIHdhaXRDb21wb25lbnRJZCBpbiBidXN5RWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCBidXN5RWxlbWVudCA9IGJ1c3lFbGVtZW50c1t3YWl0Q29tcG9uZW50SWRdO1xuXG4gICAgICAgICAgYnVzeUVsZW1lbnQubGlzdGVuZXIoKTtcblxuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzdG9yZSBmb2N1cyBlbGVtZW50IGFuZCB0aGUgZm9jdXMgaGFzIG5vdCBtb3ZlZCwgcmVzdG9yZSBmb2N1cy5cbiAgICAgICAgICBpZiAoYnVzeUVsZW1lbnQucmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBidXN5RWxlbWVudC5yZXN0b3JlRm9jdXNFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlbGV0ZSBidXN5RWxlbWVudHNbd2FpdENvbXBvbmVudElkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNmb2N1c05leHRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzaGlmdEtleTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuI2dldEZvY3VzYWJsZUVsZW1lbnRzKCk7XG5cbiAgICAvLyBJZiBzaGlmdCB0YWIsIGdvIGluIHRoZSBvdGhlciBkaXJlY3Rpb25cbiAgICBjb25zdCBtb2RpZmllciA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xuXG4gICAgLy8gRmluZCB0aGUgbmV4dCBuYXZpZ2FibGUgZWxlbWVudCB0aGF0IGlzbid0IHdhaXRpbmdcbiAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gZm9jdXNhYmxlLmluZGV4T2YodGFyZ2V0RWxlbWVudCk7XG4gICAgbGV0IGN1ckluZGV4ID0gc3RhcnRpbmdJbmRleCArIG1vZGlmaWVyO1xuICAgIHdoaWxlIChcbiAgICAgIGZvY3VzYWJsZVtjdXJJbmRleF0gJiZcbiAgICAgIHRoaXMuI2lzRWxlbWVudEJ1c3lPckhpZGRlbihmb2N1c2FibGVbY3VySW5kZXhdKVxuICAgICkge1xuICAgICAgY3VySW5kZXggKz0gbW9kaWZpZXI7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZm9jdXNhYmxlW2N1ckluZGV4XSAmJlxuICAgICAgIXRoaXMuI2lzRWxlbWVudEJ1c3lPckhpZGRlbihmb2N1c2FibGVbY3VySW5kZXhdKVxuICAgICkge1xuICAgICAgZm9jdXNhYmxlW2N1ckluZGV4XS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcnkgd3JhcHBpbmcgdGhlIG5hdmlnYXRpb25cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgIGN1ckluZGV4ID0gbW9kaWZpZXIgPiAwID8gMCA6IGZvY3VzYWJsZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBjdXJJbmRleCAhPT0gc3RhcnRpbmdJbmRleCAmJlxuICAgICAgICBmb2N1c2FibGVbY3VySW5kZXhdICYmXG4gICAgICAgIHRoaXMuI2lzRWxlbWVudEJ1c3lPckhpZGRlbihmb2N1c2FibGVbY3VySW5kZXhdKVxuICAgICAgKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBjdXJJbmRleCArPSBtb2RpZmllcjtcbiAgICAgIH1cblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgaWYgKFxuICAgICAgICBmb2N1c2FibGVbY3VySW5kZXhdICYmXG4gICAgICAgICF0aGlzLiNpc0VsZW1lbnRCdXN5T3JIaWRkZW4oZm9jdXNhYmxlW2N1ckluZGV4XSlcbiAgICAgICkge1xuICAgICAgICBmb2N1c2FibGVbY3VySW5kZXhdLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyB2YWxpZCB0YXJnZXQsIHdpcGUgZm9jdXNcbiAgICAgICAgdGhpcy4jY2xlYXJEb2N1bWVudEZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYXIgZm9jdXNhYmxlRWxlbWVudHMgbGlzdFxuICAgIHRoaXMuI2ZvY3VzYWJsZUVsZW1lbnRzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzU2hpZnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgLy8gRGV0ZXJtaW5lIGlmIHNoaWZ0K3RhYiB3YXMgdXNlZCBiYXNlZCBvbiBlbGVtZW50IG9yZGVyXG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLiNnZXRGb2N1c2FibGVFbGVtZW50cygpLmZpbHRlcihcbiAgICAgIChlbGVtKSA9PiAhdGhpcy4jaXNFbGVtZW50SGlkZGVuKGVsZW0pXG4gICAgKTtcblxuICAgIGNvbnN0IHByZXZpb3VzSW5kID0gZWxlbWVudHMuaW5kZXhPZigoZXZlbnQgYXMgYW55KS5yZWxhdGVkVGFyZ2V0KTtcbiAgICBjb25zdCBjdXJyZW50SW5kID0gZWxlbWVudHMuaW5kZXhPZihldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHByZXZpb3VzSW5kID09PSBjdXJyZW50SW5kICsgMSB8fFxuICAgICAgKHByZXZpb3VzSW5kID09PSAwICYmIGN1cnJlbnRJbmQgPT09IGVsZW1lbnRzLmxlbmd0aCAtIDEpIHx8XG4gICAgICBwcmV2aW91c0luZCA+IGN1cnJlbnRJbmQgfHxcbiAgICAgICEoZXZlbnQgYXMgYW55KS5yZWxhdGVkVGFyZ2V0XG4gICAgKTtcbiAgfVxuXG4gICNpc0VsZW1lbnRIaWRkZW4oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIHJldHVybiBzdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHwgc3R5bGUudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gIH1cblxuICAjaXNFbGVtZW50QnVzeU9ySGlkZGVuKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuI2lzRWxlbWVudEhpZGRlbihlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYnVzeUVsZW1lbnRzKSkge1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGJ1c3lFbGVtZW50c1trZXldLmJ1c3lFbDtcbiAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICNjbGVhckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gIH1cblxuICAjZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgLy8gS2VlcCB0aGlzIGNhY2hlZCBzbyB3ZSBjYW4gcmVkdWNlIHF1ZXJpZXNcbiAgICBpZiAodGhpcy4jZm9jdXNhYmxlRWxlbWVudHMpIHtcbiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2FibGVFbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBTZWxlY3QgYWxsIHBvc3NpYmxlIGZvY3VzYWJsZSBlbGVtZW50c1xuICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID1cbiAgICAgICdhW2hyZWZdLCAnICtcbiAgICAgICdhcmVhW2hyZWZdLCAnICtcbiAgICAgIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Jy0xJ10pLCBcIiArXG4gICAgICBcImJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD0nLTEnXSksIFwiICtcbiAgICAgIFwic2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD0nLTEnXSksIFwiICtcbiAgICAgICdpZnJhbWUsIG9iamVjdCwgZW1iZWQsICcgK1xuICAgICAgXCIqW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgJypbY29udGVudGVkaXRhYmxlPXRydWVdJztcblxuICAgIHRoaXMuI2ZvY3VzYWJsZUVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKFxuICAgICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKGZvY3VzYWJsZUVsZW1lbnRzKSxcbiAgICAgIChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwIHx8XG4gICAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwIHx8XG4gICAgICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuI2ZvY3VzYWJsZUVsZW1lbnRzO1xuICB9XG5cbiAgI2NsZWFyTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIFNreVdhaXRBZGFwdGVyU2VydmljZS5pc1BhZ2VXYWl0QWN0aXZlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYnVzeUVsZW1lbnRzKSkge1xuICAgICAgYnVzeUVsZW1lbnRzW2tleV0ubGlzdGVuZXIoKTtcbiAgICAgIGRlbGV0ZSBidXN5RWxlbWVudHNba2V5XTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
16
16
  }], hasNonBlockingWait: [{
17
17
  type: Input
18
18
  }] } });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pbmRpY2F0b3JzL3NyYy9saWIvbW9kdWxlcy93YWl0L3dhaXQtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUVqRDs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7O2lIQUFwQixvQkFBb0I7cUdBQXBCLG9CQUFvQiwrSUNWakMsMlBBU0E7MkZEQ2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWU7OEJBTWxCLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktd2FpdC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dhaXQtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhaXQtcGFnZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lXYWl0UGFnZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNCbG9ja2luZ1dhaXQ6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhhc05vbkJsb2NraW5nV2FpdDogYm9vbGVhbjtcbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktd2FpdC1wYWdlXCI+XG4gIDxza3ktd2FpdFxuICAgIFtpc0Z1bGxQYWdlXT1cInRydWVcIlxuICAgIFtpc05vbkJsb2NraW5nXT1cInRydWVcIlxuICAgIFtpc1dhaXRpbmddPVwiaGFzTm9uQmxvY2tpbmdXYWl0XCJcbiAgPlxuICA8L3NreS13YWl0PlxuICA8c2t5LXdhaXQgW2lzRnVsbFBhZ2VdPVwidHJ1ZVwiIFtpc1dhaXRpbmddPVwiaGFzQmxvY2tpbmdXYWl0XCI+IDwvc2t5LXdhaXQ+XG48L2Rpdj5cbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pbmRpY2F0b3JzL3NyYy9saWIvbW9kdWxlcy93YWl0L3dhaXQtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUVqRDs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7O2lIQUFwQixvQkFBb0I7cUdBQXBCLG9CQUFvQiwrSUNWakMsMlBBU0E7MkZEQ2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWU7OEJBTWxCLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktd2FpdC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dhaXQtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhaXQtcGFnZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lXYWl0UGFnZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNCbG9ja2luZ1dhaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhhc05vbkJsb2NraW5nV2FpdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktd2FpdC1wYWdlXCI+XG4gIDxza3ktd2FpdFxuICAgIFtpc0Z1bGxQYWdlXT1cInRydWVcIlxuICAgIFtpc05vbkJsb2NraW5nXT1cInRydWVcIlxuICAgIFtpc1dhaXRpbmddPVwiaGFzTm9uQmxvY2tpbmdXYWl0XCJcbiAgPlxuICA8L3NreS13YWl0PlxuICA8c2t5LXdhaXQgW2lzRnVsbFBhZ2VdPVwidHJ1ZVwiIFtpc1dhaXRpbmddPVwiaGFzQmxvY2tpbmdXYWl0XCI+IDwvc2t5LXdhaXQ+XG48L2Rpdj5cbiJdfQ==