@ifsworld/granite-components 13.2.6 → 13.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,163 +1,38 @@
1
- import { Directive, ElementRef, Inject, Input, Optional, ViewContainerRef, } from '@angular/core';
2
- import { TemplatePortal } from '@angular/cdk/portal';
3
- import { Overlay, OverlayConfig, OverlayOutsideClickDispatcher, } from '@angular/cdk/overlay';
4
- import { GRANITE_CLIENT_INPUT, GRANITE_CLIENT_OUTPUT, } from '../core/client-environment';
5
- import { Directionality } from '@angular/cdk/bidi';
6
- import { FocusMonitor } from '@angular/cdk/a11y';
7
- import { GraniteProgressBarLegendComponent } from './progress-bar-legend/progress-bar-legend.component';
1
+ import { Directive, Input } from '@angular/core';
2
+ import { GraniteOverlayTriggerForBaseDirective } from '../core/overlay-trigger-for-base.directive';
3
+ import { OverlayBaseComponent } from '../core/overlay-base';
8
4
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/cdk/overlay";
10
- import * as i2 from "@angular/cdk/bidi";
11
- import * as i3 from "@angular/cdk/a11y";
12
- export class GraniteProgressBarLegendTriggerForDirective {
13
- constructor(_overlay, _element, _viewContainerRef, _outsideClickDispatcher,
14
- /** Client input device information */
15
- _clientInput,
16
- /** Client output device information */
17
- _clientOutput, _dir, _focusMonitor) {
18
- this._overlay = _overlay;
19
- this._element = _element;
20
- this._viewContainerRef = _viewContainerRef;
21
- this._outsideClickDispatcher = _outsideClickDispatcher;
22
- this._clientInput = _clientInput;
23
- this._clientOutput = _clientOutput;
24
- this._dir = _dir;
25
- this._focusMonitor = _focusMonitor;
26
- this._isLegendOpen = false;
27
- this._portal = null;
28
- this._overlayRef = null;
5
+ export class GraniteProgressBarLegendTriggerForDirective extends GraniteOverlayTriggerForBaseDirective {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.isLegendOpen = false;
9
+ this.selector = '.granite-progress-bar-legend';
10
+ this.offsetY = 4;
29
11
  }
30
- ngOnDestroy() {
31
- if (this._overlayRef) {
32
- this._overlayRef.dispose();
33
- this._overlayRef = null;
34
- }
35
- }
36
- openLegend() {
37
- if (this._isLegendOpen) {
38
- return;
39
- }
40
- this.legend.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';
41
- this.legend.clientInput = this._clientInput;
42
- this.legend.clientOutput = this._clientOutput;
43
- const panelClass = [];
44
- if (this._clientOutput?.device === 'touch') {
45
- panelClass.push('granite-overlay-pane-center');
46
- }
47
- const scrollStrategy = this._clientOutput?.device !== 'touch'
48
- ? this._overlay.scrollStrategies.reposition()
49
- : this._overlay.scrollStrategies.block();
50
- const hasBackdrop = this._clientOutput?.device === 'touch';
51
- if (!this._overlayRef) {
52
- const config = new OverlayConfig({
53
- positionStrategy: this._positionStrategy(),
54
- backdropClass: 'granite-overlay-dark-glass-backdrop',
55
- scrollStrategy,
56
- direction: this._dir,
57
- panelClass,
58
- hasBackdrop,
59
- });
60
- this._overlayRef = this._overlay.create(config);
61
- }
62
- if (!this._portal || this._portal.templateRef !== this.legend.templateRef) {
63
- this._portal = new TemplatePortal(this.legend.templateRef, this._viewContainerRef);
64
- }
65
- this._overlayRef.attach(this._portal);
66
- this._outsideClickDispatcher.add(this._overlayRef);
67
- this._overlayRef.outsidePointerEvents().subscribe((event) => {
68
- event.stopPropagation();
69
- this.closeLegend();
70
- });
71
- this._isLegendOpen = true;
72
- }
73
- toggleLegend() {
74
- if (this._isLegendOpen) {
75
- this.closeLegend();
76
- }
77
- else {
78
- this.openLegend();
79
- }
12
+ get legend() {
13
+ return this.componentRef;
80
14
  }
81
- closeLegend() {
82
- if (!this._overlayRef || !this._isLegendOpen) {
83
- return;
84
- }
85
- this._outsideClickDispatcher.remove(this._overlayRef);
86
- this._overlayRef.detach();
87
- this._restoreFocus();
88
- this._isLegendOpen = false;
15
+ set legend(value) {
16
+ this.componentRef = value;
89
17
  }
90
- _handleKeydown(event) {
18
+ handleKeydown(event) {
91
19
  if (event.key === 'Enter') {
92
20
  event.preventDefault();
93
- this.toggleLegend();
94
- }
95
- }
96
- _handleClick() {
97
- this.toggleLegend();
98
- }
99
- _restoreFocus(origin = 'program', options) {
100
- if (this._focusMonitor) {
101
- this._focusMonitor.focusVia(this._element, origin, options);
102
- }
103
- else {
104
- this._element.nativeElement.focus(options);
21
+ this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);
105
22
  }
106
23
  }
107
- _desktopPositionStrategy() {
108
- const positionStrategy = this._overlay
109
- .position()
110
- .flexibleConnectedTo(this._element)
111
- .withLockedPosition()
112
- .withTransformOriginOn('.granite-progress-bar-legend')
113
- .withPush(false);
114
- this._setPosition(positionStrategy);
115
- return positionStrategy;
24
+ handleClick() {
25
+ this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);
116
26
  }
117
- _setPosition(positionStrategy) {
118
- const [originX, originFallbackX] = this.legend.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];
119
- const [overlayY, overlayFallbackY] = this.legend.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];
120
- let [originY, originFallbackY] = [overlayY, overlayFallbackY];
121
- const [overlayX, overlayFallbackX] = [originX, originFallbackX];
122
- const offsetY = 4;
123
- originY = overlayY === 'top' ? 'bottom' : 'top';
124
- originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';
125
- positionStrategy.withPositions([
126
- { originX, originY, overlayX, overlayY, offsetY },
127
- {
128
- originX: originFallbackX,
129
- originY,
130
- overlayX: overlayFallbackX,
131
- overlayY,
132
- offsetY,
133
- },
134
- {
135
- originX,
136
- originY: originFallbackY,
137
- overlayX,
138
- overlayY: overlayFallbackY,
139
- offsetY: -offsetY,
140
- },
141
- {
142
- originX: originFallbackX,
143
- originY: originFallbackY,
144
- overlayX: overlayFallbackX,
145
- overlayY: overlayFallbackY,
146
- offsetY: -offsetY,
147
- },
148
- ]);
149
- }
150
- _positionStrategy() {
151
- if (this._clientOutput?.device !== 'touch') {
152
- return this._desktopPositionStrategy();
153
- }
154
- return this._touchPositionStrategy();
27
+ onOutsideClick() {
28
+ super.onOutsideClick();
29
+ this.isLegendOpen = false;
155
30
  }
156
- _touchPositionStrategy() {
157
- return this._overlay.position().global();
31
+ getScrollStrategy() {
32
+ return this.setScrollStrategy('reposition');
158
33
  }
159
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: GraniteProgressBarLegendTriggerForDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i1.OverlayOutsideClickDispatcher }, { token: GRANITE_CLIENT_INPUT, optional: true }, { token: GRANITE_CLIENT_OUTPUT, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.FocusMonitor }], target: i0.ɵɵFactoryTarget.Directive }); }
160
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: GraniteProgressBarLegendTriggerForDirective, selector: "[graniteProgressBarLegendTriggerFor]", inputs: { legend: ["graniteProgressBarLegendTriggerFor", "legend"] }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "keydown": "_handleKeydown($event)", "click": "_handleClick($event)" }, properties: { "attr.aria-expanded": "_isLegendOpen || null", "attr.aria-controls": "_isLegendOpen ? legend.panelId : null" }, classAttribute: "granite-progress-bar-legend-trigger" }, ngImport: i0 }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: GraniteProgressBarLegendTriggerForDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
35
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: GraniteProgressBarLegendTriggerForDirective, selector: "[graniteProgressBarLegendTriggerFor]", inputs: { legend: ["graniteProgressBarLegendTriggerFor", "legend"] }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "keydown": "handleKeydown($event)", "click": "handleClick($event)" }, properties: { "attr.aria-expanded": "isLegendOpen || null", "attr.aria-controls": "isLegendOpen ? legend.panelId : null" }, classAttribute: "granite-progress-bar-legend-trigger" }, usesInheritance: true, ngImport: i0 }); }
161
36
  }
