ng-virtual-list 16.7.12 → 16.7.14

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.
package/README.md CHANGED
@@ -554,7 +554,7 @@ Selecting even elements:
554
554
 
555
555
  ## 📚 API
556
556
 
557
- [NgVirtualListComponent](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts)
557
+ ### [NgVirtualListComponent](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts)
558
558
 
559
559
  Inputs
560
560
 
@@ -579,6 +579,7 @@ Inputs
579
579
  | trackBy | string? = 'id' | The name of the property by which tracking is performed. |
580
580
  | selectedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts) \| undefined | Sets the selected items. |
581
581
  | collapsedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts)> | Sets the collapsed items. |
582
+ | screenReaderMessage | string? = "Showing items $1 to $2" | Message for screen reader. The message format is: "some text `$1` some text `$2`", where `$1` is the number of the first element of the screen collection, `$2` is the number of the last element of the screen collection. |
582
583
 
583
584
  <br/>
584
585
 
@@ -605,7 +606,25 @@ Methods
605
606
  | scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts), behavior: ScrollBehavior = 'auto') => number | The method scrolls the list to the element with the given id and returns the value of the scrolled area. Behavior accepts the values ​​"auto", "instant" and "smooth". |
606
607
  | scrollToEnd | (behavior?: ScrollBehavior) => void | Scrolls the scroll area to the desired element with the specified ID. |
607
608
  | getItemBounds | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts), behavior?: ScrollBehavior) => void | Returns the bounds of an element with a given id |
609
+ | focus | [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts), align: [FocusAlignment](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/focus-alignment.ts) = [FocusAlignments.NONE](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts) | Focus an list item by a given id. |
608
610
 
611
+ <br/>
612
+
613
+ ### Template API
614
+
615
+ ```html
616
+ <ng-template #itemRenderer let-data="data" let-config="config" let-measures="measures">
617
+ <!-- content -->
618
+ </ng-template>
619
+ ```
620
+
621
+ Properties
622
+
623
+ | Property | Type | Description |
624
+ |--|--|--|
625
+ | data | {\[id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts) \], [otherProps: string]: any;} | Collection item data. |
626
+ | config | [IDisplayObjectConfig](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/display-object-config.model.ts) | Display object configuration. A set of `select`, `collapse`, and `focus` methods are also provided. |
627
+ | measures | [IDisplayObjectMeasures](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/display-object-measures.model.ts) \| undefined | Display object metrics. |
609
628
 
610
629
  <br/>
611
630
 
@@ -1,14 +1,16 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN, PART_ITEM_NEW, PART_ITEM_FOCUSED, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D, } from '../const';
3
3
  import { BaseVirtualListItemComponent } from '../models/base-virtual-list-item-component';
4
- import { map, takeUntil, tap } from 'rxjs/operators';
5
- import { BehaviorSubject, combineLatest, fromEvent, Subject } from 'rxjs';
4
+ import { map, tap } from 'rxjs/operators';
5
+ import { BehaviorSubject, combineLatest, fromEvent } from 'rxjs';
6
6
  import { MethodsForSelectingTypes } from '../enums/method-for-selecting-types';
7
7
  import { validateBoolean } from '../utils/validation';
8
+ import { FocusAlignments } from '../enums';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
10
  import * as i0 from "@angular/core";
9
11
  import * as i1 from "../ng-virtual-list.service";
10
12
  import * as i2 from "@angular/common";
11
- const ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'ng-vl-index', KEY_SPACE = " ", KEY_ARR_LEFT = "ArrowLeft", KEY_ARR_UP = "ArrowUp", KEY_ARR_RIGHT = "ArrowRight", KEY_ARR_DOWN = "ArrowDown", EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown';
13
+ const ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'ng-vl-index', POSITION = 'position', POSITION_ZERO = '0', ID = 'item-id', KEY_SPACE = " ", KEY_ARR_LEFT = "ArrowLeft", KEY_ARR_UP = "ArrowUp", KEY_ARR_RIGHT = "ArrowRight", KEY_ARR_DOWN = "ArrowDown", EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown';
12
14
  const getElementByIndex = (index) => {
13
15
  return `[${TABINDEX}="${index}"]`;
14
16
  };
@@ -22,7 +24,6 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
22
24
  _cdr;
23
25
  _elementRef;
24
26
  _service;
25
- _$unsubscribe = new Subject();
26
27
  _id;
27
28
  get id() {
28
29
  return this._id;
@@ -34,12 +35,12 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
34
35
  _$config = new BehaviorSubject({});
35
36
  $config = this._$config.asObservable();
36
37
  measures = new BehaviorSubject(undefined);
37
- _$focus = new BehaviorSubject(false);
38
- $focus = this._$focus.asObservable();
38
+ _$focused = new BehaviorSubject(false);
39
+ $focused = this._$focused.asObservable();
39
40
  _$part = new BehaviorSubject(PART_DEFAULT_ITEM);
40
41
  $part = this._$part.asObservable();
41
42
  regular = false;
42
- data = undefined;
43
+ data;
43
44
  _$data = new BehaviorSubject(this.data);
44
45
  $data = this._$data.asObservable();
45
46
  set item(v) {
@@ -106,28 +107,35 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
106
107
  }
107
108
  this._service.collapse(data, collapsed);
108
109
  };
