@coreui/angular-pro 4.2.21 → 4.2.23

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,6 +1,8 @@
1
- import { Component, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
3
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
1
+ var _SidebarComponent_narrow, _SidebarComponent_overlaid, _SidebarComponent_unfoldable, _SidebarComponent_visible, _SidebarComponent_onMobile, _SidebarComponent_layoutChangeSubscription, _SidebarComponent_stateToggleSubscription, _SidebarComponent_stateInitial;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { Component, EventEmitter, HostBinding, Inject, Input, Output } from "@angular/core";
4
+ import { DOCUMENT } from "@angular/common";
5
+ import { coerceBooleanProperty } from "@angular/cdk/coercion";
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@angular/cdk/layout";
6
8
  import * as i2 from "../sidebar.service";
@@ -12,14 +14,21 @@ export class SidebarComponent {
12
14
  this.breakpointObserver = breakpointObserver;
13
15
  this.sidebarService = sidebarService;
14
16
  this.backdropService = backdropService;
15
- this._narrow = false;
16
- this._overlaid = false;
17
- this._unfoldable = false;
18
- this._visible = false;
19
- this.onMobile = false;
17
+ _SidebarComponent_narrow.set(this, false);
18
+ _SidebarComponent_overlaid.set(this, false);
19
+ _SidebarComponent_unfoldable.set(this, false);
20
+ _SidebarComponent_visible.set(this, false);
21
+ _SidebarComponent_onMobile.set(this, false);
22
+ _SidebarComponent_layoutChangeSubscription.set(this, void 0);
23
+ _SidebarComponent_stateToggleSubscription.set(this, void 0);
20
24
  this.state = {
21
25
  sidebar: this
22
26
  };
27
+ _SidebarComponent_stateInitial.set(this, {
28
+ narrow: false,
29
+ visible: false,
30
+ unfoldable: false
31
+ });
23
32
  /**
24
33
  * Place sidebar in non-static positions. [docs]
25
34
  * @default 'fixed'
@@ -37,80 +46,89 @@ export class SidebarComponent {
37
46
  * @type boolean
38
47
  */
39
48
  set narrow(value) {
40
- this._narrow = coerceBooleanProperty(value);
49
+ __classPrivateFieldSet(this, _SidebarComponent_narrow, coerceBooleanProperty(value), "f");
41
50
  }
42
51
  get narrow() {
43
- return this._narrow;
52
+ return __classPrivateFieldGet(this, _SidebarComponent_narrow, "f");
44
53
  }
45
54
  /**
46
55
  * Set sidebar to overlaid variant.
47
56
  * @type boolean
48
57
  */
49
58
  set overlaid(value) {
50
- this._overlaid = coerceBooleanProperty(value);
59
+ __classPrivateFieldSet(this, _SidebarComponent_overlaid, coerceBooleanProperty(value), "f");
51
60
  }
52
61
  get overlaid() {
53
- return this._overlaid;
62
+ return __classPrivateFieldGet(this, _SidebarComponent_overlaid, "f");
54
63
  }
55
64
  /**
56
65
  * Expand narrowed sidebar on hover. [docs]
57
66
  */
58
67
  set unfoldable(value) {
59
- this._unfoldable = coerceBooleanProperty(value);
68
+ __classPrivateFieldSet(this, _SidebarComponent_unfoldable, coerceBooleanProperty(value), "f");
60
69
  }
61
70
  get unfoldable() {
62
- return this._unfoldable;
71
+ return __classPrivateFieldGet(this, _SidebarComponent_unfoldable, "f");
63
72
  }
64
73
  /**
65
74
  * Toggle the visibility of sidebar component. [docs]
66
75
  */
67
76
  set visible(value) {
68
- this._visible = coerceBooleanProperty(value);
69
- this.visibleChange.emit(this._visible);
77
+ const visible = coerceBooleanProperty(value);
78
+ if (__classPrivateFieldGet(this, _SidebarComponent_visible, "f") !== visible) {
79
+ __classPrivateFieldSet(this, _SidebarComponent_visible, visible, "f");
80
+ this.visibleChange.emit(__classPrivateFieldGet(this, _SidebarComponent_visible, "f"));
81
+ }
70
82
  }
71
83
  get visible() {
72
- return this._visible;
84
+ return __classPrivateFieldGet(this, _SidebarComponent_visible, "f");
73
85
  }
74
86
  set sidebarState(value) {
75
87
  const newState = value;
76
88
  if ('toggle' in newState) {
77
89
  if (newState.toggle === 'visible') {
78
90
  newState.visible = !this.state.visible;
79
- this.visible = newState.visible && !this.overlaid;
91
+ this.visible = newState.visible;
80
92
  }
81
93
  else if (newState.toggle === 'unfoldable') {
82
94
  newState.unfoldable = !this.state.unfoldable;
83
95
  this.unfoldable = newState.unfoldable;
84
96
  }
85
97
  }
98
+ else {
99
+ this.visible = (newState.visible ?? this.visible) && !this.overlaid;
100
+ }
86
101
  this.state = {
87
102
  ...this.state,
88
- ...newState
103
+ ...newState,
89
104
  };
90
- this.state.mobile && this.state.visible ? this.backdropService.setBackdrop(this) : this.backdropService.clearBackdrop();
105
+ this.state.mobile && this.state.visible
106
+ ? this.backdropService.setBackdrop(this)
107
+ : this.backdropService.clearBackdrop();
91
108
  }
92
109
  get sidebarState() {
93
110
  return this.state;
94
111
  }
95
112
  get getMobileBreakpoint() {
96
- const element = this.document.firstElementChild;
97
- const mobileBreakpoint = getComputedStyle(element).getPropertyValue('--cui-mobile-breakpoint') || 'md';
113
+ const element = this.document.documentElement;
114
+ const mobileBreakpoint = getComputedStyle(element).getPropertyValue('--cui-mobile-breakpoint') ||
115
+ 'md';
98
116
  const breakpointValue = getComputedStyle(element).getPropertyValue(`--cui-breakpoint-${mobileBreakpoint.trim()}`) || '768px';
99
- return `${parseFloat(breakpointValue.trim()) - .02}px` || '767.98px';
117
+ return `${parseFloat(breakpointValue.trim()) - 0.02}px` || '767.98px';
100
118
  }
101
119
  get getClasses() {
102
- const { mobile, unfoldable, visible } = this.sidebarState;
120
+ const { mobile, visible } = this.sidebarState;
103
121
  return {
104
122
  sidebar: true,
105
123
  'sidebar-fixed': this.position === 'fixed' && !mobile,
106
124
  'sidebar-narrow': this.narrow && !this.unfoldable,
107
- 'sidebar-narrow-unfoldable': unfoldable,
125
+ 'sidebar-narrow-unfoldable': this.unfoldable,
108
126
  'sidebar-overlaid': this.overlaid,
109
127
  [`sidebar-${this.placement}`]: !!this.placement,
110
128
  [`sidebar-${this.colorScheme}`]: !!this.colorScheme,
111
129
  [`sidebar-${this.size}`]: !!this.size,
112
- show: visible && this.onMobile,
113
- hide: !visible && !this.onMobile
130
+ show: visible && __classPrivateFieldGet(this, _SidebarComponent_onMobile, "f"),
131
+ hide: !visible,
114
132
  };
115
133
  }
116
134
  ngOnInit() {
@@ -143,47 +161,52 @@ export class SidebarComponent {
143
161
  }
144
162
  }
145
163
  setInitialState() {
146
- this.sidebarService.toggle({
164
+ __classPrivateFieldSet(this, _SidebarComponent_stateInitial, {
147
165
  narrow: this.narrow,
148
166
  visible: this.visible,
149
167
  unfoldable: this.unfoldable,
150
- sidebar: this
168
+ }, "f");
169
+ this.sidebarService.toggle({
170
+ ...__classPrivateFieldGet(this, _SidebarComponent_stateInitial, "f"),
171
+ sidebar: this,
151
172
  });
152
173
  }
153
174
  stateToggleSubscribe(subscribe = true) {
154
175
  if (subscribe) {
155
- this.stateToggleSubscription = this.sidebarService.sidebarState$.subscribe((state) => {
176
+ __classPrivateFieldSet(this, _SidebarComponent_stateToggleSubscription, this.sidebarService.sidebarState$.subscribe((state) => {
156
177
  if (this === state.sidebar || this.id === state.id) {
157
178
  this.sidebarState = state;
158
179
  }
159
- });
180
+ }), "f");
160
181
  }
161
182
  else {
162
- this.stateToggleSubscription.unsubscribe();
183
+ __classPrivateFieldGet(this, _SidebarComponent_stateToggleSubscription, "f").unsubscribe();
163
184
  }
164
185
  }
165
186
  layoutChangeSubscribe(subscribe = true) {
166
187
  const onMobile = `(max-width: ${this.getMobileBreakpoint})`;
167
188
  if (subscribe) {
168
189
  const layoutChanges = this.breakpointObserver.observe([onMobile]);
169
- this.layoutChangeSubscription = layoutChanges.subscribe((result) => {
190
+ __classPrivateFieldSet(this, _SidebarComponent_layoutChangeSubscription, layoutChanges.subscribe((result) => {
170
191
  const isOnMobile = result.breakpoints[onMobile];
171
- if (this.onMobile !== isOnMobile) {
172
- this.onMobile = isOnMobile;
192
+ const isUnfoldable = isOnMobile ? false : this.unfoldable;
193
+ if (__classPrivateFieldGet(this, _SidebarComponent_onMobile, "f") !== isOnMobile) {
194
+ __classPrivateFieldSet(this, _SidebarComponent_onMobile, isOnMobile, "f");
173
195
  this.sidebarService.toggle({
174
196
  mobile: isOnMobile,
175
- unfoldable: isOnMobile ? false : this.unfoldable,
176
- visible: isOnMobile ? false : this.visible,
177
- sidebar: this
197
+ unfoldable: isUnfoldable,
198
+ visible: isOnMobile ? !isOnMobile : __classPrivateFieldGet(this, _SidebarComponent_stateInitial, "f").visible,
199
+ sidebar: this,
178
200
  });
179
201
  }
180
- });
202
+ }), "f");
181
203
  }
182
204
  else {
183
- this.layoutChangeSubscription.unsubscribe();
205
+ __classPrivateFieldGet(this, _SidebarComponent_layoutChangeSubscription, "f").unsubscribe();
184
206
  }
185
207
  }
186
208
  }
209
+ _SidebarComponent_narrow = new WeakMap(), _SidebarComponent_overlaid = new WeakMap(), _SidebarComponent_unfoldable = new WeakMap(), _SidebarComponent_visible = new WeakMap(), _SidebarComponent_onMobile = new WeakMap(), _SidebarComponent_layoutChangeSubscription = new WeakMap(), _SidebarComponent_stateToggleSubscription = new WeakMap(), _SidebarComponent_stateInitial = new WeakMap();
187
210
  SidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SidebarComponent, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i1.BreakpointObserver }, { token: i2.SidebarService }, { token: i3.SidebarBackdropService }], target: i0.ɵɵFactoryTarget.Component });
