ngx-tethys 18.2.13 → 18.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [18.2.15](https://github.com/atinc/ngx-tethys/compare/18.2.14...18.2.15) (2025-04-28)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **nav:** improve button offset calculation and adjust styles for better responsiveness #TINFR-1984 ([#3370](https://github.com/atinc/ngx-tethys/issues/3370)) ([8d31e80](https://github.com/atinc/ngx-tethys/commit/8d31e804c36116329c9e7c5ca2786a229757ef53)), closes [#TINFR-1984](https://github.com/atinc/ngx-tethys/issues/TINFR-1984)
11
+
12
+
13
+
14
+ ## [18.2.14](https://github.com/atinc/ngx-tethys/compare/18.2.13...18.2.14) (2025-04-27)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **nav:** the default value of showMore should be false TINFR-1943 ([#3368](https://github.com/atinc/ngx-tethys/issues/3368)) ([cbee8f3](https://github.com/atinc/ngx-tethys/commit/cbee8f36e3a047ab1a2bd731a111697804faed14))
20
+
21
+
22
+
5
23
  ## [18.2.13](https://github.com/atinc/ngx-tethys/compare/18.2.11...18.2.13) (2025-04-27)
6
24
 
7
25
 
@@ -3,7 +3,7 @@ import { merge, Observable, of } from 'rxjs';
3
3
  import { startWith, take, tap } from 'rxjs/operators';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { useHostRenderer } from '@tethys/cdk/dom';
6
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, ElementRef, HostBinding, inject, input, Input, NgZone, QueryList, TemplateRef, ViewChild } from '@angular/core';
6
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, ElementRef, HostBinding, inject, input, Input, NgZone, QueryList, signal, TemplateRef, ViewChild } from '@angular/core';
7
7
  import { RouterLinkActive } from '@angular/router';
8
8
  import { ThyNavInkBarDirective } from './nav-ink-bar.directive';
9
9
  import { ThyNavItemDirective } from './nav-item.directive';
@@ -54,7 +54,7 @@ export class ThyNav {
54
54
  top: 0
55
55
  };
56
56
  this.hiddenItems = [];
57
- this.showMore = true;
57
+ this.showMore = signal(false);
58
58
  this.moreBtnOffset = { height: 0, width: 0 };
59
59
  this.hostRenderer = useHostRenderer();
60
60
  this.locale = injectLocale('nav');
@@ -143,6 +143,7 @@ export class ThyNav {
143
143
  if (this.thyResponsive) {
144
144
  this.setMoreBtnOffset();
145
145
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
146
+ this.setMoreBtnOffset();
146
147
  this.links.toArray().forEach(link => link.setOffset());
147
148
  this.setHiddenItems();
148
149
  });
@@ -158,6 +159,7 @@ export class ThyNav {
158
159
  return;
159
160
  }
160
161
  if (this.thyResponsive) {
162
+ this.setMoreBtnOffset();
161
163
  this.resetSizes();
162
164
  this.setHiddenItems();
163
165
  this.calculateMoreIsActive();
@@ -190,9 +192,10 @@ export class ThyNav {
190
192
  }
191
193
  }
192
194
  setMoreBtnOffset() {
195
+ const computedStyle = window.getComputedStyle(this.defaultMoreOperation?.nativeElement);
193
196
  this.moreBtnOffset = {
194
- height: this.defaultMoreOperation?.nativeElement?.offsetHeight,
195
- width: this.defaultMoreOperation?.nativeElement?.offsetWidth
197
+ height: this.defaultMoreOperation?.nativeElement?.offsetHeight + parseFloat(computedStyle?.marginBottom) || 0,
198
+ width: this.defaultMoreOperation?.nativeElement?.offsetWidth + parseFloat(computedStyle?.marginRight) || 0
196
199
  };
197
200
  }