110
+ _focusHandler = () =>
111
+ /**
112
+ * Focus a list item
113
+ */
114
+ (align = FocusAlignments.CENTER) => {
115
+ this.focus(align);
116
+ };
109
117
  constructor(_cdr, _elementRef, _service) {
110
118
  super();
111
119
  this._cdr = _cdr;
112
120
  this._elementRef = _elementRef;
113
121
  this._service = _service;
114
122
  this._id = this._service.generateComponentId();
115
- const $data = this.$data, $focus = this.$focus;
123
+ const $data = this.$data, $focus = this.$focused;
116
124
  this._elementRef.nativeElement.setAttribute('id', String(this._id));
117
- $focus.pipe(takeUntil(this._$unsubscribe), tap(v => {
125
+ $focus.pipe(takeUntilDestroyed(), tap(v => {
118
126
  this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);
119
127
  })).subscribe();
120
- fromEvent(this.element, EVENT_FOCUS_IN).pipe(takeUntil(this._$unsubscribe), tap(e => {
121
- this._$focus.next(true);
128
+ fromEvent(this.element, EVENT_FOCUS_IN).pipe(takeUntilDestroyed(), tap(e => {
129
+ this._$focused.next(true);
122
130
  this.updateConfig(this.data);
123
131
  this.updatePartStr(this.data, this._isSelected, this._isCollapsed);
124
132
  })).subscribe(),
125
- fromEvent(this.element, EVENT_FOCUS_OUT).pipe(takeUntil(this._$unsubscribe), tap(e => {
126
- this._$focus.next(false);
133
+ fromEvent(this.element, EVENT_FOCUS_OUT).pipe(takeUntilDestroyed(), tap(e => {
134
+ this._$focused.next(false);
127
135
  this.updateConfig(this.data);
128
136
  this.updatePartStr(this.data, this._isSelected, this._isCollapsed);
129
137
  })).subscribe(),
130
- fromEvent(this.element, EVENT_KEY_DOWN).pipe(takeUntil(this._$unsubscribe), tap(e => {
138
+ fromEvent(this.element, EVENT_KEY_DOWN).pipe(takeUntilDestroyed(), tap(e => {
131
139
  switch (e.key) {
132
140
  case KEY_SPACE: {
133
141
  e.stopImmediatePropagation();
@@ -170,7 +178,7 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
170
178
  break;
171
179
  }
172
180
  })).subscribe();
173
- combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(takeUntil(this._$unsubscribe), map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })), tap(({ method, selectedIds, collapsedIds }) => {
181
+ combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(takeUntilDestroyed(), map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })), tap(({ method, selectedIds, collapsedIds }) => {
174
182
  switch (method) {
175
183
  case MethodsForSelectingTypes.SELECT: {
176
184
  const id = selectedIds, isSelected = id === this.itemId;
@@ -226,18 +234,29 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
226
234
  }
227
235
  }
228
236
  }
237
+ focus(align = FocusAlignments.CENTER) {
238
+ if (this._service.listElement) {
239
+ const tabIndex = this.data?.config?.tabIndex ?? 0;
240
+ let index = tabIndex;
241
+ const el = this._service.listElement.querySelector(getElementByIndex(index));
242
+ if (el) {
243
+ this._service.focus(el, align);
244
+ }
245
+ }
246
+ }
229
247
  updateMeasures(v) {
230
248
  this.measures.next(v?.measures ? { ...v.measures } : undefined);
231
249
  }
232
250
  updateConfig(v) {
233
251
  this._$config.next({
234
- ...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focus: this._$focus.getValue(),
235
- collapse: this._collapseHandler(v), select: this._selectHandler(v)
252
+ ...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),
253
+ collapse: this._collapseHandler(v), select: this._selectHandler(v), focus: this._focusHandler(),
236
254
  });
237
255
  }
238
256
  update() {
239
257
  const data = this.data, regular = this.regular, length = this._regularLength;
240
258
  if (data) {
259
+ this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);
241
260
  const styles = this._elementRef.nativeElement.style;
242
261
  styles.zIndex = data.config.zIndex;
243
262
  if (data.config.snapped) {
@@ -261,6 +280,9 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
261
280
  styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;
262
281
  styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;
263
282
  }
283
+ else {
284
+ this._elementRef.nativeElement.removeAttribute(ID);
285
+ }
264
286
  this._cdr.markForCheck();
265
287
  }
266
288
  updatePartStr(v, isSelected, isCollapsed) {
@@ -282,7 +304,7 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
282
304
  if (v ? v.config.new : false) {
283
305
  part += PART_ITEM_NEW;
284
306
  }
285
- if (this._$focus.getValue()) {
307
+ if (this._$focused.getValue()) {
286
308
  part += PART_ITEM_FOCUSED;
287
309
  }
288
310
  this._$part.next(part);
@@ -328,20 +350,14 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
328
350
  onClickHandler() {
329
351
  this._service.itemClick(this.data);
330
352
  }
331
- ngOnDestroy() {
332
- if (this._$unsubscribe) {
333
- this._$unsubscribe.next();
334
- this._$unsubscribe.complete();
335
- }
336
- }
337
353
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.NgVirtualListService }], target: i0.ɵɵFactoryTarget.Component });
338
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"data\">\r\n <div #listItem [part]=\"$part | async\" [attr.ng-vl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': data.config.snapped,\r\n 'snapped-out': data.config.snappedOut, 'focus': $focus | async}\" (click)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"{data: data.data || {}, measures: measures | async, config: $config | async}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
354
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"data\">\r\n <div #listItem [part]=\"$part | async\" [attr.ng-vl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': data.config.snapped,\r\n 'snapped-out': data.config.snappedOut, 'focus': $focused | async}\" (click)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"{data: data.data || {}, measures: measures | async, config: $config | async}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
339
355
  }
340
356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListItemComponent, decorators: [{
341
357
  type: Component,
342
358
  args: [{ selector: 'ng-virtual-list-item', host: {
343
359
  'class': 'ngvl__item',
344
360
  'role': 'listitem',
345
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"data\">\r\n <div #listItem [part]=\"$part | async\" [attr.ng-vl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': data.config.snapped,\r\n 'snapped-out': data.config.snappedOut, 'focus': $focus | async}\" (click)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"{data: data.data || {}, measures: measures | async, config: $config | async}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"] }]
361
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"data\">\r\n <div #listItem [part]=\"$part | async\" [attr.ng-vl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': data.config.snapped,\r\n 'snapped-out': data.config.snappedOut, 'focus': $focused | async}\" (click)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"{data: data.data || {}, measures: measures | async, config: $config | async}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"] }]
346
362
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.NgVirtualListService }]; } });
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUcvRyxPQUFPLEVBQ0wsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQ2pJLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUNqSSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixHQUNuRixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUxRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQTJCdEQsTUFBTSxr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dkMsa29CQVFlOzs0RkR5REYsMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNFLHNCQUFzQixRQUcxQjt3QkFDSixPQUFPLEVBQUUsWUFBWTt3QkFDckIsTUFBTSxFQUFFLFVBQVU7cUJBQ25CLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvcmVuZGVyLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBJZCwgSVJlY3QsIElTaXplIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfWklOREVYLCBESVNQTEFZX0JMT0NLLCBESVNQTEFZX05PTkUsIEhJRERFTl9aSU5ERVgsIFBBUlRfREVGQVVMVF9JVEVNLCBQQVJUX0lURU1fQ09MTEFQU0VELCBQQVJUX0lURU1fRVZFTiwgUEFSVF9JVEVNX05FVyxcclxuICBQQVJUX0lURU1fRk9DVVNFRCwgUEFSVF9JVEVNX09ERCwgUEFSVF9JVEVNX1NFTEVDVEVELCBQQVJUX0lURU1fU05BUFBFRCwgUE9TSVRJT05fQUJTT0xVVEUsIFBPU0lUSU9OX1NUSUNLWSwgUFgsIFNJWkVfMTAwX1BFUlNFTlQsXHJcbiAgU0laRV9BVVRPLCBUUkFOU0xBVEVfM0QsIFZJU0lCSUxJVFlfSElEREVOLCBWSVNJQklMSVRZX1ZJU0lCTEUsIFpFUk9TX1RSQU5TTEFURV8zRCxcclxufSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4uL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9yZW5kZXItaXRlbS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMgfSBmcm9tICcuLi9lbnVtcy9tZXRob2QtZm9yLXNlbGVjdGluZy10eXBlcyc7XHJcbmltcG9ydCB7IHZhbGlkYXRlQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRpb24nO1xyXG5cclxuaW50ZXJmYWNlIElJdGVtQ29uZmlnIGV4dGVuZHMgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyB7XHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBmb2N1cyBvciBub3QuXHJcbiAgICovXHJcbiAgZm9jdXM6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIG9yIG5vdC5cclxuICAgKi9cclxuICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkIG9yIG5vdC5cclxuICAgKi9cclxuICBjb2xsYXBzZWQ6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgc2VsZWN0OiAoc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIENvbGxhcHNlIGxpc3QgaXRlbXNcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlOiAoY29sbGFwc2VkOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBBVFRSX0FSRUFfU0VMRUNURUQgPSAnYXJlYS1zZWxlY3RlZCcsIFRBQklOREVYID0gJ25nLXZsLWluZGV4JyxcclxuICBLRVlfU1BBQ0UgPSBcIiBcIiwgS0VZX0FSUl9MRUZUID0gXCJBcnJvd0xlZnRcIiwgS0VZX0FSUl9VUCA9IFwiQXJyb3dVcFwiLCBLRVlfQVJSX1JJR0hUID0gXCJBcnJvd1JpZ2h0XCIsIEtFWV9BUlJfRE9XTiA9IFwiQXJyb3dEb3duXCIsXHJcbiAgRVZFTlRfRk9DVVNfSU4gPSAnZm9jdXNpbicsIEVWRU5UX0ZPQ1VTX09VVCA9ICdmb2N1c291dCcsIEVWRU5UX0tFWV9ET1dOID0gJ2tleWRvd24nO1xyXG5cclxuY29uc3QgZ2V0RWxlbWVudEJ5SW5kZXggPSAoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gIHJldHVybiBgWyR7VEFCSU5ERVh9PVwiJHtpbmRleH1cIl1gO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFZpcnR1YWwgbGlzdCBpdGVtIGNvbXBvbmVudFxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0LWl0ZW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnY2xhc3MnOiAnbmd2bF9faXRlbScsXHJcbiAgICAncm9sZSc6ICdsaXN0aXRlbScsXHJcbiAgfSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB7XHJcbiAgcHJvdGVjdGVkIF8kdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9pZCE6IG51bWJlcjtcclxuICBnZXQgaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYXJ0ID0gUEFSVF9ERUZBVUxUX0lURU07XHJcbiAgZ2V0IHBhcnQoKSB7IHJldHVybiB0aGlzLl9wYXJ0OyB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUl0ZW1Db25maWc+KHt9IGFzIElJdGVtQ29uZmlnKTtcclxuICAkY29uZmlnID0gdGhpcy5fJGNvbmZpZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgbWVhc3VyZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZWN0ICYge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWx0YSBpcyBjYWxjdWxhdGVkIGZvciBTbmFwcGluZyBNZXRob2QuQURWQU5DRURcclxuICAgICAqL1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICB9IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBwcml2YXRlIF8kZm9jdXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAkZm9jdXMgPSB0aGlzLl8kZm9jdXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwYXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFBBUlRfREVGQVVMVF9JVEVNKTtcclxuICAkcGFydCA9IHRoaXMuXyRwYXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICByZWd1bGFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyRkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkPih0aGlzLmRhdGEpO1xyXG4gIHByaXZhdGUgJGRhdGEgPSB0aGlzLl8kZGF0YS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IGl0ZW0odjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBhcnRTdHIodiwgdGhpcy5faXNTZWxlY3RlZCwgdGhpcy5faXNDb2xsYXBzZWQpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKHYpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTWVhc3VyZXModik7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB0aGlzLl8kZGF0YS5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWd1bGFyTGVuZ3RoOiBzdHJpbmcgPSBTSVpFXzEwMF9QRVJTRU5UO1xyXG4gIHNldCByZWd1bGFyTGVuZ3RoKHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuX3JlZ3VsYXJMZW5ndGggPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3JlZ3VsYXJMZW5ndGggPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5pZDtcclxuICB9XHJcblxyXG4gIGl0ZW1SZW5kZXJlcjogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgc2V0IHJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLml0ZW1SZW5kZXJlciA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtUmVuZGVyZXIgPSB2O1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBlbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdEhhbmRsZXIgPSAoZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkKSA9PlxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWxlY3RzIGEgbGlzdCBpdGVtXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAgICovXHJcbiAgICAoc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpID0+IHtcclxuICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4oc2VsZWN0ZWQsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0ZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3QoZGF0YSwgc2VsZWN0ZWQpO1xyXG4gICAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VIYW5kbGVyID0gKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkgPT5cclxuICAgIC8qKlxyXG4gICAgKiBDb2xsYXBzZSBsaXN0IGl0ZW1zXHJcbiAgICAqIEBwYXJhbSBjb2xsYXBzZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBjb2xsYXBzZS9leHBhbmQgaXMgcGVyZm9ybWVkLlxyXG4gICAgKi9cclxuICAgIChjb2xsYXBzZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpID0+IHtcclxuICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4oY29sbGFwc2VkLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNvbGxhcHNlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlKGRhdGEsIGNvbGxhcHNlZCk7XHJcbiAgICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBfc2VydmljZTogTmdWaXJ0dWFsTGlzdFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9pZCA9IHRoaXMuX3NlcnZpY2UuZ2VuZXJhdGVDb21wb25lbnRJZCgpO1xyXG5cclxuICAgIGNvbnN0ICRkYXRhID0gdGhpcy4kZGF0YSxcclxuICAgICAgJGZvY3VzID0gdGhpcy4kZm9jdXM7XHJcblxyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBTdHJpbmcodGhpcy5faWQpKTtcclxuXHJcbiAgICAkZm9jdXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmFyZWFGb2N1cyh2ID8gdGhpcy5faWQgOiB0aGlzLl9zZXJ2aWNlLmZvY3VzZWRJZCA9PT0gdGhpcy5faWQgPyBudWxsIDogdGhpcy5fc2VydmljZS5mb2N1c2VkSWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgRVZFTlRfRk9DVVNfSU4pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGZvY3VzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLmRhdGEsIHRoaXMuX2lzU2VsZWN0ZWQsIHRoaXMuX2lzQ29sbGFwc2VkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpLFxyXG5cclxuICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgRVZFTlRfRk9DVVNfT1VUKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRmb2N1cy5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLmRhdGEsIHRoaXMuX2lzU2VsZWN0ZWQsIHRoaXMuX2lzQ29sbGFwc2VkKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKSxcclxuXHJcbiAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLmVsZW1lbnQsIEVWRU5UX0tFWV9ET1dOKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcclxuICAgICAgICAgICAgY2FzZSBLRVlfU1BBQ0U6IHtcclxuICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZS5zZWxlY3RCeUNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdCh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZS5jb2xsYXBzZUJ5Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2UodGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl8kY29uZmlnLmdldFZhbHVlKCkuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNQcmV2KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEtFWV9BUlJfVVA6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuXyRjb25maWcuZ2V0VmFsdWUoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9SSUdIVDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuXyRjb25maWcuZ2V0VmFsdWUoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl8kY29uZmlnLmdldFZhbHVlKCkuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkYXRhLCB0aGlzLl9zZXJ2aWNlLiRtZXRob2RPZlNlbGVjdGluZywgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMsIHRoaXMuX3NlcnZpY2UuJGNvbGxhcHNlZElkc10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBtYXAoKFssIG0sIHNlbGVjdGVkSWRzLCBjb2xsYXBzZWRJZHNdKSA9PiAoeyBtZXRob2Q6IG0sIHNlbGVjdGVkSWRzLCBjb2xsYXBzZWRJZHMgfSkpLFxyXG4gICAgICB0YXAoKHsgbWV0aG9kLCBzZWxlY3RlZElkcywgY29sbGFwc2VkSWRzIH0pID0+IHtcclxuICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2VsZWN0ZWRJZHMgYXMgSWQgfCB1bmRlZmluZWQsIGlzU2VsZWN0ZWQgPSBpZCA9PT0gdGhpcy5pdGVtSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUl9BUkVBX1NFTEVDVEVELCBTdHJpbmcoaXNTZWxlY3RlZCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgYWN0dWFsSWRzID0gc2VsZWN0ZWRJZHMgYXMgQXJyYXk8SWQ+LCBpc1NlbGVjdGVkID0gdGhpcy5pdGVtSWQgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxJZHMgJiYgYWN0dWFsSWRzLmluY2x1ZGVzKHRoaXMuaXRlbUlkKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSX0FSRUFfU0VMRUNURUQsIFN0cmluZyhpc1NlbGVjdGVkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk5PTkU6XHJcbiAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUl9BUkVBX1NFTEVDVEVEKTtcclxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbElkcyA9IGNvbGxhcHNlZElkcywgaXNDb2xsYXBzZWQgPSB0aGlzLml0ZW1JZCAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbElkcyAmJiBhY3R1YWxJZHMuaW5jbHVkZXModGhpcy5pdGVtSWQpO1xyXG4gICAgICAgIHRoaXMuX2lzQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLmRhdGEsIHRoaXMuX2lzU2VsZWN0ZWQsIGlzQ29sbGFwc2VkKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlcyh0aGlzLmRhdGEpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzTmV4dCgpIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDAsIGxlbmd0aCA9IHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbj8ubGVuZ3RoID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICB3aGlsZSAoaW5kZXggPD0gbGVuZ3RoKSB7XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpKTtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXMoZWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzUHJldigpIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgIGluZGV4LS07XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGdldEVsZW1lbnRCeUluZGV4KGluZGV4KSk7XHJcbiAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGVsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNZWFzdXJlcyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVhc3VyZXMubmV4dCh2Py5tZWFzdXJlcyA/IHsgLi4udi5tZWFzdXJlcyB9IDogdW5kZWZpbmVkKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb25maWcodjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl8kY29uZmlnLm5leHQoe1xyXG4gICAgICAuLi52Py5jb25maWcgfHwge30gYXMgSUl0ZW1Db25maWcsIHNlbGVjdGVkOiB0aGlzLl9pc1NlbGVjdGVkLCBjb2xsYXBzZWQ6IHRoaXMuX2lzQ29sbGFwc2VkLCBmb2N1czogdGhpcy5fJGZvY3VzLmdldFZhbHVlKCksXHJcbiAgICAgIGNvbGxhcHNlOiB0aGlzLl9jb2xsYXBzZUhhbmRsZXIodiksIHNlbGVjdDogdGhpcy5fc2VsZWN0SGFuZGxlcih2KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEsIHJlZ3VsYXIgPSB0aGlzLnJlZ3VsYXIsIGxlbmd0aCA9IHRoaXMuX3JlZ3VsYXJMZW5ndGg7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGU7XHJcbiAgICAgIHN0eWxlcy56SW5kZXggPSBkYXRhLmNvbmZpZy56SW5kZXg7XHJcbiAgICAgIGlmIChkYXRhLmNvbmZpZy5zbmFwcGVkKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBkYXRhLmNvbmZpZy5zdGlja3kgPT09IDEgPyAnMCcgOiBgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogZGF0YS5tZWFzdXJlcy54fWApO1xyXG4gICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBkYXRhLmNvbmZpZy5zdGlja3kgPT09IDEgPyBaRVJPU19UUkFOU0xBVEVfM0QgOiBgJHtUUkFOU0xBVEVfM0R9KCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IDAgOiBkYXRhLm1lYXN1cmVzLnh9JHtQWH0sICR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IDB9JHtQWH0gLCAwKWA7XHJcbiAgICAgICAgaWYgKCFkYXRhLmNvbmZpZy5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHN0eWxlcy5wb3NpdGlvbiA9IFBPU0lUSU9OX1NUSUNLWTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3R5bGVzLnBvc2l0aW9uID0gUE9TSVRJT05fQUJTT0xVVEU7XHJcbiAgICAgICAgaWYgKHJlZ3VsYXIpIHtcclxuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgJzAnKTtcclxuICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBgJHtUUkFOU0xBVEVfM0R9KCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IDAgOiBkYXRhLm1lYXN1cmVzLmRlbHRhfSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLmRlbHRhIDogMH0ke1BYfSAsIDApYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogZGF0YS5tZWFzdXJlcy54fWApO1xyXG4gICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gMCA6IGRhdGEubWVhc3VyZXMueH0ke1BYfSwgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogMH0ke1BYfSAsIDApYDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc3R5bGVzLmhlaWdodCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLmNvbmZpZy5keW5hbWljID8gU0laRV9BVVRPIDogYCR7ZGF0YS5tZWFzdXJlcy5oZWlnaHR9JHtQWH1gIDogcmVndWxhciA/IGxlbmd0aCA6IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgICAgIHN0eWxlcy53aWR0aCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyByZWd1bGFyID8gbGVuZ3RoIDogU0laRV8xMDBfUEVSU0VOVCA6IGRhdGEuY29uZmlnLmR5bmFtaWMgPyBTSVpFX0FVVE8gOiBgJHtkYXRhLm1lYXN1cmVzLndpZHRofSR7UFh9YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhcnRTdHIodjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgaXNTZWxlY3RlZDogYm9vbGVhbiwgaXNDb2xsYXBzZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBvZGQgPSBmYWxzZTtcclxuICAgIGlmICh2Py5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIG9kZCA9IHYuaW5kZXggJSAyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJ0ID0gUEFSVF9ERUZBVUxUX0lURU07XHJcbiAgICBwYXJ0ICs9IG9kZCA/IFBBUlRfSVRFTV9PREQgOiBQQVJUX0lURU1fRVZFTjtcclxuICAgIGlmICh2ID8gdi5jb25maWcuc25hcHBlZCA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX1NOQVBQRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9TRUxFQ1RFRDtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9DT0xMQVBTRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAodiA/IHYuY29uZmlnLm5ldyA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX05FVztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl8kZm9jdXMuZ2V0VmFsdWUoKSkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9GT0NVU0VEO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHBhcnQubmV4dChwYXJ0KTtcclxuICB9XHJcblxyXG4gIGdldEJvdW5kcygpOiBJU2l6ZSB7XHJcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlO1xyXG4gICAgaWYgKHRoaXMucmVndWxhcikge1xyXG4gICAgICBpZiAoc3R5bGVzLmRpc3BsYXkgPT09IERJU1BMQVlfQkxPQ0spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy5kaXNwbGF5ID0gRElTUExBWV9CTE9DSztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9WSVNJQkxFKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMudmlzaWJpbGl0eSA9IFZJU0lCSUxJVFlfVklTSUJMRTtcclxuICAgIH1cclxuICAgIHN0eWxlcy56SW5kZXggPSB0aGlzLmRhdGE/LmNvbmZpZz8uekluZGV4ID8/IERFRkFVTFRfWklOREVYO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZTtcclxuICAgIGlmICh0aGlzLnJlZ3VsYXIpIHtcclxuICAgICAgaWYgKHN0eWxlcy5kaXNwbGF5ID09PSBESVNQTEFZX05PTkUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy5kaXNwbGF5ID0gRElTUExBWV9OT05FO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHN0eWxlcy52aXNpYmlsaXR5ID09PSBWSVNJQklMSVRZX0hJRERFTikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3R5bGVzLnZpc2liaWxpdHkgPSBWSVNJQklMSVRZX0hJRERFTjtcclxuICAgIH1cclxuICAgIHN0eWxlcy5wb3NpdGlvbiA9IFBPU0lUSU9OX0FCU09MVVRFO1xyXG4gICAgc3R5bGVzLnRyYW5zZm9ybSA9IFpFUk9TX1RSQU5TTEFURV8zRDtcclxuICAgIHN0eWxlcy56SW5kZXggPSBISURERU5fWklOREVYO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0hhbmRsZXIoKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLml0ZW1DbGljayh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fJHVuc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFcIj5cclxuICAgIDxkaXYgI2xpc3RJdGVtIFtwYXJ0XT1cIiRwYXJ0IHwgYXN5bmNcIiBbYXR0ci5uZy12bC1pbmRleF09XCJkYXRhLmNvbmZpZy50YWJJbmRleCB8fCAtMVwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwibmd2bC1pdGVtX19jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J3NuYXBwZWQnOiBkYXRhLmNvbmZpZy5zbmFwcGVkLFxyXG4gICAgICAgICdzbmFwcGVkLW91dCc6IGRhdGEuY29uZmlnLnNuYXBwZWRPdXQsICdmb2N1cyc6ICRmb2N1cyB8IGFzeW5jfVwiIChjbGljayk9XCJvbkNsaWNrSGFuZGxlcigpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1SZW5kZXJlclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1SZW5kZXJlclwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6IGRhdGEuZGF0YSB8fCB7fSwgbWVhc3VyZXM6IG1lYXN1cmVzIHwgYXN5bmMsIGNvbmZpZzogJGNvbmZpZyB8IGFzeW5jfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUcvRyxPQUFPLEVBQ0wsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQ2pJLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUNqSSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixHQUNuRixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUxRixPQUFPLEVBQUUsR0FBRyxFQUFhLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUs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YyxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUNuQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztTQUMvQjthQUFNO1lBQ0wsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLGlCQUFpQixFQUFFO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDO1NBQ3ZDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUNwQyxNQUFNLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBalpVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLCtKQzFDdkMsb29CQVFlOzs0RkRrQ0YsMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNFLHNCQUFzQixRQUcxQjt3QkFDSixPQUFPLEVBQUUsWUFBWTt3QkFDckIsTUFBTSxFQUFFLFVBQVU7cUJBQ25CLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvcmVuZGVyLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudCwgSWQsIElTaXplIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfWklOREVYLCBESVNQTEFZX0JMT0NLLCBESVNQTEFZX05PTkUsIEhJRERFTl9aSU5ERVgsIFBBUlRfREVGQVVMVF9JVEVNLCBQQVJUX0lURU1fQ09MTEFQU0VELCBQQVJUX0lURU1fRVZFTiwgUEFSVF9JVEVNX05FVyxcclxuICBQQVJUX0lURU1fRk9DVVNFRCwgUEFSVF9JVEVNX09ERCwgUEFSVF9JVEVNX1NFTEVDVEVELCBQQVJUX0lURU1fU05BUFBFRCwgUE9TSVRJT05fQUJTT0xVVEUsIFBPU0lUSU9OX1NUSUNLWSwgUFgsIFNJWkVfMTAwX1BFUlNFTlQsXHJcbiAgU0laRV9BVVRPLCBUUkFOU0xBVEVfM0QsIFZJU0lCSUxJVFlfSElEREVOLCBWSVNJQklMSVRZX1ZJU0lCTEUsIFpFUk9TX1RSQU5TTEFURV8zRCxcclxufSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4uL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzIH0gZnJvbSAnLi4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tICcuLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnRzIH0gZnJvbSAnLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJRGlzcGxheU9iamVjdENvbmZpZywgSURpc3BsYXlPYmplY3RNZWFzdXJlcyB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbmNvbnN0IEFUVFJfQVJFQV9TRUxFQ1RFRCA9ICdhcmVhLXNlbGVjdGVkJywgVEFCSU5ERVggPSAnbmctdmwtaW5kZXgnLCBQT1NJVElPTiA9ICdwb3NpdGlvbicsIFBPU0lUSU9OX1pFUk8gPSAnMCcsIElEID0gJ2l0ZW0taWQnLFxyXG4gIEtFWV9TUEFDRSA9IFwiIFwiLCBLRVlfQVJSX0xFRlQgPSBcIkFycm93TGVmdFwiLCBLRVlfQVJSX1VQID0gXCJBcnJvd1VwXCIsIEtFWV9BUlJfUklHSFQgPSBcIkFycm93UmlnaHRcIiwgS0VZX0FSUl9ET1dOID0gXCJBcnJvd0Rvd25cIixcclxuICBFVkVOVF9GT0NVU19JTiA9ICdmb2N1c2luJywgRVZFTlRfRk9DVVNfT1VUID0gJ2ZvY3Vzb3V0JywgRVZFTlRfS0VZX0RPV04gPSAna2V5ZG93bic7XHJcblxyXG5jb25zdCBnZXRFbGVtZW50QnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIGBbJHtUQUJJTkRFWH09XCIke2luZGV4fVwiXWA7XHJcbn07XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QtaXRlbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdjbGFzcyc6ICduZ3ZsX19pdGVtJyxcclxuICAgICdyb2xlJzogJ2xpc3RpdGVtJyxcclxuICB9LFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgZXh0ZW5kcyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IHtcclxuICBwcml2YXRlIF9pZCE6IG51bWJlcjtcclxuICBnZXQgaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYXJ0ID0gUEFSVF9ERUZBVUxUX0lURU07XHJcbiAgZ2V0IHBhcnQoKSB7IHJldHVybiB0aGlzLl9wYXJ0OyB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SURpc3BsYXlPYmplY3RDb25maWc+KHt9IGFzIElEaXNwbGF5T2JqZWN0Q29uZmlnKTtcclxuICAkY29uZmlnID0gdGhpcy5fJGNvbmZpZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgbWVhc3VyZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaXNwbGF5T2JqZWN0TWVhc3VyZXMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgJGZvY3VzZWQgPSB0aGlzLl8kZm9jdXNlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHBhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oUEFSVF9ERUZBVUxUX0lURU0pO1xyXG4gICRwYXJ0ID0gdGhpcy5fJHBhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHJlZ3VsYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJGRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQ+KHRoaXMuZGF0YSk7XHJcbiAgcHJpdmF0ZSAkZGF0YSA9IHRoaXMuXyRkYXRhLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzZXQgaXRlbSh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFydFN0cih2LCB0aGlzLl9pc1NlbGVjdGVkLCB0aGlzLl9pc0NvbGxhcHNlZCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDb25maWcodik7XHJcblxyXG4gICAgdGhpcy51cGRhdGVNZWFzdXJlcyh2KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuXyRkYXRhLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZ3VsYXJMZW5ndGg6IHN0cmluZyA9IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgc2V0IHJlZ3VsYXJMZW5ndGgodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fcmVndWxhckxlbmd0aCA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVndWxhckxlbmd0aCA9IHY7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW1JZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmlkO1xyXG4gIH1cclxuXHJcbiAgaXRlbVJlbmRlcmVyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBzZXQgcmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbVJlbmRlcmVyID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLml0ZW1SZW5kZXJlciA9IHY7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0SGFuZGxlciA9IChkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpID0+XHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgICAqIEBwYXJhbSBzZWxlY3RlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIHNlbGVjdGlvbi9kZXNlbGVjdGlvbiBpcyBwZXJmb3JtZWQuXHJcbiAgICAgKi9cclxuICAgIChzZWxlY3RlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbihzZWxlY3RlZCwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdChkYXRhLCBzZWxlY3RlZCk7XHJcbiAgICB9O1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZUhhbmRsZXIgPSAoZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkKSA9PlxyXG4gICAgLyoqXHJcbiAgICAqIENvbGxhcHNlIGxpc3QgaXRlbXNcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gICAgKGNvbGxhcHNlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbihjb2xsYXBzZWQsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2UoZGF0YSwgY29sbGFwc2VkKTtcclxuICAgIH07XHJcblxyXG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9ICgpID0+XHJcbiAgICAvKipcclxuICAgICogRm9jdXMgYSBsaXN0IGl0ZW1cclxuICAgICovXHJcbiAgICAoYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUikgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzKGFsaWduKTtcclxuICAgIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF9zZXJ2aWNlOiBOZ1ZpcnR1YWxMaXN0U2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX2lkID0gdGhpcy5fc2VydmljZS5nZW5lcmF0ZUNvbXBvbmVudElkKCk7XHJcblxyXG4gICAgY29uc3QgJGRhdGEgPSB0aGlzLiRkYXRhLFxyXG4gICAgICAkZm9jdXMgPSB0aGlzLiRmb2N1c2VkO1xyXG5cclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgU3RyaW5nKHRoaXMuX2lkKSk7XHJcblxyXG4gICAgJGZvY3VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5hcmVhRm9jdXModiA/IHRoaXMuX2lkIDogdGhpcy5fc2VydmljZS5mb2N1c2VkSWQgPT09IHRoaXMuX2lkID8gbnVsbCA6IHRoaXMuX3NlcnZpY2UuZm9jdXNlZElkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnQsIEVWRU5UX0ZPQ1VTX0lOKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmb2N1c2VkLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLmRhdGEsIHRoaXMuX2lzU2VsZWN0ZWQsIHRoaXMuX2lzQ29sbGFwc2VkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpLFxyXG5cclxuICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgRVZFTlRfRk9DVVNfT1VUKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRmb2N1c2VkLm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVQYXJ0U3RyKHRoaXMuZGF0YSwgdGhpcy5faXNTZWxlY3RlZCwgdGhpcy5faXNDb2xsYXBzZWQpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApLnN1YnNjcmliZSgpLFxyXG5cclxuICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuZWxlbWVudCwgRVZFTlRfS0VZX0RPV04pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChlLmtleSkge1xyXG4gICAgICAgICAgICBjYXNlIEtFWV9TUEFDRToge1xyXG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0KHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZSh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtFWV9BUlJfTEVGVDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuXyRjb25maWcuZ2V0VmFsdWUoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9VUDpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fJGNvbmZpZy5nZXRWYWx1ZSgpLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUHJldigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5fJGNvbmZpZy5nZXRWYWx1ZSgpLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0RPV046XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuXyRjb25maWcuZ2V0VmFsdWUoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGRhdGEsIHRoaXMuX3NlcnZpY2UuJG1ldGhvZE9mU2VsZWN0aW5nLCB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcywgdGhpcy5fc2VydmljZS4kY29sbGFwc2VkSWRzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIG1hcCgoWywgbSwgc2VsZWN0ZWRJZHMsIGNvbGxhcHNlZElkc10pID0+ICh7IG1ldGhvZDogbSwgc2VsZWN0ZWRJZHMsIGNvbGxhcHNlZElkcyB9KSksXHJcbiAgICAgIHRhcCgoeyBtZXRob2QsIHNlbGVjdGVkSWRzLCBjb2xsYXBzZWRJZHMgfSkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBzZWxlY3RlZElkcyBhcyBJZCB8IHVuZGVmaW5lZCwgaXNTZWxlY3RlZCA9IGlkID09PSB0aGlzLml0ZW1JZDtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSX0FSRUFfU0VMRUNURUQsIFN0cmluZyhpc1NlbGVjdGVkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxJZHMgPSBzZWxlY3RlZElkcyBhcyBBcnJheTxJZD4sIGlzU2VsZWN0ZWQgPSB0aGlzLml0ZW1JZCAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbElkcyAmJiBhY3R1YWxJZHMuaW5jbHVkZXModGhpcy5pdGVtSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJfQVJFQV9TRUxFQ1RFRCwgU3RyaW5nKGlzU2VsZWN0ZWQpKTtcclxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSX0FSRUFfU0VMRUNURUQpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWN0dWFsSWRzID0gY29sbGFwc2VkSWRzLCBpc0NvbGxhcHNlZCA9IHRoaXMuaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsSWRzICYmIGFjdHVhbElkcy5pbmNsdWRlcyh0aGlzLml0ZW1JZCk7XHJcbiAgICAgICAgdGhpcy5faXNDb2xsYXBzZWQgPSBpc0NvbGxhcHNlZDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQYXJ0U3RyKHRoaXMuZGF0YSwgdGhpcy5faXNTZWxlY3RlZCwgaXNDb2xsYXBzZWQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1lYXN1cmVzKHRoaXMuZGF0YSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNOZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLmRhdGE/LmNvbmZpZz8udGFiSW5kZXggPz8gMCwgbGVuZ3RoID0gdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uPy5sZW5ndGggPz8gMDtcclxuICAgICAgbGV0IGluZGV4ID0gdGFiSW5kZXg7XHJcbiAgICAgIHdoaWxlIChpbmRleCA8PSBsZW5ndGgpIHtcclxuICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fc2VydmljZS5saXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRFbGVtZW50QnlJbmRleChpbmRleCkpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNQcmV2KCkge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLmRhdGE/LmNvbmZpZz8udGFiSW5kZXggPz8gMDtcclxuICAgICAgbGV0IGluZGV4ID0gdGFiSW5kZXg7XHJcbiAgICAgIHdoaWxlIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgaW5kZXgtLTtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpKTtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXMoZWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzKGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIpIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpKTtcclxuICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgYWxpZ24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1lYXN1cmVzKHY6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5tZWFzdXJlcy5uZXh0KHY/Lm1lYXN1cmVzID8geyAuLi52Lm1lYXN1cmVzIH0gOiB1bmRlZmluZWQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuXyRjb25maWcubmV4dCh7XHJcbiAgICAgIC4uLnY/LmNvbmZpZyB8fCB7fSBhcyBJRGlzcGxheU9iamVjdENvbmZpZywgc2VsZWN0ZWQ6IHRoaXMuX2lzU2VsZWN0ZWQsIGNvbGxhcHNlZDogdGhpcy5faXNDb2xsYXBzZWQsIGZvY3VzZWQ6IHRoaXMuXyRmb2N1c2VkLmdldFZhbHVlKCksXHJcbiAgICAgIGNvbGxhcHNlOiB0aGlzLl9jb2xsYXBzZUhhbmRsZXIodiksIHNlbGVjdDogdGhpcy5fc2VsZWN0SGFuZGxlcih2KSwgZm9jdXM6IHRoaXMuX2ZvY3VzSGFuZGxlcigpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEsIHJlZ3VsYXIgPSB0aGlzLnJlZ3VsYXIsIGxlbmd0aCA9IHRoaXMuX3JlZ3VsYXJMZW5ndGg7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKElELCBgJHtkYXRhLmlkfWApO1xyXG4gICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGU7XHJcbiAgICAgIHN0eWxlcy56SW5kZXggPSBkYXRhLmNvbmZpZy56SW5kZXg7XHJcbiAgICAgIGlmIChkYXRhLmNvbmZpZy5zbmFwcGVkKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBkYXRhLmNvbmZpZy5zdGlja3kgPT09IDEgPyAnMCcgOiBgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogZGF0YS5tZWFzdXJlcy54fWApO1xyXG4gICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBkYXRhLmNvbmZpZy5zdGlja3kgPT09IDEgPyBaRVJPU19UUkFOU0xBVEVfM0QgOiBgJHtUUkFOU0xBVEVfM0R9KCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IDAgOiBkYXRhLm1lYXN1cmVzLnh9JHtQWH0sICR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IDB9JHtQWH0gLCAwKWA7XHJcbiAgICAgICAgaWYgKCFkYXRhLmNvbmZpZy5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHN0eWxlcy5wb3NpdGlvbiA9IFBPU0lUSU9OX1NUSUNLWTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3R5bGVzLnBvc2l0aW9uID0gUE9TSVRJT05fQUJTT0xVVEU7XHJcbiAgICAgICAgaWYgKHJlZ3VsYXIpIHtcclxuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgJzAnKTtcclxuICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBgJHtUUkFOU0xBVEVfM0R9KCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IDAgOiBkYXRhLm1lYXN1cmVzLmRlbHRhfSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLmRlbHRhIDogMH0ke1BYfSAsIDApYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogZGF0YS5tZWFzdXJlcy54fWApO1xyXG4gICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gMCA6IGRhdGEubWVhc3VyZXMueH0ke1BYfSwgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogMH0ke1BYfSAsIDApYDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc3R5bGVzLmhlaWdodCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLmNvbmZpZy5keW5hbWljID8gU0laRV9BVVRPIDogYCR7ZGF0YS5tZWFzdXJlcy5oZWlnaHR9JHtQWH1gIDogcmVndWxhciA/IGxlbmd0aCA6IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgICAgIHN0eWxlcy53aWR0aCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyByZWd1bGFyID8gbGVuZ3RoIDogU0laRV8xMDBfUEVSU0VOVCA6IGRhdGEuY29uZmlnLmR5bmFtaWMgPyBTSVpFX0FVVE8gOiBgJHtkYXRhLm1lYXN1cmVzLndpZHRofSR7UFh9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFydFN0cih2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBpc1NlbGVjdGVkOiBib29sZWFuLCBpc0NvbGxhcHNlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IG9kZCA9IGZhbHNlO1xyXG4gICAgaWYgKHY/LmluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgb2RkID0gdi5pbmRleCAlIDIgPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcnQgPSBQQVJUX0RFRkFVTFRfSVRFTTtcclxuICAgIHBhcnQgKz0gb2RkID8gUEFSVF9JVEVNX09ERCA6IFBBUlRfSVRFTV9FVkVOO1xyXG4gICAgaWYgKHYgPyB2LmNvbmZpZy5zbmFwcGVkIDogZmFsc2UpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fU05BUFBFRDtcclxuICAgIH1cclxuICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX1NFTEVDVEVEO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX0NPTExBUFNFRDtcclxuICAgIH1cclxuICAgIGlmICh2ID8gdi5jb25maWcubmV3IDogZmFsc2UpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fTkVXO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkLmdldFZhbHVlKCkpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fRk9DVVNFRDtcclxuICAgIH1cclxuICAgIHRoaXMuXyRwYXJ0Lm5leHQocGFydCk7XHJcbiAgfVxyXG5cclxuICBnZXRCb3VuZHMoKTogSVNpemUge1xyXG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZTtcclxuICAgIGlmICh0aGlzLnJlZ3VsYXIpIHtcclxuICAgICAgaWYgKHN0eWxlcy5kaXNwbGF5ID09PSBESVNQTEFZX0JMT0NLKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMuZGlzcGxheSA9IERJU1BMQVlfQkxPQ0s7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3R5bGVzLnZpc2liaWxpdHkgPT09IFZJU0lCSUxJVFlfVklTSUJMRSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3R5bGVzLnZpc2liaWxpdHkgPSBWSVNJQklMSVRZX1ZJU0lCTEU7XHJcbiAgICB9XHJcbiAgICBzdHlsZXMuekluZGV4ID0gdGhpcy5kYXRhPy5jb25maWc/LnpJbmRleCA/PyBERUZBVUxUX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGU7XHJcbiAgICBpZiAodGhpcy5yZWd1bGFyKSB7XHJcbiAgICAgIGlmIChzdHlsZXMuZGlzcGxheSA9PT0gRElTUExBWV9OT05FKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMuZGlzcGxheSA9IERJU1BMQVlfTk9ORTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9ISURERU4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gVklTSUJJTElUWV9ISURERU47XHJcbiAgICB9XHJcbiAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBaRVJPU19UUkFOU0xBVEVfM0Q7XHJcbiAgICBzdHlsZXMuekluZGV4ID0gSElEREVOX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tIYW5kbGVyKCkge1xyXG4gICAgdGhpcy5fc2VydmljZS5pdGVtQ2xpY2sodGhpcy5kYXRhKTtcclxuICB9XHJcbn1cclxuXHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XHJcbiAgICA8ZGl2ICNsaXN0SXRlbSBbcGFydF09XCIkcGFydCB8IGFzeW5jXCIgW2F0dHIubmctdmwtaW5kZXhdPVwiZGF0YS5jb25maWcudGFiSW5kZXggfHwgLTFcIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cIm5ndmwtaXRlbV9fY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydzbmFwcGVkJzogZGF0YS5jb25maWcuc25hcHBlZCxcclxuICAgICAgICAnc25hcHBlZC1vdXQnOiBkYXRhLmNvbmZpZy5zbmFwcGVkT3V0LCAnZm9jdXMnOiAkZm9jdXNlZCB8IGFzeW5jfVwiIChjbGljayk9XCJvbkNsaWNrSGFuZGxlcigpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1SZW5kZXJlclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1SZW5kZXJlclwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6IGRhdGEuZGF0YSB8fCB7fSwgbWVhc3VyZXM6IG1lYXN1cmVzIHwgYXN5bmMsIGNvbmZpZzogJGNvbmZpZyB8IGFzeW5jfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -16,6 +16,7 @@ export const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;
16
16
  export const MAX_SCROLL_TO_ITERATIONS = 5;
17
17
  export const DEFAULT_SNAPPING_METHOD = SnappingMethods.NORMAL;
18
18
  export const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;
19
+ export const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';
19
20
  // presets
20
21
  export const BEHAVIOR_AUTO = 'auto';
21
22
  export const BEHAVIOR_INSTANT = 'instant';
@@ -54,4 +55,4 @@ export const PART_ITEM_SNAPPED = ' item-snapped';
54
55
  export const PART_ITEM_SELECTED = ' item-selected';
55
56
  export const PART_ITEM_COLLAPSED = ' item-collapsed';
56
57
  export const PART_ITEM_FOCUSED = ' item-focused';
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb25zdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsQ0FBQyxDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztBQUU5RCxVQUFVO0FBRVYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUU3QixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFFaEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFlBQVksU0FBUyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFFbEQsU0FBUztBQUVULE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGVzLCBNZXRob2RzRm9yU2VsZWN0aW5nLCBTbmFwcGluZ01ldGhvZHMgfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9ucyB9IGZyb20gXCIuLi9lbnVtcy9kaXJlY3Rpb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9JVEVNX1NJWkUgPSAyNDtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVRkZFUl9TSVpFID0gMjtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9CVUZGRVJfU0laRSA9IDEwO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElTVF9TSVpFID0gNDAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU05BUCA9IGZhbHNlO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiA9IGZhbHNlO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFlOQU1JQ19TSVpFID0gZmFsc2U7XHJcblxyXG5leHBvcnQgY29uc3QgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSA9ICdpZCc7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9ESVJFQ1RJT04gPSBEaXJlY3Rpb25zLlZFUlRJQ0FMO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFID0gQ29sbGVjdGlvbk1vZGVzLk5PUk1BTDtcclxuXHJcbmV4cG9ydCBjb25zdCBESVNQTEFZX09CSkVDVFNfTEVOR1RIX01FU1VSRU1FTlRfRVJST1IgPSAxO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUyA9IDU7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TTkFQUElOR19NRVRIT0QgPSBTbmFwcGluZ01ldGhvZHMuTk9STUFMO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VMRUNUX01FVEhPRCA9IE1ldGhvZHNGb3JTZWxlY3RpbmcuTk9ORTtcclxuXHJcbi8vIHByZXNldHNcclxuXHJcbmV4cG9ydCBjb25zdCBCRUhBVklPUl9BVVRPID0gJ2F1dG8nO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJFSEFWSU9SX0lOU1RBTlQgPSAnaW5zdGFudCc7XHJcblxyXG5leHBvcnQgY29uc3QgQkVIQVZJT1JfU01PT1RIID0gJ3Ntb290aCc7XHJcblxyXG5leHBvcnQgY29uc3QgRElTUExBWV9CTE9DSyA9ICdibG9jayc7XHJcblxyXG5leHBvcnQgY29uc3QgRElTUExBWV9OT05FID0gJ25vbmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QQUNJVFlfMCA9ICcwJztcclxuXHJcbmV4cG9ydCBjb25zdCBPUEFDSVRZXzEwMCA9ICcxMDAnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFZJU0lCSUxJVFlfVklTSUJMRSA9ICd2aXNpYmxlJztcclxuXHJcbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0hJRERFTiA9ICdoaWRkZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNJWkVfMTAwX1BFUlNFTlQgPSAnMTAwJSc7XHJcblxyXG5leHBvcnQgY29uc3QgU0laRV9BVVRPID0gJ2F1dG8nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0FCU09MVVRFID0gJ2Fic29sdXRlJztcclxuXHJcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9TVElDS1kgPSAnc3RpY2t5JztcclxuXHJcbmV4cG9ydCBjb25zdCBUUkFOU0xBVEVfM0QgPSAndHJhbnNsYXRlM2QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFpFUk9TX1RSQU5TTEFURV8zRCA9IGAke1RSQU5TTEFURV8zRH0oMCwwLDApYDtcclxuXHJcbmV4cG9ydCBjb25zdCBISURERU5fWklOREVYID0gJy0xJztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1pJTkRFWCA9ICcwJztcclxuXHJcbmV4cG9ydCBjb25zdCBUT1BfUFJPUF9OQU1FID0gJ3RvcCc7XHJcblxyXG5leHBvcnQgY29uc3QgTEVGVF9QUk9QX05BTUUgPSAnbGVmdCc7XHJcblxyXG5leHBvcnQgY29uc3QgWF9QUk9QX05BTUUgPSAneCc7XHJcblxyXG5leHBvcnQgY29uc3QgWV9QUk9QX05BTUUgPSAneSc7XHJcblxyXG5leHBvcnQgY29uc3QgV0lEVEhfUFJPUF9OQU1FID0gJ3dpZHRoJztcclxuXHJcbmV4cG9ydCBjb25zdCBIRUlHSFRfUFJPUF9OQU1FID0gJ2hlaWdodCc7XHJcblxyXG5leHBvcnQgY29uc3QgUFggPSAncHgnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTCA9ICdzY3JvbGwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FTkQgPSAnc2Nyb2xsZW5kJztcclxuXHJcbmV4cG9ydCBjb25zdCBDTEFTU19MSVNUX1ZFUlRJQ0FMID0gJ3ZlcnRpY2FsJztcclxuXHJcbmV4cG9ydCBjb25zdCBDTEFTU19MSVNUX0hPUklaT05UQUwgPSAnaG9yaXpvbnRhbCc7XHJcblxyXG4vLyBzdHlsZXNcclxuXHJcbmV4cG9ydCBjb25zdCBQQVJUX0RFRkFVTFRfSVRFTSA9ICdpdGVtJztcclxuXHJcbmV4cG9ydCBjb25zdCBQQVJUX0lURU1fTkVXID0gJyBpdGVtLW5ldyc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSVF9JVEVNX09ERCA9ICcgaXRlbS1vZGQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9FVkVOID0gJyBpdGVtLWV2ZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9TTkFQUEVEID0gJyBpdGVtLXNuYXBwZWQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9TRUxFQ1RFRCA9ICcgaXRlbS1zZWxlY3RlZCc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSVF9JVEVNX0NPTExBUFNFRCA9ICcgaXRlbS1jb2xsYXBzZWQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9GT0NVU0VEID0gJyBpdGVtLWZvY3VzZWQnO1xyXG5cclxuIl19
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb25zdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsQ0FBQyxDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyx3QkFBd0IsQ0FBQztBQUV0RSxVQUFVO0FBRVYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUU3QixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFFaEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFlBQVksU0FBUyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFFbEQsU0FBUztBQUVULE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGVzLCBNZXRob2RzRm9yU2VsZWN0aW5nLCBTbmFwcGluZ01ldGhvZHMgfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9ucyB9IGZyb20gXCIuLi9lbnVtcy9kaXJlY3Rpb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9JVEVNX1NJWkUgPSAyNDtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVRkZFUl9TSVpFID0gMjtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9CVUZGRVJfU0laRSA9IDEwO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElTVF9TSVpFID0gNDAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU05BUCA9IGZhbHNlO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiA9IGZhbHNlO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFlOQU1JQ19TSVpFID0gZmFsc2U7XHJcblxyXG5leHBvcnQgY29uc3QgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSA9ICdpZCc7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9ESVJFQ1RJT04gPSBEaXJlY3Rpb25zLlZFUlRJQ0FMO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFID0gQ29sbGVjdGlvbk1vZGVzLk5PUk1BTDtcclxuXHJcbmV4cG9ydCBjb25zdCBESVNQTEFZX09CSkVDVFNfTEVOR1RIX01FU1VSRU1FTlRfRVJST1IgPSAxO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUyA9IDU7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TTkFQUElOR19NRVRIT0QgPSBTbmFwcGluZ01ldGhvZHMuTk9STUFMO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VMRUNUX01FVEhPRCA9IE1ldGhvZHNGb3JTZWxlY3RpbmcuTk9ORTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSA9ICdTaG93aW5nIGl0ZW1zICQxIHRvICQyJztcclxuXHJcbi8vIHByZXNldHNcclxuXHJcbmV4cG9ydCBjb25zdCBCRUhBVklPUl9BVVRPID0gJ2F1dG8nO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJFSEFWSU9SX0lOU1RBTlQgPSAnaW5zdGFudCc7XHJcblxyXG5leHBvcnQgY29uc3QgQkVIQVZJT1JfU01PT1RIID0gJ3Ntb290aCc7XHJcblxyXG5leHBvcnQgY29uc3QgRElTUExBWV9CTE9DSyA9ICdibG9jayc7XHJcblxyXG5leHBvcnQgY29uc3QgRElTUExBWV9OT05FID0gJ25vbmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QQUNJVFlfMCA9ICcwJztcclxuXHJcbmV4cG9ydCBjb25zdCBPUEFDSVRZXzEwMCA9ICcxMDAnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFZJU0lCSUxJVFlfVklTSUJMRSA9ICd2aXNpYmxlJztcclxuXHJcbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0hJRERFTiA9ICdoaWRkZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNJWkVfMTAwX1BFUlNFTlQgPSAnMTAwJSc7XHJcblxyXG5leHBvcnQgY29uc3QgU0laRV9BVVRPID0gJ2F1dG8nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0FCU09MVVRFID0gJ2Fic29sdXRlJztcclxuXHJcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9TVElDS1kgPSAnc3RpY2t5JztcclxuXHJcbmV4cG9ydCBjb25zdCBUUkFOU0xBVEVfM0QgPSAndHJhbnNsYXRlM2QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFpFUk9TX1RSQU5TTEFURV8zRCA9IGAke1RSQU5TTEFURV8zRH0oMCwwLDApYDtcclxuXHJcbmV4cG9ydCBjb25zdCBISURERU5fWklOREVYID0gJy0xJztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1pJTkRFWCA9ICcwJztcclxuXHJcbmV4cG9ydCBjb25zdCBUT1BfUFJPUF9OQU1FID0gJ3RvcCc7XHJcblxyXG5leHBvcnQgY29uc3QgTEVGVF9QUk9QX05BTUUgPSAnbGVmdCc7XHJcblxyXG5leHBvcnQgY29uc3QgWF9QUk9QX05BTUUgPSAneCc7XHJcblxyXG5leHBvcnQgY29uc3QgWV9QUk9QX05BTUUgPSAneSc7XHJcblxyXG5leHBvcnQgY29uc3QgV0lEVEhfUFJPUF9OQU1FID0gJ3dpZHRoJztcclxuXHJcbmV4cG9ydCBjb25zdCBIRUlHSFRfUFJPUF9OQU1FID0gJ2hlaWdodCc7XHJcblxyXG5leHBvcnQgY29uc3QgUFggPSAncHgnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTCA9ICdzY3JvbGwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FTkQgPSAnc2Nyb2xsZW5kJztcclxuXHJcbmV4cG9ydCBjb25zdCBDTEFTU19MSVNUX1ZFUlRJQ0FMID0gJ3ZlcnRpY2FsJztcclxuXHJcbmV4cG9ydCBjb25zdCBDTEFTU19MSVNUX0hPUklaT05UQUwgPSAnaG9yaXpvbnRhbCc7XHJcblxyXG4vLyBzdHlsZXNcclxuXHJcbmV4cG9ydCBjb25zdCBQQVJUX0RFRkFVTFRfSVRFTSA9ICdpdGVtJztcclxuXHJcbmV4cG9ydCBjb25zdCBQQVJUX0lURU1fTkVXID0gJyBpdGVtLW5ldyc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSVF9JVEVNX09ERCA9ICcgaXRlbS1vZGQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9FVkVOID0gJyBpdGVtLWV2ZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9TTkFQUEVEID0gJyBpdGVtLXNuYXBwZWQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9TRUxFQ1RFRCA9ICcgaXRlbS1zZWxlY3RlZCc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSVF9JVEVNX0NPTExBUFNFRCA9ICcgaXRlbS1jb2xsYXBzZWQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUlRfSVRFTV9GT0NVU0VEID0gJyBpdGVtLWZvY3VzZWQnO1xyXG5cclxuIl19
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Focus Alignments.
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts
4
+ * @author Evgenii Grebennikov
5
+ * @email djonnyx@gmail.com
6
+ */
7
+ export var FocusAlignments;
8
+ (function (FocusAlignments) {
9
+ FocusAlignments["NONE"] = "none";
10
+ FocusAlignments["START"] = "start";
11
+ FocusAlignments["CENTER"] = "center";
12
+ FocusAlignments["END"] = "end";
13
+ })(FocusAlignments || (FocusAlignments = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtYWxpZ25tZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2VudW1zL2ZvY3VzLWFsaWdubWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsOEJBQVcsQ0FBQTtBQUNmLENBQUMsRUFMVyxlQUFlLEtBQWYsZUFBZSxRQUsxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBGb2N1cyBBbGlnbm1lbnRzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2VudW1zL2ZvY3VzLWFsaWdubWVudHMudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGVudW0gRm9jdXNBbGlnbm1lbnRzIHtcclxuICAgIE5PTkUgPSAnbm9uZScsXHJcbiAgICBTVEFSVCA9ICdzdGFydCcsXHJcbiAgICBDRU5URVIgPSAnY2VudGVyJyxcclxuICAgIEVORCA9ICdlbmQnLFxyXG59Il19
@@ -2,5 +2,6 @@ import { CollectionModes } from "./collection-modes";
2
2
  import { Directions } from "./directions";
3
3
  import { MethodsForSelecting } from "./methods-for-selecting";
4
4
  import { SnappingMethods } from "./snapping-methods";
5
- export { CollectionModes, Directions, MethodsForSelecting, SnappingMethods, };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGVBQWUsR0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb25Nb2RlIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1tb2RlXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25Nb2RlcyB9IGZyb20gXCIuL2NvbGxlY3Rpb24tbW9kZXNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9ucyB9IGZyb20gXCIuL2RpcmVjdGlvbnNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSBcIi4vZGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmcgfSBmcm9tIFwiLi9tZXRob2RzLWZvci1zZWxlY3RpbmdcIjtcclxuaW1wb3J0IHsgTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSBcIi4vbWV0aG9kLWZvci1zZWxlY3RpbmdcIjtcclxuaW1wb3J0IHsgU25hcHBpbmdNZXRob2RzIH0gZnJvbSBcIi4vc25hcHBpbmctbWV0aG9kc1wiO1xyXG5pbXBvcnQgeyBTbmFwcGluZ01ldGhvZCB9IGZyb20gXCIuL3NuYXBwaW5nLW1ldGhvZFwiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIENvbGxlY3Rpb25Nb2RlcyxcclxuICAgIERpcmVjdGlvbnMsXHJcbiAgICBNZXRob2RzRm9yU2VsZWN0aW5nLFxyXG4gICAgU25hcHBpbmdNZXRob2RzLFxyXG59O1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBDb2xsZWN0aW9uTW9kZSxcclxuICAgIERpcmVjdGlvbixcclxuICAgIE1ldGhvZEZvclNlbGVjdGluZyxcclxuICAgIFNuYXBwaW5nTWV0aG9kLFxyXG59O1xyXG4iXX0=
5
+ import { FocusAlignments } from "./focus-alignments";
6
+ export { CollectionModes, Directions, MethodsForSelecting, SnappingMethods, FocusAlignments, };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFDSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsZUFBZSxHQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGUgfSBmcm9tIFwiLi9jb2xsZWN0aW9uLW1vZGVcIjtcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGVzIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1tb2Rlc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25zIH0gZnJvbSBcIi4vZGlyZWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi9kaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZyB9IGZyb20gXCIuL21ldGhvZHMtZm9yLXNlbGVjdGluZ1wiO1xyXG5pbXBvcnQgeyBNZXRob2RGb3JTZWxlY3RpbmcgfSBmcm9tIFwiLi9tZXRob2QtZm9yLXNlbGVjdGluZ1wiO1xyXG5pbXBvcnQgeyBTbmFwcGluZ01ldGhvZHMgfSBmcm9tIFwiLi9zbmFwcGluZy1tZXRob2RzXCI7XHJcbmltcG9ydCB7IFNuYXBwaW5nTWV0aG9kIH0gZnJvbSBcIi4vc25hcHBpbmctbWV0aG9kXCI7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cyB9IGZyb20gXCIuL2ZvY3VzLWFsaWdubWVudHNcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBDb2xsZWN0aW9uTW9kZXMsXHJcbiAgICBEaXJlY3Rpb25zLFxyXG4gICAgTWV0aG9kc0ZvclNlbGVjdGluZyxcclxuICAgIFNuYXBwaW5nTWV0aG9kcyxcclxuICAgIEZvY3VzQWxpZ25tZW50cyxcclxufTtcclxuZXhwb3J0IHR5cGUge1xyXG4gICAgQ29sbGVjdGlvbk1vZGUsXHJcbiAgICBEaXJlY3Rpb24sXHJcbiAgICBNZXRob2RGb3JTZWxlY3RpbmcsXHJcbiAgICBTbmFwcGluZ01ldGhvZCxcclxufTtcclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3QtY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbW9kZWxzL2Rpc3BsYXktb2JqZWN0LWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyB9IGZyb20gXCIuL3JlbmRlci1pdGVtLWNvbmZpZy5tb2RlbFwiO1xyXG5cclxuLyoqXHJcbiAqIERpc3BsYXkgb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEEgc2V0IG9mIGBzZWxlY3RgLCBgY29sbGFwc2VgLCBhbmQgYGZvY3VzYCBtZXRob2RzIGFyZSBhbHNvIHByb3ZpZGVkLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL21vZGVscy9kaXNwbGF5LW9iamVjdC1jb25maWcubW9kZWwudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGlzcGxheU9iamVjdENvbmZpZyBleHRlbmRzIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcge1xyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgZm9jdXNlZCBvciBub3QuXHJcbiAgICovXHJcbiAgZm9jdXNlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIGNvbGxhcHNlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgICogRm9jdXMgYSBsaXN0IGl0ZW1cclxuICAgICovXHJcbiAgZm9jdXM6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgc2VsZWN0OiAoc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIENvbGxhcHNlIGxpc3QgaXRlbXNcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlOiAoY29sbGFwc2VkOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZWN0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcblxyXG4vKipcclxuICogRGlzcGxheSBvYmplY3QgbWV0cmljcy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGlzcGxheU9iamVjdE1lYXN1cmVzIGV4dGVuZHMgSVJlY3Qge1xyXG4gIC8qKlxyXG4gICAqIERlbHRhIGlzIGNhbGN1bGF0ZWQgZm9yIFNuYXBwaW5nIE1ldGhvZC5BRFZBTkNFRFxyXG4gICAqL1xyXG4gIGRlbHRhOiBudW1iZXI7XHJcbn0iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vc2Nyb2xsLWRpcmVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCB9IGZyb20gJy4vc2Nyb2xsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4vaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL2l0ZW0tY29uZmlnLW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9yZW5kZXItaXRlbS5tb2RlbCc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBTY3JvbGxEaXJlY3Rpb24sXHJcbiAgICBJU2Nyb2xsRXZlbnQsXHJcbiAgICBJVmlydHVhbExpc3RJdGVtLFxyXG4gICAgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sXHJcbiAgICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLFxyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vc2Nyb2xsLWRpcmVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCB9IGZyb20gJy4vc2Nyb2xsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4vaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL2l0ZW0tY29uZmlnLW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9yZW5kZXItaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElEaXNwbGF5T2JqZWN0Q29uZmlnIH0gZnJvbSAnLi9kaXNwbGF5LW9iamVjdC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBJRGlzcGxheU9iamVjdE1lYXN1cmVzIH0gZnJvbSAnLi9kaXNwbGF5LW9iamVjdC1tZWFzdXJlcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBJRGlzcGxheU9iamVjdENvbmZpZyxcclxuICAgIElEaXNwbGF5T2JqZWN0TWVhc3VyZXMsXHJcbiAgICBJU2Nyb2xsRXZlbnQsXHJcbiAgICBJVmlydHVhbExpc3RJdGVtLFxyXG4gICAgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sXHJcbiAgICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLFxyXG4gICAgU2Nyb2xsRGlyZWN0aW9uLFxyXG59XHJcbiJdfQ==