188
211
  SidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SidebarComponent, selector: "c-sidebar", inputs: { colorScheme: "colorScheme", id: "id", narrow: "narrow", overlaid: "overlaid", placement: "placement", position: "position", size: "size", unfoldable: "unfoldable", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, host: { properties: { "class": "this.getClasses" } }, exportAs: ["cSidebar"], usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
189
212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SidebarComponent, decorators: [{
@@ -191,9 +214,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
191
214
  args: [{
192
215
  selector: 'c-sidebar',
193
216
  exportAs: 'cSidebar',
194
- template: '<ng-content></ng-content>',
217
+ template: '<ng-content></ng-content>'
195
218
  }]
196
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
219
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
197
220
  type: Inject,
198
221
  args: [DOCUMENT]
199
222
  }] }, { type: i0.Renderer2 }, { type: i1.BreakpointObserver }, { type: i2.SidebarService }, { type: i3.SidebarBackdropService }]; }, propDecorators: { colorScheme: [{
@@ -220,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
220
243
  type: HostBinding,
221
244
  args: ['class']
222
245
  }] } });
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFZNUUsTUFBTSxPQUFPLGdCQUFnQjtJQW9JM0IsWUFDNEIsUUFBYSxFQUMvQixRQUFtQixFQUNuQixrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsZUFBdUM7UUFKckIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQWxJekMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUl6QixVQUFLLEdBQW1CO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQThDRjs7O1dBR0c7UUFDTSxhQUFRLEdBQXVCLE9BQU8sQ0FBQztRQThCaEQ7OztXQUdHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBc0NwRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FB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d0JBQ2hELE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87d0JBQzFDLE9BQU8sRUFBRSxJQUFJO3FCQUNkLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QztJQUNILENBQUM7OzhHQTVPVSxnQkFBZ0Isa0JBcUlqQixRQUFRO2tHQXJJUCxnQkFBZ0IscVlBRmpCLDJCQUEyQjs0RkFFMUIsZ0JBQWdCO2tCQUw1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFLDJCQUEyQjtpQkFDdEM7OzBCQXNJSSxNQUFNOzJCQUFDLFFBQVE7dUtBN0dULFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csRUFBRTtzQkFBVixLQUFLO2dCQU9GLE1BQU07c0JBRFQsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBWUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFNRixVQUFVO3NCQURiLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQWFJLGFBQWE7c0JBQXRCLE1BQU07Z0JBMENILFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSVNpZGViYXJBY3Rpb24sIFNpZGViYXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2lkZWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lkZWJhckJhY2tkcm9wU2VydmljZSB9IGZyb20gJy4uL3NpZGViYXItYmFja2Ryb3Avc2lkZWJhci1iYWNrZHJvcC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYy1zaWRlYmFyJyxcclxuICBleHBvcnRBczogJ2NTaWRlYmFyJyxcclxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQge1xyXG5cclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbmFycm93OiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX292ZXJsYWlkOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3VuZm9sZGFibGU6IEJvb2xlYW5JbnB1dDtcclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlzaWJsZTogQm9vbGVhbklucHV0O1xyXG5cclxuICBwcml2YXRlIF9uYXJyb3cgPSBmYWxzZTtcclxuICBwcml2YXRlIF9vdmVybGFpZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3VuZm9sZGFibGUgPSBmYWxzZTtcclxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBvbk1vYmlsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbGF5b3V0Q2hhbmdlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgc3RhdGVUb2dnbGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHN0YXRlOiBJU2lkZWJhckFjdGlvbiA9IHtcclxuICAgIHNpZGViYXI6IHRoaXNcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGlmIHRoZSBjb2xvciBvZiB0ZXh0IHNob3VsZCBiZSBjb2xvcmVkIGZvciBhIGxpZ2h0IG9yIGRhcmsgZGFyayBiYWNrZ3JvdW5kLiBbZG9jc11cclxuICAgKlxyXG4gICAqIEB0eXBlICdkYXJrJyB8ICdsaWdodCdcclxuICAgKi9cclxuICBASW5wdXQoKSBjb2xvclNjaGVtZT86ICdkYXJrJyB8ICdsaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgaHRtbCBhdHRyaWJ1dGUgaWQuIFtkb2NzXVxyXG4gICAqXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2Ugc2lkZWJhciBuYXJyb3cuIFtkb2NzXVxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBuYXJyb3codmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25hcnJvdyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBuYXJyb3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFycm93O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHNpZGViYXIgdG8gb3ZlcmxhaWQgdmFyaWFudC5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgb3ZlcmxhaWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX292ZXJsYWlkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IG92ZXJsYWlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYWlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcG9uZW50cyBwbGFjZW1lbnQsIHRoZXJl4oCZcyBubyBkZWZhdWx0IHBsYWNlbWVudC4gW2RvY3NdXHJcbiAgICogQHR5cGUgJ3N0YXJ0JyB8ICdlbmQnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGxhY2VtZW50PzogJ3N0YXJ0JyB8ICdlbmQnO1xyXG5cclxuICAvKipcclxuICAgKiBQbGFjZSBzaWRlYmFyIGluIG5vbi1zdGF0aWMgcG9zaXRpb25zLiBbZG9jc11cclxuICAgKiBAZGVmYXVsdCAnZml4ZWQnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcG9zaXRpb246ICdmaXhlZCcgfCAnc3RpY2t5JyA9ICdmaXhlZCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCwgbGFyZ2UsIG9yIGV4dHJhIGxhcmdlLiBbZG9jc11cclxuICAgKi9cclxuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZycgfCAneGwnO1xyXG5cclxuICAvKipcclxuICAgKiBFeHBhbmQgbmFycm93ZWQgc2lkZWJhciBvbiBob3Zlci4gW2RvY3NdXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdW5mb2xkYWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdW5mb2xkYWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCB1bmZvbGRhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VuZm9sZGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2Ygc2lkZWJhciBjb21wb25lbnQuIFtkb2NzXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fdmlzaWJsZSk7XHJcbiAgfVxyXG4gIGdldCB2aXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIG9uIHZpc2liaWxpdHkgY2hhbmdlLiBbZG9jc11cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIHNldCBzaWRlYmFyU3RhdGUodmFsdWU6IElTaWRlYmFyQWN0aW9uKSB7XHJcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHZhbHVlO1xyXG4gICAgaWYgKCd0b2dnbGUnIGluIG5ld1N0YXRlKSB7XHJcbiAgICAgIGlmIChuZXdTdGF0ZS50b2dnbGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIG5ld1N0YXRlLnZpc2libGUgPSAhdGhpcy5zdGF0ZS52aXNpYmxlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IG5ld1N0YXRlLnZpc2libGUgJiYgIXRoaXMub3ZlcmxhaWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAobmV3U3RhdGUudG9nZ2xlID09PSAndW5mb2xkYWJsZScpIHtcclxuICAgICAgICBuZXdTdGF0ZS51bmZvbGRhYmxlID0gIXRoaXMuc3RhdGUudW5mb2xkYWJsZTtcclxuICAgICAgICB0aGlzLnVuZm9sZGFibGUgPSBuZXdTdGF0ZS51bmZvbGRhYmxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAuLi50aGlzLnN0YXRlLFxyXG4gICAgICAuLi5uZXdTdGF0ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc3RhdGUubW9iaWxlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA/IHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnNldEJhY2tkcm9wKHRoaXMpIDogdGhpcy5iYWNrZHJvcFNlcnZpY2UuY2xlYXJCYWNrZHJvcCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNpZGViYXJTdGF0ZSgpOiBJU2lkZWJhckFjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRNb2JpbGVCcmVha3BvaW50KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgIGNvbnN0IG1vYmlsZUJyZWFrcG9pbnQgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tY3VpLW1vYmlsZS1icmVha3BvaW50JykgfHwgJ21kJztcclxuICAgIGNvbnN0IGJyZWFrcG9pbnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS1jdWktYnJlYWtwb2ludC0ke21vYmlsZUJyZWFrcG9pbnQudHJpbSgpfWApIHx8ICc3NjhweCc7XHJcbiAgICByZXR1cm4gYCR7cGFyc2VGbG9hdChicmVha3BvaW50VmFsdWUudHJpbSgpKSAtIC4wMn1weGAgfHwgJzc2Ny45OHB4JztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcclxuICAgIHByaXZhdGUgc2lkZWJhclNlcnZpY2U6IFNpZGViYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYWNrZHJvcFNlcnZpY2U6IFNpZGViYXJCYWNrZHJvcFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgZ2V0Q2xhc3NlcygpOiBhbnkge1xyXG4gICAgY29uc3Qge21vYmlsZSwgdW5mb2xkYWJsZSwgdmlzaWJsZX0gPSB0aGlzLnNpZGViYXJTdGF0ZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNpZGViYXI6IHRydWUsXHJcbiAgICAgICdzaWRlYmFyLWZpeGVkJzogdGhpcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyAmJiAhbW9iaWxlLFxyXG4gICAgICAnc2lkZWJhci1uYXJyb3cnOiB0aGlzLm5hcnJvdyAmJiAhdGhpcy51bmZvbGRhYmxlLFxyXG4gICAgICAnc2lkZWJhci1uYXJyb3ctdW5mb2xkYWJsZSc6IHVuZm9sZGFibGUsXHJcbiAgICAgICdzaWRlYmFyLW92ZXJsYWlkJzogdGhpcy5vdmVybGFpZCxcclxuICAgICAgW2BzaWRlYmFyLSR7dGhpcy5wbGFjZW1lbnR9YF06ICEhdGhpcy5wbGFjZW1lbnQsXHJcbiAgICAgIFtgc2lkZWJhci0ke3RoaXMuY29sb3JTY2hlbWV9YF06ICEhdGhpcy5jb2xvclNjaGVtZSxcclxuICAgICAgW2BzaWRlYmFyLSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcclxuICAgICAgc2hvdzogdmlzaWJsZSAmJiB0aGlzLm9uTW9iaWxlLFxyXG4gICAgICBoaWRlOiAhdmlzaWJsZSAmJiAhdGhpcy5vbk1vYmlsZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIHRoaXMubGF5b3V0Q2hhbmdlU3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YXRlVG9nZ2xlU3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVUb2dnbGVTdWJzY3JpYmUoZmFsc2UpO1xyXG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VTdWJzY3JpYmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2xkU3RhdGVNYXAgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhdGUpKTtcclxuICAgIGNvbnN0IG5ld1N0YXRlTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgbmV3U3RhdGVNYXAuc2V0KCdzaWRlYmFyJywgdGhpcyk7XHJcblxyXG4gICAgY29uc3QgcHJvcExpc3QgPSBbJ3Zpc2libGUnLCAndW5mb2xkYWJsZScsICduYXJyb3cnXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcclxuICAgICAgaWYgKHByb3BMaXN0LmluY2x1ZGVzKHByb3BOYW1lKSkge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzW3Byb3BOYW1lXSAmJiAhY2hhbmdlc1twcm9wTmFtZV0uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXNbcHJvcE5hbWVdLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICBpZiAob2xkU3RhdGVNYXAuZ2V0KHByb3BOYW1lKSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3U3RhdGVNYXAuc2V0KHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5ld1N0YXRlTWFwLnNpemUgPiAxKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRlID0gT2JqZWN0LmZyb21FbnRyaWVzKG5ld1N0YXRlTWFwLmVudHJpZXMoKSk7XHJcbiAgICAgIHRoaXMuc2lkZWJhclNlcnZpY2UudG9nZ2xlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEluaXRpYWxTdGF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2lkZWJhclNlcnZpY2UudG9nZ2xlKHtcclxuICAgICAgbmFycm93OiB0aGlzLm5hcnJvdyxcclxuICAgICAgdmlzaWJsZTogdGhpcy52aXNpYmxlLFxyXG4gICAgICB1bmZvbGRhYmxlOiB0aGlzLnVuZm9sZGFibGUsXHJcbiAgICAgIHNpZGViYXI6IHRoaXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0ZVRvZ2dsZVN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGVUb2dnbGVTdWJzY3JpcHRpb24gPSB0aGlzLnNpZGViYXJTZXJ2aWNlLnNpZGViYXJTdGF0ZSQuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzID09PSBzdGF0ZS5zaWRlYmFyIHx8IHRoaXMuaWQgPT09IHN0YXRlLmlkKSB7XHJcbiAgICAgICAgICB0aGlzLnNpZGViYXJTdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXRlVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXlvdXRDaGFuZ2VTdWJzY3JpYmUoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgb25Nb2JpbGUgPSBgKG1heC13aWR0aDogJHt0aGlzLmdldE1vYmlsZUJyZWFrcG9pbnR9KWA7XHJcblxyXG4gICAgaWYgKHN1YnNjcmliZSkge1xyXG4gICAgICBjb25zdCBsYXlvdXRDaGFuZ2VzID0gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbb25Nb2JpbGVdKTtcclxuXHJcbiAgICAgIHRoaXMubGF5b3V0Q2hhbmdlU3Vic2NyaXB0aW9uID0gbGF5b3V0Q2hhbmdlcy5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNPbk1vYmlsZSA9IHJlc3VsdC5icmVha3BvaW50c1tvbk1vYmlsZV07XHJcbiAgICAgICAgaWYgKHRoaXMub25Nb2JpbGUgIT09IGlzT25Nb2JpbGUpIHtcclxuICAgICAgICAgIHRoaXMub25Nb2JpbGUgPSBpc09uTW9iaWxlO1xyXG4gICAgICAgICAgdGhpcy5zaWRlYmFyU2VydmljZS50b2dnbGUoe1xyXG4gICAgICAgICAgICBtb2JpbGU6IGlzT25Nb2JpbGUsXHJcbiAgICAgICAgICAgIHVuZm9sZGFibGU6IGlzT25Nb2JpbGUgPyBmYWxzZSA6IHRoaXMudW5mb2xkYWJsZSxcclxuICAgICAgICAgICAgdmlzaWJsZTogaXNPbk1vYmlsZSA/IGZhbHNlIDogdGhpcy52aXNpYmxlLFxyXG4gICAgICAgICAgICBzaWRlYmFyOiB0aGlzXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQVk1RSxNQUFNLE9BQU8sZ0JBQWdCO0lBeUozQixZQUM0QixRQUFrQixFQUNwQyxRQUFtQixFQUNuQixrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsZUFBdUM7UUFKckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQXhKakQsbUNBQVUsS0FBSyxFQUFDO1FBQ2hCLHFDQUFZLEtBQUssRUFBQztRQUNsQix1Q0FBYyxLQUFLLEVBQUM7UUFDcEIsb0NBQVcsS0FBSyxFQUFDO1FBQ2pCLHFDQUFZLEtBQUssRUFBQztRQUNsQiw2REFBeUM7UUFDekMsNERBQXdDO1FBRXhDLFVBQUssR0FBbUI7WUFDdEIsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO1FBRUYseUNBQWdCO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLEVBQUM7UUFnREY7OztXQUdHO1FBQ00sYUFBUSxHQUF1QixPQUFP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QUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFNRixVQUFVO3NCQURiLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQWlCSSxhQUFhO3NCQUF0QixNQUFNO2dCQW1ESCxVQUFVO3NCQURiLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBJU2lkZWJhckFjdGlvbiwgU2lkZWJhclNlcnZpY2UgfSBmcm9tIFwiLi4vc2lkZWJhci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaWRlYmFyQmFja2Ryb3BTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpZGViYXItYmFja2Ryb3Avc2lkZWJhci1iYWNrZHJvcC5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc2lkZWJhcicsXG4gIGV4cG9ydEFzOiAnY1NpZGViYXInLFxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXG59KVxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX25hcnJvdzogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3ZlcmxhaWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3VuZm9sZGFibGU6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Zpc2libGU6IEJvb2xlYW5JbnB1dDtcblxuICAjbmFycm93ID0gZmFsc2U7XG4gICNvdmVybGFpZCA9IGZhbHNlO1xuICAjdW5mb2xkYWJsZSA9IGZhbHNlO1xuICAjdmlzaWJsZSA9IGZhbHNlO1xuICAjb25Nb2JpbGUgPSBmYWxzZTtcbiAgI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgI3N0YXRlVG9nZ2xlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIHN0YXRlOiBJU2lkZWJhckFjdGlvbiA9IHtcbiAgICBzaWRlYmFyOiB0aGlzXG4gIH07XG5cbiAgI3N0YXRlSW5pdGlhbCA9IHtcbiAgICBuYXJyb3c6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIHVuZm9sZGFibGU6IGZhbHNlXG4gIH07XG5cbiAgLyoqXG4gICAqIFNldHMgaWYgdGhlIGNvbG9yIG9mIHRleHQgc2hvdWxkIGJlIGNvbG9yZWQgZm9yIGEgbGlnaHQgb3IgZGFyayBiYWNrZ3JvdW5kLiBbZG9jc11cbiAgICpcbiAgICogQHR5cGUgJ2RhcmsnIHwgJ2xpZ2h0J1xuICAgKi9cbiAgQElucHV0KCkgY29sb3JTY2hlbWU/OiAnZGFyaycgfCAnbGlnaHQnO1xuXG4gIC8qKlxuICAgKiBTZXRzIGh0bWwgYXR0cmlidXRlIGlkLiBbZG9jc11cbiAgICpcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogTWFrZSBzaWRlYmFyIG5hcnJvdy4gW2RvY3NdXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBuYXJyb3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNuYXJyb3cgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IG5hcnJvdygpIHtcbiAgICByZXR1cm4gdGhpcy4jbmFycm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzaWRlYmFyIHRvIG92ZXJsYWlkIHZhcmlhbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBvdmVybGFpZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI292ZXJsYWlkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBvdmVybGFpZCgpIHtcbiAgICByZXR1cm4gdGhpcy4jb3ZlcmxhaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50cyBwbGFjZW1lbnQsIHRoZXJl4oCZcyBubyBkZWZhdWx0IHBsYWNlbWVudC4gW2RvY3NdXG4gICAqIEB0eXBlICdzdGFydCcgfCAnZW5kJ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2VtZW50PzogJ3N0YXJ0JyB8ICdlbmQnO1xuXG4gIC8qKlxuICAgKiBQbGFjZSBzaWRlYmFyIGluIG5vbi1zdGF0aWMgcG9zaXRpb25zLiBbZG9jc11cbiAgICogQGRlZmF1bHQgJ2ZpeGVkJ1xuICAgKi9cbiAgQElucHV0KCkgcG9zaXRpb246ICdmaXhlZCcgfCAnc3RpY2t5JyA9ICdmaXhlZCc7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCwgbGFyZ2UsIG9yIGV4dHJhIGxhcmdlLiBbZG9jc11cbiAgICovXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ2xnJyB8ICd4bCc7XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBuYXJyb3dlZCBzaWRlYmFyIG9uIGhvdmVyLiBbZG9jc11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB1bmZvbGRhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jdW5mb2xkYWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdW5mb2xkYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jdW5mb2xkYWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2Ygc2lkZWJhciBjb21wb25lbnQuIFtkb2NzXVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB2aXNpYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy4jdmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgdGhpcy4jdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0aGlzLiN2aXNpYmxlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jdmlzaWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIG9uIHZpc2liaWxpdHkgY2hhbmdlLiBbZG9jc11cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgc2V0IHNpZGViYXJTdGF0ZSh2YWx1ZTogSVNpZGViYXJBY3Rpb24pIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHZhbHVlO1xuICAgIGlmICgndG9nZ2xlJyBpbiBuZXdTdGF0ZSkge1xuICAgICAgaWYgKG5ld1N0YXRlLnRvZ2dsZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgIG5ld1N0YXRlLnZpc2libGUgPSAhdGhpcy5zdGF0ZS52aXNpYmxlO1xuICAgICAgICB0aGlzLnZpc2libGUgPSBuZXdTdGF0ZS52aXNpYmxlO1xuICAgICAgfSBlbHNlIGlmIChuZXdTdGF0ZS50b2dnbGUgPT09ICd1bmZvbGRhYmxlJykge1xuICAgICAgICBuZXdTdGF0ZS51bmZvbGRhYmxlID0gIXRoaXMuc3RhdGUudW5mb2xkYWJsZTtcbiAgICAgICAgdGhpcy51bmZvbGRhYmxlID0gbmV3U3RhdGUudW5mb2xkYWJsZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aXNpYmxlID0gKG5ld1N0YXRlLnZpc2libGUgPz8gdGhpcy52aXNpYmxlKSAmJiAhdGhpcy5vdmVybGFpZDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc3RhdGUubW9iaWxlICYmIHRoaXMuc3RhdGUudmlzaWJsZVxuICAgICAgPyB0aGlzLmJhY2tkcm9wU2VydmljZS5zZXRCYWNrZHJvcCh0aGlzKVxuICAgICAgOiB0aGlzLmJhY2tkcm9wU2VydmljZS5jbGVhckJhY2tkcm9wKCk7XG4gIH1cblxuICBnZXQgc2lkZWJhclN0YXRlKCk6IElTaWRlYmFyQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldCBnZXRNb2JpbGVCcmVha3BvaW50KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IG1vYmlsZUJyZWFrcG9pbnQgPVxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWN1aS1tb2JpbGUtYnJlYWtwb2ludCcpIHx8XG4gICAgICAnbWQnO1xuICAgIGNvbnN0IGJyZWFrcG9pbnRWYWx1ZSA9XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIGAtLWN1aS1icmVha3BvaW50LSR7bW9iaWxlQnJlYWtwb2ludC50cmltKCl9YFxuICAgICAgKSB8fCAnNzY4cHgnO1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KGJyZWFrcG9pbnRWYWx1ZS50cmltKCkpIC0gMC4wMn1weGAgfHwgJzc2Ny45OHB4JztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgIHByaXZhdGUgc2lkZWJhclNlcnZpY2U6IFNpZGViYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2Ryb3BTZXJ2aWNlOiBTaWRlYmFyQmFja2Ryb3BTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYmFja2Ryb3BTZXJ2aWNlLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGdldENsYXNzZXMoKTogYW55IHtcbiAgICBjb25zdCB7IG1vYmlsZSwgdmlzaWJsZSB9ID0gdGhpcy5zaWRlYmFyU3RhdGU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXI6IHRydWUsXG4gICAgICAnc2lkZWJhci1maXhlZCc6IHRoaXMucG9zaXRpb24gPT09ICdmaXhlZCcgJiYgIW1vYmlsZSxcbiAgICAgICdzaWRlYmFyLW5hcnJvdyc6IHRoaXMubmFycm93ICYmICF0aGlzLnVuZm9sZGFibGUsXG4gICAgICAnc2lkZWJhci1uYXJyb3ctdW5mb2xkYWJsZSc6IHRoaXMudW5mb2xkYWJsZSxcbiAgICAgICdzaWRlYmFyLW92ZXJsYWlkJzogdGhpcy5vdmVybGFpZCxcbiAgICAgIFtgc2lkZWJhci0ke3RoaXMucGxhY2VtZW50fWBdOiAhIXRoaXMucGxhY2VtZW50LFxuICAgICAgW2BzaWRlYmFyLSR7dGhpcy5jb2xvclNjaGVtZX1gXTogISF0aGlzLmNvbG9yU2NoZW1lLFxuICAgICAgW2BzaWRlYmFyLSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcbiAgICAgIHNob3c6IHZpc2libGUgJiYgdGhpcy4jb25Nb2JpbGUsXG4gICAgICBoaWRlOiAhdmlzaWJsZSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgICB0aGlzLmxheW91dENoYW5nZVN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3RhdGVUb2dnbGVTdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVUb2dnbGVTdWJzY3JpYmUoZmFsc2UpO1xuICAgIHRoaXMubGF5b3V0Q2hhbmdlU3Vic2NyaWJlKGZhbHNlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRTdGF0ZU1hcCA9IG5ldyBNYXAoT2JqZWN0LmVudHJpZXModGhpcy5zdGF0ZSkpO1xuICAgIGNvbnN0IG5ld1N0YXRlTWFwID0gbmV3IE1hcCgpO1xuICAgIG5ld1N0YXRlTWFwLnNldCgnc2lkZWJhcicsIHRoaXMpO1xuXG4gICAgY29uc3QgcHJvcExpc3QgPSBbJ3Zpc2libGUnLCAndW5mb2xkYWJsZScsICduYXJyb3cnXTtcblxuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgaW4gY2hhbmdlcykge1xuICAgICAgaWYgKHByb3BMaXN0LmluY2x1ZGVzKHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY2hhbmdlc1twcm9wTmFtZV0gJiYgIWNoYW5nZXNbcHJvcE5hbWVdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlc1twcm9wTmFtZV0uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAob2xkU3RhdGVNYXAuZ2V0KHByb3BOYW1lKSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlTWFwLnNldChwcm9wTmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdTdGF0ZU1hcC5zaXplID4gMSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuZnJvbUVudHJpZXMobmV3U3RhdGVNYXAuZW50cmllcygpKTtcbiAgICAgIHRoaXMuc2lkZWJhclNlcnZpY2UudG9nZ2xlKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy4jc3RhdGVJbml0aWFsID0ge1xuICAgICAgbmFycm93OiB0aGlzLm5hcnJvdyxcbiAgICAgIHZpc2libGU6IHRoaXMudmlzaWJsZSxcbiAgICAgIHVuZm9sZGFibGU6IHRoaXMudW5mb2xkYWJsZSxcbiAgICB9O1xuICAgIHRoaXMuc2lkZWJhclNlcnZpY2UudG9nZ2xlKHtcbiAgICAgIC4uLnRoaXMuI3N0YXRlSW5pdGlhbCxcbiAgICAgIHNpZGViYXI6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRlVG9nZ2xlU3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLiNzdGF0ZVRvZ2dsZVN1YnNjcmlwdGlvbiA9XG4gICAgICAgIHRoaXMuc2lkZWJhclNlcnZpY2Uuc2lkZWJhclN0YXRlJC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMgPT09IHN0YXRlLnNpZGViYXIgfHwgdGhpcy5pZCA9PT0gc3RhdGUuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2lkZWJhclN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jc3RhdGVUb2dnbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBsYXlvdXRDaGFuZ2VTdWJzY3JpYmUoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IG9uTW9iaWxlID0gYChtYXgtd2lkdGg6ICR7dGhpcy5nZXRNb2JpbGVCcmVha3BvaW50fSlgO1xuXG4gICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgY29uc3QgbGF5b3V0Q2hhbmdlcyA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW29uTW9iaWxlXSk7XG5cbiAgICAgIHRoaXMuI2xheW91dENoYW5nZVN1YnNjcmlwdGlvbiA9IGxheW91dENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAocmVzdWx0OiBCcmVha3BvaW50U3RhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpc09uTW9iaWxlID0gcmVzdWx0LmJyZWFrcG9pbnRzW29uTW9iaWxlXTtcbiAgICAgICAgICBjb25zdCBpc1VuZm9sZGFibGUgPSBpc09uTW9iaWxlID8gZmFsc2UgOiB0aGlzLnVuZm9sZGFibGU7XG4gICAgICAgICAgaWYgKHRoaXMuI29uTW9iaWxlICE9PSBpc09uTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiNvbk1vYmlsZSA9IGlzT25Nb2JpbGU7XG4gICAgICAgICAgICB0aGlzLnNpZGViYXJTZXJ2aWNlLnRvZ2dsZSh7XG4gICAgICAgICAgICAgIG1vYmlsZTogaXNPbk1vYmlsZSxcbiAgICAgICAgICAgICAgdW5mb2xkYWJsZTogaXNVbmZvbGRhYmxlLFxuICAgICAgICAgICAgICB2aXNpYmxlOiBpc09uTW9iaWxlID8gIWlzT25Nb2JpbGUgOiB0aGlzLiNzdGF0ZUluaXRpYWwudmlzaWJsZSxcbiAgICAgICAgICAgICAgc2lkZWJhcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jbGF5b3V0Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=