198
201
  setNavItemDivider() {
@@ -231,7 +234,7 @@ export class ThyNav {
231
234
  const tabs = this.links.toArray();
232
235
  if (!tabs.length) {
233
236
  this.hiddenItems = [];
234
- this.showMore = this.hiddenItems.length > 0;
237
+ this.showMore.set(false);
235
238
  return;
236
239
  }
237
240
  const endIndex = this.thyVertical ? this.getShowItemsEndIndexWhenVertical(tabs) : this.getShowItemsEndIndexWhenHorizontal(tabs);
@@ -243,7 +246,7 @@ export class ThyNav {
243
246
  (this.hiddenItems || []).forEach(item => {
244
247
  item.setNavLinkHidden(true);
245
248
  });
246
- this.showMore = this.hiddenItems.length > 0;
249
+ this.showMore.set(this.hiddenItems.length > 0);
247
250
  this.initialized = true;
248
251
  }
249
252
  getShowItemsEndIndexWhenHorizontal(tabs) {
@@ -342,7 +345,7 @@ export class ThyNav {
342
345
  }
343
346
  }
344
347
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyNav, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
345
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: false, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: false, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: false, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: false, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: false, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: false, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
346
349
  }
347
350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyNav, decorators: [{
348
351
  type: Component,
@@ -358,7 +361,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
358
361
  ThyDropdownMenuItemDirective,
359
362
  ThyDropdownMenuItemActiveDirective,
360
363
  BypassSecurityTrustHtmlPipe
361
- ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
364
+ ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
362
365
  }], propDecorators: { thyType: [{
363
366
  type: Input
364
367
  }], thySize: [{
@@ -407,4 +410,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
407
410
  type: ViewChild,
408
411
  args: [ThyNavInkBarDirective, { static: true }]
409
412
  }] } });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUdULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FB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RUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaHlQb3BvdmVyLCBUaHlQb3BvdmVyQ29uZmlnIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaWduYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJvdXRlckxpbmtBY3RpdmUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGh5TmF2SW5rQmFyRGlyZWN0aXZlIH0gZnJvbSAnLi9uYXYtaW5rLWJhci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGh5TmF2SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vbmF2LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sUGlwZSB9IGZyb20gJy4vbmF2LnBpcGUnO1xuaW1wb3J0IHsgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50LCBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlLCBUaHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IGluamVjdExvY2FsZSwgVGh5TmF2TG9jYWxlIH0gZnJvbSAnbmd4LXRldGh5cy9pMThuJztcbmltcG9ydCB7IFRoeVBsYWNlbWVudCB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFRoeU5hdlR5cGUgPSAncHVsbGVkJyB8ICd0YWJzJyB8ICdwaWxscycgfCAnbGl0ZScgfCAnY2FyZCcgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICd0aGlyZGx5JyB8ICdzZWNvbmRhcnktZGl2aWRlcic7XG5leHBvcnQgdHlwZSBUaHlOYXZTaXplID0gJ2xnJyB8ICdtZCcgfCAnc20nO1xuZXhwb3J0IHR5cGUgVGh5TmF2SG9yaXpvbnRhbCA9ICcnIHwgJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCc7XG5cbmNvbnN0IG5hdlR5cGVDbGFzc2VzTWFwID0ge1xuICAgIHB1bGxlZDogWyd0aHktbmF2LXB1bGxlZCddLFxuICAgIHRhYnM6IFsndGh5LW5hdi10YWJzJ10sXG4gICAgcGlsbHM6IFsndGh5LW5hdi1waWxscyddLFxuICAgIGxpdGU6IFsndGh5LW5hdi1saXRlJ10sXG4gICAgY2FyZDogWyd0aHktbmF2LWNhcmQnXSxcbiAgICAvL+WmguS4i+exu+Wei+W3sue7j+W6n+W8g1xuICAgIHByaW1hcnk6IFsndGh5LW5hdi1wcmltYXJ5J10sXG4gICAgc2Vjb25kYXJ5OiBbJ3RoeS1uYXYtc2Vjb25kYXJ5J10sXG4gICAgdGhpcmRseTogWyd0aHktbmF2LXRoaXJkbHknXSxcbiAgICAnc2Vjb25kYXJ5LWRpdmlkZXInOiBbJ3RoeS1uYXYtc2Vjb25kYXJ5LWRpdmlkZXInXVxufTtcblxuY29uc3QgbmF2U2l6ZUNsYXNzZXNNYXAgPSB7XG4gICAgbGc6ICd0aHktbmF2LWxnJyxcbiAgICBtZDogJ3RoeS1uYXYtbWQnLFxuICAgIHNtOiAndGh5LW5hdi1zbSdcbn07XG5cbmNvbnN0IHRhYkl0ZW1SaWdodCA9IDIwO1xuXG4vKipcbiAqIOWvvOiIque7hOS7tlxuICogQG5hbWUgdGh5LW5hdlxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LW5hdicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdi5jb21wb25lbnQuaHRtbCcsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3RoeS1uYXYnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGh5TmF2SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5TmF2SW5rQmFyRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUl0ZW1BY3RpdmVEaXJlY3RpdmUsXG4gICAgICAgIEJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5TmF2IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcG9wb3ZlciA9IGluamVjdChUaHlQb3BvdmVyKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHB1YmxpYyB0eXBlOiBUaHlOYXZUeXBlID0gJ3B1bGxlZCc7XG4gICAgcHJpdmF0ZSBzaXplOiBUaHlOYXZTaXplID0gJ21kJztcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBob3Jpem9udGFsOiBUaHlOYXZIb3Jpem9udGFsO1xuICAgIHB1YmxpYyB3cmFwcGVyT2Zmc2V0OiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH0gPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICBwdWJsaWMgaGlkZGVuSXRlbXM6IFRoeU5hdkl0ZW1EaXJlY3RpdmVbXSA9IFtdO1xuXG4gICAgcHVibGljIG1vcmVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgc2hvd01vcmUgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBtb3JlQnRuT2Zmc2V0OiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0gPSB7IGhlaWdodDogMCwgd2lkdGg6IDAgfTtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIGlubmVyTGlua3M6IFF1ZXJ5TGlzdDxUaHlOYXZJdGVtRGlyZWN0aXZlPjtcblxuICAgIGxvY2FsZTogU2lnbmFsPFRoeU5hdkxvY2FsZT4gPSBpbmplY3RMb2NhbGUoJ25hdicpO1xuXG4gICAgLyoqXG4gICAgICog5a+86Iiq57G75Z6LXG4gICAgICogQHR5cGUgcHVsbGVkIHwgdGFicyB8IHBpbGxzIHwgbGl0ZSB8IHByaW1hcnkgfCBzZWNvbmRhcnkgfCB0aGlyZGx5IHwgc2Vjb25kYXJ5LWRpdmlkZXJcbiAgICAgKiBAZGVmYXVsdCBwdWxsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUeXBlKHR5cGU6IFRoeU5hdlR5cGUpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZSB8fCAncHVsbGVkJztcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a+86Iiq5aSn5bCPXG4gICAgICogQHR5cGUgbGcgfCBtZCB8IHNtXG4gICAgICogQGRlZmF1bHQgbWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHNpemU6IFRoeU5hdlNpemUpIHtcbiAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rC05bmz5o6S5YiXXG4gICAgICogQHR5cGUgJycgfCAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJ1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5SG9yaXpvbnRhbChob3Jpem9udGFsOiBUaHlOYXZIb3Jpem9udGFsKSB7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbCA9IChob3Jpem9udGFsIGFzIHN0cmluZykgPT09ICdyaWdodCcgPyAnZW5kJyA6IGhvcml6b250YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Z6C55u05o6S5YiXXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1uYXYtLXZlcnRpY2FsJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHRoeVZlcnRpY2FsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5piv5aGr5YWF5qih5byPXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktbmF2LS1maWxsJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHRoeUZpbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWTjeW6lOW8j++8jOiHquWKqOiuoeeul+WuveW6puWtmOaUviB0aHlOYXZJdGVt77yM5bm25re75Yqg5pu05aSa5by55qGGXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHRoeVJlc3BvbnNpdmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmlK/mjIHmmoLlgZzoh6rpgILlupTorqHnrpdcbiAgICAgKi9cbiAgICB0aHlQYXVzZVJlQ2FsY3VsYXRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog5pu05aSa5pON5L2c55qE6I+c5Y2V54K55Ye75YaF6YOo5piv5ZCm5Y+v5YWz6ZetXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSB0aHlQb3BvdmVyT3B0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5SW5zaWRlQ2xvc2FibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5pu05aSa6I+c5Y2V5by55Ye65qGG55qE5Y+C5pWw77yM5bqV5bGC5L2/55SoIFBvcG92ZXIg57uE5Lu2XG4gICAgICogQHR5cGUgVGh5UG9wb3ZlckNvbmZpZ1xuICAgICAqL1xuICAgIHRoeVBvcG92ZXJPcHRpb25zID0gaW5wdXQ8VGh5UG9wb3ZlckNvbmZpZzx1bmtub3duPj4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDlj7Pkvqfpop3lpJbljLrln5/mqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUV4dHJhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlOYXZJdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgc2V0IGxpbmtzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5uZXJMaW5rcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVJbmRleCA9IE5hTjtcbiAgICB9XG4gICAgZ2V0IGxpbmtzKCk6IFF1ZXJ5TGlzdDxUaHlOYXZJdGVtRGlyZWN0aXZlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyTGlua3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFJvdXRlckxpbmtBY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm91dGVyczogUXVlcnlMaXN0PFJvdXRlckxpbmtBY3RpdmU+O1xuXG4gICAgLyoqXG4gICAgICog5ZON5bqU5byP5qih5byP5LiL5pu05aSa5pON5L2c5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdtb3JlJykgbW9yZU9wZXJhdGlvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDlk43lupTlvI/mqKHlvI/kuIvmm7TlpJrlvLnmoYbmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ21vcmVQb3BvdmVyJykgbW9yZVBvcG92ZXI6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICog5Y+z5L6n6aKd5aSW5Yy65Z+f5qih5p2/77yM5pSv5oyBIHRoeUV4dHJhIOS8oOWPguWSjCA8bmctdGVtcGxhdGUgI2V4dHJhPjwvbmctdGVtcGxhdGU+IOaooeadv1xuICAgICAqIEBuYW1lIGV4dHJhXG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdleHRyYScpIGV4dHJhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIEBWaWV3Q2hpbGQoJ21vcmVPcGVyYXRpb25Db250YWluZXInKSBkZWZhdWx0TW9yZU9wZXJhdGlvbjogRWxlbWVudFJlZjxIVE1MQW5jaG9yRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKFRoeU5hdklua0JhckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgaW5rQmFyITogVGh5TmF2SW5rQmFyRGlyZWN0aXZlO1xuXG4gICAgZ2V0IHNob3dJbmtCYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNob3dUeXBlczogVGh5TmF2VHlwZVtdID0gWydwdWxsZWQnLCAndGFicyddO1xuICAgICAgICByZXR1cm4gc2hvd1R5cGVzLmluY2x1ZGVzKHRoaXMudHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDbGFzc2VzKCkge1xuICAgICAgICBsZXQgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKG5hdlR5cGVDbGFzc2VzTWFwW3RoaXMudHlwZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMgPSBbLi4ubmF2VHlwZUNsYXNzZXNNYXBbdGhpcy50eXBlXV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdlNpemVDbGFzc2VzTWFwW3RoaXMuc2l6ZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChuYXZTaXplQ2xhc3Nlc01hcFt0aGlzLnNpemVdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1ckFjdGl2ZUluZGV4OiBudW1iZXI7XG5cbiAgICBwcml2YXRlIHByZXZBY3RpdmVJbmRleDogbnVtYmVyID0gTmFOO1xuXG4gICAgcHJpdmF0ZSBuYXZTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IG51bGwgPSBudWxsO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy50aHlSZXNwb25zaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5UmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNb3JlQnRuT2Zmc2V0KCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rcy50b0FycmF5KCkuZm9yRWFjaChsaW5rID0+IGxpbmsuc2V0T2Zmc2V0KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuSXRlbXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5saW5rcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMubGlua3MpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJlc2l6ZU9ic2VydmVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5saW5rcy5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZVJlc2l6ZU9ic2VydmVyKGl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5waXBlKHRhcCgoKSA9PiBpdGVtLnNldE9mZnNldCgpKSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5yb3V0ZXJzIHx8IFtdKS5tYXAocm91dGVyID0+IHJvdXRlcj8uaXNBY3RpdmVDaGFuZ2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aHlQYXVzZVJlQ2FsY3VsYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNpemVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVNb3JlSXNBY3RpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROYXZJdGVtRGl2aWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2l6ZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU1vcmVJc0FjdGl2ZSgpO1xuXG4gICAgICAgIHRoaXMuY3VyQWN0aXZlSW5kZXggPSB0aGlzLmxpbmtzICYmIHRoaXMubGlua3MubGVuZ3RoID8gdGhpcy5saW5rcy50b0FycmF5KCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5saW5rSXNBY3RpdmUoKSkgOiAtMTtcbiAgICAgICAgaWYgKHRoaXMuY3VyQWN0aXZlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmlua0Jhci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJBY3RpdmVJbmRleCAhPT0gdGhpcy5wcmV2QWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1vcmVCdG5PZmZzZXQoKSB7XG4gICAgICAgIHRoaXMubW9yZUJ0bk9mZnNldCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5kZWZhdWx0TW9yZU9wZXJhdGlvbj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZGVmYXVsdE1vcmVPcGVyYXRpb24/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROYXZJdGVtRGl2aWRlcigpIHtcbiAgICAgICAgY29uc3QgdGFicyA9IHRoaXMubGlua3MudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRhYnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5saW5rSXNBY3RpdmUoKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKGkgIT09IGFjdGl2ZUluZGV4ICYmIGkgIT09IGFjdGl2ZUluZGV4IC0gMSAmJiBpICE9PSB0YWJzLmxlbmd0aCAtIDEpIHx8IChpID09PSBhY3RpdmVJbmRleCAtIDEgJiYgdGhpcy5tb3JlQWN0aXZlKSkge1xuICAgICAgICAgICAgICAgIHRhYnNbaV0uYWRkQ2xhc3MoJ2hhcy1yaWdodC1kaXZpZGVyJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhYnNbaV0ucmVtb3ZlQ2xhc3MoJ2hhcy1yaWdodC1kaXZpZGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVSZXNpemVPYnNlcnZlcihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgOiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1vcmVJc0FjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5tb3JlQWN0aXZlID0gdGhpcy5oaWRkZW5JdGVtcy5zb21lKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGlua0lzQWN0aXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEhpZGRlbkl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1vcmVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdGFicyA9IHRoaXMubGlua3MudG9BcnJheSgpO1xuICAgICAgICBpZiAoIXRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLnNob3dNb3JlID0gdGhpcy5oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnRoeVZlcnRpY2FsID8gdGhpcy5nZXRTaG93SXRlbXNFbmRJbmRleFdoZW5WZXJ0aWNhbCh0YWJzKSA6IHRoaXMuZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuSG9yaXpvbnRhbCh0YWJzKTtcblxuICAgICAgICBjb25zdCBzaG93SXRlbXMgPSB0YWJzLnNsaWNlKDAsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIChzaG93SXRlbXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldE5hdkxpbmtIaWRkZW4oZmFsc2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhpZGRlbkl0ZW1zID0gZW5kSW5kZXggPT09IHRhYnMubGVuZ3RoIC0gMSA/IFtdIDogdGFicy5zbGljZShlbmRJbmRleCArIDEpO1xuICAgICAgICAodGhpcy5oaWRkZW5JdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0TmF2TGlua0hpZGRlbih0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaG93TW9yZSA9IHRoaXMuaGlkZGVuSXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaG93SXRlbXNFbmRJbmRleFdoZW5Ib3Jpem9udGFsKHRhYnM6IFRoeU5hdkl0ZW1EaXJlY3RpdmVbXSkge1xuICAgICAgICBjb25zdCB0YWJzTGVuZ3RoID0gdGFicy5sZW5ndGg7XG4gICAgICAgIGxldCBlbmRJbmRleCA9IHRhYnNMZW5ndGg7XG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnNMZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgX3RvdGFsV2lkdGggPSBpID09PSB0YWJzTGVuZ3RoIC0gMSA/IHRvdGFsV2lkdGggKyB0YWJzW2ldLm9mZnNldC53aWR0aCA6IHRvdGFsV2lkdGggKyB0YWJzW2ldLm9mZnNldC53aWR0aCArIHRhYkl0ZW1SaWdodDtcbiAgICAgICAgICAgIGlmIChfdG90YWxXaWR0aCA+IHRoaXMud3JhcHBlck9mZnNldC53aWR0aCkge1xuICAgICAgICAgICAgICAgIGxldCBtb3JlT3BlcmF0aW9uV2lkdGggPSB0aGlzLm1vcmVCdG5PZmZzZXQud2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggKyBtb3JlT3BlcmF0aW9uV2lkdGggPD0gdGhpcy53cmFwcGVyT2Zmc2V0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggPSBfdG90YWxXaWR0aDtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuZEluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuVmVydGljYWwodGFiczogVGh5TmF2SXRlbURpcmVjdGl2ZVtdKSB7XG4gICAgICAgIGNvbnN0IHRhYnNMZW5ndGggPSB0YWJzLmxlbmd0aDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGFic0xlbmd0aDtcbiAgICAgICAgbGV0IHRvdGFsSGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IF90b3RhbEhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgdGFic1tpXS5vZmZzZXQuaGVpZ2h0O1xuICAgICAgICAgICAgaWYgKF90b3RhbEhlaWdodCA+IHRoaXMud3JhcHBlck9mZnNldC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW9yZU9wZXJhdGlvbkhlaWdodCA9IHRoaXMubW9yZUJ0bk9mZnNldC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSGVpZ2h0ICsgbW9yZU9wZXJhdGlvbkhlaWdodCA8PSB0aGlzLndyYXBwZXJPZmZzZXQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsSGVpZ2h0ID0gX3RvdGFsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNpemVzKCkge1xuICAgICAgICB0aGlzLndyYXBwZXJPZmZzZXQgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDAsXG4gICAgICAgICAgICBsZWZ0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IHx8IDAsXG4gICAgICAgICAgICB0b3A6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCB8fCAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb3Blbk1vcmVNZW51KGV2ZW50OiBFdmVudCwgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLm9wZW4oXG4gICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZHJvcENsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbnNpZGVDbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyBhcyBUaHlQbGFjZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICd0aHktbmF2LWxpc3QtcG9wb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbkFjdGl2ZUNsYXNzOiAndGh5LW5hdi1vcmlnaW4tYWN0aXZlJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50aHlQb3BvdmVyT3B0aW9ucygpID8gdGhpcy50aHlQb3BvdmVyT3B0aW9ucygpIDoge31cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuYXZJdGVtQ2xpY2soaXRlbTogVGh5TmF2SXRlbURpcmVjdGl2ZSkge1xuICAgICAgICBpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0lua0Jhcikge1xuICAgICAgICAgICAgdGhpcy5pbmtCYXIuaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLmxpbmtzPy50b0FycmF5KCkgPz8gW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRhYnMuZmluZChpdGVtID0+IGl0ZW0ubGlua0lzQWN0aXZlKCkpO1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtRWxlbWVudDogSFRNTEVsZW1lbnQgPSBzZWxlY3RlZEl0ZW0gJiYgc2VsZWN0ZWRJdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtICYmIHRoaXMubW9yZUFjdGl2ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtRWxlbWVudCA9IHRoaXMuZGVmYXVsdE1vcmVPcGVyYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2QWN0aXZlSW5kZXggPSB0aGlzLmN1ckFjdGl2ZUluZGV4O1xuICAgICAgICAgICAgdGhpcy5pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoc2VsZWN0ZWRJdGVtRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5VmVydGljYWwsIHRoeVR5cGUgfSA9IGNoYW5nZXM7XG5cbiAgICAgICAgaWYgKHRoeVR5cGU/LmN1cnJlbnRWYWx1ZSAhPT0gdGh5VHlwZT8ucHJldmlvdXNWYWx1ZSB8fCB0aHlWZXJ0aWNhbD8uY3VycmVudFZhbHVlICE9PSB0aHlWZXJ0aWNhbD8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5uYXZTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubmF2U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LW5hdi1saXN0XCIgW25nQ2xhc3NdPVwiaG9yaXpvbnRhbCA/ICdqdXN0aWZ5LWNvbnRlbnQtJyArIGhvcml6b250YWwgOiAnJ1wiICNuYXZMaXN0PlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgQGlmICh0aHlSZXNwb25zaXZlKSB7XG4gICAgPGFcbiAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgY2xhc3M9XCJ0aHktbmF2LW1vcmUtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5kLW5vbmVdPVwiIXNob3dNb3JlXCJcbiAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIWluaXRpYWxpemVkXCJcbiAgICAgICNtb3JlT3BlcmF0aW9uQ29udGFpbmVyXG4gICAgICB0aHlOYXZMaW5rXG4gICAgICBbdGh5TmF2SXRlbUFjdGl2ZV09XCJtb3JlQWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJvcGVuTW9yZU1lbnUoJGV2ZW50LCBuYXZMaXN0UG9wb3ZlcilcIj5cbiAgICAgIEBpZiAobW9yZU9wZXJhdGlvbikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vcmVPcGVyYXRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBsb2NhbGUoKS5tb3JlIH19XG4gICAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLWRvd25cIiBjbGFzcz1cInRoeS1uYXYtbW9yZS1pY29uXCI+PC90aHktaWNvbj5cbiAgICAgIH1cbiAgICA8L2E+XG4gIH1cbiAgQGlmICh0aHlFeHRyYSB8fCBleHRyYSkge1xuICAgIDxkaXYgY2xhc3M9XCJ0aHktbmF2LWV4dHJhXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeUV4dHJhIHx8IGV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgPHRoeS1uYXYtaW5rLWJhciBbc2hvd0lua0Jhcl09XCJzaG93SW5rQmFyXCIgW2lzVmVydGljYWxdPVwidGh5VmVydGljYWxcIj48L3RoeS1uYXYtaW5rLWJhcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25hdkxpc3RQb3BvdmVyPlxuICBAaWYgKG1vcmVQb3BvdmVyKSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJtb3JlUG9wb3ZlclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaGlkZGVuSXRlbXMgfVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIHtcbiAgICA8dGh5LWRyb3Bkb3duLW1lbnUgdGh5SW1tZWRpYXRlUmVuZGVyPlxuICAgICAgQGZvciAoaXRlbSBvZiBoaWRkZW5JdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0aHktbmF2LWl0ZW0tbW9yZVwiXG4gICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgIFt0aHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZJdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MIHwgYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxcIj48L3NwYW4+XG4gICAgICB9XG4gICAgPC90aHktZHJvcGRvd24tbWVudT5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUNULE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7O0FBTzdELE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7SUFDMUIsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3RCLEtBQUssRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUN4QixJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFDdEIsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3RCLFVBQVU7SUFDVixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUM1QixTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztJQUNoQyxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUM1QixtQkFBbUIsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0NBQ3JELENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLEVBQUUsRUFBRSxZQUFZO0lBQ2hCLEVBQUUsRUFBRSxZQUFZO0lBQ2hCLEVBQUUsRUFBRSxZQUFZO0NBQ25CLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFFeEI7Ozs7R0FJRztBQXFCSCxNQUFNLE9BQU8sTUFBTTtJQXBCbkI7UUFxQlksZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQyxTQUFJLEdBQWUsUUFBUSxDQUFDO1FBQzNCLFNBQUksR0FBZSxJQUFJLENBQUM7UUFDekIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsa0JBQWEsR0FBaUU7WUFDakYsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBRUssZ0JBQVcsR0FBMEIsRUFBRSxDQUFDO1FBSXRDLGFBQVEsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELGtCQUFhLEdBQXNDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFM0UsaUJBQVksR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUl6QyxXQUFNLEdBQXlCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQThDbkQ7O1dBRUc7UUFHSCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBU3pCOztXQUVHO1FBQ0gsd0JBQW1CLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRTVDOzs7V0FHRztRQUVILHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUV6Qjs7O1dBR0c7UUFDSCxzQkFBaUIsR0FBRyxLQUFLLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBa0VuRCxvQkFBZSxHQUFXLEdBQUcsQ0FBQztRQUU5QixvQkFBZSxHQUF1QyxJQUFJLENBQUM7S0EwUHRFO0lBeFlHOzs7O09BSUc7SUFDSCxJQUNJLE9BQU8sQ0FBQyxJQUFnQjtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksT0FBTyxDQUFDLElBQWdCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNJLGFBQWEsQ0FBQyxVQUE0QjtRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFJLFVBQXFCLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM5RSxDQUFDO0lBZ0REOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsS0FBSztRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQThCRCxJQUFJLFVBQVU7UUFDVixNQUFNLFNBQVMsR0FBaUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixVQUFVLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFRRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDL0YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUN4RCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ3JILEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FDaEU7cUJBQ0ksSUFBSSxDQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDbkMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDTCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7d0JBQzdCLE9BQU87b0JBQ1gsQ0FBQztvQkFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDakMsQ0FBQztvQkFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUM3QixDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUNMO3FCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6SCxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUM3RyxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxXQUFXLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQzdHLENBQUM7SUFDTixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBb0I7UUFDckMsT0FBTyxPQUFPLGNBQWMsS0FBSyxXQUFXO1lBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxHQUFHLEVBQUU7b0JBQ1IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRU8sY0FBYztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU8sa0NBQWtDLENBQUMsSUFBMkI7UUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7WUFDaEksSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUQsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxNQUFNO1lBQ1YsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsR0FBRyxXQUFXLENBQUM7Z0JBQ3pCLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsSUFBMkI7UUFDaEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6RCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQyxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqRSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE1BQU07WUFDVixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUM7WUFDdkQsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxDQUFDO1lBQ3JELElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksQ0FBQztZQUNuRCxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLENBQUM7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWSxFQUFFLFFBQTBCO1FBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNiLFFBQVEsRUFDUixNQUFNLENBQUMsTUFBTSxDQUNUO1lBQ0ksTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUE0QjtZQUMxQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFNBQVMsRUFBRSxRQUF3QjtZQUNuQyxVQUFVLEVBQUUsc0JBQXNCO1lBQ2xDLGlCQUFpQixFQUFFLHVCQUF1QjtTQUM3QyxFQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMzRCxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXlCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksbUJBQW1CLEdBQWdCLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUU3RixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLFlBQVksS0FBSyxPQUFPLEVBQUUsYUFBYSxJQUFJLFdBQVcsRUFBRSxZQUFZLEtBQUssV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQy9HLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7K0dBemFRLE1BQU07bUdBQU4sTUFBTSx1a0JBMkVLLHFCQUFxQiwySEFPckIscUJBQXFCLDZJQU9yQixxQkFBcUIsMlRBWXJCLHFCQUFxQixtdUJBa0J4QixtQkFBbUIsNkRBWW5CLGdCQUFnQix5TUF1QnRCLHFCQUFxQixtRkN2UHBDLDRyREFnREEsNENEa0NRLE9BQU8sb0ZBQ1AsZ0JBQWdCLG9KQUNoQixtQkFBbUIsb0pBQ25CLE9BQU8sc01BQ1AscUJBQXFCLGtIQUNyQix3QkFBd0IsMEdBQ3hCLDRCQUE0QixzR0FDNUIsa0NBQWtDLDBHQUNsQywyQkFBMkI7OzRGQUd0QixNQUFNO2tCQXBCbEIsU0FBUzsrQkFDSSxTQUFTLFFBRWI7d0JBQ0YsS0FBSyxFQUFFLFNBQVM7cUJBQ25CLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDTCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qiw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMsMkJBQTJCO3FCQUM5Qjs4QkEwQ0csT0FBTztzQkFEVixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFjRixhQUFhO3NCQURoQixLQUFLO2dCQVdOLFdBQVc7c0JBRlYsV0FBVzt1QkFBQyx5QkFBeUI7O3NCQUNyQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQVEzQyxPQUFPO3NCQUZOLFdBQVc7dUJBQUMscUJBQXFCOztzQkFDakMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFRM0MsYUFBYTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQWEzQyxpQkFBaUI7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBYWxDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUYsS0FBSztzQkFEUixlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFZRCxPQUFPO3NCQUFoRSxlQUFlO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFNbEMsYUFBYTtzQkFBbEMsWUFBWTt1QkFBQyxNQUFNO2dCQU1TLFdBQVc7c0JBQXZDLFlBQVk7dUJBQUMsYUFBYTtnQkFPSixLQUFLO3NCQUEzQixZQUFZO3VCQUFDLE9BQU87Z0JBRWdCLG9CQUFvQjtzQkFBeEQsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBRWlCLE1BQU07c0JBQXpELFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGh5UG9wb3ZlciwgVGh5UG9wb3ZlckNvbmZpZyB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgdXNlSG9zdFJlbmRlcmVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZG9tJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBRdWVyeUxpc3QsXG4gICAgc2lnbmFsLFxuICAgIFNpZ25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBXcml0YWJsZVNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUm91dGVyTGlua0FjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUaHlOYXZJbmtCYXJEaXJlY3RpdmUgfSBmcm9tICcuL25hdi1pbmstYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaHlOYXZJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9uYXYtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxQaXBlIH0gZnJvbSAnLi9uYXYucGlwZSc7XG5pbXBvcnQgeyBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsIFRoeURyb3Bkb3duTWVudUl0ZW1EaXJlY3RpdmUsIFRoeURyb3Bkb3duTWVudUl0ZW1BY3RpdmVEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlOYXZMb2NhbGUgfSBmcm9tICduZ3gtdGV0aHlzL2kxOG4nO1xuaW1wb3J0IHsgVGh5UGxhY2VtZW50IH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcblxuZXhwb3J0IHR5cGUgVGh5TmF2VHlwZSA9ICdwdWxsZWQnIHwgJ3RhYnMnIHwgJ3BpbGxzJyB8ICdsaXRlJyB8ICdjYXJkJyB8ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3RoaXJkbHknIHwgJ3NlY29uZGFyeS1kaXZpZGVyJztcbmV4cG9ydCB0eXBlIFRoeU5hdlNpemUgPSAnbGcnIHwgJ21kJyB8ICdzbSc7XG5leHBvcnQgdHlwZSBUaHlOYXZIb3Jpem9udGFsID0gJycgfCAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcblxuY29uc3QgbmF2VHlwZUNsYXNzZXNNYXAgPSB7XG4gICAgcHVsbGVkOiBbJ3RoeS1uYXYtcHVsbGVkJ10sXG4gICAgdGFiczogWyd0aHktbmF2LXRhYnMnXSxcbiAgICBwaWxsczogWyd0aHktbmF2LXBpbGxzJ10sXG4gICAgbGl0ZTogWyd0aHktbmF2LWxpdGUnXSxcbiAgICBjYXJkOiBbJ3RoeS1uYXYtY2FyZCddLFxuICAgIC8v5aaC5LiL57G75Z6L5bey57uP5bqf5byDXG4gICAgcHJpbWFyeTogWyd0aHktbmF2LXByaW1hcnknXSxcbiAgICBzZWNvbmRhcnk6IFsndGh5LW5hdi1zZWNvbmRhcnknXSxcbiAgICB0aGlyZGx5OiBbJ3RoeS1uYXYtdGhpcmRseSddLFxuICAgICdzZWNvbmRhcnktZGl2aWRlcic6IFsndGh5LW5hdi1zZWNvbmRhcnktZGl2aWRlciddXG59O1xuXG5jb25zdCBuYXZTaXplQ2xhc3Nlc01hcCA9IHtcbiAgICBsZzogJ3RoeS1uYXYtbGcnLFxuICAgIG1kOiAndGh5LW5hdi1tZCcsXG4gICAgc206ICd0aHktbmF2LXNtJ1xufTtcblxuY29uc3QgdGFiSXRlbVJpZ2h0ID0gMjA7XG5cbi8qKlxuICog5a+86Iiq57uE5Lu2XG4gKiBAbmFtZSB0aHktbmF2XG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktbmF2JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LW5hdidcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlOYXZJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlOYXZJbmtCYXJEaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbUFjdGl2ZURpcmVjdGl2ZSxcbiAgICAgICAgQnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlOYXYgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSBwb3BvdmVyID0gaW5qZWN0KFRoeVBvcG92ZXIpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHVibGljIHR5cGU6IFRoeU5hdlR5cGUgPSAncHVsbGVkJztcbiAgICBwcml2YXRlIHNpemU6IFRoeU5hdlNpemUgPSAnbWQnO1xuICAgIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGhvcml6b250YWw6IFRoeU5hdkhvcml6b250YWw7XG4gICAgcHVibGljIHdyYXBwZXJPZmZzZXQ6IHsgaGVpZ2h0OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXIgfSA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgdG9wOiAwXG4gICAgfTtcblxuICAgIHB1YmxpYyBoaWRkZW5JdGVtczogVGh5TmF2SXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgICBwdWJsaWMgbW9yZUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIHJlYWRvbmx5IHNob3dNb3JlOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICBwcml2YXRlIG1vcmVCdG5PZmZzZXQ6IHsgaGVpZ2h0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfSA9IHsgaGVpZ2h0OiAwLCB3aWR0aDogMCB9O1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgaW5uZXJMaW5rczogUXVlcnlMaXN0PFRoeU5hdkl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgbG9jYWxlOiBTaWduYWw8VGh5TmF2TG9jYWxlPiA9IGluamVjdExvY2FsZSgnbmF2Jyk7XG5cbiAgICAvKipcbiAgICAgKiDlr7zoiKrnsbvlnotcbiAgICAgKiBAdHlwZSBwdWxsZWQgfCB0YWJzIHwgcGlsbHMgfCBsaXRlIHwgcHJpbWFyeSB8IHNlY29uZGFyeSB8IHRoaXJkbHkgfCBzZWNvbmRhcnktZGl2aWRlclxuICAgICAqIEBkZWZhdWx0IHB1bGxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVR5cGUodHlwZTogVGh5TmF2VHlwZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICdwdWxsZWQnO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlr7zoiKrlpKflsI9cbiAgICAgKiBAdHlwZSBsZyB8IG1kIHwgc21cbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUoc2l6ZTogVGh5TmF2U2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmsLTlubPmjpLliJdcbiAgICAgKiBAdHlwZSAnJyB8ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlIb3Jpem9udGFsKGhvcml6b250YWw6IFRoeU5hdkhvcml6b250YWwpIHtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsID0gKGhvcml6b250YWwgYXMgc3RyaW5nKSA9PT0gJ3JpZ2h0JyA/ICdlbmQnIDogaG9yaXpvbnRhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblnoLnm7TmjpLliJdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LW5hdi0tdmVydGljYWwnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5VmVydGljYWw6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmK/loavlhYXmqKHlvI9cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1uYXYtLWZpbGwnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5RmlsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5ZON5bqU5byP77yM6Ieq5Yqo6K6h566X5a695bqm5a2Y5pS+IHRoeU5hdkl0ZW3vvIzlubbmt7vliqDmm7TlpJrlvLnmoYZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5UmVzcG9uc2l2ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaUr+aMgeaaguWBnOiHqumAguW6lOiuoeeul1xuICAgICAqL1xuICAgIHRoeVBhdXNlUmVDYWxjdWxhdGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDmm7TlpJrmk43kvZznmoToj5zljZXngrnlh7vlhoXpg6jmmK/lkKblj6/lhbPpl61cbiAgICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIHRoeVBvcG92ZXJPcHRpb25zXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlJbnNpZGVDbG9zYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDmm7TlpJroj5zljZXlvLnlh7rmoYbnmoTlj4LmlbDvvIzlupXlsYLkvb/nlKggUG9wb3ZlciDnu4Tku7ZcbiAgICAgKiBAdHlwZSBUaHlQb3BvdmVyQ29uZmlnXG4gICAgICovXG4gICAgdGh5UG9wb3Zlck9wdGlvbnMgPSBpbnB1dDxUaHlQb3BvdmVyQ29uZmlnPHVua25vd24+PihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIOWPs+S+p+mineWkluWMuuWfn+aooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RXh0cmE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeU5hdkl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBzZXQgbGlua3ModmFsdWUpIHtcbiAgICAgICAgdGhpcy5pbm5lckxpbmtzID0gdmFsdWU7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZUluZGV4ID0gTmFOO1xuICAgIH1cbiAgICBnZXQgbGlua3MoKTogUXVlcnlMaXN0PFRoeU5hdkl0ZW1EaXJlY3RpdmU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJMaW5rcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oUm91dGVyTGlua0FjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3V0ZXJzOiBRdWVyeUxpc3Q8Um91dGVyTGlua0FjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiDlk43lupTlvI/mqKHlvI/kuIvmm7TlpJrmk43kvZzmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ21vcmUnKSBtb3JlT3BlcmF0aW9uOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWTjeW6lOW8j+aooeW8j+S4i+abtOWkmuW8ueahhuaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnbW9yZVBvcG92ZXInKSBtb3JlUG9wb3ZlcjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDlj7Pkvqfpop3lpJbljLrln5/mqKHmnb/vvIzmlK/mjIEgdGh5RXh0cmEg5Lyg5Y+C5ZKMIDxuZy10ZW1wbGF0ZSAjZXh0cmE+PC9uZy10ZW1wbGF0ZT4g5qih5p2/XG4gICAgICogQG5hbWUgZXh0cmFcbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2V4dHJhJykgZXh0cmE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgQFZpZXdDaGlsZCgnbW9yZU9wZXJhdGlvbkNvbnRhaW5lcicpIGRlZmF1bHRNb3JlT3BlcmF0aW9uOiBFbGVtZW50UmVmPEhUTUxBbmNob3JFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoVGh5TmF2SW5rQmFyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmtCYXIhOiBUaHlOYXZJbmtCYXJEaXJlY3RpdmU7XG5cbiAgICBnZXQgc2hvd0lua0JhcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2hvd1R5cGVzOiBUaHlOYXZUeXBlW10gPSBbJ3B1bGxlZCcsICd0YWJzJ107XG4gICAgICAgIHJldHVybiBzaG93VHlwZXMuaW5jbHVkZXModGhpcy50eXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNsYXNzZXMoKSB7XG4gICAgICAgIGxldCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAobmF2VHlwZUNsYXNzZXNNYXBbdGhpcy50eXBlXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcyA9IFsuLi5uYXZUeXBlQ2xhc3Nlc01hcFt0aGlzLnR5cGVdXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmF2U2l6ZUNsYXNzZXNNYXBbdGhpcy5zaXplXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKG5hdlNpemVDbGFzc2VzTWFwW3RoaXMuc2l6ZV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3VyQWN0aXZlSW5kZXg6IG51bWJlcjtcblxuICAgIHByaXZhdGUgcHJldkFjdGl2ZUluZGV4OiBudW1iZXIgPSBOYU47XG5cbiAgICBwcml2YXRlIG5hdlN1YnNjcmlwdGlvbjogeyB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy50aHlSZXNwb25zaXZlKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vcmVCdG5PZmZzZXQoKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1vcmVCdG5PZmZzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtzLnRvQXJyYXkoKS5mb3JFYWNoKGxpbmsgPT4gbGluay5zZXRPZmZzZXQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaWRkZW5JdGVtcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxpbmtzLmNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5saW5rcyksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdlN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubmF2U3Vic2NyaXB0aW9uID0gbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUmVzaXplT2JzZXJ2ZXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmxpbmtzLm1hcChpdGVtID0+IHRoaXMuY3JlYXRlUmVzaXplT2JzZXJ2ZXIoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUodGFwKCgpID0+IGl0ZW0uc2V0T2Zmc2V0KCkpKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJvdXRlcnMgfHwgW10pLm1hcChyb3V0ZXIgPT4gcm91dGVyPy5pc0FjdGl2ZUNoYW5nZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRoeVBhdXNlUmVDYWxjdWxhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGh5UmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE1vcmVCdG5PZmZzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNpemVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVNb3JlSXNBY3RpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROYXZJdGVtRGl2aWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2l6ZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU1vcmVJc0FjdGl2ZSgpO1xuXG4gICAgICAgIHRoaXMuY3VyQWN0aXZlSW5kZXggPSB0aGlzLmxpbmtzICYmIHRoaXMubGlua3MubGVuZ3RoID8gdGhpcy5saW5rcy50b0FycmF5KCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5saW5rSXNBY3RpdmUoKSkgOiAtMTtcbiAgICAgICAgaWYgKHRoaXMuY3VyQWN0aXZlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmlua0Jhci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJBY3RpdmVJbmRleCAhPT0gdGhpcy5wcmV2QWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1vcmVCdG5PZmZzZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5tb3JlQnRuT2Zmc2V0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgKyBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGU/Lm1hcmdpbkJvdHRvbSkgfHwgMCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZT8ubWFyZ2luUmlnaHQpIHx8IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5hdkl0ZW1EaXZpZGVyKCkge1xuICAgICAgICBjb25zdCB0YWJzID0gdGhpcy5saW5rcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGFicy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmxpbmtJc0FjdGl2ZSgpKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgoaSAhPT0gYWN0aXZlSW5kZXggJiYgaSAhPT0gYWN0aXZlSW5kZXggLSAxICYmIGkgIT09IHRhYnMubGVuZ3RoIC0gMSkgfHwgKGkgPT09IGFjdGl2ZUluZGV4IC0gMSAmJiB0aGlzLm1vcmVBY3RpdmUpKSB7XG4gICAgICAgICAgICAgICAgdGFic1tpXS5hZGRDbGFzcygnaGFzLXJpZ2h0LWRpdmlkZXInKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFic1tpXS5yZW1vdmVDbGFzcygnaGFzLXJpZ2h0LWRpdmlkZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVJlc2l6ZU9ic2VydmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICA6IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXNpemUub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzaXplLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlTW9yZUlzQWN0aXZlKCkge1xuICAgICAgICB0aGlzLm1vcmVBY3RpdmUgPSB0aGlzLmhpZGRlbkl0ZW1zLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5saW5rSXNBY3RpdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SGlkZGVuSXRlbXMoKSB7XG4gICAgICAgIHRoaXMubW9yZUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0YWJzID0gdGhpcy5saW5rcy50b0FycmF5KCk7XG4gICAgICAgIGlmICghdGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01vcmUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50aHlWZXJ0aWNhbCA/IHRoaXMuZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuVmVydGljYWwodGFicykgOiB0aGlzLmdldFNob3dJdGVtc0VuZEluZGV4V2hlbkhvcml6b250YWwodGFicyk7XG5cbiAgICAgICAgY29uc3Qgc2hvd0l0ZW1zID0gdGFicy5zbGljZSgwLCBlbmRJbmRleCArIDEpO1xuICAgICAgICAoc2hvd0l0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXROYXZMaW5rSGlkZGVuKGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5oaWRkZW5JdGVtcyA9IGVuZEluZGV4ID09PSB0YWJzLmxlbmd0aCAtIDEgPyBbXSA6IHRhYnMuc2xpY2UoZW5kSW5kZXggKyAxKTtcbiAgICAgICAgKHRoaXMuaGlkZGVuSXRlbXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldE5hdkxpbmtIaWRkZW4odHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2hvd01vcmUuc2V0KHRoaXMuaGlkZGVuSXRlbXMubGVuZ3RoID4gMCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuSG9yaXpvbnRhbCh0YWJzOiBUaHlOYXZJdGVtRGlyZWN0aXZlW10pIHtcbiAgICAgICAgY29uc3QgdGFic0xlbmd0aCA9IHRhYnMubGVuZ3RoO1xuICAgICAgICBsZXQgZW5kSW5kZXggPSB0YWJzTGVuZ3RoO1xuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IF90b3RhbFdpZHRoID0gaSA9PT0gdGFic0xlbmd0aCAtIDEgPyB0b3RhbFdpZHRoICsgdGFic1tpXS5vZmZzZXQud2lkdGggOiB0b3RhbFdpZHRoICsgdGFic1tpXS5vZmZzZXQud2lkdGggKyB0YWJJdGVtUmlnaHQ7XG4gICAgICAgICAgICBpZiAoX3RvdGFsV2lkdGggPiB0aGlzLndyYXBwZXJPZmZzZXQud2lkdGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW9yZU9wZXJhdGlvbldpZHRoID0gdGhpcy5tb3JlQnRuT2Zmc2V0LndpZHRoO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbFdpZHRoICsgbW9yZU9wZXJhdGlvbldpZHRoIDw9IHRoaXMud3JhcHBlck9mZnNldC53aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGkgLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoID0gX3RvdGFsV2lkdGg7XG4gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmRJbmRleDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNob3dJdGVtc0VuZEluZGV4V2hlblZlcnRpY2FsKHRhYnM6IFRoeU5hdkl0ZW1EaXJlY3RpdmVbXSkge1xuICAgICAgICBjb25zdCB0YWJzTGVuZ3RoID0gdGFicy5sZW5ndGg7XG4gICAgICAgIGxldCBlbmRJbmRleCA9IHRhYnNMZW5ndGg7XG4gICAgICAgIGxldCB0b3RhbEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFic0xlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBfdG90YWxIZWlnaHQgPSB0b3RhbEhlaWdodCArIHRhYnNbaV0ub2Zmc2V0LmhlaWdodDtcbiAgICAgICAgICAgIGlmIChfdG90YWxIZWlnaHQgPiB0aGlzLndyYXBwZXJPZmZzZXQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1vcmVPcGVyYXRpb25IZWlnaHQgPSB0aGlzLm1vcmVCdG5PZmZzZXQuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbEhlaWdodCArIG1vcmVPcGVyYXRpb25IZWlnaHQgPD0gdGhpcy53cmFwcGVyT2Zmc2V0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGkgLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b3RhbEhlaWdodCA9IF90b3RhbEhlaWdodDtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuZEluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTaXplcygpIHtcbiAgICAgICAgdGhpcy53cmFwcGVyT2Zmc2V0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAwLFxuICAgICAgICAgICAgbGVmdDogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwLFxuICAgICAgICAgICAgdG9wOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgfHwgMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9wZW5Nb3JlTWVudShldmVudDogRXZlbnQsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMucG9wb3Zlci5vcGVuKFxuICAgICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BDbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5zaWRlQ2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScgYXMgVGh5UGxhY2VtZW50LFxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiAndGh5LW5hdi1saXN0LXBvcG92ZXInLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5BY3RpdmVDbGFzczogJ3RoeS1uYXYtb3JpZ2luLWFjdGl2ZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMudGh5UG9wb3Zlck9wdGlvbnMoKSA/IHRoaXMudGh5UG9wb3Zlck9wdGlvbnMoKSA6IHt9XG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmF2SXRlbUNsaWNrKGl0ZW06IFRoeU5hdkl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dJbmtCYXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5rQmFyLmhpZGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJzID0gdGhpcy5saW5rcz8udG9BcnJheSgpID8/IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0YWJzLmZpbmQoaXRlbSA9PiBpdGVtLmxpbmtJc0FjdGl2ZSgpKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkSXRlbUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gc2VsZWN0ZWRJdGVtICYmIHNlbGVjdGVkSXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSAmJiB0aGlzLm1vcmVBY3RpdmUpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUVsZW1lbnQgPSB0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJldkFjdGl2ZUluZGV4ID0gdGhpcy5jdXJBY3RpdmVJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaW5rQmFyLmFsaWduVG9FbGVtZW50KHNlbGVjdGVkSXRlbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHRoeVZlcnRpY2FsLCB0aHlUeXBlIH0gPSBjaGFuZ2VzO1xuXG4gICAgICAgIGlmICh0aHlUeXBlPy5jdXJyZW50VmFsdWUgIT09IHRoeVR5cGU/LnByZXZpb3VzVmFsdWUgfHwgdGh5VmVydGljYWw/LmN1cnJlbnRWYWx1ZSAhPT0gdGh5VmVydGljYWw/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1uYXYtbGlzdFwiIFtuZ0NsYXNzXT1cImhvcml6b250YWwgPyAnanVzdGlmeS1jb250ZW50LScgKyBob3Jpem9udGFsIDogJydcIiAjbmF2TGlzdD5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIEBpZiAodGh5UmVzcG9uc2l2ZSkge1xuICAgIDxhXG4gICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgIGNsYXNzPVwidGh5LW5hdi1tb3JlLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3MuZC1ub25lXT1cIiFzaG93TW9yZSgpXCJcbiAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIWluaXRpYWxpemVkXCJcbiAgICAgICNtb3JlT3BlcmF0aW9uQ29udGFpbmVyXG4gICAgICB0aHlOYXZMaW5rXG4gICAgICBbdGh5TmF2SXRlbUFjdGl2ZV09XCJtb3JlQWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJvcGVuTW9yZU1lbnUoJGV2ZW50LCBuYXZMaXN0UG9wb3ZlcilcIj5cbiAgICAgIEBpZiAobW9yZU9wZXJhdGlvbikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vcmVPcGVyYXRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBsb2NhbGUoKS5tb3JlIH19XG4gICAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLWRvd25cIiBjbGFzcz1cInRoeS1uYXYtbW9yZS1pY29uXCI+PC90aHktaWNvbj5cbiAgICAgIH1cbiAgICA8L2E+XG4gIH1cbiAgQGlmICh0aHlFeHRyYSB8fCBleHRyYSkge1xuICAgIDxkaXYgY2xhc3M9XCJ0aHktbmF2LWV4dHJhXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeUV4dHJhIHx8IGV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgPHRoeS1uYXYtaW5rLWJhciBbc2hvd0lua0Jhcl09XCJzaG93SW5rQmFyXCIgW2lzVmVydGljYWxdPVwidGh5VmVydGljYWxcIj48L3RoeS1uYXYtaW5rLWJhcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25hdkxpc3RQb3BvdmVyPlxuICBAaWYgKG1vcmVQb3BvdmVyKSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJtb3JlUG9wb3ZlclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaGlkZGVuSXRlbXMgfVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIHtcbiAgICA8dGh5LWRyb3Bkb3duLW1lbnUgdGh5SW1tZWRpYXRlUmVuZGVyPlxuICAgICAgQGZvciAoaXRlbSBvZiBoaWRkZW5JdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0aHktbmF2LWl0ZW0tbW9yZVwiXG4gICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgIFt0aHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZJdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MIHwgYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxcIj48L3NwYW4+XG4gICAgICB9XG4gICAgPC90aHktZHJvcGRvd24tbWVudT5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,3 +1,3 @@
