ng-virtual-list 16.12.4 → 16.12.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
  2. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +1 -4
  3. package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +3 -1
  4. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +5 -15
  5. package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +16 -2
  6. package/esm2022/lib/components/ng-scroll-view/const/index.mjs +2 -2
  7. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +123 -33
  8. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +15 -12
  9. package/esm2022/lib/core/interfaces/metrics.mjs +1 -1
  10. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
  11. package/esm2022/lib/core/track-box.mjs +16 -8
  12. package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +6 -6
  13. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  14. package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
  15. package/esm2022/lib/ng-virtual-list.component.mjs +90 -86
  16. package/esm2022/lib/utils/animator/animator.mjs +12 -6
  17. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
  18. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
  19. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  20. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
  21. package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
  22. package/fesm2022/ng-virtual-list.mjs +279 -162
  23. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  24. package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +0 -3
  25. package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +1 -6
  26. package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +7 -1
  27. package/lib/components/ng-scroll-view/const/index.d.ts +1 -1
  28. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +12 -1
  29. package/lib/components/ng-scroller/ng-scroller.component.d.ts +1 -3
  30. package/lib/core/interfaces/metrics.d.ts +2 -0
  31. package/lib/core/interfaces/recalculate-metrics-options.d.ts +1 -0
  32. package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +2 -2
  33. package/lib/models/render-item-config.model.d.ts +4 -0
  34. package/lib/models/render-item-measures.model.d.ts +4 -0
  35. package/lib/ng-virtual-list.component.d.ts +0 -1
  36. package/lib/utils/animator/animator.d.ts +1 -1
  37. package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
  38. package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
  39. package/lib/utils/animator/types/easing.d.ts +1 -1
  40. package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
  41. package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
  42. package/package.json +1 -1
@@ -1,9 +1,8 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, of, Subject, takeUntil, tap } from 'rxjs';
2
+ import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';
3
3
  import { ScrollBox } from './utils';
4
4
  import { NgScrollBarComponent } from "../ng-scroll-bar/ng-scroll-bar.component";
5
5
  import { BEHAVIOR_INSTANT, DEFAULT_MAX_MOTION_BLUR, DEFAULT_MOTION_BLUR, DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME, PX, SCROLLER_SCROLL, TOP_PROP_NAME, } from '../../const';