162
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: GraniteProgressBarLegendTriggerForDirective, decorators: [{
163
38
  type: Directive,
@@ -166,26 +41,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
166
41
  host: {
167
42
  class: 'granite-progress-bar-legend-trigger',
168
43
  'aria-haspopup': 'true',
169
- '[attr.aria-expanded]': '_isLegendOpen || null',
170
- '[attr.aria-controls]': '_isLegendOpen ? legend.panelId : null',
171
- '(keydown)': '_handleKeydown($event)',
172
- '(click)': '_handleClick($event)',
44
+ '[attr.aria-expanded]': 'isLegendOpen || null',
45
+ '[attr.aria-controls]': 'isLegendOpen ? legend.panelId : null',
46
+ '(keydown)': 'handleKeydown($event)',
47
+ '(click)': 'handleClick($event)',
173
48
  },
174
49
  }]
175
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i1.OverlayOutsideClickDispatcher }, { type: undefined, decorators: [{
176
- type: Inject,
177
- args: [GRANITE_CLIENT_INPUT]
178
- }, {
179
- type: Optional
180
- }] }, { type: undefined, decorators: [{
181
- type: Inject,
182
- args: [GRANITE_CLIENT_OUTPUT]
183
- }, {
184
- type: Optional
185
- }] }, { type: i2.Directionality, decorators: [{
186
- type: Optional
187
- }] }, { type: i3.FocusMonitor }], propDecorators: { legend: [{
50
+ }], propDecorators: { legend: [{
188
51
  type: Input,
189
52
  args: ['graniteProgressBarLegendTriggerFor']
190
53
  }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLWxlZ2VuZC10cmlnZ2VyLWZvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXItbGVnZW5kLXRyaWdnZXItZm9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFHTCxPQUFPLEVBQ1AsYUFBYSxFQUNiLDZCQUE2QixHQUk5QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFHTCxvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7Ozs7QUFheEcsTUFBTSxPQUFPLDJDQUEyQztJQVN0RCxZQUNVLFFBQWlCLEVBQ2pCLFFBQWlDLEVBQ2pDLGlCQUFtQyxFQUNuQyx1QkFBc0Q7SUFFOUQsc0NBQXNDO0lBRy9CLFlBQWtDO0lBRXpDLHVDQUF1QztJQUdoQyxhQUFvQyxFQUduQyxJQUFvQixFQUVwQixhQUEyQjtRQWxCM0IsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUNqQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBK0I7UUFLdkQsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBS2xDLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUduQyxTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUVwQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQXhCckMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFdkIsWUFBTyxHQUEwQixJQUFJLENBQUM7UUFDdEMsZ0JBQVcsR0FBc0IsSUFBSSxDQUFDO0lBc0IzQyxDQUFDO0lBRUosV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUU5QyxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxVQUFVLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxPQUFPO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUM7UUFFM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDL0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQyxhQUFhLEVBQUUscUNBQXFDO2dCQUNwRCxjQUFjO2dCQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDcEIsVUFBVTtnQkFDVixXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksY0FBYyxDQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ3RFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBb0I7UUFDakMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBc0IsU0FBUyxFQUFFLE9BQXNCO1FBQ25FLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sZ0JBQWdCLEdBQXNDLElBQUksQ0FBQyxRQUFRO2FBQ3RFLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDbEMsa0JBQWtCLEVBQUU7YUFDcEIscUJBQXFCLENBQUMsOEJBQThCLENBQUM7YUFDckQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFTyxZQUFZLENBQUMsZ0JBQW1EO1FBQ3RFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEdBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTNFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsR0FDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFFbEIsT0FBTyxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hELGVBQWUsR0FBRyxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRWhFLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztZQUM3QixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDakQ7Z0JBQ0UsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE9BQU87Z0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsUUFBUTtnQkFDUixPQUFPO2FBQ1I7WUFDRDtnQkFDRSxPQUFPO2dCQUNQLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixRQUFRO2dCQUNSLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLE9BQU8sRUFBRSxDQUFDLE9BQU87YUFDbEI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLE9BQU8sRUFBRSxDQUFDLE9BQU87YUFDbEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzhHQTdMVSwyQ0FBMkMsZ0pBZ0I1QyxvQkFBb0IsNkJBS3BCLHFCQUFxQjtrR0FyQnBCLDJDQUEyQzs7MkZBQTNDLDJDQUEyQztrQkFYdkQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0NBQXNDO29CQUNoRCxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLHFDQUFxQzt3QkFDNUMsZUFBZSxFQUFFLE1BQU07d0JBQ3ZCLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0Msc0JBQXNCLEVBQUUsdUNBQXVDO3dCQUMvRCxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxTQUFTLEVBQUUsc0JBQXNCO3FCQUNsQztpQkFDRjs7MEJBaUJJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsUUFBUTs7MEJBSVIsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixRQUFROzswQkFHUixRQUFRO29FQXZCWCxNQUFNO3NCQURMLEtBQUs7dUJBQUMsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG4gIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBPdmVybGF5T3V0c2lkZUNsaWNrRGlzcGF0Y2hlcixcbiAgT3ZlcmxheVJlZixcbiAgUG9zaXRpb25TdHJhdGVneSxcbiAgVmVydGljYWxDb25uZWN0aW9uUG9zLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBDbGllbnRJbnB1dEludGVyZmFjZSxcbiAgQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuICBHUkFOSVRFX0NMSUVOVF9JTlBVVCxcbiAgR1JBTklURV9DTElFTlRfT1VUUFVULFxufSBmcm9tICcuLi9jb3JlL2NsaWVudC1lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBHcmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRDb21wb25lbnQgfSBmcm9tICcuL3Byb2dyZXNzLWJhci1sZWdlbmQvcHJvZ3Jlc3MtYmFyLWxlZ2VuZC5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZ3Jhbml0ZVByb2dyZXNzQmFyTGVnZW5kVHJpZ2dlckZvcl0nLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdncmFuaXRlLXByb2dyZXNzLWJhci1sZWdlbmQtdHJpZ2dlcicsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ19pc0xlZ2VuZE9wZW4gfHwgbnVsbCcsXG4gICAgJ1thdHRyLmFyaWEtY29udHJvbHNdJzogJ19pc0xlZ2VuZE9wZW4gPyBsZWdlbmQucGFuZWxJZCA6IG51bGwnLFxuICAgICcoa2V5ZG93biknOiAnX2hhbmRsZUtleWRvd24oJGV2ZW50KScsXG4gICAgJyhjbGljayknOiAnX2hhbmRsZUNsaWNrKCRldmVudCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHcmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRUcmlnZ2VyRm9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCdncmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRUcmlnZ2VyRm9yJylcbiAgbGVnZW5kOiBHcmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRDb21wb25lbnQ7XG5cbiAgX2lzTGVnZW5kT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BvcnRhbDogVGVtcGxhdGVQb3J0YWwgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyOiBPdmVybGF5T3V0c2lkZUNsaWNrRGlzcGF0Y2hlcixcblxuICAgIC8qKiBDbGllbnQgaW5wdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9JTlBVVClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBfY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlLFxuXG4gICAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9PVVRQVVQpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgX2NsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxuXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3JcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5MZWdlbmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzTGVnZW5kT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGVnZW5kLmRpcmVjdGlvbiA9IHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xuICAgIHRoaXMubGVnZW5kLmNsaWVudElucHV0ID0gdGhpcy5fY2xpZW50SW5wdXQ7XG4gICAgdGhpcy5sZWdlbmQuY2xpZW50T3V0cHV0ID0gdGhpcy5fY2xpZW50T3V0cHV0O1xuXG4gICAgY29uc3QgcGFuZWxDbGFzczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5fY2xpZW50T3V0cHV0Py5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgIHBhbmVsQ2xhc3MucHVzaCgnZ3Jhbml0ZS1vdmVybGF5LXBhbmUtY2VudGVyJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPVxuICAgICAgdGhpcy5fY2xpZW50T3V0cHV0Py5kZXZpY2UgIT09ICd0b3VjaCdcbiAgICAgICAgPyB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpXG4gICAgICAgIDogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCk7XG5cbiAgICBjb25zdCBoYXNCYWNrZHJvcCA9IHRoaXMuX2NsaWVudE91dHB1dD8uZGV2aWNlID09PSAndG91Y2gnO1xuXG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2dyYW5pdGUtb3ZlcmxheS1kYXJrLWdsYXNzLWJhY2tkcm9wJyxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLFxuICAgICAgICBwYW5lbENsYXNzLFxuICAgICAgICBoYXNCYWNrZHJvcCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BvcnRhbCB8fCB0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYgIT09IHRoaXMubGVnZW5kLnRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl9wb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIHRoaXMubGVnZW5kLnRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3BvcnRhbCk7XG4gICAgdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcy5fb3ZlcmxheVJlZik7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jbG9zZUxlZ2VuZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5faXNMZWdlbmRPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNMZWdlbmRPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlTGVnZW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkxlZ2VuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTGVnZW5kKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZiB8fCAhdGhpcy5faXNMZWdlbmRPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcy5fb3ZlcmxheVJlZik7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcblxuICAgIHRoaXMuX3Jlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMuX2lzTGVnZW5kT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVMZWdlbmQoKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVMZWdlbmQoKTtcbiAgfVxuXG4gIF9yZXN0b3JlRm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJywgb3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mb2N1c01vbml0b3IpIHtcbiAgICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LCBvcmlnaW4sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVza3RvcFBvc2l0aW9uU3RyYXRlZ3koKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpXG4gICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcbiAgICAgIC53aXRoVHJhbnNmb3JtT3JpZ2luT24oJy5ncmFuaXRlLXByb2dyZXNzLWJhci1sZWdlbmQnKVxuICAgICAgLndpdGhQdXNoKGZhbHNlKTtcblxuICAgIHRoaXMuX3NldFBvc2l0aW9uKHBvc2l0aW9uU3RyYXRlZ3kpO1xuICAgIHJldHVybiBwb3NpdGlvblN0cmF0ZWd5O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UG9zaXRpb24ocG9zaXRpb25TdHJhdGVneTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KSB7XG4gICAgY29uc3QgW29yaWdpblgsIG9yaWdpbkZhbGxiYWNrWF06IEhvcml6b250YWxDb25uZWN0aW9uUG9zW10gPVxuICAgICAgdGhpcy5sZWdlbmQueFBvc2l0aW9uID09PSAnYmVmb3JlJyA/IFsnZW5kJywgJ3N0YXJ0J10gOiBbJ3N0YXJ0JywgJ2VuZCddO1xuXG4gICAgY29uc3QgW292ZXJsYXlZLCBvdmVybGF5RmFsbGJhY2tZXTogVmVydGljYWxDb25uZWN0aW9uUG9zW10gPVxuICAgICAgdGhpcy5sZWdlbmQueVBvc2l0aW9uID09PSAnYWJvdmUnID8gWydib3R0b20nLCAndG9wJ10gOiBbJ3RvcCcsICdib3R0b20nXTtcblxuICAgIGxldCBbb3JpZ2luWSwgb3JpZ2luRmFsbGJhY2tZXSA9IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV07XG4gICAgY29uc3QgW292ZXJsYXlYLCBvdmVybGF5RmFsbGJhY2tYXSA9IFtvcmlnaW5YLCBvcmlnaW5GYWxsYmFja1hdO1xuICAgIGNvbnN0IG9mZnNldFkgPSA0O1xuXG4gICAgb3JpZ2luWSA9IG92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgb3JpZ2luRmFsbGJhY2tZID0gb3ZlcmxheUZhbGxiYWNrWSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuXG4gICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWSwgb3ZlcmxheVgsIG92ZXJsYXlZLCBvZmZzZXRZIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcbiAgICAgICAgb3JpZ2luWSxcbiAgICAgICAgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsXG4gICAgICAgIG92ZXJsYXlZLFxuICAgICAgICBvZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWCxcbiAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxuICAgICAgICBvdmVybGF5WCxcbiAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXG4gICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxuICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXG4gICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxuICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcbiAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBpZiAodGhpcy5fY2xpZW50T3V0cHV0Py5kZXZpY2UgIT09ICd0b3VjaCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXNrdG9wUG9zaXRpb25TdHJhdGVneSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdG91Y2hQb3NpdGlvblN0cmF0ZWd5KCk7XG4gIH1cblxuICBwcml2YXRlIF90b3VjaFBvc2l0aW9uU3RyYXRlZ3koKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtcbiAgfVxufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLWxlZ2VuZC10cmlnZ2VyLWZvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXItbGVnZW5kLXRyaWdnZXItZm9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFrQjVELE1BQU0sT0FBTywyQ0FBNEMsU0FBUSxxQ0FBcUM7SUFYdEc7O1FBcUJFLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRVgsYUFBUSxHQUFXLDhCQUE4QixDQUFDO1FBQ2xELFlBQU8sR0FBVyxDQUFDLENBQUM7S0F3QnhDO0lBcENDLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBd0M7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQU9ELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsY0FBYztRQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRVEsaUJBQWlCO1FBSXhCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBcENVLDJDQUEyQztrR0FBM0MsMkNBQTJDOzsyRkFBM0MsMkNBQTJDO2tCQVh2RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQ0FBc0M7b0JBQ2hELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUscUNBQXFDO3dCQUM1QyxlQUFlLEVBQUUsTUFBTTt3QkFDdkIsc0JBQXNCLEVBQUUsc0JBQXNCO3dCQUM5QyxzQkFBc0IsRUFBRSxzQ0FBc0M7d0JBQzlELFdBQVcsRUFBRSx1QkFBdUI7d0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUI7cUJBQ2pDO2lCQUNGOzhCQUdLLE1BQU07c0JBRFQsS0FBSzt1QkFBQyxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRDb21wb25lbnQgfSBmcm9tICcuL3Byb2dyZXNzLWJhci1sZWdlbmQvcHJvZ3Jlc3MtYmFyLWxlZ2VuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3Jhbml0ZU92ZXJsYXlUcmlnZ2VyRm9yQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS10cmlnZ2VyLWZvci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS1iYXNlJztcbmltcG9ydCB7XG4gIEJsb2NrU2Nyb2xsU3RyYXRlZ3ksXG4gIENsb3NlU2Nyb2xsU3RyYXRlZ3ksXG4gIFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZ3Jhbml0ZVByb2dyZXNzQmFyTGVnZW5kVHJpZ2dlckZvcl0nLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdncmFuaXRlLXByb2dyZXNzLWJhci1sZWdlbmQtdHJpZ2dlcicsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzTGVnZW5kT3BlbiB8fCBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1jb250cm9sc10nOiAnaXNMZWdlbmRPcGVuID8gbGVnZW5kLnBhbmVsSWQgOiBudWxsJyxcbiAgICAnKGtleWRvd24pJzogJ2hhbmRsZUtleWRvd24oJGV2ZW50KScsXG4gICAgJyhjbGljayknOiAnaGFuZGxlQ2xpY2soJGV2ZW50KScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdyYW5pdGVQcm9ncmVzc0JhckxlZ2VuZFRyaWdnZXJGb3JEaXJlY3RpdmUgZXh0ZW5kcyBHcmFuaXRlT3ZlcmxheVRyaWdnZXJGb3JCYXNlRGlyZWN0aXZlIHtcbiAgQElucHV0KCdncmFuaXRlUHJvZ3Jlc3NCYXJMZWdlbmRUcmlnZ2VyRm9yJylcbiAgZ2V0IGxlZ2VuZCgpOiBPdmVybGF5QmFzZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmO1xuICB9XG5cbiAgc2V0IGxlZ2VuZCh2YWx1ZTogR3Jhbml0ZVByb2dyZXNzQmFyTGVnZW5kQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB2YWx1ZTtcbiAgfVxuXG4gIGlzTGVnZW5kT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZWxlY3Rvcjogc3RyaW5nID0gJy5ncmFuaXRlLXByb2dyZXNzLWJhci1sZWdlbmQnO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb2Zmc2V0WTogbnVtYmVyID0gNDtcblxuICBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaXNMZWdlbmRPcGVuID0gdGhpcy50b2dnbGVPdmVybGF5KHRoaXMuaXNMZWdlbmRPcGVuKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVnZW5kT3BlbiA9IHRoaXMudG9nZ2xlT3ZlcmxheSh0aGlzLmlzTGVnZW5kT3Blbik7XG4gIH1cblxuICBvbk91dHNpZGVDbGljaygpOiB2b2lkIHtcbiAgICBzdXBlci5vbk91dHNpZGVDbGljaygpO1xuICAgIHRoaXMuaXNMZWdlbmRPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvdmVycmlkZSBnZXRTY3JvbGxTdHJhdGVneSgpOlxuICAgIHwgUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XG4gICAgfCBCbG9ja1Njcm9sbFN0cmF0ZWd5XG4gICAgfCBDbG9zZVNjcm9sbFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTY3JvbGxTdHJhdGVneSgncmVwb3NpdGlvbicpO1xuICB9XG59XG4iXX0=