1
1
  import { Version } from '@angular/core';
2
- export const VERSION = new Version('18.2.13');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4yLjEzJyk7XG4iXX0=
2
+ export const VERSION = new Version('18.2.15');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4yLjE1Jyk7XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, HostBinding, Input, inject, ChangeDetectorRef, ChangeDetectionStrategy, ElementRef, NgZone, input, DestroyRef, Directive, ContentChildren, forwardRef, ANIMATION_MODULE_TYPE, Pipe, ContentChild, ViewChild, NgModule } from '@angular/core';
2
+ import { Component, HostBinding, Input, inject, ChangeDetectorRef, ChangeDetectionStrategy, ElementRef, NgZone, input, DestroyRef, Directive, ContentChildren, forwardRef, ANIMATION_MODULE_TYPE, Pipe, signal, ContentChild, ViewChild, NgModule } from '@angular/core';
3
3
  import { ThyIcon, ThyIconModule } from 'ngx-tethys/icon';
4
4
  import { coerceBooleanProperty, warnDeprecation } from 'ngx-tethys/util';
5
5
  import { useHostRenderer } from '@tethys/cdk/dom';
@@ -321,7 +321,7 @@ class ThyNav {
321
321
  top: 0
322
322
  };
323
323
  this.hiddenItems = [];