6
- import { TextDirections } from '../../enums';
7
6
  import { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';
8
7
  import { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../ng-scroll-view/const';
9
8
  import * as i0 from "@angular/core";
@@ -155,8 +154,6 @@ export class NgScrollerComponent extends NgScrollView {
155
154
  $show = this._$show.asObservable();
156
155
  _$preparedSignal = new BehaviorSubject(false);
157
156
  $preparedSignal = this._$preparedSignal.asObservable();
158
- _$langTextDir = new BehaviorSubject(TextDirections.LTR);
159
- $langTextDir = this._$langTextDir.asObservable();
160
157
  _$listStyles = new BehaviorSubject({ perspectiveOrigin: 'center' });
161
158
  $listStyles = this._$listStyles.asObservable();
162
159
  _scrollBox = new ScrollBox();
@@ -231,6 +228,13 @@ export class NgScrollerComponent extends NgScrollView {
231
228
  }
232
229
  ngAfterViewInit() {
233
230
  super.ngAfterViewInit();
231
+ this.$resizeViewport.pipe(takeUntil(this._$unsubscribe), debounceTime(0), tap(() => {
232
+ this.snapIfNeed();
233
+ }), switchMap(() => {
234
+ return this.$scroll.pipe(takeUntil(this._$unsubscribe), take(1), tap(() => {
235
+ this.snapIfNeed();
236
+ }));
237
+ })).subscribe();
234
238
  const $filter = of(this.filter), $motionBlur = this.$motionBlur, $maxMotionBlur = this.$maxMotionBlur, $motionBlurEnabled = this.$motionBlurEnabled, $isVertical = this.$isVertical;
235
239
  const $scrollbarScroll = this.$scrollbarScroll;
236
240
  $scrollbarScroll.pipe(takeUntil(this._$unsubscribe), debounceTime(50), tap(() => {
@@ -244,9 +248,6 @@ export class NgScrollerComponent extends NgScrollView {
244
248
  }), debounceTime(50), tap(([, , filter, ,]) => {
245
249
  filter.nativeElement.setStdDeviation(0, 0);
246
250
  })).subscribe();
247
- this._service.$langTextDir.pipe(takeUntil(this._$unsubscribe), debounceTime(0), tap(v => {
248
- this._$langTextDir.next(v);
249
- })).subscribe();
250
251
  const $prepare = this.$preparedSignal;
251
252
  $prepare.pipe(takeUntil(this._$unsubscribe), filter(v => !!v), tap(() => {
252
253
  this.updateScrollBarHandler(true, false, true);
@@ -286,9 +287,9 @@ export class NgScrollerComponent extends NgScrollView {
286
287
  this._$viewInitialized.next(true);
287
288
  }
288
289
  recalculatePerspective() {
289
- const isVertical = this._$isVertical.getValue(), scrollSize = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset, { width, height } = this._$viewportBounds.getValue();
290
+ const isVertical = this._$isVertical.getValue(), inverted = this.horizontalAxisInvertion, scrollSize = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset, maxScrollSize = isVertical ? this.scrollHeight : this.scrollWidth, { width, height } = this._$viewportBounds.getValue();
290
291
  this._$listStyles.next({
291
- perspectiveOrigin: `${isVertical ? width * .5 : (scrollSize + width * .5)}${PX} ${isVertical ? (scrollSize + height * .5) : height * .5}${PX}`
292
+ perspectiveOrigin: `${isVertical ? width * .5 : (inverted ? ((maxScrollSize - scrollSize) + width * .5 - this.startOffset) : (scrollSize + width * .5))}${PX} ${isVertical ? (inverted ? ((maxScrollSize - scrollSize) + height * .5) : (scrollSize + height * .5)) : height * .5}${PX}`
292
293
  });
293
294
  }
294
295
  onResizeViewport() {
@@ -301,6 +302,7 @@ export class NgScrollerComponent extends NgScrollView {
301
302
  this._$viewportBounds.next(bounds);
302
303
  this.updateScrollBar();
303
304
  this._$resizeViewport.next(bounds);
305
+ this.recalculatePerspective();
304
306
  }
305
307
  }
306
308
  onResizeContent(value = null) {
@@ -316,6 +318,7 @@ export class NgScrollerComponent extends NgScrollView {
316
318
  this._$contentBounds.next(bounds);
317
319
  this.updateScrollBar();
318
320
  this._$resizeContent.next(bounds);
321
+ this.recalculatePerspective();
319
322
  }
320
323
  }
321
324
  updateScrollBarHandler(update = false, blending = true, fireUpdate = false) {
@@ -480,7 +483,7 @@ export class NgScrollerComponent extends NgScrollView {
480
483
  { provide: SCROLL_VIEW_INVERSION, useValue: false },
481
484
  { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },
482
485
  { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: true },
483
- ], viewQueries: [{ propertyName: "scrollBar", first: true, predicate: ["scrollBar"], descendants: true, read: NgScrollBarComponent }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"($motionBlurEnabled | async)!\" [style.filter]=\"($motionBlurEnabled | async)! ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\" [ngStyle]=\"($listStyles | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\" [renderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [thickness]=\"($scrollbarThickness | async)!\" [params]=\"($scrollbarThumbParams | async)!\" [loading]=\"($loading | async)!\" [overlapping]=\"($overlappingScrollbar | async)!\"\r\n [thumbGradientPositions]=\"($thumbColorPositions | async)!\" [prepared]=\"($preparedSignal | async)!\" [interactive]=\"($scrollbarInteractive | async)!\"\r\n [show]=\"($show | async)!\" [startOffset]=\"($startOffset | async)!\" [langTextDir]=\"($langTextDir | async)!\"\r\n [endOffset]=\"($endOffset | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>", styles: [":host{position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.ngvl__container{position:relative;overflow:hidden;display:grid;width:100%;height:100%;cursor:grab}.ngvl__container.overlapping{position:relative;display:block}.ngvl__container.grabbing{cursor:grabbing}.ngvl__container.horizontal{transition:grid-template-rows .1s ease-out}.ngvl__container.horizontal:not(.overlapping){grid-template-rows:1fr 0}.ngvl__container.horizontal.scrollable.enabled:not(.overlapping){grid-template-rows:1fr auto}.ngvl__container.horizontal .ngvl__list{display:inline-flex}.ngvl__container.horizontal .ngvl__scroller-wrapper.filtered,.ngvl__container.horizontal .ngvl__scroller{overflow:unset}.ngvl__container.vertical{transition:grid-template-columns .1s ease-out}.ngvl__container.vertical:not(.overlapping){grid-template-columns:1fr 0}.ngvl__container.vertical.scrollable.enabled:not(.overlapping){grid-template-columns:1fr auto}.ngvl__container.vertical .ngvl__scroller-wrapper.filtered,.ngvl__container.vertical .ngvl__scroller{overflow:unset}.ngvl__container .ngvl__scroller-wrapper,.ngvl__container .ngvl__scroller{display:block;position:relative;overflow:hidden;width:100%;height:100%}.ngvl__container .ngvl__list{position:absolute;list-style:none;padding:0;margin:0;width:100%;height:100%;opacity:0}.ngvl__container .ngvl__list.prepared{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.NgScrollBarComponent, selector: "ng-scroll-bar", inputs: ["loading", "thumbGradientPositions", "size", "thickness", "scrollbarMinSize", "prepared", "langTextDir", "interactive", "overlapping", "show", "params", "renderer"], outputs: ["onDrag", "onDragEnd"] }, { kind: "directive", type: i3.LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
486
+ ], viewQueries: [{ propertyName: "scrollBar", first: true, predicate: ["scrollBar"], descendants: true, read: NgScrollBarComponent }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"($motionBlurEnabled | async)!\"\r\n [style.filter]=\"($motionBlurEnabled | async)! ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\"\r\n class=\"ngvl__list\" [ngClass]=\"($actualClasses | async)!\" [ngStyle]=\"($listStyles | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\"\r\n [langTextDir]=\"($langTextDir | async)!\" [renderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [thickness]=\"($scrollbarThickness | async)!\" [params]=\"($scrollbarThumbParams | async)!\"\r\n [loading]=\"($loading | async)!\" [overlapping]=\"($overlappingScrollbar | async)!\"\r\n [thumbGradientPositions]=\"($thumbColorPositions | async)!\" [prepared]=\"($preparedSignal | async)!\"\r\n [interactive]=\"($scrollbarInteractive | async)!\" [show]=\"($show | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [langTextDir]=\"($langTextDir | async)!\"\r\n [endOffset]=\"($endOffset | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [scrollBehavior]=\"($scrollBehavior | async)!\" [scrollbarMinSize]=\"($scrollbarMinSize | async)!\"\r\n (onDrag)=\"onScrollBarDragHandler($event)\" (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>", styles: [":host{position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.ngvl__container{position:relative;overflow:hidden;display:grid;width:100%;height:100%;cursor:grab}.ngvl__container.overlapping{position:relative;display:block}.ngvl__container.grabbing{cursor:grabbing}.ngvl__container.horizontal{transition:grid-template-rows .1s ease-out}.ngvl__container.horizontal:not(.overlapping){grid-template-rows:1fr 0}.ngvl__container.horizontal.scrollable.enabled:not(.overlapping){grid-template-rows:1fr auto}.ngvl__container.horizontal .ngvl__list{display:inline-flex}.ngvl__container.horizontal .ngvl__scroller-wrapper.filtered,.ngvl__container.horizontal .ngvl__scroller{overflow:unset}.ngvl__container.vertical{transition:grid-template-columns .1s ease-out}.ngvl__container.vertical:not(.overlapping){grid-template-columns:1fr 0}.ngvl__container.vertical.scrollable.enabled:not(.overlapping){grid-template-columns:1fr auto}.ngvl__container.vertical .ngvl__scroller-wrapper.filtered,.ngvl__container.vertical .ngvl__scroller{overflow:unset}.ngvl__container .ngvl__scroller-wrapper,.ngvl__container .ngvl__scroller{display:block;position:relative;overflow:hidden;width:100%;height:100%}.ngvl__container .ngvl__list{position:absolute;list-style:none;padding:0;margin:0;width:100%;height:100%;opacity:0}.ngvl__container .ngvl__list.prepared{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.NgScrollBarComponent, selector: "ng-scroll-bar", inputs: ["loading", "thumbGradientPositions", "size", "thickness", "scrollbarMinSize", "prepared", "interactive", "overlapping", "show", "params", "renderer"], outputs: ["onDrag", "onDragEnd"] }, { kind: "directive", type: i3.LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
484
487
  }
485
488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgScrollerComponent, decorators: [{
486
489
  type: Component,
@@ -488,7 +491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
488
491
  { provide: SCROLL_VIEW_INVERSION, useValue: false },
489
492
  { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },
490
493
  { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: true },
491
- ], standalone: false, template: "<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"($motionBlurEnabled | async)!\" [style.filter]=\"($motionBlurEnabled | async)! ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\" [ngStyle]=\"($listStyles | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\" [renderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [thickness]=\"($scrollbarThickness | async)!\" [params]=\"($scrollbarThumbParams | async)!\" [loading]=\"($loading | async)!\" [overlapping]=\"($overlappingScrollbar | async)!\"\r\n [thumbGradientPositions]=\"($thumbColorPositions | async)!\" [prepared]=\"($preparedSignal | async)!\" [interactive]=\"($scrollbarInteractive | async)!\"\r\n [show]=\"($show | async)!\" [startOffset]=\"($startOffset | async)!\" [langTextDir]=\"($langTextDir | async)!\"\r\n [endOffset]=\"($endOffset | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>", styles: [":host{position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.ngvl__container{position:relative;overflow:hidden;display:grid;width:100%;height:100%;cursor:grab}.ngvl__container.overlapping{position:relative;display:block}.ngvl__container.grabbing{cursor:grabbing}.ngvl__container.horizontal{transition:grid-template-rows .1s ease-out}.ngvl__container.horizontal:not(.overlapping){grid-template-rows:1fr 0}.ngvl__container.horizontal.scrollable.enabled:not(.overlapping){grid-template-rows:1fr auto}.ngvl__container.horizontal .ngvl__list{display:inline-flex}.ngvl__container.horizontal .ngvl__scroller-wrapper.filtered,.ngvl__container.horizontal .ngvl__scroller{overflow:unset}.ngvl__container.vertical{transition:grid-template-columns .1s ease-out}.ngvl__container.vertical:not(.overlapping){grid-template-columns:1fr 0}.ngvl__container.vertical.scrollable.enabled:not(.overlapping){grid-template-columns:1fr auto}.ngvl__container.vertical .ngvl__scroller-wrapper.filtered,.ngvl__container.vertical .ngvl__scroller{overflow:unset}.ngvl__container .ngvl__scroller-wrapper,.ngvl__container .ngvl__scroller{display:block;position:relative;overflow:hidden;width:100%;height:100%}.ngvl__container .ngvl__list{position:absolute;list-style:none;padding:0;margin:0;width:100%;height:100%;opacity:0}.ngvl__container .ngvl__list.prepared{opacity:1}\n"] }]
494
+ ], standalone: false, template: "<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"($motionBlurEnabled | async)!\"\r\n [style.filter]=\"($motionBlurEnabled | async)! ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\"\r\n class=\"ngvl__list\" [ngClass]=\"($actualClasses | async)!\" [ngStyle]=\"($listStyles | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\"\r\n [langTextDir]=\"($langTextDir | async)!\" [renderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [thickness]=\"($scrollbarThickness | async)!\" [params]=\"($scrollbarThumbParams | async)!\"\r\n [loading]=\"($loading | async)!\" [overlapping]=\"($overlappingScrollbar | async)!\"\r\n [thumbGradientPositions]=\"($thumbColorPositions | async)!\" [prepared]=\"($preparedSignal | async)!\"\r\n [interactive]=\"($scrollbarInteractive | async)!\" [show]=\"($show | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [langTextDir]=\"($langTextDir | async)!\"\r\n [endOffset]=\"($endOffset | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [scrollBehavior]=\"($scrollBehavior | async)!\" [scrollbarMinSize]=\"($scrollbarMinSize | async)!\"\r\n (onDrag)=\"onScrollBarDragHandler($event)\" (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>", styles: [":host{position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.ngvl__container{position:relative;overflow:hidden;display:grid;width:100%;height:100%;cursor:grab}.ngvl__container.overlapping{position:relative;display:block}.ngvl__container.grabbing{cursor:grabbing}.ngvl__container.horizontal{transition:grid-template-rows .1s ease-out}.ngvl__container.horizontal:not(.overlapping){grid-template-rows:1fr 0}.ngvl__container.horizontal.scrollable.enabled:not(.overlapping){grid-template-rows:1fr auto}.ngvl__container.horizontal .ngvl__list{display:inline-flex}.ngvl__container.horizontal .ngvl__scroller-wrapper.filtered,.ngvl__container.horizontal .ngvl__scroller{overflow:unset}.ngvl__container.vertical{transition:grid-template-columns .1s ease-out}.ngvl__container.vertical:not(.overlapping){grid-template-columns:1fr 0}.ngvl__container.vertical.scrollable.enabled:not(.overlapping){grid-template-columns:1fr auto}.ngvl__container.vertical .ngvl__scroller-wrapper.filtered,.ngvl__container.vertical .ngvl__scroller{overflow:unset}.ngvl__container .ngvl__scroller-wrapper,.ngvl__container .ngvl__scroller{display:block;position:relative;overflow:hidden;width:100%;height:100%}.ngvl__container .ngvl__list{position:absolute;list-style:none;padding:0;margin:0;width:100%;height:100%;opacity:0}.ngvl__container .ngvl__list.prepared{opacity:1}\n"] }]
492
495
  }], ctorParameters: function () { return []; }, propDecorators: { scrollBar: [{
493
496
  type: ViewChild,
494
497
  args: ['scrollBar', { read: NgScrollBarComponent }]
@@ -526,4 +529,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
526
529
  }], motionBlurEnabled: [{
527
530
  type: Input
528
531
  }] } });
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNySSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSx5QkFBeUIsRUFDckosNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsYUFBYSxHQUMzSSxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBbUIsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyxFQUFFLHFDQUFx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cUNBQXFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzVELDZHQU0rQixvQkFBb0IsdUlDM0N0RCxnNEVBMkJNOzs0RkRlTyxtQkFBbUI7a0JBWC9CLFNBQVM7K0JBQ0UsYUFBYSxhQUNaO3dCQUNULEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7d0JBQ25ELEVBQUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7d0JBQ2xFLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7cUJBQzVELGNBQ1csS0FBSzswRUFNUixTQUFTO3NCQURqQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFJN0MsTUFBTTtzQkFEZCxTQUFTO3VCQUFDLFFBQVE7Z0JBSVYsa0JBQWtCO3NCQUQxQixNQUFNO2dCQU9ILGdCQUFnQjtzQkFEbkIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsY0FBYztzQkFEakIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBWUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQVlGLFVBQVU7c0JBRGIsS0FBSztnQkFZRixhQUFhO3NCQURoQixLQUFLO2dCQVlGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2Nyb2xsQm94IH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElkLCBUZXh0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBOZ1Njcm9sbEJhckNvbXBvbmVudCB9IGZyb20gXCIuLi9uZy1zY3JvbGwtYmFyL25nLXNjcm9sbC1iYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdyYWRpZW50Q29sb3JQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9ncmFkaWVudC1jb2xvci1wb3NpdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0lOU1RBTlQsIERFRkFVTFRfTUFYX01PVElPTl9CTFVSLCBERUZBVUxUX01PVElPTl9CTFVSLCBERUZBVUxUX01PVElPTl9CTFVSX0VOQUJMRUQsIERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSLCBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVELFxyXG4gIERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFLCBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSwgREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTLCBMRUZUX1BST1BfTkFNRSwgUFgsIFNDUk9MTEVSX1NDUk9MTCwgVE9QX1BST1BfTkFNRSxcclxufSBmcm9tICcuLi8uLi9jb25zdCc7XHJcbmltcG9ydCB7IFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMsIE5nU2Nyb2xsVmlldywgU0NST0xMX1ZJRVdfSU5WRVJTSU9OIH0gZnJvbSAnLi4vbmctc2Nyb2xsLXZpZXcnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsQmFyRHJhZ0V2ZW50IH0gZnJvbSAnLi4vbmctc2Nyb2xsLWJhci9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgU0NST0xMX1ZJRVdfTk9STUFMSVpFX1ZBTFVFX0ZST01fWkVSTywgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEIH0gZnJvbSAnLi4vbmctc2Nyb2xsLXZpZXcvY29uc3QnO1xyXG5pbXBvcnQgeyBJU2l6ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5cclxuY29uc3QgVE9QID0gJ3RvcCcsXHJcbiAgTEVGVCA9ICdsZWZ0JyxcclxuICBJTlNUQU5UID0gJ2luc3RhbnQnIGFzIFNjcm9sbEJlaGF2aW9yLFxyXG4gIE1PVElPTl9CTFVSID0gJ21vdGlvbi1ibHVyJztcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogU0NST0xMX1ZJRVdfSU5WRVJTSU9OLCB1c2VWYWx1ZTogZmFsc2UgfSxcclxuICAgIHsgcHJvdmlkZTogU0NST0xMX1ZJRVdfTk9STUFMSVpFX1ZBTFVFX0ZST01fWkVSTywgdXNlVmFsdWU6IHRydWUgfSxcclxuICAgIHsgcHJvdmlkZTogU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy1zY3JvbGxlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdTY3JvbGxlckNvbXBvbmVudCBleHRlbmRzIE5nU2Nyb2xsVmlldyB7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHJlYWRvbmx5IHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcicpXHJcbiAgcmVhZG9ubHkgZmlsdGVyOiBFbGVtZW50UmVmPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IG9uU2Nyb2xsYmFyVmlzaWJsZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckVuYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhckVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZEVsZW1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c2VkRWxlbWVudCA9IHRoaXMuXyRmb2N1c2VkRWxlbWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZm9jdXNlZEVsZW1lbnQodjogSWQgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kZm9jdXNlZEVsZW1lbnQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvY3VzZWRFbGVtZW50KCkgeyByZXR1cm4gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJsYXBwaW5nU2Nyb2xsYmFyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUik7XHJcbiAgcmVhZG9ubHkgJG92ZXJsYXBwaW5nU2Nyb2xsYmFyID0gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBvdmVybGFwcGluZ1Njcm9sbGJhcih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBvdmVybGFwcGluZ1Njcm9sbGJhcigpIHsgcmV0dXJuIHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb250ZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkY29udGVudCA9IHRoaXMuXyRmb2N1c2VkRWxlbWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY29udGVudCh2OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRjb250ZW50LmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGNvbnRlbnQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNvbnRlbnQoKSB7IHJldHVybiB0aGlzLl8kY29udGVudC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJGxvYWRpbmcgPSB0aGlzLl8kbG9hZGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbG9hZGluZyh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbG9hZGluZygpIHsgcmV0dXJuIHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY2xhc3NlcyA9IHRoaXMuXyRjbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbGFzc2VzKHY6IHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIGlmICh0aGlzLl8kY2xhc3Nlcy5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBjbGFzc2VzKCkgeyByZXR1cm4gdGhpcy5fJGNsYXNzZXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyTWluU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhck1pblNpemUgPSB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyTWluU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJNaW5TaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGhpY2tuZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUyk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRoaWNrbmVzcyh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUGFyYW1zID0gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlBhcmFtcyh2OiB7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaHVtYlBhcmFtcygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCAnZGlzYWJsZWQnPihERUZBVUxUX01PVElPTl9CTFVSKTtcclxuICByZWFkb25seSAkbW90aW9uQmx1ciA9IHRoaXMuXyRtb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyKHY6IG51bWJlciB8ICdkaXNhYmxlZCcpIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRtb3Rpb25CbHVyLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBtb3Rpb25CbHVyKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWF4TW90aW9uQmx1ciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01BWF9NT1RJT05fQkxVUik7XHJcbiAgcmVhZG9ubHkgJG1heE1vdGlvbkJsdXIgPSB0aGlzLl8kbWF4TW90aW9uQmx1ci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4TW90aW9uQmx1cih2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRtYXhNb3Rpb25CbHVyLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBtYXhNb3Rpb25CbHVyKCkgeyByZXR1cm4gdGhpcy5fJG1heE1vdGlvbkJsdXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbW90aW9uQmx1ckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCk7XHJcbiAgcmVhZG9ubHkgJG1vdGlvbkJsdXJFbmFibGVkID0gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBtb3Rpb25CbHVyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxDbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbENsYXNzZXMgPSB0aGlzLl8kYWN0dWFsQ2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRhaW5lckNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY29udGFpbmVyQ2xhc3NlcyA9IHRoaXMuXyRjb250YWluZXJDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JhZGllbnRDb2xvclBvc2l0aW9ucz4oWzAsIDBdKTtcclxuICByZWFkb25seSAkdGh1bWJHcmFkaWVudFBvc2l0aW9ucyA9IHRoaXMuXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICR0aHVtYlNpemUgPSB0aGlzLl8kdGh1bWJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGh1bWJDb2xvclBvc2l0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JhZGllbnRDb2xvclBvc2l0aW9ucz4oWzAsIDBdKTtcclxuICByZWFkb25seSAkdGh1bWJDb2xvclBvc2l0aW9ucyA9IHRoaXMuXyR0aHVtYkNvbG9yUG9zaXRpb25zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsVGh1bWJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICRhY3R1YWxUaHVtYlNpemUgPSB0aGlzLl8kYWN0dWFsVGh1bWJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyU2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJTaG93ID0gdGhpcy5fJHNjcm9sbGJhclNob3cuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHNob3cgPSB0aGlzLl8kc2hvdy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHByZXBhcmVkU2lnbmFsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHByZXBhcmVkU2lnbmFsID0gdGhpcy5fJHByZXBhcmVkU2lnbmFsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KFRleHREaXJlY3Rpb25zLkxUUik7XHJcbiAgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGlzdFN0eWxlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBwZXJzcGVjdGl2ZU9yaWdpbjogc3RyaW5nIH0+KHsgcGVyc3BlY3RpdmVPcmlnaW46ICdjZW50ZXInIH0pO1xyXG4gIHJlYWRvbmx5ICRsaXN0U3R5bGVzID0gdGhpcy5fJGxpc3RTdHlsZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJveCA9IG5ldyBTY3JvbGxCb3goKTtcclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJTY3JvbGwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJTY3JvbGwgPSB0aGlzLl8kc2Nyb2xsYmFyU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlZCA9IGZhbHNlO1xyXG4gIHNldCBwcmVwYXJlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fcHJlcGFyZWQgIT09IHYpIHtcclxuICAgICAgdGhpcy5fcHJlcGFyZWQgPSB2O1xyXG4gICAgICB0aGlzLl8kcHJlcGFyZWRTaWduYWwubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZXRYKHg6IG51bWJlciwgc25hcDogYm9vbGVhbiA9IHRydWUsIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICh4ICE9PSB1bmRlZmluZWQgJiYgIU51bWJlci5pc05hTih4KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURpcmVjdGlvbih4LCB0aGlzLl94KTtcclxuXHJcbiAgICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0geDtcclxuXHJcbiAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSBub3JtYWxpemUgPyB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKSA6IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIGlmICghb3ZlcnJpZGRlbikge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZVZlbG9jaXR5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuXHJcbiAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ludGVyc2VjdGlvbkNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2V0WSh5OiBudW1iZXIsIHNuYXA6IGJvb2xlYW4gPSB0cnVlLCBub3JtYWxpemU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoeSAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNOYU4oeSkpIHtcclxuICAgICAgdGhpcy51cGRhdGVEaXJlY3Rpb24oeSwgdGhpcy5feSk7XHJcblxyXG4gICAgICB0aGlzLl95ID0gdGhpcy5fYWN0dWFsWSA9IHk7XHJcblxyXG4gICAgICBjb25zdCBvdmVycmlkZGVuID0gbm9ybWFsaXplID8gdGhpcy5ub3JtYWxpemVTY3JvbGxTaXplKCkgOiBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMucmVmcmVzaENvb3JkaW5hdGUodGhpcy5feCwgdGhpcy5feSk7XHJcblxyXG4gICAgICBpZiAoIW92ZXJyaWRkZW4pIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVWZWxvY2l0eSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG5cclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBlcnNwZWN0aXZlKCk7XHJcblxyXG4gICAgICBpZiAoc25hcCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJbnRlcnNlY3Rpb25Db21wb25lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2V0IHN0YXJ0TGF5b3V0T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0ICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0ID0gdjtcclxuXHJcbiAgICAgIHRoaXMucmVmcmVzaENvb3JkaW5hdGUodGhpcy5feCwgdGhpcy5feSk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgb3ZlcnJpZGUgZ2V0IHN0YXJ0TGF5b3V0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHZpZXdJbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICR2aWV3SW5pdGlhbGl6ZWQgPSB0aGlzLl8kdmlld0luaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pc1Njcm9sbGJhclVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXQgaXNTY3JvbGxiYXJVc2VyQWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbjtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfJHJlc2l6ZVZpZXdwb3J0ID0gbmV3IFN1YmplY3Q8SVNpemU+KCk7XHJcbiAgcmVhZG9ubHkgJHJlc2l6ZVZpZXdwb3J0ID0gdGhpcy5fJHJlc2l6ZVZpZXdwb3J0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRyZXNpemVDb250ZW50ID0gbmV3IFN1YmplY3Q8SVNpemU+KCk7XHJcbiAgcmVhZG9ubHkgJHJlc2l6ZUNvbnRlbnQgPSB0aGlzLl8kcmVzaXplQ29udGVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF9maWx0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBwcm90ZWN0ZWQgX2ZpbHRlcjogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5fZmlsdGVySWQgPSBgJHt0aGlzLl9zZXJ2aWNlLmlkfS0ke01PVElPTl9CTFVSfWA7XHJcbiAgICB0aGlzLl9maWx0ZXIgPSBgdXJsKCMke3RoaXMuX2ZpbHRlcklkfSlgO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcblxyXG4gICAgY29uc3QgJGZpbHRlciA9IG9mKHRoaXMuZmlsdGVyKSxcclxuICAgICAgJG1vdGlvbkJsdXIgPSB0aGlzLiRtb3Rpb25CbHVyLFxyXG4gICAgICAkbWF4TW90aW9uQmx1ciA9IHRoaXMuJG1heE1vdGlvbkJsdXIsXHJcbiAgICAgICRtb3Rpb25CbHVyRW5hYmxlZCA9IHRoaXMuJG1vdGlvbkJsdXJFbmFibGVkLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGlzVmVydGljYWw7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGJhclNjcm9sbCA9IHRoaXMuJHNjcm9sbGJhclNjcm9sbDtcclxuICAgICRzY3JvbGxiYXJTY3JvbGwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgICAgICB0aGlzLmZpcmVTY3JvbGxFdmVudChmYWxzZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkYXZlcmFnZVZlbG9jaXR5ID0gdGhpcy4kYXZlcmFnZVZlbG9jaXR5O1xyXG4gICAgY29tYmluZUxhdGVzdChbJGlzVmVydGljYWwsICRhdmVyYWdlVmVsb2NpdHksICRmaWx0ZXIsICRtb3Rpb25CbHVyRW5hYmxlZCwgJG1vdGlvbkJsdXIsICRtYXhNb3Rpb25CbHVyXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoWywgLCBmLCBlLCBtYl0pID0+ICEhZiAmJiAoISFlICYmIG1iICE9PSAwKSksXHJcbiAgICAgIHRhcCgoW2lzVmVydGljYWwsIHYsIGZpbHRlciwgLCBtYiwgbWJNYXhdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgX3YgPSB2ICogKG1iIGFzIG51bWJlciksIHZhbHVlID0gX3YgPiBtYk1heCA/IG1iTWF4IDogX3Y7XHJcbiAgICAgICAgZmlsdGVyIS5uYXRpdmVFbGVtZW50LnNldFN0ZERldmlhdGlvbihpc1ZlcnRpY2FsID8gMCA6IHYgKiB2YWx1ZSwgaXNWZXJ0aWNhbCA/IHYgKiB2YWx1ZSA6IDApO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcclxuICAgICAgdGFwKChbLCAsIGZpbHRlciwgLF0pID0+IHtcclxuICAgICAgICBmaWx0ZXIhLm5hdGl2ZUVsZW1lbnQuc2V0U3RkRGV2aWF0aW9uKDAsIDApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kbGFuZ1RleHREaXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHYpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJlcGFyZSA9IHRoaXMuJHByZXBhcmVkU2lnbmFsO1xyXG4gICAgJHByZXBhcmUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKHRydWUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy4kc2Nyb2xsYmFyRW5hYmxlZCxcclxuICAgICAgJHNjcm9sbGJhclNob3cgPSB0aGlzLiRzY3JvbGxiYXJTaG93O1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzY3JvbGxiYXJFbmFibGVkLCAkc2Nyb2xsYmFyU2hvdywgdGhpcy4kcHJlcGFyZWRTaWduYWxdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc2Nyb2xsYmFyRW5hYmxlZCwgc2Nyb2xsYmFyU2hvdywgcHJlcGFyZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHNob3cubmV4dChzY3JvbGxiYXJFbmFibGVkICYmIHNjcm9sbGJhclNob3cgJiYgcHJlcGFyZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHN0YXJ0T2Zmc2V0ID0gdGhpcy4kc3RhcnRPZmZzZXQsXHJcbiAgICAgICRlbmRPZmZzZXQgPSB0aGlzLiRlbmRPZmZzZXQsXHJcbiAgICAgICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy4kc2Nyb2xsYmFyTWluU2l6ZSxcclxuICAgICAgJHRodW1iU2l6ZSA9IHRoaXMuJHRodW1iU2l6ZTtcclxuXHJcbiAgICBmcm9tKFskZW5kT2Zmc2V0LCAkc3RhcnRPZmZzZXQsICR0aHVtYlNpemUsICRzY3JvbGxiYXJNaW5TaXplLCAkaXNWZXJ0aWNhbF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLiR1cGRhdGVTY3JvbGxCYXI7XHJcblxyXG4gICAgJHVwZGF0ZVNjcm9sbEJhci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcighdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRncmFiYmluZyA9IHRoaXMuJGdyYWJiaW5nO1xyXG4gICAgJGdyYWJiaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5ncmFiYmluZyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRjbGFzc2VzLCB0aGlzLiRkaXJlY3Rpb24sIHRoaXMuJGdyYWJiaW5nLCB0aGlzLiRtb3Rpb25CbHVyRW5hYmxlZF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoW2NsYXNzZXMsIGRpcmVjdGlvbiwgZ3JhYmJpbmcsIGZpbHRlcmVkXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxDbGFzc2VzLm5leHQoeyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmcsIGZpbHRlcmVkIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kY29udGVudEJvdW5kcywgdGhpcy4kdmlld3BvcnRCb3VuZHMsIHRoaXMuJGlzVmVydGljYWwsIHRoaXMuJGRpcmVjdGlvbiwgdGhpcy4kZ3JhYmJpbmcsIHRoaXMuJHNjcm9sbGJhckVuYWJsZWQsIHRoaXMuJG92ZXJsYXBwaW5nU2Nyb2xsYmFyXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbY29udGVudEJvdW5kcywgdmlld3BvcnRCb3VuZHMsIGlzVmVydGljYWwsIGRpcmVjdGlvbiwgZ3JhYmJpbmcsIHNjcm9sbGJhckVuYWJsZWQsIG92ZXJsYXBwaW5nU2Nyb2xsYmFyXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGNvbnRlbnRXaWR0aCwgaGVpZ2h0OiBjb250ZW50SGVpZ2h0IH0gPSBjb250ZW50Qm91bmRzLFxyXG4gICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3cG9ydEJvdW5kcyxcclxuICAgICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgIGNvbnRlbnRTaXplID0gaXNWZXJ0aWNhbCA/IGNvbnRlbnRIZWlnaHQgOiBjb250ZW50V2lkdGg7XHJcbiAgICAgICAgdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMubmV4dCh7IFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZywgZW5hYmxlZDogc2Nyb2xsYmFyRW5hYmxlZCwgc2Nyb2xsYWJsZTogY29udGVudFNpemUgPiB2aWV3cG9ydFNpemUsIG92ZXJsYXBwaW5nOiBvdmVybGFwcGluZ1Njcm9sbGJhciB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHRodW1iR3JhZGllbnRQb3NpdGlvbnMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyR0aHVtYkNvbG9yUG9zaXRpb25zLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiR0aHVtYlNpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxUaHVtYlNpemUubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbFRvcCA6IHRoaXMuc2Nyb2xsTGVmdCkgLSB0aGlzLl9zdGFydExheW91dE9mZnNldCxcclxuICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMuXyRsaXN0U3R5bGVzLm5leHQoe1xyXG4gICAgICBwZXJzcGVjdGl2ZU9yaWdpbjogYCR7aXNWZXJ0aWNhbCA/IHdpZHRoICogLjUgOiAoc2Nyb2xsU2l6ZSArIHdpZHRoICogLjUpfSR7UFh9ICR7aXNWZXJ0aWNhbCA/IChzY3JvbGxTaXplICsgaGVpZ2h0ICogLjUpIDogaGVpZ2h0ICogLjV9JHtQWH1gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCEhdmlld3BvcnQpIHtcclxuICAgICAgY29uc3QgYm91bmRzOiBJU2l6ZSA9IHsgd2lkdGg6IHZpZXdwb3J0Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IHZpZXdwb3J0Lm9mZnNldEhlaWdodCB9LCBiID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgIGlmIChib3VuZHMud2lkdGggPT09IGIud2lkdGggJiYgYm91bmRzLmhlaWdodCA9PT0gYi5oZWlnaHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fJHZpZXdwb3J0Qm91bmRzLm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgdGhpcy5fJHJlc2l6ZVZpZXdwb3J0Lm5leHQoYm91bmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCEhY29udGVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSwgYm91bmRzOiBJU2l6ZSA9IHtcclxuICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IGNvbnRlbnQub2Zmc2V0V2lkdGggOiAodmFsdWUgPz8gY29udGVudC5vZmZzZXRXaWR0aCksXHJcbiAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gKHZhbHVlID8/IGNvbnRlbnQub2Zmc2V0SGVpZ2h0KSA6IGNvbnRlbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICAgIH0sIGIgPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgYm91bmRzLndpZHRoID09PSBiLndpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGIuaGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgdGhpcy5fJHJlc2l6ZUNvbnRlbnQubmV4dChib3VuZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyKHVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlLCBibGVuZGluZzogYm9vbGVhbiA9IHRydWUsIGZpcmVVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb24sXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICB2aWV3cG9ydEJvdW5kcyA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0LFxyXG4gICAgICBlbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldCxcclxuICAgICAge1xyXG4gICAgICAgIHRodW1iU2l6ZSxcclxuICAgICAgICB0aHVtYlBvc2l0aW9uLFxyXG4gICAgICAgIHRodW1iR3JhZGllbnRQb3NpdGlvbnMsXHJcbiAgICAgIH0gPSB0aGlzLl9zY3JvbGxCb3guY2FsY3VsYXRlU2Nyb2xsKHtcclxuICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgdmlld3BvcnRXaWR0aDogdmlld3BvcnRCb3VuZHMud2lkdGgsXHJcbiAgICAgICAgdmlld3BvcnRIZWlnaHQ6IHZpZXdwb3J0Qm91bmRzLmhlaWdodCxcclxuICAgICAgICBjb250ZW50V2lkdGg6IGNvbnRlbnRCb3VuZHMud2lkdGgsXHJcbiAgICAgICAgY29udGVudEhlaWdodDogY29udGVudEJvdW5kcy5oZWlnaHQsXHJcbiAgICAgICAgc3RhcnRPZmZzZXQsXHJcbiAgICAgICAgZW5kT2Zmc2V0LFxyXG4gICAgICAgIHBvc2l0aW9uWDogdGhpcy5feCxcclxuICAgICAgICBwb3NpdGlvblk6IHRoaXMuX3ksXHJcbiAgICAgICAgbWluU2l6ZTogdGhpcy5zY3JvbGxiYXJNaW5TaXplLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5uZXh0KHRodW1iR3JhZGllbnRQb3NpdGlvbnMpO1xyXG4gICAgdGhpcy5fJHRodW1iU2l6ZS5uZXh0KHRodW1iU2l6ZSk7XHJcbiAgICBjb25zdCBhY3R1YWxUaHVtYlBvc2l0aW9uID0gdGh1bWJQb3NpdGlvbiA8IHN0YXJ0T2Zmc2V0ID8gc3RhcnRPZmZzZXQgOiB0aHVtYlBvc2l0aW9uO1xyXG4gICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICB0aGlzLnNjcm9sbEJhcj8uc2Nyb2xsKHtcclxuICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IGFjdHVhbFRodW1iUG9zaXRpb24sIGZpcmVVcGRhdGUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICAgIHVzZXJBY3Rpb246IGZhbHNlLCBibGVuZGluZyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyU2hvdy5uZXh0KHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLnNjcm9sbGJhckVuYWJsZWQpO1xyXG4gIH07XHJcblxyXG4gIG92ZXJyaWRlIHRpY2soKSB7XHJcbiAgICBzdXBlci50aWNrKCk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGxCYXI/LnRpY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsQmFyKCkge1xyXG4gICAgdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoU2Nyb2xsYmFyKCkge1xyXG4gICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb25EcmFnU3RhcnQoKSB7XHJcbiAgICBzdXBlci5vbkRyYWdTdGFydCgpO1xyXG5cclxuICAgIHRoaXMuc3RvcFNjcm9sbGJhcigpO1xyXG5cclxuICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSByZXNldCgpIHtcclxuICAgIHN1cGVyLnJlc2V0KCk7XHJcbiAgICB0aGlzLnRvdGFsU2l6ZSA9IDA7XHJcbiAgICB0aGlzLm9uUmVzaXplQ29udGVudCgwKTtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgdGhpcy5yZWZyZXNoKHRydWUsIHRydWUpO1xyXG4gICAgdGhpcy5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaChmaXJlVXBkYXRlOiBib29sZWFuID0gZmFsc2UsIHVwZGF0ZVNjcm9sbGJhcjogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICh1cGRhdGVTY3JvbGxiYXIpIHtcclxuICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY3JvbGxMaW1pdHMoKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2hDb29yZGluYXRlKHRoaXMuX3gsIHRoaXMuX3kpO1xyXG5cclxuICAgIGlmICh1cGRhdGVTY3JvbGxiYXIpIHtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKGZhbHNlKTtcclxuICAgICAgdGhpcy5lbWl0U2Nyb2xsYWJsZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpcmVVcGRhdGUpIHtcclxuICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc25hcElmTmVlZChhbmltYXRlZCA9IHRydWUpIHtcclxuICAgIHRoaXMuc25hcFdpdGhJbml0aWFsRm9yY2VJZk5lY2Vzc2FyeShudWxsLCBhbmltYXRlZCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNjcm9sbFRvKCkge1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcodHJ1ZSk7XHJcbiAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24uY2xlYXIoKTtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLl9pc1Njcm9sbHNUbyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBmaW5pc2hlZFNjcm9sbFRvKCkge1xyXG4gICAgdGhpcy5faXNTY3JvbGxzVG8gPSBmYWxzZTtcclxuICAgIHRoaXMuX3Njcm9sbERpcmVjdGlvbi5jbGVhcigpO1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgIHRoaXMuY2hlY2tJbnRlcnNlY3Rpb25Db21wb25lbnQoKTtcclxuICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG8ocGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdXNlckFjdGlvbiA9IHBhcmFtcz8udXNlckFjdGlvbiA/PyB0cnVlO1xyXG4gICAgaWYgKHVzZXJBY3Rpb24pIHtcclxuICAgICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyPy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGwoeyAuLi5wYXJhbXMsIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wU2Nyb2xsYmFyKCkge1xyXG4gICAgaWYgKCEhdGhpcy5zY3JvbGxCYXIpIHtcclxuICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICB0aGlzLmFsaWduUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHJvcFZlbG9jaXR5KCkge1xyXG4gICAgdGhpcy5fdmVsb2NpdGllcyA9IFswXTtcclxuICAgIHRoaXMuXyR2ZWxvY2l0eS5uZXh0KDApO1xyXG4gICAgdGhpcy5fJGF2ZXJhZ2VWZWxvY2l0eS5uZXh0KDApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0b3BNb3ZpbmcoKSB7XHJcbiAgICBzdXBlci5zdG9wTW92aW5nKCk7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uQW5pbWF0aW9uQ29tcGxldGUocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgIHRoaXMuXyRzY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbEJhckRyYWdIYW5kbGVyKGV2ZW50OiBJU2Nyb2xsQmFyRHJhZ0V2ZW50KSB7XHJcbiAgICBjb25zdCB7IHBvc2l0aW9uLCBtaW4sIG1heCwgdXNlckFjdGlvbiB9ID0gZXZlbnQ7XHJcbiAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgaWYgKCF1c2VyQWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJTY3JvbGwubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGluZyh0cnVlKTtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlUG9zaXRpb24sXHJcbiAgICAgIH0gPSB0aGlzLl9zY3JvbGxCb3guZ2V0U2Nyb2xsUG9zaXRpb25CeVNjcm9sbEJhcih7XHJcbiAgICAgICAgc2Nyb2xsU2l6ZTogaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCxcclxuICAgICAgICBwb3NpdGlvbixcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGxUbyh7XHJcbiAgICAgIFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IGFic29sdXRlUG9zaXRpb24sIGJlaGF2aW9yOiBJTlNUQU5ULFxyXG4gICAgICBibGVuZGluZzogZmFsc2UsIHVzZXJBY3Rpb246IHRydWUsIGZpcmVVcGRhdGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZW1pdFNjcm9sbGFibGVFdmVudCgpO1xyXG4gICAgdGhpcy5fc2VydmljZS51cGRhdGUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGxCYXJEcmFnRW5kSGFuZGxlcihldmVudDogSVNjcm9sbEJhckRyYWdFdmVudCkge1xyXG4gICAgY29uc3QgeyBwb3NpdGlvbiwgbWluLCBtYXgsIHVzZXJBY3Rpb24gfSA9IGV2ZW50O1xyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgIGlmICghdXNlckFjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnVwZGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBpc0VkZ2UgPSB0aGlzLmZpcmVVcGRhdGVJZkVkZ2VzRGV0ZWN0ZWQocG9zaXRpb24sIG1pbiwgbWF4LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICghaXNFZGdlKSB7XHJcbiAgICAgIHRoaXMuYWxpZ25Qb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLmNsZWFyKCk7XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyU2Nyb2xsLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlyZVVwZGF0ZUlmRWRnZXNEZXRlY3RlZChwb3NpdGlvbjogbnVtYmVyLCBtaW46IG51bWJlciA9IDAsIG1heDogbnVtYmVyID0gMSwgYW5pbWF0aW9uOiBib29sZWFuID0gZmFsc2UsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHVzZXJBY3Rpb24gJiYgYW5pbWF0aW9uKSB7XHJcbiAgICAgIGlmIChwb3NpdGlvbiA8PSBtaW4pIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbFRvU3RhcnQoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA+PSBtYXgpIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbFRvRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn0iLCI8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbbGlzdERpcl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIiBjbGFzcz1cIm5ndmxfX2NvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCIoJGNvbnRhaW5lckNsYXNzZXMgfCBhc3luYykhXCI+XHJcbiAgICA8c3ZnIHBhcnQ9XCJ2aWV3cG9ydFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XHJcbiAgICAgICAgPGZpbHRlciBbaWRdPVwiX2ZpbHRlcklkXCI+XHJcbiAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciAjZmlsdGVyPjwvZmVHYXVzc2lhbkJsdXI+XHJcbiAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgPGZvcmVpZ25PYmplY3QgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGNsYXNzPVwibmd2bF9fdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyLXdyYXBwZXJcIiBbY2xhc3MuZmlsdGVyZWRdPVwiKCRtb3Rpb25CbHVyRW5hYmxlZCB8IGFzeW5jKSFcIiBbc3R5bGUuZmlsdGVyXT1cIigkbW90aW9uQmx1ckVuYWJsZWQgfCBhc3luYykhID8gX2ZpbHRlciA6ICd1bnNldCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2RrU2Nyb2xsYWJsZSAjc2Nyb2xsVmlld3BvcnQgcGFydD1cInNjcm9sbGVyXCIgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Njcm9sbENvbnRlbnQgW2F0dHIuYXJpYS1vcmllbnRhdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiJGZvY3VzZWRFbGVtZW50IHwgYXN5bmNcIiB0YWJpbmRleD1cIjBcIiBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIigkYWN0dWFsQ2xhc3NlcyB8IGFzeW5jKSFcIiBbbmdTdHlsZV09XCIoJGxpc3RTdHlsZXMgfCBhc3luYykhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICA8L3N2Zz5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoJHNjcm9sbGJhckVuYWJsZWQgfCBhc3luYykhXCI+XHJcbiAgICAgICAgPG5nLXNjcm9sbC1iYXIgI3Njcm9sbEJhciBbZGlyZWN0aW9uXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiIFtzaXplXT1cIigkYWN0dWFsVGh1bWJTaXplIHwgYXN5bmMpIVwiIFtyZW5kZXJlcl09XCIoJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW3RoaWNrbmVzc109XCIoJHNjcm9sbGJhclRoaWNrbmVzcyB8IGFzeW5jKSFcIiBbcGFyYW1zXT1cIigkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgfCBhc3luYykhXCIgW2xvYWRpbmddPVwiKCRsb2FkaW5nIHwgYXN5bmMpIVwiIFtvdmVybGFwcGluZ109XCIoJG92ZXJsYXBwaW5nU2Nyb2xsYmFyIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFt0aHVtYkdyYWRpZW50UG9zaXRpb25zXT1cIigkdGh1bWJDb2xvclBvc2l0aW9ucyB8IGFzeW5jKSFcIiBbcHJlcGFyZWRdPVwiKCRwcmVwYXJlZFNpZ25hbCB8IGFzeW5jKSFcIiBbaW50ZXJhY3RpdmVdPVwiKCRzY3JvbGxiYXJJbnRlcmFjdGl2ZSB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbc2hvd109XCIoJHNob3cgfCBhc3luYykhXCIgW3N0YXJ0T2Zmc2V0XT1cIigkc3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2VuZE9mZnNldF09XCIoJGVuZE9mZnNldCB8IGFzeW5jKSFcIiBbb3ZlcnNjcm9sbEVuYWJsZWRdPVwiKCRvdmVyc2Nyb2xsRW5hYmxlZCB8IGFzeW5jKSFcIiBbc2Nyb2xsQmVoYXZpb3JdPVwiKCRzY3JvbGxCZWhhdmlvciB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbc2Nyb2xsYmFyTWluU2l6ZV09XCIoJHNjcm9sbGJhck1pblNpemUgfCBhc3luYykhXCIgKG9uRHJhZyk9XCJvblNjcm9sbEJhckRyYWdIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25EcmFnRW5kKT1cIm9uU2Nyb2xsQmFyRHJhZ0VuZEhhbmRsZXIoJGV2ZW50KVwiPjwvbmctc2Nyb2xsLWJhcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUNySiw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxhQUFhLEdBQzNJLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBbUIsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUdoSCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ2YsSUFBSSxHQUFHLE1BQU0sRUFDYixPQUFPLEdBQUcsU0FBMkIsRUFDckMsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUU5QixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFdkQ7Ozs7Ozs7R0FPRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBRTFDLFNBQVMsQ0FBbUM7SUFHNUMsTUFBTSxDQUFtRDtJQUd6RCxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRWxELGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLHlCQUF5QixDQUFDLENBQUM7SUFDNUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBFLElBQ0ksZ0JBQWdCLENBQUMsQ0FBVTtRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFDRCxJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxzQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3BGLHFCQUFxQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU1RSxJQUNJLG9CQUFvQixDQUFDLENBQVU7UUFDakMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFckUsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWlCLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEUsSUFDSSxjQUFjLENBQUMsQ0FBaUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBQ0QsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLDZCQUE2QixDQUFDLENBQUM7SUFDcEYscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTVFLElBQ0ksb0JBQW9CLENBQUMsQ0FBVTtRQUNqQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCxJQUFJLG9CQUFvQixLQUFLLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVyRSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQTBCLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFekQsSUFDSSxPQUFPLENBQUMsQ0FBMEI7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUMvQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVsRCxJQUNJLE9BQU8sQ0FBQyxDQUFVO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQStCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxELElBQ0ksT0FBTyxDQUFDLENBQStCO1FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBUywwQkFBMEIsQ0FBQyxDQUFDO0lBQzVFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRSxJQUNJLGdCQUFnQixDQUFDLENBQVM7UUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0Qsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVMsMkJBQTJCLENBQUMsQ0FBQztJQUMvRSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEUsSUFDSSxrQkFBa0IsQ0FBQyxDQUFTO1FBQzlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUNELElBQUksa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpFLHdCQUF3QixHQUFHLElBQUksZUFBZSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUM3RSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEYsSUFDSSxzQkFBc0IsQ0FBQyxDQUEwQjtRQUNuRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFDRCxJQUFJLHNCQUFzQixLQUFLLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV6RSxzQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBcUMsSUFBSSxDQUFDLENBQUM7SUFDdEYscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTVFLElBQ0ksb0JBQW9CLENBQUMsQ0FBcUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFckUsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFzQixtQkFBbUIsQ0FBQyxDQUFDO0lBQzVFLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXhELElBQ0ksVUFBVSxDQUFDLENBQXNCO1FBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBQ0QsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU5RCxJQUNJLGFBQWEsQ0FBQyxDQUFTO1FBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBQ0QsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV2RCxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSwyQkFBMkIsQ0FBQyxDQUFDO0lBQy9FLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV0RSxJQUNJLGlCQUFpQixDQUFDLENBQVU7UUFDOUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsZUFBZSxHQUFHLElBQUksZUFBZSxDQUErQixFQUFFLENBQUMsQ0FBQztJQUN2RSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV0RCxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7SUFDMUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTVELHdCQUF3QixHQUFHLElBQUksZUFBZSxDQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLHVCQUF1QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV4RSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFOUMscUJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0Usb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxFLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDckQsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEQsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzVDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBDLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEQsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFnQyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEcsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEQsVUFBVSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFFckMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQztJQUM1QyxDQUFDO0lBRU8saUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUMxQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMxQixJQUFJLFFBQVEsQ0FBQyxDQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFa0IsSUFBSSxDQUFDLENBQVMsRUFBRSxPQUFnQixJQUFJLEVBQUUsWUFBcUIsSUFBSTtRQUNoRixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBRTVCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7WUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFOUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7SUFFa0IsSUFBSSxDQUFDLENBQVMsRUFBRSxPQUFnQixJQUFJLEVBQUUsWUFBcUIsSUFBSTtRQUNoRixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBRTVCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7WUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFOUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFhLGlCQUFpQixDQUFDLENBQVM7UUFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7WUFFNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXpDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUNELElBQWEsaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBRTVELGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxRCxzQkFBc0IsR0FBWSxLQUFLLENBQUM7SUFDaEQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVTLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDekMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV0RCxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVMsQ0FBQztJQUN4QyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRCxTQUFTLENBQVM7SUFFbEIsT0FBTyxDQUFTO0lBRTFCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBRVEsZUFBZTtRQUN0QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDOUIsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQ3BDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFDNUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFakMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsRUFBRSxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxBQUFELEVBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQUFBRCxFQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBSSxFQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQUFBRCxFQUFHLE1BQU0sRUFBRSxBQUFELEVBQUcsRUFBRSxFQUFFO1lBQ3RCLE1BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN0QyxRQUFRLENBQUMsSUFBSSxDQUNYLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFDOUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFdkMsYUFBYSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDM0UsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxhQUFhLElBQUksUUFBUSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ3BDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUM1QixpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQzFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRS9CLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQ1osU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDM0YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwSyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLEVBQUUsRUFBRTtZQUMvRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxFQUNsRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQ2xDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUMxQyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RLLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQzdDLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQ3ZDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFDdEYsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFDakUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JCLGlCQUFpQixFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7U0FDelIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVrQixnQkFBZ0I7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ2QsTUFBTSxNQUFNLEdBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0gsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUMxRCxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVrQixlQUFlLENBQUMsUUFBdUIsSUFBSTtRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sR0FBVTtnQkFDL0QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDeEUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWTthQUM1RSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUM1RSxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsU0FBa0IsS0FBSyxFQUFFLFdBQW9CLElBQUksRUFBRSxhQUFzQixLQUFLO1FBQzNHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQzlCLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUNqRCxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFDL0MsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQzlCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUMxQixFQUNFLFNBQVMsRUFDVCxhQUFhLEVBQ2Isc0JBQXNCLEdBQ3ZCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7WUFDbEMsU0FBUztZQUNULGFBQWEsRUFBRSxjQUFjLENBQUMsS0FBSztZQUNuQyxjQUFjLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDckMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLO1lBQ2pDLGFBQWEsRUFBRSxhQUFhLENBQUMsTUFBTTtZQUNuQyxXQUFXO1lBQ1gsU0FBUztZQUNULFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDL0IsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDdEYsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztnQkFDckIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUTthQUM1QixDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFBLENBQUM7SUFFTyxJQUFJO1FBQ1gsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWIsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFa0IsV0FBVztRQUM1QixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxhQUFzQixLQUFLLEVBQUUsa0JBQTJCLElBQUk7UUFDbEUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QyxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJO1FBQ3hCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBdUI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDOUMsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7U0FDakM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVrQixVQUFVO1FBQzNCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVrQixtQkFBbUIsQ0FBQyxRQUFnQjtRQUNyRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQTBCO1FBQy9DLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDakQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQzdDLEVBQ0UsUUFBUSxFQUFFLGdCQUFnQixHQUMzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUM7WUFDL0MsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDN0QsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsT0FBTztZQUM5RCxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUk7U0FDcEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQTBCO1FBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDakQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBZ0IsRUFBRSxNQUFjLENBQUMsRUFBRSxNQUFjLENBQUMsRUFBRSxZQUFxQixLQUFLLEVBQUUsYUFBc0IsS0FBSztRQUMzSSxJQUFJLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDM0IsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQXZxQlUsbUJBQW1COzRGQUFuQixtQkFBbUIsMmxCQVRuQjtZQUNULEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDbkQsRUFBRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzVELDZHQU0rQixvQkFBb0IsdUlDM0N0RCxxL0VBZ0NNOzs0RkRVTyxtQkFBbUI7a0JBWC9CLFNBQVM7K0JBQ0UsYUFBYSxhQUNaO3dCQUNULEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7d0JBQ25ELEVBQUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7d0JBQ2xFLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7cUJBQzVELGNBQ1csS0FBSzswRUFNUixTQUFTO3NCQURqQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFJN0MsTUFBTTtzQkFEZCxTQUFTO3VCQUFDLFFBQVE7Z0JBSVYsa0JBQWtCO3NCQUQxQixNQUFNO2dCQU9ILGdCQUFnQjtzQkFEbkIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsY0FBYztzQkFEakIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBWUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQVlGLFVBQVU7c0JBRGIsS0FBSztnQkFZRixhQUFhO3NCQURoQixLQUFLO2dCQVlGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSWQsIFRleHREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgREVGQVVMVF9NQVhfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCwgREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVIsIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUsIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsIExFRlRfUFJPUF9OQU1FLCBQWCwgU0NST0xMRVJfU0NST0xMLCBUT1BfUFJPUF9OQU1FLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcywgTmdTY3JvbGxWaWV3LCBTQ1JPTExfVklFV19JTlZFUlNJT04gfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldyc7XHJcbmltcG9ydCB7IElTY3JvbGxCYXJEcmFnRXZlbnQgfSBmcm9tICcuLi9uZy1zY3JvbGwtYmFyL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQgfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldy9jb25zdCc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5jb25zdCBUT1AgPSAndG9wJyxcclxuICBMRUZUID0gJ2xlZnQnLFxyXG4gIElOU1RBTlQgPSAnaW5zdGFudCcgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgTU9USU9OX0JMVVIgPSAnbW90aW9uLWJsdXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTEwpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzY3JvbGxlciBmb3IgdGhlIE5nVmlydHVhbExpc3QgaXRlbSBjb21wb25lbnRcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctc2Nyb2xsZXInLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19JTlZFUlNJT04sIHVzZVZhbHVlOiBmYWxzZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCB1c2VWYWx1ZTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgTmdTY3JvbGxWaWV3IHtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxCYXInLCB7IHJlYWQ6IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0pXHJcbiAgcmVhZG9ubHkgc2Nyb2xsQmFyOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyJylcclxuICByZWFkb25seSBmaWx0ZXI6IEVsZW1lbnRSZWY8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgb25TY3JvbGxiYXJWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckludGVyYWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckludGVyYWN0aXZlID0gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBmb2N1c2VkRWxlbWVudCh2OiBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkRWxlbWVudC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSKTtcclxuICByZWFkb25seSAkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRlbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRjb250ZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb250ZW50KHY6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbnRlbnQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kY29udGVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgY29udGVudCgpIHsgcmV0dXJuIHRoaXMuXyRjb250ZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRsb2FkaW5nLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsYXNzZXModjogeyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSkge1xyXG4gICAgaWYgKHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNsYXNzZXMoKSB7IHJldHVybiB0aGlzLl8kY2xhc3Nlcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGlja25lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGlja25lc3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8ICdkaXNhYmxlZCc+KERFRkFVTFRfTU9USU9OX0JMVVIpO1xyXG4gIHJlYWRvbmx5ICRtb3Rpb25CbHVyID0gdGhpcy5fJG1vdGlvbkJsdXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXIodjogbnVtYmVyIHwgJ2Rpc2FibGVkJykge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhNb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX01PVElPTl9CTFVSKTtcclxuICByZWFkb25seSAkbWF4TW90aW9uQmx1ciA9IHRoaXMuXyRtYXhNb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhNb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtYXhNb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1heE1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1heE1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEKTtcclxuICByZWFkb25seSAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXJFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbENsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkYWN0dWFsQ2xhc3NlcyA9IHRoaXMuXyRhY3R1YWxDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGFpbmVyQ2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjb250YWluZXJDbGFzc2VzID0gdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iU2l6ZSA9IHRoaXMuXyR0aHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkNvbG9yUG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkNvbG9yUG9zaXRpb25zID0gdGhpcy5fJHRodW1iQ29sb3JQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxUaHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbFRodW1iU2l6ZSA9IHRoaXMuXyRhY3R1YWxUaHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJTaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNob3cgPSB0aGlzLl8kc2Nyb2xsYmFyU2hvdy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNob3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkc2hvdyA9IHRoaXMuXyRzaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0U3R5bGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHBlcnNwZWN0aXZlT3JpZ2luOiBzdHJpbmcgfT4oeyBwZXJzcGVjdGl2ZU9yaWdpbjogJ2NlbnRlcicgfSk7XHJcbiAgcmVhZG9ubHkgJGxpc3RTdHlsZXMgPSB0aGlzLl8kbGlzdFN0eWxlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclNjcm9sbCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNjcm9sbCA9IHRoaXMuXyRzY3JvbGxiYXJTY3JvbGwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNldFgoeDogbnVtYmVyLCBzbmFwOiBib29sZWFuID0gdHJ1ZSwgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHggIT09IHVuZGVmaW5lZCAmJiAhTnVtYmVyLmlzTmFOKHgpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlyZWN0aW9uKHgsIHRoaXMuX3gpO1xyXG5cclxuICAgICAgdGhpcy5feCA9IHRoaXMuX2FjdHVhbFggPSB4O1xyXG5cclxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbiA9IG5vcm1hbGl6ZSA/IHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpIDogZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnJlZnJlc2hDb29yZGluYXRlKHRoaXMuX3gsIHRoaXMuX3kpO1xyXG5cclxuICAgICAgaWYgKCFvdmVycmlkZGVuKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlVmVsb2NpdHkoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG5cclxuICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICB0aGlzLmNoZWNrSW50ZXJzZWN0aW9uQ29tcG9uZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZXRZKHk6IG51bWJlciwgc25hcDogYm9vbGVhbiA9IHRydWUsIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICh5ICE9PSB1bmRlZmluZWQgJiYgIU51bWJlci5pc05hTih5KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURpcmVjdGlvbih5LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0geTtcclxuXHJcbiAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSBub3JtYWxpemUgPyB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKSA6IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIGlmICghb3ZlcnJpZGRlbikge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZVZlbG9jaXR5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuXHJcbiAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ludGVyc2VjdGlvbkNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzZXQgc3RhcnRMYXlvdXRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvdmVycmlkZSBnZXQgc3RhcnRMYXlvdXRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl9zdGFydExheW91dE9mZnNldDsgfVxyXG5cclxuICBwcml2YXRlIF8kdmlld0luaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdJbml0aWFsaXplZCA9IHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzU2Nyb2xsYmFyVXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBpc1Njcm9sbGJhclVzZXJBY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kcmVzaXplVmlld3BvcnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplVmlld3BvcnQgPSB0aGlzLl8kcmVzaXplVmlld3BvcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHJlc2l6ZUNvbnRlbnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplQ29udGVudCA9IHRoaXMuXyRyZXNpemVDb250ZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgX2ZpbHRlcklkOiBzdHJpbmc7XHJcblxyXG4gIHByb3RlY3RlZCBfZmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLl9maWx0ZXJJZCA9IGAke3RoaXMuX3NlcnZpY2UuaWR9LSR7TU9USU9OX0JMVVJ9YDtcclxuICAgIHRoaXMuX2ZpbHRlciA9IGB1cmwoIyR7dGhpcy5fZmlsdGVySWR9KWA7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgIHRoaXMuJHJlc2l6ZVZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFwSWZOZWVkKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcElmTmVlZCgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRmaWx0ZXIgPSBvZih0aGlzLmZpbHRlciksXHJcbiAgICAgICRtb3Rpb25CbHVyID0gdGhpcy4kbW90aW9uQmx1cixcclxuICAgICAgJG1heE1vdGlvbkJsdXIgPSB0aGlzLiRtYXhNb3Rpb25CbHVyLFxyXG4gICAgICAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLiRtb3Rpb25CbHVyRW5hYmxlZCxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRpc1ZlcnRpY2FsO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJTY3JvbGwgPSB0aGlzLiRzY3JvbGxiYXJTY3JvbGw7XHJcbiAgICAkc2Nyb2xsYmFyU2Nyb2xsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQoZmFsc2UpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGF2ZXJhZ2VWZWxvY2l0eSA9IHRoaXMuJGF2ZXJhZ2VWZWxvY2l0eTtcclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpc1ZlcnRpY2FsLCAkYXZlcmFnZVZlbG9jaXR5LCAkZmlsdGVyLCAkbW90aW9uQmx1ckVuYWJsZWQsICRtb3Rpb25CbHVyLCAkbWF4TW90aW9uQmx1cl0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKFssICwgZiwgZSwgbWJdKSA9PiAhIWYgJiYgKCEhZSAmJiBtYiAhPT0gMCkpLFxyXG4gICAgICB0YXAoKFtpc1ZlcnRpY2FsLCB2LCBmaWx0ZXIsICwgbWIsIG1iTWF4XSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IF92ID0gdiAqIChtYiBhcyBudW1iZXIpLCB2YWx1ZSA9IF92ID4gbWJNYXggPyBtYk1heCA6IF92O1xyXG4gICAgICAgIGZpbHRlciEubmF0aXZlRWxlbWVudC5zZXRTdGREZXZpYXRpb24oaXNWZXJ0aWNhbCA/IDAgOiB2ICogdmFsdWUsIGlzVmVydGljYWwgPyB2ICogdmFsdWUgOiAwKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXHJcbiAgICAgIHRhcCgoWywgLCBmaWx0ZXIsICxdKSA9PiB7XHJcbiAgICAgICAgZmlsdGVyIS5uYXRpdmVFbGVtZW50LnNldFN0ZERldmlhdGlvbigwLCAwKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVwYXJlID0gdGhpcy4kcHJlcGFyZWRTaWduYWw7XHJcbiAgICAkcHJlcGFyZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIodHJ1ZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLiRzY3JvbGxiYXJFbmFibGVkLFxyXG4gICAgICAkc2Nyb2xsYmFyU2hvdyA9IHRoaXMuJHNjcm9sbGJhclNob3c7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNjcm9sbGJhckVuYWJsZWQsICRzY3JvbGxiYXJTaG93LCB0aGlzLiRwcmVwYXJlZFNpZ25hbF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtzY3JvbGxiYXJFbmFibGVkLCBzY3JvbGxiYXJTaG93LCBwcmVwYXJlZF0pID0+IHtcclxuICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHNjcm9sbGJhckVuYWJsZWQgJiYgc2Nyb2xsYmFyU2hvdyAmJiBwcmVwYXJlZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc3RhcnRPZmZzZXQgPSB0aGlzLiRzdGFydE9mZnNldCxcclxuICAgICAgJGVuZE9mZnNldCA9IHRoaXMuJGVuZE9mZnNldCxcclxuICAgICAgJHNjcm9sbGJhck1pblNpemUgPSB0aGlzLiRzY3JvbGxiYXJNaW5TaXplLFxyXG4gICAgICAkdGh1bWJTaXplID0gdGhpcy4kdGh1bWJTaXplO1xyXG5cclxuICAgIGZyb20oWyRlbmRPZmZzZXQsICRzdGFydE9mZnNldCwgJHRodW1iU2l6ZSwgJHNjcm9sbGJhck1pblNpemUsICRpc1ZlcnRpY2FsXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuJHVwZGF0ZVNjcm9sbEJhcjtcclxuXHJcbiAgICAkdXBkYXRlU2Nyb2xsQmFyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCF0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGdyYWJiaW5nID0gdGhpcy4kZ3JhYmJpbmc7XHJcbiAgICAkZ3JhYmJpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmdyYWJiaW5nID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGNsYXNzZXMsIHRoaXMuJGRpcmVjdGlvbiwgdGhpcy4kZ3JhYmJpbmcsIHRoaXMuJG1vdGlvbkJsdXJFbmFibGVkXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbY2xhc3NlcywgZGlyZWN0aW9uLCBncmFiYmluZywgZmlsdGVyZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbENsYXNzZXMubmV4dCh7IC4uLmNsYXNzZXMsIFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZywgZmlsdGVyZWQgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRjb250ZW50Qm91bmRzLCB0aGlzLiR2aWV3cG9ydEJvdW5kcywgdGhpcy4kaXNWZXJ0aWNhbCwgdGhpcy4kZGlyZWN0aW9uLCB0aGlzLiRncmFiYmluZywgdGhpcy4kc2Nyb2xsYmFyRW5hYmxlZCwgdGhpcy4kb3ZlcmxhcHBpbmdTY3JvbGxiYXJdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAoKFtjb250ZW50Qm91bmRzLCB2aWV3cG9ydEJvdW5kcywgaXNWZXJ0aWNhbCwgZGlyZWN0aW9uLCBncmFiYmluZywgc2Nyb2xsYmFyRW5hYmxlZCwgb3ZlcmxhcHBpbmdTY3JvbGxiYXJdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aDogY29udGVudFdpZHRoLCBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IGNvbnRlbnRCb3VuZHMsXHJcbiAgICAgICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHZpZXdwb3J0Qm91bmRzLFxyXG4gICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgY29udGVudFNpemUgPSBpc1ZlcnRpY2FsID8gY29udGVudEhlaWdodCA6IGNvbnRlbnRXaWR0aDtcclxuICAgICAgICB0aGlzLl8kY29udGFpbmVyQ2xhc3Nlcy5uZXh0KHsgW2RpcmVjdGlvbl06IHRydWUsIGdyYWJiaW5nLCBlbmFibGVkOiBzY3JvbGxiYXJFbmFibGVkLCBzY3JvbGxhYmxlOiBjb250ZW50U2l6ZSA+IHZpZXdwb3J0U2l6ZSwgb3ZlcmxhcHBpbmc6IG92ZXJsYXBwaW5nU2Nyb2xsYmFyIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHRodW1iQ29sb3JQb3NpdGlvbnMubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHRodW1iU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFRodW1iU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHZpZXdJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVBlcnNwZWN0aXZlKCkge1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIGludmVydGVkID0gdGhpcy5ob3Jpem9udGFsQXhpc0ludmVydGlvbixcclxuICAgICAgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxUb3AgOiB0aGlzLnNjcm9sbExlZnQpIC0gdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQsXHJcbiAgICAgIG1heFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5fJGxpc3RTdHlsZXMubmV4dCh7XHJcbiAgICAgIHBlcnNwZWN0aXZlT3JpZ2luOiBgJHtpc1ZlcnRpY2FsID8gd2lkdGggKiAuNSA6IChpbnZlcnRlZCA/ICgobWF4U2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpICsgd2lkdGggKiAuNSAtIHRoaXMuc3RhcnRPZmZzZXQpIDogKHNjcm9sbFNpemUgKyB3aWR0aCAqIC41KSl9JHtQWH0gJHtpc1ZlcnRpY2FsID8gKGludmVydGVkID8gKChtYXhTY3JvbGxTaXplIC0gc2Nyb2xsU2l6ZSkgKyBoZWlnaHQgKiAuNSkgOiAoc2Nyb2xsU2l6ZSArIGhlaWdodCAqIC41KSkgOiBoZWlnaHQgKiAuNX0ke1BYfWBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uUmVzaXplVmlld3BvcnQoKSB7XHJcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICBjb25zdCBib3VuZHM6IElTaXplID0geyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0sIGIgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgaWYgKGJvdW5kcy53aWR0aCA9PT0gYi53aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBiLmhlaWdodCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgICB0aGlzLl8kcmVzaXplVmlld3BvcnQubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCEhY29udGVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSwgYm91bmRzOiBJU2l6ZSA9IHtcclxuICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IGNvbnRlbnQub2Zmc2V0V2lkdGggOiAodmFsdWUgPz8gY29udGVudC5vZmZzZXRXaWR0aCksXHJcbiAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gKHZhbHVlID8/IGNvbnRlbnQub2Zmc2V0SGVpZ2h0KSA6IGNvbnRlbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICAgIH0sIGIgPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgYm91bmRzLndpZHRoID09PSBiLndpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGIuaGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgdGhpcy5fJHJlc2l6ZUNvbnRlbnQubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsQmFySGFuZGxlcih1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSwgYmxlbmRpbmc6IGJvb2xlYW4gPSB0cnVlLCBmaXJlVXBkYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgY29udGVudEJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldCxcclxuICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQsXHJcbiAgICAgIHtcclxuICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgdGh1bWJQb3NpdGlvbixcclxuICAgICAgICB0aHVtYkdyYWRpZW50UG9zaXRpb25zLFxyXG4gICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHZpZXdwb3J0Qm91bmRzLndpZHRoLFxyXG4gICAgICAgIHZpZXdwb3J0SGVpZ2h0OiB2aWV3cG9ydEJvdW5kcy5oZWlnaHQsXHJcbiAgICAgICAgY29udGVudFdpZHRoOiBjb250ZW50Qm91bmRzLndpZHRoLFxyXG4gICAgICAgIGNvbnRlbnRIZWlnaHQ6IGNvbnRlbnRCb3VuZHMuaGVpZ2h0LFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICBwb3NpdGlvblg6IHRoaXMuX3gsXHJcbiAgICAgICAgcG9zaXRpb25ZOiB0aGlzLl95LFxyXG4gICAgICAgIG1pblNpemU6IHRoaXMuc2Nyb2xsYmFyTWluU2l6ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMubmV4dCh0aHVtYkdyYWRpZW50UG9zaXRpb25zKTtcclxuICAgIHRoaXMuXyR0aHVtYlNpemUubmV4dCh0aHVtYlNpemUpO1xyXG4gICAgY29uc3QgYWN0dWFsVGh1bWJQb3NpdGlvbiA9IHRodW1iUG9zaXRpb24gPCBzdGFydE9mZnNldCA/IHN0YXJ0T2Zmc2V0IDogdGh1bWJQb3NpdGlvbjtcclxuICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxCYXI/LnNjcm9sbCh7XHJcbiAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBhY3R1YWxUaHVtYlBvc2l0aW9uLCBmaXJlVXBkYXRlLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgICB1c2VyQWN0aW9uOiBmYWxzZSwgYmxlbmRpbmcsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclNob3cubmV4dCh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy5zY3JvbGxiYXJFbmFibGVkKTtcclxuICB9O1xyXG5cclxuICBvdmVycmlkZSB0aWNrKCkge1xyXG4gICAgc3VwZXIudGljaygpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsQmFyPy50aWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbEJhcigpIHtcclxuICAgIHRoaXMuXyR1cGRhdGVTY3JvbGxCYXIubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFNjcm9sbGJhcigpIHtcclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcih0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uRHJhZ1N0YXJ0KCkge1xyXG4gICAgc3VwZXIub25EcmFnU3RhcnQoKTtcclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxiYXIoKTtcclxuXHJcbiAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgcmVzZXQoKSB7XHJcbiAgICBzdXBlci5yZXNldCgpO1xyXG4gICAgdGhpcy50b3RhbFNpemUgPSAwO1xyXG4gICAgdGhpcy5vblJlc2l6ZUNvbnRlbnQoMCk7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgIHRoaXMucmVmcmVzaCh0cnVlLCB0cnVlKTtcclxuICAgIHRoaXMucHJlcGFyZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZmlyZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlLCB1cGRhdGVTY3JvbGxiYXI6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2Nyb2xsTGltaXRzKCk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMuZW1pdFNjcm9sbGFibGVFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXJlVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNuYXBJZk5lZWQoYW5pbWF0ZWQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnNuYXBXaXRoSW5pdGlhbEZvcmNlSWZOZWNlc3NhcnkobnVsbCwgYW5pbWF0ZWQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTY3JvbGxUbygpIHtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKHRydWUpO1xyXG4gICAgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLmNsZWFyKCk7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5faXNTY3JvbGxzVG8gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoZWRTY3JvbGxUbygpIHtcclxuICAgIHRoaXMuX2lzU2Nyb2xsc1RvID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24uY2xlYXIoKTtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLmNoZWNrSW50ZXJzZWN0aW9uQ29tcG9uZW50KCk7XHJcbiAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHVzZXJBY3Rpb24gPSBwYXJhbXM/LnVzZXJBY3Rpb24gPz8gdHJ1ZTtcclxuICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjcm9sbEJhcj8uc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsKHsgLi4ucGFyYW1zLCB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcFNjcm9sbGJhcigpIHtcclxuICAgIGlmICghIXRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgdGhpcy5hbGlnblBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyb3BWZWxvY2l0eSgpIHtcclxuICAgIHRoaXMuX3ZlbG9jaXRpZXMgPSBbMF07XHJcbiAgICB0aGlzLl8kdmVsb2NpdHkubmV4dCgwKTtcclxuICAgIHRoaXMuXyRhdmVyYWdlVmVsb2NpdHkubmV4dCgwKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzdG9wTW92aW5nKCkge1xyXG4gICAgc3VwZXIuc3RvcE1vdmluZygpO1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbkFuaW1hdGlvbkNvbXBsZXRlKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLl8kc2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGxCYXJEcmFnSGFuZGxlcihldmVudDogSVNjcm9sbEJhckRyYWdFdmVudCkge1xyXG4gICAgY29uc3QgeyBwb3NpdGlvbiwgbWluLCBtYXgsIHVzZXJBY3Rpb24gfSA9IGV2ZW50O1xyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgIGlmICghdXNlckFjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyU2Nyb2xsLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcodHJ1ZSk7XHJcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVBvc2l0aW9uLFxyXG4gICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmdldFNjcm9sbFBvc2l0aW9uQnlTY3JvbGxCYXIoe1xyXG4gICAgICAgIHNjcm9sbFNpemU6IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVG8oe1xyXG4gICAgICBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBhYnNvbHV0ZVBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmc6IGZhbHNlLCB1c2VyQWN0aW9uOiB0cnVlLCBmaXJlVXBkYXRlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxhYmxlRXZlbnQoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0VuZEhhbmRsZXIoZXZlbnQ6IElTY3JvbGxCYXJEcmFnRXZlbnQpIHtcclxuICAgIGNvbnN0IHsgcG9zaXRpb24sIG1pbiwgbWF4LCB1c2VyQWN0aW9uIH0gPSBldmVudDtcclxuICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICBpZiAoIXVzZXJBY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5fc2VydmljZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaXNFZGdlID0gdGhpcy5maXJlVXBkYXRlSWZFZGdlc0RldGVjdGVkKHBvc2l0aW9uLCBtaW4sIG1heCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAoIWlzRWRnZSkge1xyXG4gICAgICB0aGlzLmFsaWduUG9zaXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Njcm9sbERpcmVjdGlvbi5jbGVhcigpO1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhclNjcm9sbC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpcmVVcGRhdGVJZkVkZ2VzRGV0ZWN0ZWQocG9zaXRpb246IG51bWJlciwgbWluOiBudW1iZXIgPSAwLCBtYXg6IG51bWJlciA9IDEsIGFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh1c2VyQWN0aW9uICYmIGFuaW1hdGlvbikge1xyXG4gICAgICBpZiAocG9zaXRpb24gPD0gbWluKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zY3JvbGxUb1N0YXJ0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPj0gbWF4KSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zY3JvbGxUb0VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59IiwiPGRpdiBsb2NhbGVTZW5zaXRpdmUgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCIgW2xpc3REaXJdPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCIgY2xhc3M9XCJuZ3ZsX19jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjb250YWluZXJDbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgPHN2ZyBwYXJ0PVwidmlld3BvcnRcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XHJcbiAgICAgICAgPGZpbHRlciBbaWRdPVwiX2ZpbHRlcklkXCI+XHJcbiAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciAjZmlsdGVyPjwvZmVHYXVzc2lhbkJsdXI+XHJcbiAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgPGZvcmVpZ25PYmplY3QgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGNsYXNzPVwibmd2bF9fdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyLXdyYXBwZXJcIiBbY2xhc3MuZmlsdGVyZWRdPVwiKCRtb3Rpb25CbHVyRW5hYmxlZCB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZpbHRlcl09XCIoJG1vdGlvbkJsdXJFbmFibGVkIHwgYXN5bmMpISA/IF9maWx0ZXIgOiAndW5zZXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNka1Njcm9sbGFibGUgI3Njcm9sbFZpZXdwb3J0IHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNzY3JvbGxDb250ZW50IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIiRmb2N1c2VkRWxlbWVudCB8IGFzeW5jXCIgdGFiaW5kZXg9XCIwXCIgcGFydD1cImxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ndmxfX2xpc3RcIiBbbmdDbGFzc109XCIoJGFjdHVhbENsYXNzZXMgfCBhc3luYykhXCIgW25nU3R5bGVdPVwiKCRsaXN0U3R5bGVzIHwgYXN5bmMpIVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgPC9zdmc+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCRzY3JvbGxiYXJFbmFibGVkIHwgYXN5bmMpIVwiPlxyXG4gICAgICAgIDxuZy1zY3JvbGwtYmFyICNzY3JvbGxCYXIgW2RpcmVjdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIiBbc2l6ZV09XCIoJGFjdHVhbFRodW1iU2l6ZSB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbcmVuZGVyZXJdPVwiKCRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFt0aGlja25lc3NdPVwiKCRzY3JvbGxiYXJUaGlja25lc3MgfCBhc3luYykhXCIgW3BhcmFtc109XCIoJHNjcm9sbGJhclRodW1iUGFyYW1zIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIiBbb3ZlcmxhcHBpbmddPVwiKCRvdmVybGFwcGluZ1Njcm9sbGJhciB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbdGh1bWJHcmFkaWVudFBvc2l0aW9uc109XCIoJHRodW1iQ29sb3JQb3NpdGlvbnMgfCBhc3luYykhXCIgW3ByZXBhcmVkXT1cIigkcHJlcGFyZWRTaWduYWwgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2ludGVyYWN0aXZlXT1cIigkc2Nyb2xsYmFySW50ZXJhY3RpdmUgfCBhc3luYykhXCIgW3Nob3ddPVwiKCRzaG93IHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtzdGFydE9mZnNldF09XCIoJHN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtlbmRPZmZzZXRdPVwiKCRlbmRPZmZzZXQgfCBhc3luYykhXCIgW292ZXJzY3JvbGxFbmFibGVkXT1cIigkb3ZlcnNjcm9sbEVuYWJsZWQgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW3Njcm9sbEJlaGF2aW9yXT1cIigkc2Nyb2xsQmVoYXZpb3IgfCBhc3luYykhXCIgW3Njcm9sbGJhck1pblNpemVdPVwiKCRzY3JvbGxiYXJNaW5TaXplIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIChvbkRyYWcpPVwib25TY3JvbGxCYXJEcmFnSGFuZGxlcigkZXZlbnQpXCIgKG9uRHJhZ0VuZCk9XCJvblNjcm9sbEJhckRyYWdFbmRIYW5kbGVyKCRldmVudClcIj48L25nLXNjcm9sbC1iYXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvcmUvaW50ZXJmYWNlcy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIRUlHSFRfUFJPUF9OQU1FLCBXSURUSF9QUk9QX05BTUUgfSBmcm9tIFwiLi4vLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgSXRlbVRyYW5zZm9ybSwgU25hcFRvSXRlbUFsaWduIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IElJdGVtIH0gZnJvbSBcIi4vaXRlbVwiO1xyXG5cclxuLyoqXHJcbiAqIElNZXRyaWNzXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL21ldHJpY3MudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbT4ge1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGg6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIGRpdmlkZXM6IG51bWJlcjtcclxuICAgIGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBtaW5JdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgbWF4SXRlbVNpemU6IG51bWJlcjtcclxuICAgIGl0ZW1zOiBBcnJheTxJPjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kOiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheVdlaWdodDogbnVtYmVyO1xyXG4gICAgaXRlbXNPbkRpc3BsYXlMZW5ndGg6IG51bWJlcjtcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZWZ0SXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIGxlZnRMYXlvdXRPZmZzZXQ6IG51bWJlcjtcclxuICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldDogbnVtYmVyO1xyXG4gICAgcmVuZGVySXRlbXM6IG51bWJlcjtcclxuICAgIHJpZ2h0SXRlbUxlbmd0aDogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xyXG4gICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IG51bWJlcjtcclxuICAgIHNpemVQcm9wZXJ0eTogdHlwZW9mIEhFSUdIVF9QUk9QX05BTUUgfCB0eXBlb2YgV0lEVEhfUFJPUF9OQU1FO1xyXG4gICAgc3RpY2t5RW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHN0aWNreVBvczogbnVtYmVyO1xyXG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xyXG4gICAgc3RhcnRQb3NpdGlvbjogbnVtYmVyO1xyXG4gICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgdG90YWxMZW5ndGg6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xyXG4gICAgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBpc0Zyb21JdGVtSWRGb3VuZDogYm9vbGVhbjtcclxuICAgIGlzVXBkYXRpbmc6IGJvb2xlYW47XHJcbiAgICBzbmFwVG9JdGVtOiBib29sZWFuO1xyXG4gICAgc25hcFRvSXRlbUFsaWduOiBTbmFwVG9JdGVtQWxpZ247XHJcbiAgICBpdGVtVHJhbnNmb3JtOiBJdGVtVHJhbnNmb3JtIHwgbnVsbDtcclxufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvcmUvaW50ZXJmYWNlcy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIRUlHSFRfUFJPUF9OQU1FLCBXSURUSF9QUk9QX05BTUUgfSBmcm9tIFwiLi4vLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgSXRlbVRyYW5zZm9ybSwgU25hcFRvSXRlbUFsaWduIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IElJdGVtIH0gZnJvbSBcIi4vaXRlbVwiO1xyXG5cclxuLyoqXHJcbiAqIElNZXRyaWNzXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL21ldHJpY3MudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbT4ge1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICAgIGludmVydGVkOiBib29sZWFuO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogbnVtYmVyO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgZGl2aWRlczogbnVtYmVyO1xyXG4gICAgaXRlbVNpemU6IG51bWJlcjtcclxuICAgIG1pbkl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBtYXhJdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgaXRlbXM6IEFycmF5PEk+O1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyO1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zT25EaXNwbGF5V2VpZ2h0OiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheUxlbmd0aDogbnVtYmVyO1xyXG4gICAgaXNWZXJ0aWNhbDogYm9vbGVhbjtcclxuICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgbGVmdEl0ZW1MZW5ndGg6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgbGVmdExheW91dE9mZnNldDogbnVtYmVyO1xyXG4gICAgbGVmdExheW91dEluZGV4T2Zmc2V0OiBudW1iZXI7XHJcbiAgICByZW5kZXJJdGVtczogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICByaWdodEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBtYXhTY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogbnVtYmVyO1xyXG4gICAgc2l6ZVByb3BlcnR5OiB0eXBlb2YgSEVJR0hUX1BST1BfTkFNRSB8IHR5cGVvZiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICBzdGlja3lFbmFibGVkOiBib29sZWFuO1xyXG4gICAgc3RpY2t5UG9zOiBudW1iZXI7XHJcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XHJcbiAgICBzdGFydFBvc2l0aW9uOiBudW1iZXI7XHJcbiAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0OiBudW1iZXI7XHJcbiAgICB0b3RhbExlbmd0aDogbnVtYmVyO1xyXG4gICAgdG90YWxTaXplOiBudW1iZXI7XHJcbiAgICB0eXBpY2FsSXRlbVNpemU6IG51bWJlcjtcclxuICAgIGlzRnJvbUl0ZW1JZEZvdW5kOiBib29sZWFuO1xyXG4gICAgaXNVcGRhdGluZzogYm9vbGVhbjtcclxuICAgIHNuYXBUb0l0ZW06IGJvb2xlYW47XHJcbiAgICBzbmFwVG9JdGVtQWxpZ246IFNuYXBUb0l0ZW1BbGlnbjtcclxuICAgIGl0ZW1UcmFuc2Zvcm06IEl0ZW1UcmFuc2Zvcm0gfCBudWxsO1xyXG59Il19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYWxjdWxhdGUtbWV0cmljcy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL3JlY2FsY3VsYXRlLW1ldHJpY3Mtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNpemUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBbGlnbm1lbnQsIElkLCBJdGVtVHJhbnNmb3JtLCBTbmFwVG9JdGVtQWxpZ24gfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgSUl0ZW0gfSBmcm9tIFwiLi9pdGVtXCI7XHJcblxyXG4vKipcclxuICogSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL2ludGVyZmFjZXMvcmVjYWxjdWxhdGUtbWV0cmljcy1vcHRpb25zLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ge1xyXG4gICAgYWxpZ25tZW50OiBBbGlnbm1lbnQ7XHJcbiAgICBib3VuZHM6IElTaXplO1xyXG4gICAgY29sbGVjdGlvbjogQztcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgbWluSXRlbVNpemU6IG51bWJlcjtcclxuICAgIG1heEl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBidWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBtYXhCdWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIHN0aWNreUVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuO1xyXG4gICAgZnJvbUl0ZW1JZD86IElkO1xyXG4gICAgcHJldmlvdXNUb3RhbFNpemU6IG51bWJlcjtcclxuICAgIGNydWREZXRlY3RlZDogYm9vbGVhbjtcclxuICAgIGRlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplOyB9O1xyXG4gICAgc25hcFRvSXRlbTogYm9vbGVhbjtcclxuICAgIHNuYXBUb0l0ZW1BbGlnbjogU25hcFRvSXRlbUFsaWduO1xyXG4gICAgaXRlbVRyYW5zZm9ybTogSXRlbVRyYW5zZm9ybSB8IG51bGw7XHJcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYWxjdWxhdGUtbWV0cmljcy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL3JlY2FsY3VsYXRlLW1ldHJpY3Mtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNpemUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBbGlnbm1lbnQsIElkLCBJdGVtVHJhbnNmb3JtLCBTbmFwVG9JdGVtQWxpZ24gfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgSUl0ZW0gfSBmcm9tIFwiLi9pdGVtXCI7XHJcblxyXG4vKipcclxuICogSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL2ludGVyZmFjZXMvcmVjYWxjdWxhdGUtbWV0cmljcy1vcHRpb25zLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ge1xyXG4gICAgYWxpZ25tZW50OiBBbGlnbm1lbnQ7XHJcbiAgICBib3VuZHM6IElTaXplO1xyXG4gICAgY29sbGVjdGlvbjogQztcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgbWluSXRlbVNpemU6IG51bWJlcjtcclxuICAgIG1heEl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBidWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBtYXhCdWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIHN0aWNreUVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuO1xyXG4gICAgZnJvbUl0ZW1JZD86IElkO1xyXG4gICAgcHJldmlvdXNUb3RhbFNpemU6IG51bWJlcjtcclxuICAgIGNydWREZXRlY3RlZDogYm9vbGVhbjtcclxuICAgIGRlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplOyB9O1xyXG4gICAgc25hcFRvSXRlbTogYm9vbGVhbjtcclxuICAgIHNuYXBUb0l0ZW1BbGlnbjogU25hcFRvSXRlbUFsaWduO1xyXG4gICAgaW52ZXJ0ZWQ6IGJvb2xlYW47XHJcbiAgICBpdGVtVHJhbnNmb3JtOiBJdGVtVHJhbnNmb3JtIHwgbnVsbDtcclxufSJdfQ==