324
- this.showMore = true;
324
+ this.showMore = signal(false);
325
325
  this.moreBtnOffset = { height: 0, width: 0 };
326
326
  this.hostRenderer = useHostRenderer();
327
327
  this.locale = injectLocale('nav');
@@ -410,6 +410,7 @@ class ThyNav {
410
410
  if (this.thyResponsive) {
411
411
  this.setMoreBtnOffset();
412
412
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
413
+ this.setMoreBtnOffset();
413
414
  this.links.toArray().forEach(link => link.setOffset());
414
415
  this.setHiddenItems();
415
416
  });
@@ -425,6 +426,7 @@ class ThyNav {
425
426
  return;
426
427
  }
427
428
  if (this.thyResponsive) {
429
+ this.setMoreBtnOffset();
428
430
  this.resetSizes();
429
431
  this.setHiddenItems();
430
432
  this.calculateMoreIsActive();
@@ -457,9 +459,10 @@ class ThyNav {
457
459
  }
458
460
  }
459
461
  setMoreBtnOffset() {
462
+ const computedStyle = window.getComputedStyle(this.defaultMoreOperation?.nativeElement);
460
463
  this.moreBtnOffset = {
461
- height: this.defaultMoreOperation?.nativeElement?.offsetHeight,
462
- width: this.defaultMoreOperation?.nativeElement?.offsetWidth
464
+ height: this.defaultMoreOperation?.nativeElement?.offsetHeight + parseFloat(computedStyle?.marginBottom) || 0,
465
+ width: this.defaultMoreOperation?.nativeElement?.offsetWidth + parseFloat(computedStyle?.marginRight) || 0
463
466
  };
464
467
  }
465
468
  setNavItemDivider() {
@@ -498,7 +501,7 @@ class ThyNav {
498
501
  const tabs = this.links.toArray();
499
502
  if (!tabs.length) {
500
503
  this.hiddenItems = [];
501
- this.showMore = this.hiddenItems.length > 0;
504
+ this.showMore.set(false);
502
505
  return;
503
506
  }
504
507
  const endIndex = this.thyVertical ? this.getShowItemsEndIndexWhenVertical(tabs) : this.getShowItemsEndIndexWhenHorizontal(tabs);
@@ -510,7 +513,7 @@ class ThyNav {
510
513
  (this.hiddenItems || []).forEach(item => {
511
514
  item.setNavLinkHidden(true);
512
515
  });
513
- this.showMore = this.hiddenItems.length > 0;
516
+ this.showMore.set(this.hiddenItems.length > 0);
514
517
  this.initialized = true;
515
518
  }
516
519
  getShowItemsEndIndexWhenHorizontal(tabs) {
@@ -609,7 +612,7 @@ class ThyNav {
609
612
  }
610
613
  }
611
614
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyNav, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
612
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: false, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: false, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: false, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
615
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: false, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: false, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: false, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: false, isRequired: false, transformFunction: coerceBooleanProperty }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
613
616
  }
614
617
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyNav, decorators: [{
615
618
  type: Component,
@@ -625,7 +628,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
625
628
  ThyDropdownMenuItemDirective,
626
629
  ThyDropdownMenuItemActiveDirective,
627
630
  BypassSecurityTrustHtmlPipe
628
- ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
631
+ ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
629
632
  }], propDecorators: { thyType: [{
630
633
  type: Input
631
634
  }], thySize: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-nav.mjs","sources":["../../../src/nav/icon-nav/icon-nav-link.directive.ts","../../../src/nav/icon-nav/icon-nav.component.ts","../../../src/nav/icon-nav/icon-nav.component.html","../../../src/nav/nav-item.directive.ts","../../../src/nav/nav-ink-bar.directive.ts","../../../src/nav/nav.pipe.ts","../../../src/nav/nav.component.ts","../../../src/nav/nav.component.html","../../../src/nav/nav.module.ts","../../../src/nav/ngx-tethys-nav.ts"],"sourcesContent":["import { Component, HostBinding, Input } from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @private\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thyIconNavLink]',\n template: '<ng-content></ng-content>@if (icon) {<thy-icon [thyIconName]=\"icon\"></thy-icon>}',\n standalone: true,\n imports: [ThyIcon]\n})\nexport class ThyIconNavLink {\n @HostBinding('class.active') navLinkActive = false;\n\n @HostBinding('class.thy-icon-nav-link') navLinkClass = true;\n\n icon: string;\n\n @Input()\n set thyIconNavLinkIcon(icon: string) {\n this.icon = icon;\n }\n\n @Input({ transform: coerceBooleanProperty })\n set thyIconNavLinkActive(active: boolean) {\n this.navLinkActive = active;\n }\n}\n","import { Component, OnInit, HostBinding, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { warnDeprecation } from 'ngx-tethys/util';\n\ntype IconNavTypes = 'primary' | 'secondary' | 'individual' | '';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-icon-nav',\n templateUrl: './icon-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class ThyIconNav implements OnInit {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private initialized = false;\n\n private hostRenderer = useHostRenderer();\n\n type: IconNavTypes;\n\n @HostBinding(`class.thy-icon-nav`) isIconNav = true;\n\n @Input() set thyType(type: IconNavTypes) {\n this.type = type;\n this.updateClasses();\n this.changeDetectorRef.markForCheck();\n }\n\n private updateClasses(bypassInitialized?: boolean) {\n if (!bypassInitialized && !this.initialized) {\n return;\n }\n this.hostRenderer.updateClass(this.type ? [`thy-icon-nav-${this.type}`] : []);\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('thy-icon-nav has been deprecated, please use thyAction and thy-space components instead of it');\n }\n }\n\n ngOnInit(): void {\n this.initialized = true;\n this.updateClasses(true);\n }\n}\n","<ng-content></ng-content>\n","import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport {\n AfterViewInit,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n NgZone,\n QueryList\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyNavLink = '' | 'active';\n\n/**\n * 导航项\n * @name thyNavItem\n * @order 20\n */\n@Directive({\n selector: '[thyNavLink],[thyNavItem]',\n host: {\n class: 'thy-nav-item',\n '[class.active]': 'thyNavItemActive || thyNavLinkActive',\n '[class.disabled]': 'thyNavItemDisabled'\n },\n standalone: true\n})\nexport class ThyNavItemDirective implements AfterViewInit {\n elementRef = inject(ElementRef);\n private routerLinkActive = inject(RouterLinkActive, { optional: true })!;\n private ngZone = inject(NgZone);\n\n /**\n * 唯一标识\n */\n id = input<string>();\n\n /**\n * 是否激活状态\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavItemActive: boolean;\n\n /**\n * 已经废弃,请使用 thyNavItemActive\n * @deprecated please use thyNavItemActive\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavLinkActive: boolean;\n\n /**\n * 是否禁用\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavItemDisabled: boolean;\n\n /**\n * @private\n */\n @ContentChildren(forwardRef(() => ThyNavItemDirective), { descendants: true })\n links: QueryList<ThyNavItemDirective>;\n\n /**\n * @private\n */\n @ContentChildren(RouterLinkActive, { descendants: true }) routers: QueryList<RouterLinkActive>;\n\n // @HostBinding('attr.href') navLinkHref = 'javascript:;';\n\n public offset: {\n width: number;\n height: number;\n left: number;\n top: number;\n } = {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n };\n\n public content: HTMLElement;\n\n public isActive: boolean;\n\n private hostRenderer = useHostRenderer();\n\n private readonly destroyRef = inject(DestroyRef);\n\n ngAfterViewInit() {\n this.setOffset();\n\n this.content = this.elementRef.nativeElement.outerHTML;\n\n this.ngZone.onStable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.isActive = this.linkIsActive();\n });\n }\n\n setOffset() {\n this.offset = {\n width: this.elementRef.nativeElement.offsetWidth || this.offset.width,\n height: this.elementRef.nativeElement.offsetHeight || this.offset.height,\n left: this.elementRef.nativeElement.offsetLeft || this.offset.left,\n top: this.elementRef.nativeElement.offsetTop || this.offset.top\n };\n }\n\n linkIsActive() {\n return (\n this.thyNavItemActive ||\n this.thyNavLinkActive ||\n (this.routerLinkActive && this.routerLinkActive.isActive) ||\n this.routers.some(router => router.isActive) ||\n this.links.some(item => item.thyNavItemActive) ||\n this.links.some(item => item.thyNavLinkActive)\n );\n }\n\n setNavLinkHidden(value: boolean) {\n if (value) {\n this.hostRenderer.addClass('thy-nav-item-hidden');\n } else {\n this.hostRenderer.removeClass('thy-nav-item-hidden');\n }\n }\n\n addClass(className: string) {\n this.hostRenderer.addClass(className);\n }\n\n removeClass(className: string) {\n this.hostRenderer.removeClass(className);\n }\n}\n","import { ANIMATION_MODULE_TYPE, Directive, ElementRef, Input, NgZone, inject } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { take } from 'rxjs/operators';\n\n/**\n * @internal\n */\n@Directive({\n selector: 'thy-nav-ink-bar, [thyNavInkBar]',\n host: {\n class: 'thy-nav-ink-bar',\n '[class.thy-nav-ink-bar-animated]': 'animated'\n },\n standalone: true\n})\nexport class ThyNavInkBarDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private ngZone = inject(NgZone);\n animationMode? = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n @Input({ transform: coerceBooleanProperty }) isVertical: boolean;\n\n @Input({ transform: coerceBooleanProperty }) showInkBar: boolean;\n\n get animated(): boolean {\n return this.animationMode !== 'NoopAnimations' && this.showInkBar;\n }\n\n public alignToElement(element: HTMLElement): void {\n this.show();\n this.ngZone.run(() => {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.setStyles(element);\n });\n });\n }\n\n private setStyles(element: HTMLElement): void {\n const inkBar: HTMLElement = this.elementRef.nativeElement;\n if (!this.isVertical) {\n inkBar.style.top = '';\n inkBar.style.bottom = '0px';\n inkBar.style.height = '2px';\n inkBar.style.left = this.getLeftPosition(element);\n inkBar.style.width = this.getElementWidth(element);\n } else {\n inkBar.style.left = '';\n inkBar.style.width = '2px';\n inkBar.style.top = this.getTopPosition(element);\n inkBar.style.height = this.getElementHeight(element);\n }\n }\n\n private getLeftPosition(element: HTMLElement): string {\n return element ? `${element.offsetLeft || 0}px` : '0';\n }\n\n private getElementWidth(element: HTMLElement): string {\n return element ? `${element.offsetWidth || 0}px` : '0';\n }\n\n private getTopPosition(element: HTMLElement): string {\n return element ? `${element.offsetTop || 0}px` : '0';\n }\n\n private getElementHeight(element: HTMLElement): string {\n return element ? `${element.offsetHeight || 0}px` : '0';\n }\n\n private show() {\n this.elementRef.nativeElement.style.visibility = 'visible';\n }\n\n public hide() {\n this.elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * @private\n */\n@Pipe({\n name: 'bypassSecurityTrustHtml',\n standalone: true\n})\nexport class BypassSecurityTrustHtmlPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(format: string): any {\n return this.sanitizer.bypassSecurityTrustHtml(format);\n }\n}\n","import { ThyPopover, ThyPopoverConfig } from 'ngx-tethys/popover';\nimport { merge, Observable, of } from 'rxjs';\nimport { startWith, take, tap } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostBinding,\n inject,\n input,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n QueryList,\n Signal,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { RouterLinkActive } from '@angular/router';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\nimport { ThyDropdownMenuComponent, ThyDropdownMenuItemDirective, ThyDropdownMenuItemActiveDirective } from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { injectLocale, ThyNavLocale } from 'ngx-tethys/i18n';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\nexport type ThyNavType = 'pulled' | 'tabs' | 'pills' | 'lite' | 'card' | 'primary' | 'secondary' | 'thirdly' | 'secondary-divider';\nexport type ThyNavSize = 'lg' | 'md' | 'sm';\nexport type ThyNavHorizontal = '' | 'start' | 'center' | 'end';\n\nconst navTypeClassesMap = {\n pulled: ['thy-nav-pulled'],\n tabs: ['thy-nav-tabs'],\n pills: ['thy-nav-pills'],\n lite: ['thy-nav-lite'],\n card: ['thy-nav-card'],\n //如下类型已经废弃\n primary: ['thy-nav-primary'],\n secondary: ['thy-nav-secondary'],\n thirdly: ['thy-nav-thirdly'],\n 'secondary-divider': ['thy-nav-secondary-divider']\n};\n\nconst navSizeClassesMap = {\n lg: 'thy-nav-lg',\n md: 'thy-nav-md',\n sm: 'thy-nav-sm'\n};\n\nconst tabItemRight = 20;\n\n/**\n * 导航组件\n * @name thy-nav\n * @order 10\n */\n@Component({\n selector: 'thy-nav',\n templateUrl: './nav.component.html',\n host: {\n class: 'thy-nav'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgClass,\n NgTemplateOutlet,\n ThyNavItemDirective,\n ThyIcon,\n ThyNavInkBarDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemActiveDirective,\n BypassSecurityTrustHtmlPipe\n ]\n})\nexport class ThyNav implements OnInit, AfterViewInit, AfterContentInit, AfterContentChecked, OnChanges {\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private popover = inject(ThyPopover);\n\n private readonly destroyRef = inject(DestroyRef);\n\n public type: ThyNavType = 'pulled';\n private size: ThyNavSize = 'md';\n public initialized = false;\n\n public horizontal: ThyNavHorizontal;\n public wrapperOffset: { height: number; width: number; left: number; top: number } = {\n height: 0,\n width: 0,\n left: 0,\n top: 0\n };\n\n public hiddenItems: ThyNavItemDirective[] = [];\n\n public moreActive: boolean;\n\n public showMore = true;\n\n private moreBtnOffset: { height: number; width: number } = { height: 0, width: 0 };\n\n private hostRenderer = useHostRenderer();\n\n private innerLinks: QueryList<ThyNavItemDirective>;\n\n locale: Signal<ThyNavLocale> = injectLocale('nav');\n\n /**\n * 导航类型\n * @type pulled | tabs | pills | lite | primary | secondary | thirdly | secondary-divider\n * @default pulled\n */\n @Input()\n set thyType(type: ThyNavType) {\n this.type = type || 'pulled';\n if (this.initialized) {\n this.updateClasses();\n }\n }\n\n /**\n * 导航大小\n * @type lg | md | sm\n * @default md\n */\n @Input()\n set thySize(size: ThyNavSize) {\n this.size = size;\n if (this.initialized) {\n this.updateClasses();\n }\n }\n\n /**\n * 水平排列\n * @type '' | 'start' | 'center' | 'end'\n * @default false\n */\n @Input()\n set thyHorizontal(horizontal: ThyNavHorizontal) {\n this.horizontal = (horizontal as string) === 'right' ? 'end' : horizontal;\n }\n\n /**\n * 是否垂直排列\n * @default false\n */\n @HostBinding('class.thy-nav--vertical')\n @Input({ transform: coerceBooleanProperty })\n thyVertical: boolean;\n\n /**\n * 是否是填充模式\n */\n @HostBinding('class.thy-nav--fill')\n @Input({ transform: coerceBooleanProperty })\n thyFill: boolean = false;\n\n /**\n * 是否响应式,自动计算宽度存放 thyNavItem,并添加更多弹框\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyResponsive: boolean;\n\n /**\n * 支持暂停自适应计算\n */\n thyPauseReCalculate = input<boolean>(false);\n\n /**\n * 更多操作的菜单点击内部是否可关闭\n * @deprecated please use thyPopoverOptions\n */\n @Input({ transform: coerceBooleanProperty })\n thyInsideClosable = true;\n\n /**\n * 更多菜单弹出框的参数,底层使用 Popover 组件\n * @type ThyPopoverConfig\n */\n thyPopoverOptions = input<ThyPopoverConfig<unknown>>(null);\n\n /**\n * 右侧额外区域模板\n * @type TemplateRef\n */\n @Input() thyExtra: TemplateRef<unknown>;\n\n /**\n * @private\n */\n @ContentChildren(ThyNavItemDirective, { descendants: true })\n set links(value) {\n this.innerLinks = value;\n this.prevActiveIndex = NaN;\n }\n get links(): QueryList<ThyNavItemDirective> {\n return this.innerLinks;\n }\n\n /**\n * @private\n */\n @ContentChildren(RouterLinkActive, { descendants: true }) routers: QueryList<RouterLinkActive>;\n\n /**\n * 响应式模式下更多操作模板\n * @type TemplateRef\n */\n @ContentChild('more') moreOperation: TemplateRef<unknown>;\n\n /**\n * 响应式模式下更多弹框模板\n * @type TemplateRef\n */\n @ContentChild('morePopover') morePopover: TemplateRef<unknown>;\n\n /**\n * 右侧额外区域模板,支持 thyExtra 传参和 <ng-template #extra></ng-template> 模板\n * @name extra\n * @type TemplateRef\n */\n @ContentChild('extra') extra: TemplateRef<unknown>;\n\n @ViewChild('moreOperationContainer') defaultMoreOperation: ElementRef<HTMLAnchorElement>;\n\n @ViewChild(ThyNavInkBarDirective, { static: true }) inkBar!: ThyNavInkBarDirective;\n\n get showInkBar(): boolean {\n const showTypes: ThyNavType[] = ['pulled', 'tabs'];\n return showTypes.includes(this.type);\n }\n\n private updateClasses() {\n let classNames: string[] = [];\n if (navTypeClassesMap[this.type]) {\n classNames = [...navTypeClassesMap[this.type]];\n }\n if (navSizeClassesMap[this.size]) {\n classNames.push(navSizeClassesMap[this.size]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n private curActiveIndex: number;\n\n private prevActiveIndex: number = NaN;\n\n private navSubscription: { unsubscribe: () => void } | null = null;\n\n ngOnInit() {\n if (!this.thyResponsive) {\n this.initialized = true;\n }\n\n this.updateClasses();\n }\n\n ngAfterViewInit() {\n if (this.thyResponsive) {\n this.setMoreBtnOffset();\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.links.toArray().forEach(link => link.setOffset());\n this.setHiddenItems();\n });\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.links.changes.pipe(startWith(this.links), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n\n this.navSubscription = merge(\n this.createResizeObserver(this.elementRef.nativeElement),\n ...this.links.map(item => this.createResizeObserver(item.elementRef.nativeElement).pipe(tap(() => item.setOffset()))),\n ...(this.routers || []).map(router => router?.isActiveChange)\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap(() => {\n if (this.thyPauseReCalculate()) {\n return;\n }\n\n if (this.thyResponsive) {\n this.resetSizes();\n this.setHiddenItems();\n this.calculateMoreIsActive();\n }\n\n if (this.type === 'card') {\n this.setNavItemDivider();\n }\n })\n )\n .subscribe(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n });\n }\n\n ngAfterContentInit(): void {\n if (this.thyResponsive) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.resetSizes();\n });\n }\n }\n\n ngAfterContentChecked() {\n this.calculateMoreIsActive();\n\n this.curActiveIndex = this.links && this.links.length ? this.links.toArray().findIndex(item => item.linkIsActive()) : -1;\n if (this.curActiveIndex < 0) {\n this.inkBar.hide();\n } else if (this.curActiveIndex !== this.prevActiveIndex) {\n this.alignInkBarToSelectedTab();\n }\n }\n\n private setMoreBtnOffset() {\n this.moreBtnOffset = {\n height: this.defaultMoreOperation?.nativeElement?.offsetHeight,\n width: this.defaultMoreOperation?.nativeElement?.offsetWidth\n };\n }\n\n private setNavItemDivider() {\n const tabs = this.links.toArray();\n const activeIndex = tabs.findIndex(item => item.linkIsActive());\n\n for (let i = 0; i < tabs.length; i++) {\n if ((i !== activeIndex && i !== activeIndex - 1 && i !== tabs.length - 1) || (i === activeIndex - 1 && this.moreActive)) {\n tabs[i].addClass('has-right-divider');\n } else {\n tabs[i].removeClass('has-right-divider');\n }\n }\n }\n\n createResizeObserver(element: HTMLElement) {\n return typeof ResizeObserver === 'undefined'\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver(entries => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n private calculateMoreIsActive() {\n this.moreActive = this.hiddenItems.some(item => {\n return item.linkIsActive();\n });\n this.changeDetectorRef.detectChanges();\n }\n\n private setHiddenItems() {\n this.moreActive = false;\n const tabs = this.links.toArray();\n if (!tabs.length) {\n this.hiddenItems = [];\n this.showMore = this.hiddenItems.length > 0;\n return;\n }\n\n const endIndex = this.thyVertical ? this.getShowItemsEndIndexWhenVertical(tabs) : this.getShowItemsEndIndexWhenHorizontal(tabs);\n\n const showItems = tabs.slice(0, endIndex + 1);\n (showItems || []).forEach(item => {\n item.setNavLinkHidden(false);\n });\n\n this.hiddenItems = endIndex === tabs.length - 1 ? [] : tabs.slice(endIndex + 1);\n (this.hiddenItems || []).forEach(item => {\n item.setNavLinkHidden(true);\n });\n\n this.showMore = this.hiddenItems.length > 0;\n this.initialized = true;\n }\n\n private getShowItemsEndIndexWhenHorizontal(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalWidth = 0;\n\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalWidth = i === tabsLength - 1 ? totalWidth + tabs[i].offset.width : totalWidth + tabs[i].offset.width + tabItemRight;\n if (_totalWidth > this.wrapperOffset.width) {\n let moreOperationWidth = this.moreBtnOffset.width;\n if (totalWidth + moreOperationWidth <= this.wrapperOffset.width) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalWidth = _totalWidth;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private getShowItemsEndIndexWhenVertical(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalHeight = 0;\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalHeight = totalHeight + tabs[i].offset.height;\n if (_totalHeight > this.wrapperOffset.height) {\n let moreOperationHeight = this.moreBtnOffset.height;\n if (totalHeight + moreOperationHeight <= this.wrapperOffset.height) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalHeight = _totalHeight;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private resetSizes() {\n this.wrapperOffset = {\n height: this.elementRef.nativeElement.offsetHeight || 0,\n width: this.elementRef.nativeElement.offsetWidth || 0,\n left: this.elementRef.nativeElement.offsetLeft || 0,\n top: this.elementRef.nativeElement.offsetTop || 0\n };\n }\n\n openMoreMenu(event: Event, template: TemplateRef<any>) {\n this.popover.open(\n template,\n Object.assign(\n {\n origin: event.currentTarget as HTMLElement,\n hasBackdrop: true,\n backdropClosable: true,\n insideClosable: true,\n placement: 'bottom' as ThyPlacement,\n panelClass: 'thy-nav-list-popover',\n originActiveClass: 'thy-nav-origin-active'\n },\n this.thyPopoverOptions() ? this.thyPopoverOptions() : {}\n )\n );\n }\n\n navItemClick(item: ThyNavItemDirective) {\n item.elementRef.nativeElement.click();\n }\n\n private alignInkBarToSelectedTab(): void {\n if (!this.showInkBar) {\n this.inkBar.hide();\n return;\n }\n const tabs = this.links?.toArray() ?? [];\n const selectedItem = tabs.find(item => item.linkIsActive());\n let selectedItemElement: HTMLElement = selectedItem && selectedItem.elementRef.nativeElement;\n\n if (selectedItem && this.moreActive) {\n selectedItemElement = this.defaultMoreOperation.nativeElement;\n }\n if (selectedItemElement) {\n this.prevActiveIndex = this.curActiveIndex;\n this.inkBar.alignToElement(selectedItemElement);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyVertical, thyType } = changes;\n\n if (thyType?.currentValue !== thyType?.previousValue || thyVertical?.currentValue !== thyVertical?.previousValue) {\n this.alignInkBarToSelectedTab();\n }\n }\n\n ngOnDestroy() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ThyIconNavLink } from './icon-nav/icon-nav-link.directive';\nimport { ThyIconNav } from './icon-nav/icon-nav.component';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { ThyNav } from './nav.component';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ThyIconModule,\n ThyPopoverModule,\n ThyDropdownModule,\n RouterModule,\n ThyNav,\n ThyNavItemDirective,\n ThyIconNav,\n ThyIconNavLink,\n BypassSecurityTrustHtmlPipe,\n ThyNavInkBarDirective\n ],\n exports: [ThyNav, ThyNavItemDirective, ThyIconNav, ThyIconNavLink, BypassSecurityTrustHtmlPipe]\n})\nexport class ThyNavModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-nav.mjs","sources":["../../../src/nav/icon-nav/icon-nav-link.directive.ts","../../../src/nav/icon-nav/icon-nav.component.ts","../../../src/nav/icon-nav/icon-nav.component.html","../../../src/nav/nav-item.directive.ts","../../../src/nav/nav-ink-bar.directive.ts","../../../src/nav/nav.pipe.ts","../../../src/nav/nav.component.ts","../../../src/nav/nav.component.html","../../../src/nav/nav.module.ts","../../../src/nav/ngx-tethys-nav.ts"],"sourcesContent":["import { Component, HostBinding, Input } from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @private\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thyIconNavLink]',\n template: '<ng-content></ng-content>@if (icon) {<thy-icon [thyIconName]=\"icon\"></thy-icon>}',\n standalone: true,\n imports: [ThyIcon]\n})\nexport class ThyIconNavLink {\n @HostBinding('class.active') navLinkActive = false;\n\n @HostBinding('class.thy-icon-nav-link') navLinkClass = true;\n\n icon: string;\n\n @Input()\n set thyIconNavLinkIcon(icon: string) {\n this.icon = icon;\n }\n\n @Input({ transform: coerceBooleanProperty })\n set thyIconNavLinkActive(active: boolean) {\n this.navLinkActive = active;\n }\n}\n","import { Component, OnInit, HostBinding, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { warnDeprecation } from 'ngx-tethys/util';\n\ntype IconNavTypes = 'primary' | 'secondary' | 'individual' | '';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-icon-nav',\n templateUrl: './icon-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class ThyIconNav implements OnInit {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private initialized = false;\n\n private hostRenderer = useHostRenderer();\n\n type: IconNavTypes;\n\n @HostBinding(`class.thy-icon-nav`) isIconNav = true;\n\n @Input() set thyType(type: IconNavTypes) {\n this.type = type;\n this.updateClasses();\n this.changeDetectorRef.markForCheck();\n }\n\n private updateClasses(bypassInitialized?: boolean) {\n if (!bypassInitialized && !this.initialized) {\n return;\n }\n this.hostRenderer.updateClass(this.type ? [`thy-icon-nav-${this.type}`] : []);\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('thy-icon-nav has been deprecated, please use thyAction and thy-space components instead of it');\n }\n }\n\n ngOnInit(): void {\n this.initialized = true;\n this.updateClasses(true);\n }\n}\n","<ng-content></ng-content>\n","import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport {\n AfterViewInit,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n NgZone,\n QueryList\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyNavLink = '' | 'active';\n\n/**\n * 导航项\n * @name thyNavItem\n * @order 20\n */\n@Directive({\n selector: '[thyNavLink],[thyNavItem]',\n host: {\n class: 'thy-nav-item',\n '[class.active]': 'thyNavItemActive || thyNavLinkActive',\n '[class.disabled]': 'thyNavItemDisabled'\n },\n standalone: true\n})\nexport class ThyNavItemDirective implements AfterViewInit {\n elementRef = inject(ElementRef);\n private routerLinkActive = inject(RouterLinkActive, { optional: true })!;\n private ngZone = inject(NgZone);\n\n /**\n * 唯一标识\n */\n id = input<string>();\n\n /**\n * 是否激活状态\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavItemActive: boolean;\n\n /**\n * 已经废弃,请使用 thyNavItemActive\n * @deprecated please use thyNavItemActive\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavLinkActive: boolean;\n\n /**\n * 是否禁用\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyNavItemDisabled: boolean;\n\n /**\n * @private\n */\n @ContentChildren(forwardRef(() => ThyNavItemDirective), { descendants: true })\n links: QueryList<ThyNavItemDirective>;\n\n /**\n * @private\n */\n @ContentChildren(RouterLinkActive, { descendants: true }) routers: QueryList<RouterLinkActive>;\n\n // @HostBinding('attr.href') navLinkHref = 'javascript:;';\n\n public offset: {\n width: number;\n height: number;\n left: number;\n top: number;\n } = {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n };\n\n public content: HTMLElement;\n\n public isActive: boolean;\n\n private hostRenderer = useHostRenderer();\n\n private readonly destroyRef = inject(DestroyRef);\n\n ngAfterViewInit() {\n this.setOffset();\n\n this.content = this.elementRef.nativeElement.outerHTML;\n\n this.ngZone.onStable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.isActive = this.linkIsActive();\n });\n }\n\n setOffset() {\n this.offset = {\n width: this.elementRef.nativeElement.offsetWidth || this.offset.width,\n height: this.elementRef.nativeElement.offsetHeight || this.offset.height,\n left: this.elementRef.nativeElement.offsetLeft || this.offset.left,\n top: this.elementRef.nativeElement.offsetTop || this.offset.top\n };\n }\n\n linkIsActive() {\n return (\n this.thyNavItemActive ||\n this.thyNavLinkActive ||\n (this.routerLinkActive && this.routerLinkActive.isActive) ||\n this.routers.some(router => router.isActive) ||\n this.links.some(item => item.thyNavItemActive) ||\n this.links.some(item => item.thyNavLinkActive)\n );\n }\n\n setNavLinkHidden(value: boolean) {\n if (value) {\n this.hostRenderer.addClass('thy-nav-item-hidden');\n } else {\n this.hostRenderer.removeClass('thy-nav-item-hidden');\n }\n }\n\n addClass(className: string) {\n this.hostRenderer.addClass(className);\n }\n\n removeClass(className: string) {\n this.hostRenderer.removeClass(className);\n }\n}\n","import { ANIMATION_MODULE_TYPE, Directive, ElementRef, Input, NgZone, inject } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { take } from 'rxjs/operators';\n\n/**\n * @internal\n */\n@Directive({\n selector: 'thy-nav-ink-bar, [thyNavInkBar]',\n host: {\n class: 'thy-nav-ink-bar',\n '[class.thy-nav-ink-bar-animated]': 'animated'\n },\n standalone: true\n})\nexport class ThyNavInkBarDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private ngZone = inject(NgZone);\n animationMode? = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n @Input({ transform: coerceBooleanProperty }) isVertical: boolean;\n\n @Input({ transform: coerceBooleanProperty }) showInkBar: boolean;\n\n get animated(): boolean {\n return this.animationMode !== 'NoopAnimations' && this.showInkBar;\n }\n\n public alignToElement(element: HTMLElement): void {\n this.show();\n this.ngZone.run(() => {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.setStyles(element);\n });\n });\n }\n\n private setStyles(element: HTMLElement): void {\n const inkBar: HTMLElement = this.elementRef.nativeElement;\n if (!this.isVertical) {\n inkBar.style.top = '';\n inkBar.style.bottom = '0px';\n inkBar.style.height = '2px';\n inkBar.style.left = this.getLeftPosition(element);\n inkBar.style.width = this.getElementWidth(element);\n } else {\n inkBar.style.left = '';\n inkBar.style.width = '2px';\n inkBar.style.top = this.getTopPosition(element);\n inkBar.style.height = this.getElementHeight(element);\n }\n }\n\n private getLeftPosition(element: HTMLElement): string {\n return element ? `${element.offsetLeft || 0}px` : '0';\n }\n\n private getElementWidth(element: HTMLElement): string {\n return element ? `${element.offsetWidth || 0}px` : '0';\n }\n\n private getTopPosition(element: HTMLElement): string {\n return element ? `${element.offsetTop || 0}px` : '0';\n }\n\n private getElementHeight(element: HTMLElement): string {\n return element ? `${element.offsetHeight || 0}px` : '0';\n }\n\n private show() {\n this.elementRef.nativeElement.style.visibility = 'visible';\n }\n\n public hide() {\n this.elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * @private\n */\n@Pipe({\n name: 'bypassSecurityTrustHtml',\n standalone: true\n})\nexport class BypassSecurityTrustHtmlPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(format: string): any {\n return this.sanitizer.bypassSecurityTrustHtml(format);\n }\n}\n","import { ThyPopover, ThyPopoverConfig } from 'ngx-tethys/popover';\nimport { merge, Observable, of } from 'rxjs';\nimport { startWith, take, tap } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostBinding,\n inject,\n input,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n QueryList,\n signal,\n Signal,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n WritableSignal\n} from '@angular/core';\n\nimport { RouterLinkActive } from '@angular/router';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\nimport { ThyDropdownMenuComponent, ThyDropdownMenuItemDirective, ThyDropdownMenuItemActiveDirective } from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { injectLocale, ThyNavLocale } from 'ngx-tethys/i18n';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\nexport type ThyNavType = 'pulled' | 'tabs' | 'pills' | 'lite' | 'card' | 'primary' | 'secondary' | 'thirdly' | 'secondary-divider';\nexport type ThyNavSize = 'lg' | 'md' | 'sm';\nexport type ThyNavHorizontal = '' | 'start' | 'center' | 'end';\n\nconst navTypeClassesMap = {\n pulled: ['thy-nav-pulled'],\n tabs: ['thy-nav-tabs'],\n pills: ['thy-nav-pills'],\n lite: ['thy-nav-lite'],\n card: ['thy-nav-card'],\n //如下类型已经废弃\n primary: ['thy-nav-primary'],\n secondary: ['thy-nav-secondary'],\n thirdly: ['thy-nav-thirdly'],\n 'secondary-divider': ['thy-nav-secondary-divider']\n};\n\nconst navSizeClassesMap = {\n lg: 'thy-nav-lg',\n md: 'thy-nav-md',\n sm: 'thy-nav-sm'\n};\n\nconst tabItemRight = 20;\n\n/**\n * 导航组件\n * @name thy-nav\n * @order 10\n */\n@Component({\n selector: 'thy-nav',\n templateUrl: './nav.component.html',\n host: {\n class: 'thy-nav'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgClass,\n NgTemplateOutlet,\n ThyNavItemDirective,\n ThyIcon,\n ThyNavInkBarDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemActiveDirective,\n BypassSecurityTrustHtmlPipe\n ]\n})\nexport class ThyNav implements OnInit, AfterViewInit, AfterContentInit, AfterContentChecked, OnChanges {\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private popover = inject(ThyPopover);\n\n private readonly destroyRef = inject(DestroyRef);\n\n public type: ThyNavType = 'pulled';\n private size: ThyNavSize = 'md';\n public initialized = false;\n\n public horizontal: ThyNavHorizontal;\n public wrapperOffset: { height: number; width: number; left: number; top: number } = {\n height: 0,\n width: 0,\n left: 0,\n top: 0\n };\n\n public hiddenItems: ThyNavItemDirective[] = [];\n\n public moreActive: boolean;\n\n readonly showMore: WritableSignal<boolean> = signal(false);\n\n private moreBtnOffset: { height: number; width: number } = { height: 0, width: 0 };\n\n private hostRenderer = useHostRenderer();\n\n private innerLinks: QueryList<ThyNavItemDirective>;\n\n locale: Signal<ThyNavLocale> = injectLocale('nav');\n\n /**\n * 导航类型\n * @type pulled | tabs | pills | lite | primary | secondary | thirdly | secondary-divider\n * @default pulled\n */\n @Input()\n set thyType(type: ThyNavType) {\n this.type = type || 'pulled';\n if (this.initialized) {\n this.updateClasses();\n }\n }\n\n /**\n * 导航大小\n * @type lg | md | sm\n * @default md\n */\n @Input()\n set thySize(size: ThyNavSize) {\n this.size = size;\n if (this.initialized) {\n this.updateClasses();\n }\n }\n\n /**\n * 水平排列\n * @type '' | 'start' | 'center' | 'end'\n * @default false\n */\n @Input()\n set thyHorizontal(horizontal: ThyNavHorizontal) {\n this.horizontal = (horizontal as string) === 'right' ? 'end' : horizontal;\n }\n\n /**\n * 是否垂直排列\n * @default false\n */\n @HostBinding('class.thy-nav--vertical')\n @Input({ transform: coerceBooleanProperty })\n thyVertical: boolean;\n\n /**\n * 是否是填充模式\n */\n @HostBinding('class.thy-nav--fill')\n @Input({ transform: coerceBooleanProperty })\n thyFill: boolean = false;\n\n /**\n * 是否响应式,自动计算宽度存放 thyNavItem,并添加更多弹框\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n thyResponsive: boolean;\n\n /**\n * 支持暂停自适应计算\n */\n thyPauseReCalculate = input<boolean>(false);\n\n /**\n * 更多操作的菜单点击内部是否可关闭\n * @deprecated please use thyPopoverOptions\n */\n @Input({ transform: coerceBooleanProperty })\n thyInsideClosable = true;\n\n /**\n * 更多菜单弹出框的参数,底层使用 Popover 组件\n * @type ThyPopoverConfig\n */\n thyPopoverOptions = input<ThyPopoverConfig<unknown>>(null);\n\n /**\n * 右侧额外区域模板\n * @type TemplateRef\n */\n @Input() thyExtra: TemplateRef<unknown>;\n\n /**\n * @private\n */\n @ContentChildren(ThyNavItemDirective, { descendants: true })\n set links(value) {\n this.innerLinks = value;\n this.prevActiveIndex = NaN;\n }\n get links(): QueryList<ThyNavItemDirective> {\n return this.innerLinks;\n }\n\n /**\n * @private\n */\n @ContentChildren(RouterLinkActive, { descendants: true }) routers: QueryList<RouterLinkActive>;\n\n /**\n * 响应式模式下更多操作模板\n * @type TemplateRef\n */\n @ContentChild('more') moreOperation: TemplateRef<unknown>;\n\n /**\n * 响应式模式下更多弹框模板\n * @type TemplateRef\n */\n @ContentChild('morePopover') morePopover: TemplateRef<unknown>;\n\n /**\n * 右侧额外区域模板,支持 thyExtra 传参和 <ng-template #extra></ng-template> 模板\n * @name extra\n * @type TemplateRef\n */\n @ContentChild('extra') extra: TemplateRef<unknown>;\n\n @ViewChild('moreOperationContainer') defaultMoreOperation: ElementRef<HTMLAnchorElement>;\n\n @ViewChild(ThyNavInkBarDirective, { static: true }) inkBar!: ThyNavInkBarDirective;\n\n get showInkBar(): boolean {\n const showTypes: ThyNavType[] = ['pulled', 'tabs'];\n return showTypes.includes(this.type);\n }\n\n private updateClasses() {\n let classNames: string[] = [];\n if (navTypeClassesMap[this.type]) {\n classNames = [...navTypeClassesMap[this.type]];\n }\n if (navSizeClassesMap[this.size]) {\n classNames.push(navSizeClassesMap[this.size]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n private curActiveIndex: number;\n\n private prevActiveIndex: number = NaN;\n\n private navSubscription: { unsubscribe: () => void } | null = null;\n\n ngOnInit() {\n if (!this.thyResponsive) {\n this.initialized = true;\n }\n\n this.updateClasses();\n }\n\n ngAfterViewInit() {\n if (this.thyResponsive) {\n this.setMoreBtnOffset();\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.setMoreBtnOffset();\n this.links.toArray().forEach(link => link.setOffset());\n this.setHiddenItems();\n });\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.links.changes.pipe(startWith(this.links), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n\n this.navSubscription = merge(\n this.createResizeObserver(this.elementRef.nativeElement),\n ...this.links.map(item => this.createResizeObserver(item.elementRef.nativeElement).pipe(tap(() => item.setOffset()))),\n ...(this.routers || []).map(router => router?.isActiveChange)\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap(() => {\n if (this.thyPauseReCalculate()) {\n return;\n }\n\n if (this.thyResponsive) {\n this.setMoreBtnOffset();\n this.resetSizes();\n this.setHiddenItems();\n this.calculateMoreIsActive();\n }\n\n if (this.type === 'card') {\n this.setNavItemDivider();\n }\n })\n )\n .subscribe(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n });\n }\n\n ngAfterContentInit(): void {\n if (this.thyResponsive) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.resetSizes();\n });\n }\n }\n\n ngAfterContentChecked() {\n this.calculateMoreIsActive();\n\n this.curActiveIndex = this.links && this.links.length ? this.links.toArray().findIndex(item => item.linkIsActive()) : -1;\n if (this.curActiveIndex < 0) {\n this.inkBar.hide();\n } else if (this.curActiveIndex !== this.prevActiveIndex) {\n this.alignInkBarToSelectedTab();\n }\n }\n\n private setMoreBtnOffset() {\n const computedStyle = window.getComputedStyle(this.defaultMoreOperation?.nativeElement);\n this.moreBtnOffset = {\n height: this.defaultMoreOperation?.nativeElement?.offsetHeight + parseFloat(computedStyle?.marginBottom) || 0,\n width: this.defaultMoreOperation?.nativeElement?.offsetWidth + parseFloat(computedStyle?.marginRight) || 0\n };\n }\n\n private setNavItemDivider() {\n const tabs = this.links.toArray();\n const activeIndex = tabs.findIndex(item => item.linkIsActive());\n\n for (let i = 0; i < tabs.length; i++) {\n if ((i !== activeIndex && i !== activeIndex - 1 && i !== tabs.length - 1) || (i === activeIndex - 1 && this.moreActive)) {\n tabs[i].addClass('has-right-divider');\n } else {\n tabs[i].removeClass('has-right-divider');\n }\n }\n }\n\n createResizeObserver(element: HTMLElement) {\n return typeof ResizeObserver === 'undefined'\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver(entries => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n private calculateMoreIsActive() {\n this.moreActive = this.hiddenItems.some(item => {\n return item.linkIsActive();\n });\n this.changeDetectorRef.detectChanges();\n }\n\n private setHiddenItems() {\n this.moreActive = false;\n const tabs = this.links.toArray();\n if (!tabs.length) {\n this.hiddenItems = [];\n this.showMore.set(false);\n return;\n }\n\n const endIndex = this.thyVertical ? this.getShowItemsEndIndexWhenVertical(tabs) : this.getShowItemsEndIndexWhenHorizontal(tabs);\n\n const showItems = tabs.slice(0, endIndex + 1);\n (showItems || []).forEach(item => {\n item.setNavLinkHidden(false);\n });\n\n this.hiddenItems = endIndex === tabs.length - 1 ? [] : tabs.slice(endIndex + 1);\n (this.hiddenItems || []).forEach(item => {\n item.setNavLinkHidden(true);\n });\n\n this.showMore.set(this.hiddenItems.length > 0);\n this.initialized = true;\n }\n\n private getShowItemsEndIndexWhenHorizontal(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalWidth = 0;\n\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalWidth = i === tabsLength - 1 ? totalWidth + tabs[i].offset.width : totalWidth + tabs[i].offset.width + tabItemRight;\n if (_totalWidth > this.wrapperOffset.width) {\n let moreOperationWidth = this.moreBtnOffset.width;\n if (totalWidth + moreOperationWidth <= this.wrapperOffset.width) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalWidth = _totalWidth;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private getShowItemsEndIndexWhenVertical(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalHeight = 0;\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalHeight = totalHeight + tabs[i].offset.height;\n if (_totalHeight > this.wrapperOffset.height) {\n let moreOperationHeight = this.moreBtnOffset.height;\n if (totalHeight + moreOperationHeight <= this.wrapperOffset.height) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalHeight = _totalHeight;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private resetSizes() {\n this.wrapperOffset = {\n height: this.elementRef.nativeElement.offsetHeight || 0,\n width: this.elementRef.nativeElement.offsetWidth || 0,\n left: this.elementRef.nativeElement.offsetLeft || 0,\n top: this.elementRef.nativeElement.offsetTop || 0\n };\n }\n\n openMoreMenu(event: Event, template: TemplateRef<any>) {\n this.popover.open(\n template,\n Object.assign(\n {\n origin: event.currentTarget as HTMLElement,\n hasBackdrop: true,\n backdropClosable: true,\n insideClosable: true,\n placement: 'bottom' as ThyPlacement,\n panelClass: 'thy-nav-list-popover',\n originActiveClass: 'thy-nav-origin-active'\n },\n this.thyPopoverOptions() ? this.thyPopoverOptions() : {}\n )\n );\n }\n\n navItemClick(item: ThyNavItemDirective) {\n item.elementRef.nativeElement.click();\n }\n\n private alignInkBarToSelectedTab(): void {\n if (!this.showInkBar) {\n this.inkBar.hide();\n return;\n }\n const tabs = this.links?.toArray() ?? [];\n const selectedItem = tabs.find(item => item.linkIsActive());\n let selectedItemElement: HTMLElement = selectedItem && selectedItem.elementRef.nativeElement;\n\n if (selectedItem && this.moreActive) {\n selectedItemElement = this.defaultMoreOperation.nativeElement;\n }\n if (selectedItemElement) {\n this.prevActiveIndex = this.curActiveIndex;\n this.inkBar.alignToElement(selectedItemElement);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyVertical, thyType } = changes;\n\n if (thyType?.currentValue !== thyType?.previousValue || thyVertical?.currentValue !== thyVertical?.previousValue) {\n this.alignInkBarToSelectedTab();\n }\n }\n\n ngOnDestroy() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation) {\n <ng-container [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra || extra) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover) {\n <ng-container [ngTemplateOutlet]=\"morePopover\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems; track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ThyIconNavLink } from './icon-nav/icon-nav-link.directive';\nimport { ThyIconNav } from './icon-nav/icon-nav.component';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { ThyNav } from './nav.component';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ThyIconModule,\n ThyPopoverModule,\n ThyDropdownModule,\n RouterModule,\n ThyNav,\n ThyNavItemDirective,\n ThyIconNav,\n ThyIconNavLink,\n BypassSecurityTrustHtmlPipe,\n ThyNavInkBarDirective\n ],\n exports: [ThyNav, ThyNavItemDirective, ThyIconNav, ThyIconNavLink, BypassSecurityTrustHtmlPipe]\n})\nexport class ThyNavModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Version } from '@angular/core';
2
2
 
3
- const VERSION = new Version('18.2.13');
3
+ const VERSION = new Version('18.2.15');
4
4
 
5
5
  /**
6
6
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.2.13');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS;;ACF5C;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.2.15');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS;;ACF5C;;AAEG;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ThyPopoverConfig } from 'ngx-tethys/popover';
2
2
  import { Observable } from 'rxjs';
3
- import { AfterContentChecked, AfterContentInit, AfterViewInit, ElementRef, OnChanges, OnInit, QueryList, Signal, SimpleChanges, TemplateRef } from '@angular/core';
3
+ import { AfterContentChecked, AfterContentInit, AfterViewInit, ElementRef, OnChanges, OnInit, QueryList, Signal, SimpleChanges, TemplateRef, WritableSignal } from '@angular/core';
4
4
  import { RouterLinkActive } from '@angular/router';
5
5
  import { ThyNavInkBarDirective } from './nav-ink-bar.directive';
6
6
  import { ThyNavItemDirective } from './nav-item.directive';
@@ -32,7 +32,7 @@ export declare class ThyNav implements OnInit, AfterViewInit, AfterContentInit,
32
32
  };
33
33
  hiddenItems: ThyNavItemDirective[];
34
34
  moreActive: boolean;
35
- showMore: boolean;
35
+ readonly showMore: WritableSignal<boolean>;
36
36
  private moreBtnOffset;
37
37
  private hostRenderer;
38
38
  private innerLinks;
@@ -12,6 +12,7 @@
12
12
  margin-bottom: 0;
13
13
  list-style: none;
14
14
  position: relative;
15
+ width: 100%;
15
16
 
16
17
  .thy-nav-item {
17
18
  display: block;
@@ -34,7 +35,7 @@
34
35
  }
35
36
 
36
37
  .thy-nav-more-icon {
37
- margin-left: 8px;
38
+ margin-left: 4px;
38
39
  }
39
40
 
40
41
  .thy-nav-origin-active {
@@ -306,4 +307,6 @@
306
307
  flex: 1 !important;
307
308
  flex-grow: 0 !important;
308
309
  white-space: nowrap;
310
+ width: fit-content;
311
+ min-width: fit-content;
309
312
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-tethys",
3
- "version": "18.2.13",
3
+ "version": "18.2.15",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@github.com/atinc/ngx-tethys.git"
@@ -1 +1 @@
1
- export declare const VERSION = "18.2.13";
1
+ export declare const VERSION = "18.2.15";
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '18.2.13';
4
+ exports.VERSION = '18.2.15';