@taiga-ui/addon-doc 4.99.0 → 4.100.0
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/components/navigation/navigation.component.d.ts +18 -2
- package/components/page/page.component.d.ts +3 -0
- package/esm2022/components/navigation/navigation.component.mjs +68 -17
- package/esm2022/components/page/page.component.mjs +14 -4
- package/esm2022/tokens/index.mjs +2 -1
- package/esm2022/tokens/version.mjs +8 -0
- package/esm2022/types/page.mjs +1 -1
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/version-parts.mjs +10 -0
- package/fesm2022/taiga-ui-addon-doc-components.mjs +77 -18
- package/fesm2022/taiga-ui-addon-doc-components.mjs.map +1 -1
- package/fesm2022/taiga-ui-addon-doc-tokens.mjs +8 -1
- package/fesm2022/taiga-ui-addon-doc-tokens.mjs.map +1 -1
- package/fesm2022/taiga-ui-addon-doc-types.mjs.map +1 -1
- package/fesm2022/taiga-ui-addon-doc-utils.mjs +11 -1
- package/fesm2022/taiga-ui-addon-doc-utils.mjs.map +1 -1
- package/package.json +6 -6
- package/tokens/index.d.ts +1 -0
- package/tokens/version.d.ts +5 -0
- package/types/page.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/version-parts.d.ts +7 -0
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { FormControl } from '@angular/forms';
|
|
2
|
-
import { type TuiDocRoutePage, type TuiDocRoutePages } from '@taiga-ui/addon-doc/types';
|
|
2
|
+
import { type TuiDocRoutePage, type TuiDocRoutePageGroup, type TuiDocRoutePages } from '@taiga-ui/addon-doc/types';
|
|
3
3
|
import { TuiSidebarDirective } from '@taiga-ui/addon-mobile/directives/sidebar';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
interface TuiDocNavigationBadge {
|
|
6
|
+
readonly label: string;
|
|
7
|
+
readonly appearance: 'info' | 'positive';
|
|
8
|
+
}
|
|
5
9
|
export declare class TuiDocNavigation {
|
|
6
10
|
private readonly searchInput?;
|
|
7
11
|
private readonly router;
|
|
8
12
|
private readonly doc;
|
|
13
|
+
private readonly current;
|
|
14
|
+
private readonly sectionLeads;
|
|
9
15
|
protected open: import("@angular/core").WritableSignal<boolean>;
|
|
10
16
|
protected menuOpen: boolean;
|
|
11
17
|
protected readonly sidebar: TuiSidebarDirective<any> | null;
|
|
@@ -15,6 +21,9 @@ export declare class TuiDocNavigation {
|
|
|
15
21
|
protected readonly searchEnabled: import("@angular/core").WritableSignal<boolean>;
|
|
16
22
|
protected readonly docIcons: import("@taiga-ui/addon-doc/tokens").TuiDocIcons;
|
|
17
23
|
protected readonly icons: import("@taiga-ui/core/tokens").TuiCommonIcons;
|
|
24
|
+
protected readonly flat: readonly (readonly TuiDocRoutePage[])[];
|
|
25
|
+
protected readonly sectionBadges: (TuiDocNavigationBadge | null)[];
|
|
26
|
+
protected readonly itemBadges: ReadonlyMap<TuiDocRoutePage | TuiDocRoutePageGroup, TuiDocNavigationBadge>;
|
|
18
27
|
protected openPagesArr: boolean[];
|
|
19
28
|
protected openPagesGroupsArr: boolean[];
|
|
20
29
|
protected active: string;
|
|
@@ -25,15 +34,22 @@ export declare class TuiDocNavigation {
|
|
|
25
34
|
protected get itemsWithoutSections(): TuiDocRoutePages;
|
|
26
35
|
protected $pages<T extends TuiDocRoutePage[]>(pages: T): readonly TuiDocRoutePage[];
|
|
27
36
|
protected isActive(route: string): boolean;
|
|
37
|
+
protected sectionBadge(index: number): TuiDocNavigationBadge | null;
|
|
38
|
+
protected itemBadge(item: TuiDocRoutePage | TuiDocRoutePageGroup): TuiDocNavigationBadge | null;
|
|
28
39
|
protected onGroupClick(index: number): void;
|
|
29
40
|
protected closeMenu(): void;
|
|
30
41
|
protected onClick(): void;
|
|
31
42
|
protected onFocusSearch(event: KeyboardEvent): void;
|
|
32
43
|
private filterItems;
|
|
33
|
-
private
|
|
44
|
+
private mapItemBadges;
|
|
45
|
+
private leafBadge;
|
|
46
|
+
private newOrUpdated;
|
|
47
|
+
private hasRecent;
|
|
48
|
+
private isRecent;
|
|
34
49
|
private isActiveRoute;
|
|
35
50
|
private openActivePageGroup;
|
|
36
51
|
private navigateToAnchorLink;
|
|
37
52
|
static ɵfac: i0.ɵɵFactoryDeclaration<TuiDocNavigation, never>;
|
|
38
53
|
static ɵcmp: i0.ɵɵComponentDeclaration<TuiDocNavigation, "tui-doc-navigation", never, {}, {}, never, ["*"], true, never>;
|
|
39
54
|
}
|
|
55
|
+
export {};
|
|
@@ -3,6 +3,8 @@ import { type TuiDocPageOptions } from './page.providers';
|
|
|
3
3
|
import { TuiDocPageTabConnector } from './page-tab.directive';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class TuiDocPage implements TuiDocPageOptions {
|
|
6
|
+
private readonly pages;
|
|
7
|
+
private readonly major;
|
|
6
8
|
protected readonly options: TuiDocPageOptions;
|
|
7
9
|
protected readonly tabs: Record<string, import("@taiga-ui/polymorpheus").PolymorpheusContent>;
|
|
8
10
|
protected readonly supportLanguage: Set<string>;
|
|
@@ -19,6 +21,7 @@ export declare class TuiDocPage implements TuiDocPageOptions {
|
|
|
19
21
|
activeItemIndex: number;
|
|
20
22
|
readonly seeAlso: readonly string[];
|
|
21
23
|
get showSeeAlso(): boolean;
|
|
24
|
+
protected get version(): string;
|
|
22
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<TuiDocPage, never>;
|
|
23
26
|
static ɵcmp: i0.ɵɵComponentDeclaration<TuiDocPage, "tui-doc-page", never, { "header": { "alias": "header"; "required": false; }; "package": { "alias": "package"; "required": false; }; "type": { "alias": "type"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; "path": { "alias": "path"; "required": false; }; "deprecated": { "alias": "deprecated"; "required": false; }; }, {}, ["tabConnectors"], ["*"], true, never>;
|
|
24
27
|
}
|
|
@@ -5,8 +5,8 @@ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
|
5
5
|
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
6
6
|
import { Title } from '@angular/platform-browser';
|
|
7
7
|
import { Router, RouterLink, RouterLinkActive, Scroll } from '@angular/router';
|
|
8
|
-
import { TUI_DOC_ICONS, TUI_DOC_PAGE_LOADED, TUI_DOC_SEARCH_ENABLED, TUI_DOC_SEARCH_TEXT, } from '@taiga-ui/addon-doc/tokens';
|
|
9
|
-
import { tuiTransliterateKeyboardLayout } from '@taiga-ui/addon-doc/utils';
|
|
8
|
+
import { TUI_DOC_ICONS, TUI_DOC_PAGE_LOADED, TUI_DOC_SEARCH_ENABLED, TUI_DOC_SEARCH_TEXT, TUI_DOC_VERSION, } from '@taiga-ui/addon-doc/tokens';
|
|
9
|
+
import { tuiIsRoutePageGroup, tuiTransliterateKeyboardLayout, tuiVersionParts, } from '@taiga-ui/addon-doc/utils';
|
|
10
10
|
import { TuiSidebarDirective } from '@taiga-ui/addon-mobile/directives/sidebar';
|
|
11
11
|
import { TuiAutoFocus } from '@taiga-ui/cdk/directives/auto-focus';
|
|
12
12
|
import { tuiControlValue, tuiWatch } from '@taiga-ui/cdk/observables';
|
|
@@ -19,6 +19,7 @@ import { TuiScrollbar } from '@taiga-ui/core/components/scrollbar';
|
|
|
19
19
|
import { TuiTextfield, TuiTextfieldDirective } from '@taiga-ui/core/components/textfield';
|
|
20
20
|
import { TUI_COMMON_ICONS } from '@taiga-ui/core/tokens';
|
|
21
21
|
import { TuiAccordion } from '@taiga-ui/kit/components/accordion';
|
|
22
|
+
import { TuiBadge } from '@taiga-ui/kit/components/badge';
|
|
22
23
|
import { TuiInputModule } from '@taiga-ui/legacy/components/input';
|
|
23
24
|
import { TuiTextfieldControllerModule } from '@taiga-ui/legacy/directives/textfield-controller';
|
|
24
25
|
import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
|
|
@@ -32,10 +33,19 @@ import * as i3 from "@taiga-ui/core/components/data-list";
|
|
|
32
33
|
import * as i4 from "@taiga-ui/core/components/expand";
|
|
33
34
|
import * as i5 from "@taiga-ui/core/components/textfield";
|
|
34
35
|
import * as i6 from "@taiga-ui/legacy/directives/textfield-controller";
|
|
36
|
+
const BADGE = {
|
|
37
|
+
new: { label: 'New', appearance: 'positive' },
|
|
38
|
+
updated: { label: 'Updated', appearance: 'info' },
|
|
39
|
+
};
|
|
40
|
+
const NEW_VERSION_RANGE = 6;
|
|
35
41
|
class TuiDocNavigation {
|
|
36
42
|
constructor() {
|
|
37
43
|
this.router = inject(Router);
|
|
38
44
|
this.doc = inject(DOCUMENT);
|
|
45
|
+
this.current = tuiVersionParts(inject(TUI_DOC_VERSION));
|
|
46
|
+
this.sectionLeads = new Set(inject(NAVIGATION_ITEMS)
|
|
47
|
+
.slice(0, -1)
|
|
48
|
+
.map((pages) => pages[0]));
|
|
39
49
|
this.open = signal(false);
|
|
40
50
|
this.menuOpen = false;
|
|
41
51
|
this.sidebar = inject(TuiSidebarDirective, { optional: true });
|
|
@@ -45,11 +55,18 @@ class TuiDocNavigation {
|
|
|
45
55
|
this.searchEnabled = inject(TUI_DOC_SEARCH_ENABLED);
|
|
46
56
|
this.docIcons = inject(TUI_DOC_ICONS);
|
|
47
57
|
this.icons = inject(TUI_COMMON_ICONS);
|
|
58
|
+
this.flat = this.items.reduce((array, item) => [
|
|
59
|
+
...array,
|
|
60
|
+
item.reduce((pages, page) => 'subPages' in page ? [...pages, ...page.subPages] : [...pages, page], []),
|
|
61
|
+
], []);
|
|
62
|
+
// Inputs (items/version) are static, so badges are resolved once up front.
|
|
63
|
+
this.sectionBadges = this.items.map((section, index) => this.newOrUpdated(section[0]?.version, this.flat[index]));
|
|
64
|
+
this.itemBadges = this.mapItemBadges();
|
|
48
65
|
this.openPagesArr = [];
|
|
49
66
|
this.openPagesGroupsArr = [];
|
|
50
67
|
this.active = '';
|
|
51
68
|
this.search = new FormControl('');
|
|
52
|
-
this.filtered = toSignal(tuiControlValue(this.search).pipe(filter((search) => search.trim().length > 2), map((search) => this.filterItems(this.
|
|
69
|
+
this.filtered = toSignal(tuiControlValue(this.search).pipe(filter((search) => search.trim().length > 2), map((search) => this.filterItems(this.flat, search))), { initialValue: [] });
|
|
53
70
|
const titleService = inject(Title);
|
|
54
71
|
const readyToScroll$ = inject(TUI_DOC_PAGE_LOADED);
|
|
55
72
|
inject(NAVIGATION_TITLE)
|
|
@@ -79,6 +96,12 @@ class TuiDocNavigation {
|
|
|
79
96
|
isActive(route) {
|
|
80
97
|
return route === this.active;
|
|
81
98
|
}
|
|
99
|
+
sectionBadge(index) {
|
|
100
|
+
return this.sectionBadges[index] ?? null;
|
|
101
|
+
}
|
|
102
|
+
itemBadge(item) {
|
|
103
|
+
return this.itemBadges.get(item) ?? null;
|
|
104
|
+
}
|
|
82
105
|
onGroupClick(index) {
|
|
83
106
|
this.openPagesGroupsArr[index] = !this.openPagesGroupsArr[index];
|
|
84
107
|
}
|
|
@@ -113,13 +136,43 @@ class TuiDocNavigation {
|
|
|
113
136
|
search.split(/\s/).find((word) => title.includes(word)));
|
|
114
137
|
}), 'title'));
|
|
115
138
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
mapItemBadges() {
|
|
140
|
+
const badges = new Map();
|
|
141
|
+
const add = (item, badge) => {
|
|
142
|
+
if (badge) {
|
|
143
|
+
badges.set(item, badge);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
for (const section of this.items) {
|
|
147
|
+
for (const item of section) {
|
|
148
|
+
if (tuiIsRoutePageGroup(item)) {
|
|
149
|
+
add(item, this.newOrUpdated(item.version, item.subPages));
|
|
150
|
+
item.subPages.forEach((page) => add(page, this.leafBadge(page)));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
add(item, this.leafBadge(item));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return badges;
|
|
158
|
+
}
|
|
159
|
+
leafBadge(item) {
|
|
160
|
+
return !this.sectionLeads.has(item) && this.isRecent(item.version)
|
|
161
|
+
? BADGE.new
|
|
162
|
+
: null;
|
|
163
|
+
}
|
|
164
|
+
newOrUpdated(version, pages = []) {
|
|
165
|
+
if (this.isRecent(version)) {
|
|
166
|
+
return BADGE.new;
|
|
167
|
+
}
|
|
168
|
+
return this.hasRecent(pages) ? BADGE.updated : null;
|
|
169
|
+
}
|
|
170
|
+
hasRecent(pages = []) {
|
|
171
|
+
return pages.some((page) => this.isRecent(page.version));
|
|
172
|
+
}
|
|
173
|
+
isRecent(version = '') {
|
|
174
|
+
const { major, minor } = tuiVersionParts(version);
|
|
175
|
+
return (major === this.current.major && this.current.minor - minor < NEW_VERSION_RANGE);
|
|
123
176
|
}
|
|
124
177
|
isActiveRoute(route) {
|
|
125
178
|
return this.router.isActive(route, {
|
|
@@ -164,14 +217,11 @@ class TuiDocNavigation {
|
|
|
164
217
|
target.remove();
|
|
165
218
|
}
|
|
166
219
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocNavigation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
167
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDocNavigation, isStandalone: true, selector: "tui-doc-navigation", host: { listeners: { "window:keydown": "onFocusSearch($event)" }, properties: { "class._open": "menuOpen" } }, providers: NAVIGATION_PROVIDERS, viewQueries: [{ propertyName: "searchInput", first: true, predicate: TuiTextfieldDirective, descendants: true, read: ElementRef }], ngImport: i0, template: "<tui-textfield\n *ngIf=\"searchEnabled()\"\n tuiTextfieldSize=\"m\"\n class=\"t-input\"\n [iconStart]=\"docIcons.search\"\n [open]=\"open() && canOpen\"\n (keyup)=\"open.set(canOpen && $event.code !== 'Escape')\"\n (openChange)=\"open.set($event)\"\n>\n <code\n *ngIf=\"!search.value\"\n class=\"t-slash\"\n >\n /\n </code>\n <input\n tuiTextfield\n class=\"t-prevent-ios-scroll\"\n [formControl]=\"search\"\n [placeholder]=\"searchText\"\n [tuiAutoFocus]=\"!!sidebar\"\n />\n <ng-container *ngIf=\"canOpen\">\n <tui-data-list *tuiTextfieldDropdown>\n <tui-opt-group\n *ngFor=\"let group of filtered(); let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <ng-container *ngFor=\"let item of group\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiOption\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n tuiOption\n [attr.rel]=\"item.rel\"\n [fragment]=\"item.fragment\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n (click)=\"onClick()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </tui-opt-group>\n </tui-data-list>\n </ng-container>\n</tui-textfield>\n\n<nav class=\"t-navigation\">\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-accordion\n [class.t-accordion-standalone]=\"!searchEnabled()\"\n [closeOthers]=\"false\"\n [rounded]=\"false\"\n >\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [open]=\"!!openPagesArr[index]\"\n (openChange)=\"openPagesArr[index] = $event\"\n >\n <span class=\"t-label\">\n <strong>{{ label }}</strong>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"t-section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: index * 100 + subIndex}\"\n />\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"t-items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: items.length - 1 + index}\"\n />\n </div>\n\n <ng-template\n #pages\n let-index=\"index\"\n let-item=\"item\"\n >\n <ng-container *ngIf=\"!item.subPages; else subPagesTemplate\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #subPagesTemplate>\n <div\n routerLinkActive\n class=\"t-subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"t-sublink t-sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-icon\n class=\"t-chevron\"\n [class.t-chevron_active]=\"!!openPagesGroupsArr[index]\"\n [icon]=\"icons.more\"\n />\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </button>\n <tui-expand\n class=\"t-expand\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"t-section t-section_bordered\">\n <ng-container *ngFor=\"let subPage of $pages(item.subPages)\">\n <a\n *ngIf=\"subPage.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [href]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n >\n {{ subPage.title }}\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [fragment]=\"subPage.fragment\"\n [routerLink]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{ subPage.title }}\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content />\n", styles: [":host{z-index:1;display:flex;flex-direction:column;text-align:center;background:var(--tui-background-base)}.t-input{margin:1.25rem}.t-input ::ng-deep tui-icon{border-width:.25rem}.t-slash{block-size:1rem;font-size:.5rem}.t-navigation{display:flex;max-block-size:100%;min-block-size:0;flex:1 1 0;text-align:start}.t-navigation tui-scrollbar{overscroll-behavior:none}.t-accordion-standalone{margin-block-start:1rem}.t-scrollbar{scroll-behavior:var(--tui-scroll-behavior);inline-size:100%}.t-items-container{display:flex;flex-direction:column;padding:0 1rem}.t-label{margin-inline-start:.5rem}.t-expand{margin-inline-start:.25rem}.t-section{display:flex;flex-direction:column;align-items:flex-start;margin:-.5rem 0 -1rem}.t-section_bordered{margin:.5rem 0;border-inline-start:1px solid var(--tui-border-normal)}@supports (-webkit-touch-callout: none){.t-prevent-ios-scroll:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}.t-subsection{margin-inline-start:.5rem}.t-sublink{font:var(--tui-font-text-m);margin-inline-start:.5rem;padding:.5rem 0;text-decoration:none}.t-sublink_small{margin-inline-start:1rem;line-height:1.5rem;padding-block-start:.5rem}.t-sublink_subsection{margin-inline-start:0;line-height:1.6rem}.t-sublink.t-sublink.t-sublink_active{color:var(--tui-text-primary)}.t-icon{margin-inline-start:.5rem}.t-chevron{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:1rem;block-size:1rem;margin:-.25rem .25rem 0 -.1875rem}.t-chevron_active{transform:rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i2.TuiAccordionItem, selector: "tui-accordion-item", inputs: ["noPadding", "showArrow", "borders", "size", "disabled", "disableHover", "open", "async"], outputs: ["openChange"] }, { kind: "directive", type: i2.TuiAccordionDirective, selector: "tui-accordion", inputs: ["closeOthers"] }, { kind: "directive", type: i2.TuiAccordionItemContent, selector: "ng-template[tuiAccordionItemContent]" }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "component", type: i3.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i3.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i3.TuiOptGroup, selector: "tui-opt-group", inputs: ["label"] }, { kind: "directive", type: TuiDocScrollIntoViewLink, selector: "[tuiDocScrollIntoViewLink]", inputs: ["tuiDocScrollIntoViewLink"] }, { kind: "component", type: i4.TuiExpandComponent, selector: "tui-expand", inputs: ["async", "expanded"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i5.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i5.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i5.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i6.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
220
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDocNavigation, isStandalone: true, selector: "tui-doc-navigation", host: { listeners: { "window:keydown": "onFocusSearch($event)" }, properties: { "class._open": "menuOpen" } }, providers: NAVIGATION_PROVIDERS, viewQueries: [{ propertyName: "searchInput", first: true, predicate: TuiTextfieldDirective, descendants: true, read: ElementRef }], ngImport: i0, template: "<tui-textfield\n *ngIf=\"searchEnabled()\"\n tuiTextfieldSize=\"m\"\n class=\"t-input\"\n [iconStart]=\"docIcons.search\"\n [open]=\"open() && canOpen\"\n (keyup)=\"open.set(canOpen && $event.code !== 'Escape')\"\n (openChange)=\"open.set($event)\"\n>\n <code\n *ngIf=\"!search.value\"\n class=\"t-slash\"\n >\n /\n </code>\n <input\n tuiTextfield\n class=\"t-prevent-ios-scroll\"\n [formControl]=\"search\"\n [placeholder]=\"searchText\"\n [tuiAutoFocus]=\"!!sidebar\"\n />\n <ng-container *ngIf=\"canOpen\">\n <tui-data-list *tuiTextfieldDropdown>\n <tui-opt-group\n *ngFor=\"let group of filtered(); let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <ng-container *ngFor=\"let item of group\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiOption\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n tuiOption\n [attr.rel]=\"item.rel\"\n [fragment]=\"item.fragment\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n (click)=\"onClick()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </tui-opt-group>\n </tui-data-list>\n </ng-container>\n</tui-textfield>\n\n<nav class=\"t-navigation\">\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-accordion\n [class.t-accordion-standalone]=\"!searchEnabled()\"\n [closeOthers]=\"false\"\n [rounded]=\"false\"\n >\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [open]=\"!!openPagesArr[index]\"\n (openChange)=\"openPagesArr[index] = $event\"\n >\n <span class=\"t-label\">\n <strong>{{ label }}</strong>\n <ng-container *ngIf=\"sectionBadge(index) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"t-section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: index * 100 + subIndex}\"\n />\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"t-items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: items.length - 1 + index}\"\n />\n </div>\n\n <ng-template\n #pages\n let-index=\"index\"\n let-item=\"item\"\n >\n <ng-container *ngIf=\"!item.subPages; else subPagesTemplate\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #subPagesTemplate>\n <div\n routerLinkActive\n class=\"t-subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"t-sublink t-sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-icon\n class=\"t-chevron\"\n [class.t-chevron_active]=\"!!openPagesGroupsArr[index]\"\n [icon]=\"icons.more\"\n />\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </button>\n <tui-expand\n class=\"t-expand\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"t-section t-section_bordered\">\n <ng-container *ngFor=\"let subPage of $pages(item.subPages)\">\n <a\n *ngIf=\"subPage.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [href]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n >\n {{ subPage.title }}\n <ng-container *ngIf=\"itemBadge(subPage) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [fragment]=\"subPage.fragment\"\n [routerLink]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{ subPage.title }}\n <ng-container *ngIf=\"itemBadge(subPage) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n\n <ng-template\n #badgeTpl\n let-badge\n >\n <span\n size=\"m\"\n tuiBadge\n class=\"t-badge\"\n [appearance]=\"badge.appearance\"\n >\n {{ badge.label }}\n </span>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content />\n", styles: [":host{z-index:1;display:flex;flex-direction:column;text-align:center;background:var(--tui-background-base)}.t-input{margin:1.25rem}.t-input ::ng-deep tui-icon{border-width:.25rem}.t-slash{block-size:1rem;font-size:.5rem}.t-navigation{display:flex;max-block-size:100%;min-block-size:0;flex:1 1 0;text-align:start}.t-navigation tui-scrollbar{overscroll-behavior:none}.t-accordion-standalone{margin-block-start:1rem}.t-scrollbar{scroll-behavior:var(--tui-scroll-behavior);inline-size:100%}.t-items-container{display:flex;flex-direction:column;padding:0 1rem}.t-label{display:inline-flex;align-items:center;margin-inline-start:.5rem}.t-badge{margin-inline-start:.375rem;font-size:.75rem}.t-expand{margin-inline-start:.25rem}.t-section{display:flex;flex-direction:column;align-items:flex-start;margin:-.5rem 0 -1rem}.t-section_bordered{margin:.5rem 0;border-inline-start:1px solid var(--tui-border-normal)}@supports (-webkit-touch-callout: none){.t-prevent-ios-scroll:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}.t-subsection{margin-inline-start:.5rem}.t-sublink{font:var(--tui-font-text-m);margin-inline-start:.5rem;padding:.5rem 0;text-decoration:none}.t-sublink_small{margin-inline-start:1rem;line-height:1.5rem;padding-block-start:.5rem}.t-sublink_subsection{margin-inline-start:0;line-height:1.6rem}.t-sublink.t-sublink.t-sublink_active{color:var(--tui-text-primary)}.t-icon{margin-inline-start:.5rem}.t-chevron{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:1rem;block-size:1rem;margin:-.25rem .25rem 0 -.1875rem}.t-chevron_active{transform:rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i2.TuiAccordionItem, selector: "tui-accordion-item", inputs: ["noPadding", "showArrow", "borders", "size", "disabled", "disableHover", "open", "async"], outputs: ["openChange"] }, { kind: "directive", type: i2.TuiAccordionDirective, selector: "tui-accordion", inputs: ["closeOthers"] }, { kind: "directive", type: i2.TuiAccordionItemContent, selector: "ng-template[tuiAccordionItemContent]" }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "component", type: i3.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i3.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i3.TuiOptGroup, selector: "tui-opt-group", inputs: ["label"] }, { kind: "directive", type: TuiDocScrollIntoViewLink, selector: "[tuiDocScrollIntoViewLink]", inputs: ["tuiDocScrollIntoViewLink"] }, { kind: "component", type: i4.TuiExpandComponent, selector: "tui-expand", inputs: ["async", "expanded"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i5.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i5.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i5.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i6.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
168
221
|
}
|
|
169
222
|
__decorate([
|
|
170
223
|
tuiPure
|
|
171
224
|
], TuiDocNavigation.prototype, "filterItems", null);
|
|
172
|
-
__decorate([
|
|
173
|
-
tuiPure
|
|
174
|
-
], TuiDocNavigation.prototype, "flattenSubPages", null);
|
|
175
225
|
export { TuiDocNavigation };
|
|
176
226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocNavigation, decorators: [{
|
|
177
227
|
type: Component,
|
|
@@ -185,6 +235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
185
235
|
RouterLinkActive,
|
|
186
236
|
TuiAccordion,
|
|
187
237
|
TuiAutoFocus,
|
|
238
|
+
TuiBadge,
|
|
188
239
|
TuiDataList,
|
|
189
240
|
TuiDocScrollIntoViewLink,
|
|
190
241
|
TuiExpand,
|
|
@@ -197,9 +248,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
197
248
|
], changeDetection: ChangeDetectionStrategy.OnPush, providers: NAVIGATION_PROVIDERS, host: {
|
|
198
249
|
'[class._open]': 'menuOpen',
|
|
199
250
|
'(window:keydown)': 'onFocusSearch($event)',
|
|
200
|
-
}, template: "<tui-textfield\n *ngIf=\"searchEnabled()\"\n tuiTextfieldSize=\"m\"\n class=\"t-input\"\n [iconStart]=\"docIcons.search\"\n [open]=\"open() && canOpen\"\n (keyup)=\"open.set(canOpen && $event.code !== 'Escape')\"\n (openChange)=\"open.set($event)\"\n>\n <code\n *ngIf=\"!search.value\"\n class=\"t-slash\"\n >\n /\n </code>\n <input\n tuiTextfield\n class=\"t-prevent-ios-scroll\"\n [formControl]=\"search\"\n [placeholder]=\"searchText\"\n [tuiAutoFocus]=\"!!sidebar\"\n />\n <ng-container *ngIf=\"canOpen\">\n <tui-data-list *tuiTextfieldDropdown>\n <tui-opt-group\n *ngFor=\"let group of filtered(); let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <ng-container *ngFor=\"let item of group\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiOption\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n tuiOption\n [attr.rel]=\"item.rel\"\n [fragment]=\"item.fragment\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n (click)=\"onClick()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </tui-opt-group>\n </tui-data-list>\n </ng-container>\n</tui-textfield>\n\n<nav class=\"t-navigation\">\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-accordion\n [class.t-accordion-standalone]=\"!searchEnabled()\"\n [closeOthers]=\"false\"\n [rounded]=\"false\"\n >\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [open]=\"!!openPagesArr[index]\"\n (openChange)=\"openPagesArr[index] = $event\"\n >\n <span class=\"t-label\">\n <strong>{{ label }}</strong>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"t-section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: index * 100 + subIndex}\"\n />\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"t-items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: items.length - 1 + index}\"\n />\n </div>\n\n <ng-template\n #pages\n let-index=\"index\"\n let-item=\"item\"\n >\n <ng-container *ngIf=\"!item.subPages; else subPagesTemplate\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #subPagesTemplate>\n <div\n routerLinkActive\n class=\"t-subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"t-sublink t-sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-icon\n class=\"t-chevron\"\n [class.t-chevron_active]=\"!!openPagesGroupsArr[index]\"\n [icon]=\"icons.more\"\n />\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </button>\n <tui-expand\n class=\"t-expand\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"t-section t-section_bordered\">\n <ng-container *ngFor=\"let subPage of $pages(item.subPages)\">\n <a\n *ngIf=\"subPage.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [href]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n >\n {{ subPage.title }}\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [fragment]=\"subPage.fragment\"\n [routerLink]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{ subPage.title }}\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content />\n", styles: [":host{z-index:1;display:flex;flex-direction:column;text-align:center;background:var(--tui-background-base)}.t-input{margin:1.25rem}.t-input ::ng-deep tui-icon{border-width:.25rem}.t-slash{block-size:1rem;font-size:.5rem}.t-navigation{display:flex;max-block-size:100%;min-block-size:0;flex:1 1 0;text-align:start}.t-navigation tui-scrollbar{overscroll-behavior:none}.t-accordion-standalone{margin-block-start:1rem}.t-scrollbar{scroll-behavior:var(--tui-scroll-behavior);inline-size:100%}.t-items-container{display:flex;flex-direction:column;padding:0 1rem}.t-label{margin-inline-start:.5rem}.t-expand{margin-inline-start:.25rem}.t-section{display:flex;flex-direction:column;align-items:flex-start;margin:-.5rem 0 -1rem}.t-section_bordered{margin:.5rem 0;border-inline-start:1px solid var(--tui-border-normal)}@supports (-webkit-touch-callout: none){.t-prevent-ios-scroll:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}.t-subsection{margin-inline-start:.5rem}.t-sublink{font:var(--tui-font-text-m);margin-inline-start:.5rem;padding:.5rem 0;text-decoration:none}.t-sublink_small{margin-inline-start:1rem;line-height:1.5rem;padding-block-start:.5rem}.t-sublink_subsection{margin-inline-start:0;line-height:1.6rem}.t-sublink.t-sublink.t-sublink_active{color:var(--tui-text-primary)}.t-icon{margin-inline-start:.5rem}.t-chevron{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:1rem;block-size:1rem;margin:-.25rem .25rem 0 -.1875rem}.t-chevron_active{transform:rotate(90deg)}\n"] }]
|
|
251
|
+
}, template: "<tui-textfield\n *ngIf=\"searchEnabled()\"\n tuiTextfieldSize=\"m\"\n class=\"t-input\"\n [iconStart]=\"docIcons.search\"\n [open]=\"open() && canOpen\"\n (keyup)=\"open.set(canOpen && $event.code !== 'Escape')\"\n (openChange)=\"open.set($event)\"\n>\n <code\n *ngIf=\"!search.value\"\n class=\"t-slash\"\n >\n /\n </code>\n <input\n tuiTextfield\n class=\"t-prevent-ios-scroll\"\n [formControl]=\"search\"\n [placeholder]=\"searchText\"\n [tuiAutoFocus]=\"!!sidebar\"\n />\n <ng-container *ngIf=\"canOpen\">\n <tui-data-list *tuiTextfieldDropdown>\n <tui-opt-group\n *ngFor=\"let group of filtered(); let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <ng-container *ngFor=\"let item of group\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiOption\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n tuiOption\n [attr.rel]=\"item.rel\"\n [fragment]=\"item.fragment\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n (click)=\"onClick()\"\n >\n {{ item.title }}\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </tui-opt-group>\n </tui-data-list>\n </ng-container>\n</tui-textfield>\n\n<nav class=\"t-navigation\">\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-accordion\n [class.t-accordion-standalone]=\"!searchEnabled()\"\n [closeOthers]=\"false\"\n [rounded]=\"false\"\n >\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [open]=\"!!openPagesArr[index]\"\n (openChange)=\"openPagesArr[index] = $event\"\n >\n <span class=\"t-label\">\n <strong>{{ label }}</strong>\n <ng-container *ngIf=\"sectionBadge(index) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"t-section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: index * 100 + subIndex}\"\n />\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"t-items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n [ngTemplateOutlet]=\"pages\"\n [ngTemplateOutletContext]=\"{item: item, index: items.length - 1 + index}\"\n />\n </div>\n\n <ng-template\n #pages\n let-index=\"index\"\n let-item=\"item\"\n >\n <ng-container *ngIf=\"!item.subPages; else subPagesTemplate\">\n <a\n *ngIf=\"item.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [href]=\"item.route\"\n [target]=\"item.target || '_self'\"\n >\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink\"\n [attr.rel]=\"item.rel\"\n [routerLink]=\"item.route\"\n [target]=\"item.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #subPagesTemplate>\n <div\n routerLinkActive\n class=\"t-subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"t-sublink t-sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-icon\n class=\"t-chevron\"\n [class.t-chevron_active]=\"!!openPagesGroupsArr[index]\"\n [icon]=\"icons.more\"\n />\n {{ item.title }}\n <ng-container *ngIf=\"itemBadge(item) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"item.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </button>\n <tui-expand\n class=\"t-expand\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"t-section t-section_bordered\">\n <ng-container *ngFor=\"let subPage of $pages(item.subPages)\">\n <a\n *ngIf=\"subPage.route.includes('://'); else internal\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [href]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n >\n {{ subPage.title }}\n <ng-container *ngIf=\"itemBadge(subPage) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n\n <ng-template #internal>\n <a\n routerLinkActive=\"t-sublink_active\"\n tuiLink\n class=\"t-sublink t-sublink_small\"\n [attr.rel]=\"subPage.rel\"\n [fragment]=\"subPage.fragment\"\n [routerLink]=\"subPage.route\"\n [target]=\"subPage.target || '_self'\"\n [tuiDocScrollIntoViewLink]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{ subPage.title }}\n <ng-container *ngIf=\"itemBadge(subPage) as badge\">\n <ng-container\n [ngTemplateOutlet]=\"badgeTpl\"\n [ngTemplateOutletContext]=\"{$implicit: badge}\"\n />\n </ng-container>\n <tui-icon\n *polymorpheusOutlet=\"subPage.icon as icon\"\n class=\"t-icon\"\n [icon]=\"icon\"\n />\n </a>\n </ng-template>\n </ng-container>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n\n <ng-template\n #badgeTpl\n let-badge\n >\n <span\n size=\"m\"\n tuiBadge\n class=\"t-badge\"\n [appearance]=\"badge.appearance\"\n >\n {{ badge.label }}\n </span>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content />\n", styles: [":host{z-index:1;display:flex;flex-direction:column;text-align:center;background:var(--tui-background-base)}.t-input{margin:1.25rem}.t-input ::ng-deep tui-icon{border-width:.25rem}.t-slash{block-size:1rem;font-size:.5rem}.t-navigation{display:flex;max-block-size:100%;min-block-size:0;flex:1 1 0;text-align:start}.t-navigation tui-scrollbar{overscroll-behavior:none}.t-accordion-standalone{margin-block-start:1rem}.t-scrollbar{scroll-behavior:var(--tui-scroll-behavior);inline-size:100%}.t-items-container{display:flex;flex-direction:column;padding:0 1rem}.t-label{display:inline-flex;align-items:center;margin-inline-start:.5rem}.t-badge{margin-inline-start:.375rem;font-size:.75rem}.t-expand{margin-inline-start:.25rem}.t-section{display:flex;flex-direction:column;align-items:flex-start;margin:-.5rem 0 -1rem}.t-section_bordered{margin:.5rem 0;border-inline-start:1px solid var(--tui-border-normal)}@supports (-webkit-touch-callout: none){.t-prevent-ios-scroll:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}.t-subsection{margin-inline-start:.5rem}.t-sublink{font:var(--tui-font-text-m);margin-inline-start:.5rem;padding:.5rem 0;text-decoration:none}.t-sublink_small{margin-inline-start:1rem;line-height:1.5rem;padding-block-start:.5rem}.t-sublink_subsection{margin-inline-start:0;line-height:1.6rem}.t-sublink.t-sublink.t-sublink_active{color:var(--tui-text-primary)}.t-icon{margin-inline-start:.5rem}.t-chevron{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:1rem;block-size:1rem;margin:-.25rem .25rem 0 -.1875rem}.t-chevron_active{transform:rotate(90deg)}\n"] }]
|
|
201
252
|
}], ctorParameters: function () { return []; }, propDecorators: { searchInput: [{
|
|
202
253
|
type: ViewChild,
|
|
203
254
|
args: [TuiTextfieldDirective, { read: ElementRef }]
|
|
204
|
-
}], filterItems: []
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1kb2MvY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tZG9jL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGdCQUFnQixHQUNuQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQUV0RSxNQWdDYSxnQkFBZ0I7SUFnQ3pCO1FBNUJpQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLFFBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRVIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3hELFdBQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFMUMsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFDN0IsdUJBQWtCLEdBQWMsRUFBRSxDQUFDO1FBQ25DLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFFSCxXQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0IsYUFBUSxHQUFHLFFBQVEsQ0FDbEMsZUFBZSxDQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3JDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDNUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQzlFLEVBQ0QsRUFBQyxZQUFZLEVBQUUsRUFBRSxFQUFDLENBQ3JCLENBQUM7UUFHRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFbkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2FBQ25CLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO2FBQ3RDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxhQUFhLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25CLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLEtBQUssWUFBWSxNQUFNLENBQUMsRUFDM0QsU0FBUyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQ25CLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRztnQkFDckIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQ25CLENBQ0o7WUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQ3pCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3hEO1NBQ0osQ0FBQzthQUNHLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUMvQixNQUFNLENBQVMsT0FBTyxDQUFDLEVBQ3ZCLGtCQUFrQixFQUFFLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFjLG9CQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFUyxNQUFNLENBQThCLEtBQVE7UUFDbEQsT0FBTyxLQUEwQixDQUFDO0lBQ3RDLENBQUM7SUFFUyxRQUFRLENBQUMsS0FBYTtRQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFUyxZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVTLFNBQVM7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRVMsT0FBTztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFUyxhQUFhLENBQUMsS0FBb0I7UUFDeEMsSUFDSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDdEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsa0NBQWtDLENBQUMsRUFDdEU7WUFDRSxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBR08sV0FBVyxDQUNmLEtBQWdELEVBQ2hELE1BQWM7UUFFZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN6QixTQUFTLENBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTVCLE9BQU8sQ0FDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RELFFBQVEsQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzFELENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixPQUFPLENBQ1YsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUdPLGVBQWUsQ0FDbkIsS0FBa0M7UUFFbEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUNmLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDYixHQUFHLEtBQUs7WUFDUixJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQ1osVUFBVSxJQUFJLElBQUk7Z0JBQ2QsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsRUFDMUIsRUFBRSxDQUNMO1NBQ0osRUFDRCxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUMvQixLQUFLLEVBQUUsUUFBUTtZQUNmLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFlBQVksRUFBRSxTQUFTO1NBQzFCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDckMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM1QjtnQkFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7NEJBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQzt5QkFDL0I7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQWdCO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPO1NBQ1Y7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQzsrR0F4TVEsZ0JBQWdCO21HQUFoQixnQkFBZ0IsZ0xBTmQsb0JBQW9CLHVFQU9wQixxQkFBcUIsMkJBQVMsVUFBVSw2QkMvRXZELHVuU0ErTkEseW5ERDdLUSxPQUFPLG1IQUNQLElBQUksNkZBQ0osZ0JBQWdCLG9KQUNoQixrQkFBa0IsNkhBQ2xCLG1CQUFtQiwwa0JBQ25CLFVBQVUsNE5BQ1YsZ0JBQWdCLG1uQkFFaEIsWUFBWSw2Y0FFWix3QkFBd0Isd05BRXhCLE9BQU8sb0ZBQ1AsY0FBYywrQkFDZCxPQUFPLDRGQUNQLFlBQVksMm9CQUVaLDRCQUE0Qjs7QUFzSHhCO0lBRFAsT0FBTzttREEwQlA7QUFHTztJQURQLE9BQU87dURBaUJQO1NBdkpRLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQWhDNUIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sb0JBQW9CLFdBQ3JCO3dCQUNMLE9BQU87d0JBQ1AsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsd0JBQXdCO3dCQUN4QixTQUFTO3dCQUNULE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxPQUFPO3dCQUNQLFlBQVk7d0JBQ1osWUFBWTt3QkFDWiw0QkFBNEI7cUJBQy9CLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLG9CQUFvQixRQUN6Qjt3QkFDRixlQUFlLEVBQUUsVUFBVTt3QkFDM0Isa0JBQWtCLEVBQUUsdUJBQXVCO3FCQUM5QzswRUFJZ0IsV0FBVztzQkFEM0IsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUM7Z0JBMEc1QyxXQUFXLE1BNEJYLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5ULCBOZ0Zvck9mLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtSb3V0ZXIsIFJvdXRlckxpbmssIFJvdXRlckxpbmtBY3RpdmUsIFNjcm9sbH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgVFVJX0RPQ19JQ09OUyxcbiAgICBUVUlfRE9DX1BBR0VfTE9BREVELFxuICAgIFRVSV9ET0NfU0VBUkNIX0VOQUJMRUQsXG4gICAgVFVJX0RPQ19TRUFSQ0hfVEVYVCxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy90b2tlbnMnO1xuaW1wb3J0IHt0eXBlIFR1aURvY1JvdXRlUGFnZSwgdHlwZSBUdWlEb2NSb3V0ZVBhZ2VzfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tZG9jL3R5cGVzJztcbmltcG9ydCB7dHVpVHJhbnNsaXRlcmF0ZUtleWJvYXJkTGF5b3V0fSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tZG9jL3V0aWxzJztcbmltcG9ydCB7VHVpU2lkZWJhckRpcmVjdGl2ZX0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9kaXJlY3RpdmVzL3NpZGViYXInO1xuaW1wb3J0IHtUdWlBdXRvRm9jdXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hdXRvLWZvY3VzJztcbmltcG9ydCB7dHVpQ29udHJvbFZhbHVlLCB0dWlXYXRjaH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge3R1aVB1cmUsIHR1aVVuaXFCeX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7VHVpRGF0YUxpc3R9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvZGF0YS1saXN0JztcbmltcG9ydCB7VHVpRXhwYW5kfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2V4cGFuZCc7XG5pbXBvcnQge1R1aUljb259IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQge1R1aUxpbmt9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvbGluayc7XG5pbXBvcnQge1R1aVNjcm9sbGJhcn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9zY3JvbGxiYXInO1xuaW1wb3J0IHtUdWlUZXh0ZmllbGQsIFR1aVRleHRmaWVsZERpcmVjdGl2ZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtUVUlfQ09NTU9OX0lDT05TfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90b2tlbnMnO1xuaW1wb3J0IHtUdWlBY2NvcmRpb259IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9hY2NvcmRpb24nO1xuaW1wb3J0IHtUdWlJbnB1dE1vZHVsZX0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeS9jb21wb25lbnRzL2lucHV0JztcbmltcG9ydCB7VHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZX0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeS9kaXJlY3RpdmVzL3RleHRmaWVsZC1jb250cm9sbGVyJztcbmltcG9ydCB7UG9seW1vcnBoZXVzT3V0bGV0fSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgTkFWSUdBVElPTl9JVEVNUyxcbiAgICBOQVZJR0FUSU9OX0xBQkVMUyxcbiAgICBOQVZJR0FUSU9OX1BST1ZJREVSUyxcbiAgICBOQVZJR0FUSU9OX1RJVExFLFxufSBmcm9tICcuL25hdmlnYXRpb24ucHJvdmlkZXJzJztcbmltcG9ydCB7VHVpRG9jU2Nyb2xsSW50b1ZpZXdMaW5rfSBmcm9tICcuL3Njcm9sbC1pbnRvLXZpZXcuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3R1aS1kb2MtbmF2aWdhdGlvbicsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb2x5bW9ycGhldXNPdXRsZXQsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFJvdXRlckxpbmssXG4gICAgICAgIFJvdXRlckxpbmtBY3RpdmUsXG4gICAgICAgIFR1aUFjY29yZGlvbixcbiAgICAgICAgVHVpQXV0b0ZvY3VzLFxuICAgICAgICBUdWlEYXRhTGlzdCxcbiAgICAgICAgVHVpRG9jU2Nyb2xsSW50b1ZpZXdMaW5rLFxuICAgICAgICBUdWlFeHBhbmQsXG4gICAgICAgIFR1aUljb24sXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlMaW5rLFxuICAgICAgICBUdWlTY3JvbGxiYXIsXG4gICAgICAgIFR1aVRleHRmaWVsZCxcbiAgICAgICAgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25hdmlnYXRpb24uc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogTkFWSUdBVElPTl9QUk9WSURFUlMsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLl9vcGVuXSc6ICdtZW51T3BlbicsXG4gICAgICAgICcod2luZG93OmtleWRvd24pJzogJ29uRm9jdXNTZWFyY2goJGV2ZW50KScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRG9jTmF2aWdhdGlvbiB7XG4gICAgQFZpZXdDaGlsZChUdWlUZXh0ZmllbGREaXJlY3RpdmUsIHtyZWFkOiBFbGVtZW50UmVmfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaElucHV0PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2MgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJvdGVjdGVkIG9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCBtZW51T3BlbiA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGViYXIgPSBpbmplY3QoVHVpU2lkZWJhckRpcmVjdGl2ZSwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhYmVscyA9IGluamVjdChOQVZJR0FUSU9OX0xBQkVMUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zID0gaW5qZWN0KE5BVklHQVRJT05fSVRFTVMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hUZXh0ID0gaW5qZWN0KFRVSV9ET0NfU0VBUkNIX1RFWFQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hFbmFibGVkID0gaW5qZWN0KFRVSV9ET0NfU0VBUkNIX0VOQUJMRUQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkb2NJY29ucyA9IGluamVjdChUVUlfRE9DX0lDT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3QoVFVJX0NPTU1PTl9JQ09OUyk7XG5cbiAgICBwcm90ZWN0ZWQgb3BlblBhZ2VzQXJyOiBib29sZWFuW10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgb3BlblBhZ2VzR3JvdXBzQXJyOiBib29sZWFuW10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgYWN0aXZlID0gJyc7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VhcmNoID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJlZCA9IHRvU2lnbmFsKFxuICAgICAgICB0dWlDb250cm9sVmFsdWU8c3RyaW5nPih0aGlzLnNlYXJjaCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoc2VhcmNoKSA9PiBzZWFyY2gudHJpbSgpLmxlbmd0aCA+IDIpLFxuICAgICAgICAgICAgbWFwKChzZWFyY2gpID0+IHRoaXMuZmlsdGVySXRlbXModGhpcy5mbGF0dGVuU3ViUGFnZXModGhpcy5pdGVtcyksIHNlYXJjaCkpLFxuICAgICAgICApLFxuICAgICAgICB7aW5pdGlhbFZhbHVlOiBbXX0sXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB0aXRsZVNlcnZpY2UgPSBpbmplY3QoVGl0bGUpO1xuICAgICAgICBjb25zdCByZWFkeVRvU2Nyb2xsJCA9IGluamVjdChUVUlfRE9DX1BBR0VfTE9BREVEKTtcblxuICAgICAgICBpbmplY3QoTkFWSUdBVElPTl9USVRMRSlcbiAgICAgICAgICAgIC5waXBlKHR1aVdhdGNoKCksIHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkFjdGl2ZVBhZ2VHcm91cCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgU2Nyb2xsID0+IGV2ZW50IGluc3RhbmNlb2YgU2Nyb2xsKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHthbmNob3J9KSA9PlxuICAgICAgICAgICAgICAgICAgICAnb25zY3JvbGxlbmQnIGluIHRoaXMuZG9jXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZyb21FdmVudCh0aGlzLmRvYywgJ3Njcm9sbGVuZCcpLnBpcGUobWFwKCgpID0+IGFuY2hvcikpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9mKGFuY2hvciksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpbmplY3QoTkFWSUdBVElPTl9USVRMRSkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gcmVhZHlUb1Njcm9sbCQucGlwZShmaWx0ZXIoQm9vbGVhbikpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1hcCgoW2FuY2hvcl0pID0+IGFuY2hvciB8fCAnJyksXG4gICAgICAgICAgICAgICAgZmlsdGVyPHN0cmluZz4oQm9vbGVhbiksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhbmNob3IpID0+IHRoaXMubmF2aWdhdGVUb0FuY2hvckxpbmsoYW5jaG9yKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBjYW5PcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VhcmNoLnZhbHVlPy5sZW5ndGggPz8gMCkgPiAyO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaXRlbXNXaXRob3V0U2VjdGlvbnMoKTogVHVpRG9jUm91dGVQYWdlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW3RoaXMuaXRlbXMubGVuZ3RoIC0gMV0gPz8gW107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkICRwYWdlczxUIGV4dGVuZHMgVHVpRG9jUm91dGVQYWdlW10+KHBhZ2VzOiBUKTogcmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlW10ge1xuICAgICAgICByZXR1cm4gcGFnZXMgYXMgVHVpRG9jUm91dGVQYWdlW107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzQWN0aXZlKHJvdXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlID09PSB0aGlzLmFjdGl2ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Hcm91cENsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuUGFnZXNHcm91cHNBcnJbaW5kZXhdID0gIXRoaXMub3BlblBhZ2VzR3JvdXBzQXJyW2luZGV4XTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLm1lbnVPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoLnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5vcGVuQWN0aXZlUGFnZUdyb3VwKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9jdXNTZWFyY2goZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQuY29kZSA9PT0gJ1NsYXNoJyAmJlxuICAgICAgICAgICAgIXRoaXMuZG9jLmFjdGl2ZUVsZW1lbnQ/Lm1hdGNoZXMoJ2lucHV0LHRleHRhcmVhLFtjb250ZW50ZWRpdGFibGVdJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBmaWx0ZXJJdGVtcyhcbiAgICAgICAgaXRlbXM6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlW10+LFxuICAgICAgICBzZWFyY2g6IHN0cmluZyxcbiAgICApOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFR1aURvY1JvdXRlUGFnZVtdPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICB0dWlVbmlxQnkoXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5maWx0ZXIoKHt0aXRsZSwga2V5d29yZHMgPSAnJ30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcyA9IGtleXdvcmRzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaW5jbHVkZXMoc2VhcmNoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMuaW5jbHVkZXMoc2VhcmNoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaW5jbHVkZXModHVpVHJhbnNsaXRlcmF0ZUtleWJvYXJkTGF5b3V0KHNlYXJjaCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcy5pbmNsdWRlcyh0dWlUcmFuc2xpdGVyYXRlS2V5Ym9hcmRMYXlvdXQoc2VhcmNoKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaC5yZXBsYWNlQWxsKCctJywgJycpLmluY2x1ZGVzKHRpdGxlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaW5jbHVkZXMoc2VhcmNoLnJlcGxhY2VBbGwoL1xcc3x0dWkvZywgJycpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMuaW5jbHVkZXMoc2VhcmNoLnJlcGxhY2VBbGwoL1xcc3x0dWkvZywgJycpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoLnNwbGl0KC9cXHMvKS5maW5kKCh3b3JkKSA9PiB0aXRsZS5pbmNsdWRlcyh3b3JkKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAndGl0bGUnLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIHByaXZhdGUgZmxhdHRlblN1YlBhZ2VzKFxuICAgICAgICBpdGVtczogcmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlc1tdLFxuICAgICk6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlW10+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLnJlZHVjZTxSZWFkb25seUFycmF5PHJlYWRvbmx5IFR1aURvY1JvdXRlUGFnZVtdPj4oXG4gICAgICAgICAgICAoYXJyYXksIGl0ZW0pID0+IFtcbiAgICAgICAgICAgICAgICAuLi5hcnJheSxcbiAgICAgICAgICAgICAgICBpdGVtLnJlZHVjZTxyZWFkb25seSBUdWlEb2NSb3V0ZVBhZ2VbXT4oXG4gICAgICAgICAgICAgICAgICAgIChwYWdlcywgcGFnZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWJQYWdlcycgaW4gcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnBhZ2VzLCAuLi5wYWdlLnN1YlBhZ2VzXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogWy4uLnBhZ2VzLCBwYWdlXSxcbiAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aXZlUm91dGUocm91dGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUocm91dGUsIHtcbiAgICAgICAgICAgIHBhdGhzOiAnc3Vic2V0JyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAnc3Vic2V0JyxcbiAgICAgICAgICAgIGZyYWdtZW50OiAnaWdub3JlZCcsXG4gICAgICAgICAgICBtYXRyaXhQYXJhbXM6ICdpZ25vcmVkJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQWN0aXZlUGFnZUdyb3VwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKHBhZ2VzLCBwYWdlc0luZGV4KSA9PiB7XG4gICAgICAgICAgICBwYWdlcy5mb3JFYWNoKChwYWdlLCBwYWdlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoJ3JvdXRlJyBpbiBwYWdlICYmIHRoaXMuaXNBY3RpdmVSb3V0ZShwYWdlLnJvdXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlc0FycltwYWdlc0luZGV4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gcGFnZS5yb3V0ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3N1YlBhZ2VzJyBpbiBwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2Uuc3ViUGFnZXMuZm9yRWFjaCgoc3ViUGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVSb3V0ZShzdWJQYWdlLnJvdXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblBhZ2VzQXJyW3BhZ2VzSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlc0dyb3Vwc0FycltwYWdlc0luZGV4ICogMTAwICsgcGFnZUluZGV4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBzdWJQYWdlLnJvdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBuYXZpZ2F0ZVRvQW5jaG9yTGluayhmcmFnbWVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gZnJhZ21lbnQgPyB0aGlzLmRvYy5xdWVyeVNlbGVjdG9yQWxsKGAjJHtmcmFnbWVudH1gKSA6IFtdO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZXMubGVuZ3RoICYmIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW11bGF0ZSA6dGFyZ2V0IGV2ZW50XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblxuICAgICAgICB0YXJnZXQuaHJlZiA9IGAke3RoaXMuZG9jLmxvY2F0aW9uLnBhdGhuYW1lfSMke2ZyYWdtZW50fWA7XG4gICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0YXJnZXQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLmRvYy5ib2R5LmFwcGVuZENoaWxkKHRhcmdldCk7XG4gICAgICAgIHRhcmdldC5jbGljaygpO1xuICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgfVxufVxuIiwiPHR1aS10ZXh0ZmllbGRcbiAgICAqbmdJZj1cInNlYXJjaEVuYWJsZWQoKVwiXG4gICAgdHVpVGV4dGZpZWxkU2l6ZT1cIm1cIlxuICAgIGNsYXNzPVwidC1pbnB1dFwiXG4gICAgW2ljb25TdGFydF09XCJkb2NJY29ucy5zZWFyY2hcIlxuICAgIFtvcGVuXT1cIm9wZW4oKSAmJiBjYW5PcGVuXCJcbiAgICAoa2V5dXApPVwib3Blbi5zZXQoY2FuT3BlbiAmJiAkZXZlbnQuY29kZSAhPT0gJ0VzY2FwZScpXCJcbiAgICAob3BlbkNoYW5nZSk9XCJvcGVuLnNldCgkZXZlbnQpXCJcbj5cbiAgICA8Y29kZVxuICAgICAgICAqbmdJZj1cIiFzZWFyY2gudmFsdWVcIlxuICAgICAgICBjbGFzcz1cInQtc2xhc2hcIlxuICAgID5cbiAgICAgICAgL1xuICAgIDwvY29kZT5cbiAgICA8aW5wdXRcbiAgICAgICAgdHVpVGV4dGZpZWxkXG4gICAgICAgIGNsYXNzPVwidC1wcmV2ZW50LWlvcy1zY3JvbGxcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRleHRcIlxuICAgICAgICBbdHVpQXV0b0ZvY3VzXT1cIiEhc2lkZWJhclwiXG4gICAgLz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuT3BlblwiPlxuICAgICAgICA8dHVpLWRhdGEtbGlzdCAqdHVpVGV4dGZpZWxkRHJvcGRvd24+XG4gICAgICAgICAgICA8dHVpLW9wdC1ncm91cFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWx0ZXJlZCgpOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsc1tpbmRleF0gfHwgJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5yb3V0ZS5pbmNsdWRlcygnOi8vJyk7IGVsc2UgaW50ZXJuYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWxdPVwiaXRlbS5yZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbS5yb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IHx8ICdfc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaXRlbS5pY29uIGFzIGljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVybmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWxdPVwiaXRlbS5yZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFnbWVudF09XCJpdGVtLmZyYWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IHx8ICdfc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90dWktb3B0LWdyb3VwPlxuICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgPC9uZy1jb250YWluZXI+XG48L3R1aS10ZXh0ZmllbGQ+XG5cbjxuYXYgY2xhc3M9XCJ0LW5hdmlnYXRpb25cIj5cbiAgICA8dHVpLXNjcm9sbGJhciBjbGFzcz1cInQtc2Nyb2xsYmFyXCI+XG4gICAgICAgIDx0dWktYWNjb3JkaW9uXG4gICAgICAgICAgICBbY2xhc3MudC1hY2NvcmRpb24tc3RhbmRhbG9uZV09XCIhc2VhcmNoRW5hYmxlZCgpXCJcbiAgICAgICAgICAgIFtjbG9zZU90aGVyc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbcm91bmRlZF09XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0dWktYWNjb3JkaW9uLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgbGFiZWxzOyBpbmRleCBhcyBpbmRleFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIFtib3JkZXJzXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgIFtvcGVuXT1cIiEhb3BlblBhZ2VzQXJyW2luZGV4XVwiXG4gICAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib3BlblBhZ2VzQXJyW2luZGV4XSA9ICRldmVudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgbGFiZWwgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHR1aUFjY29yZGlvbkl0ZW1Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNbaW5kZXhdOyBpbmRleCBhcyBzdWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbSwgaW5kZXg6IGluZGV4ICogMTAwICsgc3ViSW5kZXh9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3R1aS1hY2NvcmRpb24taXRlbT5cbiAgICAgICAgPC90dWktYWNjb3JkaW9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidC1pdGVtcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1dpdGhvdXRTZWN0aW9uczsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhZ2VzXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sIGluZGV4OiBpdGVtcy5sZW5ndGggLSAxICsgaW5kZXh9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI3BhZ2VzXG4gICAgICAgICAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgICAgICAgICBsZXQtaXRlbT1cIml0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uc3ViUGFnZXM7IGVsc2Ugc3ViUGFnZXNUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5yb3V0ZS5pbmNsdWRlcygnOi8vJyk7IGVsc2UgaW50ZXJuYWxcIlxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1zdWJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVsXT1cIml0ZW0ucmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbS5yb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXQgfHwgJ19zZWxmJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZXJuYWw+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwidC1zdWJsaW5rX2FjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWxdPVwiaXRlbS5yZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IHx8ICdfc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3R1aURvY1Njcm9sbEludG9WaWV3TGlua109XCJpc0FjdGl2ZShpdGVtLnJvdXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VNZW51KClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaXRlbS5pY29uIGFzIGljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3ViUGFnZXNUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LXN1YnNlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OiBmYWxzZX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YlBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LXN1YmxpbmsgdC1zdWJsaW5rX3N1YnNlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljayhpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtY2hldnJvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnQtY2hldnJvbl9hY3RpdmVdPVwiISFvcGVuUGFnZXNHcm91cHNBcnJbaW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29ucy5tb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaXRlbS5pY29uIGFzIGljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWV4cGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWV4cGFuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiISFvcGVuUGFnZXNHcm91cHNBcnJbaW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInQtc2VjdGlvbiB0LXNlY3Rpb25fYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJQYWdlIG9mICRwYWdlcyhpdGVtLnN1YlBhZ2VzKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJQYWdlLnJvdXRlLmluY2x1ZGVzKCc6Ly8nKTsgZWxzZSBpbnRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGluayB0LXN1Ymxpbmtfc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVsXT1cInN1YlBhZ2UucmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInN1YlBhZ2Uucm91dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJzdWJQYWdlLnRhcmdldCB8fCAnX3NlbGYnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3ViUGFnZS50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cInN1YlBhZ2UuaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlcm5hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInQtc3VibGlua19hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGluayB0LXN1Ymxpbmtfc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJlbF09XCJzdWJQYWdlLnJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1YlBhZ2UuZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1YlBhZ2Uucm91dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwic3ViUGFnZS50YXJnZXQgfHwgJ19zZWxmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aURvY1Njcm9sbEludG9WaWV3TGlua109XCJpc0FjdGl2ZShzdWJQYWdlLnJvdXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTWVudSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdWJQYWdlLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJzdWJQYWdlLmljb24gYXMgaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1leHBhbmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdHVpLXNjcm9sbGJhcj5cbjwvbmF2PlxuXG48bmctY29udGVudCAvPlxuIl19
|
|
255
|
+
}], filterItems: [] } });
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1kb2MvY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tZG9jL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGVBQWUsR0FDbEIsTUFBTSw0QkFBNEIsQ0FBQztBQU1wQyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDhCQUE4QixFQUM5QixlQUFlLEdBQ2xCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFD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bkJBRWhCLFlBQVkscUZBQ1osUUFBUSwyY0FFUix3QkFBd0Isd05BRXhCLE9BQU8sb0ZBQ1AsY0FBYywrQkFDZCxPQUFPLDRGQUNQLFlBQVksMm9CQUVaLDRCQUE0Qjs7QUEwSnhCO0lBRFAsT0FBTzttREEwQlA7U0F4S1EsZ0JBQWdCOzRGQUFoQixnQkFBZ0I7a0JBakM1QixTQUFTO2lDQUNNLElBQUksWUFDTixvQkFBb0IsV0FDckI7d0JBQ0wsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osNEJBQTRCO3FCQUMvQixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxvQkFBb0IsUUFDekI7d0JBQ0YsZUFBZSxFQUFFLFVBQVU7d0JBQzNCLGtCQUFrQixFQUFFLHVCQUF1QjtxQkFDOUM7MEVBSWdCLFdBQVc7c0JBRDNCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQThJNUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlQsIE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBzaWduYWwsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1JvdXRlciwgUm91dGVyTGluaywgUm91dGVyTGlua0FjdGl2ZSwgU2Nyb2xsfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBUVUlfRE9DX0lDT05TLFxuICAgIFRVSV9ET0NfUEFHRV9MT0FERUQsXG4gICAgVFVJX0RPQ19TRUFSQ0hfRU5BQkxFRCxcbiAgICBUVUlfRE9DX1NFQVJDSF9URVhULFxuICAgIFRVSV9ET0NfVkVSU0lPTixcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy90b2tlbnMnO1xuaW1wb3J0IHtcbiAgICB0eXBlIFR1aURvY1JvdXRlUGFnZSxcbiAgICB0eXBlIFR1aURvY1JvdXRlUGFnZUdyb3VwLFxuICAgIHR5cGUgVHVpRG9jUm91dGVQYWdlcyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy90eXBlcyc7XG5pbXBvcnQge1xuICAgIHR1aUlzUm91dGVQYWdlR3JvdXAsXG4gICAgdHVpVHJhbnNsaXRlcmF0ZUtleWJvYXJkTGF5b3V0LFxuICAgIHR1aVZlcnNpb25QYXJ0cyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy91dGlscyc7XG5pbXBvcnQge1R1aVNpZGViYXJEaXJlY3RpdmV9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvZGlyZWN0aXZlcy9zaWRlYmFyJztcbmltcG9ydCB7VHVpQXV0b0ZvY3VzfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYXV0by1mb2N1cyc7XG5pbXBvcnQge3R1aUNvbnRyb2xWYWx1ZSwgdHVpV2F0Y2h9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlQdXJlLCB0dWlVbmlxQnl9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1R1aURhdGFMaXN0fSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2RhdGEtbGlzdCc7XG5pbXBvcnQge1R1aUV4cGFuZH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9leHBhbmQnO1xuaW1wb3J0IHtUdWlJY29ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHtUdWlMaW5rfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2xpbmsnO1xuaW1wb3J0IHtUdWlTY3JvbGxiYXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7VHVpVGV4dGZpZWxkLCBUdWlUZXh0ZmllbGREaXJlY3RpdmV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB7VFVJX0NPTU1PTl9JQ09OU30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7VHVpQWNjb3JkaW9ufSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvYWNjb3JkaW9uJztcbmltcG9ydCB7VHVpQmFkZ2V9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQge1R1aUlucHV0TW9kdWxlfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5L2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IHtUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5L2RpcmVjdGl2ZXMvdGV4dGZpZWxkLWNvbnRyb2xsZXInO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNPdXRsZXR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0lURU1TLFxuICAgIE5BVklHQVRJT05fTEFCRUxTLFxuICAgIE5BVklHQVRJT05fUFJPVklERVJTLFxuICAgIE5BVklHQVRJT05fVElUTEUsXG59IGZyb20gJy4vbmF2aWdhdGlvbi5wcm92aWRlcnMnO1xuaW1wb3J0IHtUdWlEb2NTY3JvbGxJbnRvVmlld0xpbmt9IGZyb20gJy4vc2Nyb2xsLWludG8tdmlldy5kaXJlY3RpdmUnO1xuXG5pbnRlcmZhY2UgVHVpRG9jTmF2aWdhdGlvbkJhZGdlIHtcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwcGVhcmFuY2U6ICdpbmZvJyB8ICdwb3NpdGl2ZSc7XG59XG5cbmNvbnN0IEJBREdFID0ge1xuICAgIG5ldzoge2xhYmVsOiAnTmV3JywgYXBwZWFyYW5jZTogJ3Bvc2l0aXZlJ30sXG4gICAgdXBkYXRlZDoge2xhYmVsOiAnVXBkYXRlZCcsIGFwcGVhcmFuY2U6ICdpbmZvJ30sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBUdWlEb2NOYXZpZ2F0aW9uQmFkZ2U+O1xuXG5jb25zdCBORVdfVkVSU0lPTl9SQU5HRSA9IDY7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktZG9jLW5hdmlnYXRpb24nLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9seW1vcnBoZXVzT3V0bGV0LFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJMaW5rLFxuICAgICAgICBSb3V0ZXJMaW5rQWN0aXZlLFxuICAgICAgICBUdWlBY2NvcmRpb24sXG4gICAgICAgIFR1aUF1dG9Gb2N1cyxcbiAgICAgICAgVHVpQmFkZ2UsXG4gICAgICAgIFR1aURhdGFMaXN0LFxuICAgICAgICBUdWlEb2NTY3JvbGxJbnRvVmlld0xpbmssXG4gICAgICAgIFR1aUV4cGFuZCxcbiAgICAgICAgVHVpSWNvbixcbiAgICAgICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgICAgIFR1aUxpbmssXG4gICAgICAgIFR1aVNjcm9sbGJhcixcbiAgICAgICAgVHVpVGV4dGZpZWxkLFxuICAgICAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRpb24udGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmF2aWdhdGlvbi5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBOQVZJR0FUSU9OX1BST1ZJREVSUyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuX29wZW5dJzogJ21lbnVPcGVuJyxcbiAgICAgICAgJyh3aW5kb3c6a2V5ZG93biknOiAnb25Gb2N1c1NlYXJjaCgkZXZlbnQpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlEb2NOYXZpZ2F0aW9uIHtcbiAgICBAVmlld0NoaWxkKFR1aVRleHRmaWVsZERpcmVjdGl2ZSwge3JlYWQ6IEVsZW1lbnRSZWZ9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoSW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50ID0gdHVpVmVyc2lvblBhcnRzKGluamVjdChUVUlfRE9DX1ZFUlNJT04pKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25MZWFkcyA9IG5ldyBTZXQoXG4gICAgICAgIGluamVjdChOQVZJR0FUSU9OX0lURU1TKVxuICAgICAgICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgICAgICAgLm1hcCgocGFnZXMpID0+IHBhZ2VzWzBdKSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIG9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCBtZW51T3BlbiA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGViYXIgPSBpbmplY3QoVHVpU2lkZWJhckRpcmVjdGl2ZSwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhYmVscyA9IGluamVjdChOQVZJR0FUSU9OX0xBQkVMUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zID0gaW5qZWN0KE5BVklHQVRJT05fSVRFTVMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hUZXh0ID0gaW5qZWN0KFRVSV9ET0NfU0VBUkNIX1RFWFQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hFbmFibGVkID0gaW5qZWN0KFRVSV9ET0NfU0VBUkNIX0VOQUJMRUQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkb2NJY29ucyA9IGluamVjdChUVUlfRE9DX0lDT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3QoVFVJX0NPTU1PTl9JQ09OUyk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmxhdCA9IHRoaXMuaXRlbXMucmVkdWNlPFxuICAgICAgICBSZWFkb25seUFycmF5PHJlYWRvbmx5IFR1aURvY1JvdXRlUGFnZVtdPlxuICAgID4oXG4gICAgICAgIChhcnJheSwgaXRlbSkgPT4gW1xuICAgICAgICAgICAgLi4uYXJyYXksXG4gICAgICAgICAgICBpdGVtLnJlZHVjZTxyZWFkb25seSBUdWlEb2NSb3V0ZVBhZ2VbXT4oXG4gICAgICAgICAgICAgICAgKHBhZ2VzLCBwYWdlKSA9PlxuICAgICAgICAgICAgICAgICAgICAnc3ViUGFnZXMnIGluIHBhZ2UgPyBbLi4ucGFnZXMsIC4uLnBhZ2Uuc3ViUGFnZXNdIDogWy4uLnBhZ2VzLCBwYWdlXSxcbiAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICAgIFtdLFxuICAgICk7XG5cbiAgICAvLyBJbnB1dHMgKGl0ZW1zL3ZlcnNpb24pIGFyZSBzdGF0aWMsIHNvIGJhZGdlcyBhcmUgcmVzb2x2ZWQgb25jZSB1cCBmcm9udC5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VjdGlvbkJhZGdlcyA9IHRoaXMuaXRlbXMubWFwKChzZWN0aW9uLCBpbmRleCkgPT5cbiAgICAgICAgdGhpcy5uZXdPclVwZGF0ZWQoc2VjdGlvblswXT8udmVyc2lvbiwgdGhpcy5mbGF0W2luZGV4XSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBpdGVtQmFkZ2VzID0gdGhpcy5tYXBJdGVtQmFkZ2VzKCk7XG4gICAgcHJvdGVjdGVkIG9wZW5QYWdlc0FycjogYm9vbGVhbltdID0gW107XG4gICAgcHJvdGVjdGVkIG9wZW5QYWdlc0dyb3Vwc0FycjogYm9vbGVhbltdID0gW107XG4gICAgcHJvdGVjdGVkIGFjdGl2ZSA9ICcnO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWQgPSB0b1NpZ25hbChcbiAgICAgICAgdHVpQ29udHJvbFZhbHVlPHN0cmluZz4odGhpcy5zZWFyY2gpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHNlYXJjaCkgPT4gc2VhcmNoLnRyaW0oKS5sZW5ndGggPiAyKSxcbiAgICAgICAgICAgIG1hcCgoc2VhcmNoKSA9PiB0aGlzLmZpbHRlckl0ZW1zKHRoaXMuZmxhdCwgc2VhcmNoKSksXG4gICAgICAgICksXG4gICAgICAgIHtpbml0aWFsVmFsdWU6IFtdfSxcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlU2VydmljZSA9IGluamVjdChUaXRsZSk7XG4gICAgICAgIGNvbnN0IHJlYWR5VG9TY3JvbGwkID0gaW5qZWN0KFRVSV9ET0NfUEFHRV9MT0FERUQpO1xuXG4gICAgICAgIGluamVjdChOQVZJR0FUSU9OX1RJVExFKVxuICAgICAgICAgICAgLnBpcGUodHVpV2F0Y2goKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQWN0aXZlUGFnZUdyb3VwKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBTY3JvbGwgPT4gZXZlbnQgaW5zdGFuY2VvZiBTY3JvbGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoe2FuY2hvcn0pID0+XG4gICAgICAgICAgICAgICAgICAgICdvbnNjcm9sbGVuZCcgaW4gdGhpcy5kb2NcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZnJvbUV2ZW50KHRoaXMuZG9jLCAnc2Nyb2xsZW5kJykucGlwZShtYXAoKCkgPT4gYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2YoYW5jaG9yKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGluamVjdChOQVZJR0FUSU9OX1RJVExFKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiByZWFkeVRvU2Nyb2xsJC5waXBlKGZpbHRlcihCb29sZWFuKSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgbWFwKChbYW5jaG9yXSkgPT4gYW5jaG9yIHx8ICcnKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI8c3RyaW5nPihCb29sZWFuKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFuY2hvcikgPT4gdGhpcy5uYXZpZ2F0ZVRvQW5jaG9yTGluayhhbmNob3IpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNhbk9wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWFyY2gudmFsdWU/Lmxlbmd0aCA/PyAwKSA+IDI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBpdGVtc1dpdGhvdXRTZWN0aW9ucygpOiBUdWlEb2NSb3V0ZVBhZ2VzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXSA/PyBbXTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJHBhZ2VzPFQgZXh0ZW5kcyBUdWlEb2NSb3V0ZVBhZ2VbXT4ocGFnZXM6IFQpOiByZWFkb25seSBUdWlEb2NSb3V0ZVBhZ2VbXSB7XG4gICAgICAgIHJldHVybiBwYWdlcyBhcyBUdWlEb2NSb3V0ZVBhZ2VbXTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNBY3RpdmUocm91dGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcm91dGUgPT09IHRoaXMuYWN0aXZlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWN0aW9uQmFkZ2UoaW5kZXg6IG51bWJlcik6IFR1aURvY05hdmlnYXRpb25CYWRnZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uQmFkZ2VzW2luZGV4XSA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpdGVtQmFkZ2UoXG4gICAgICAgIGl0ZW06IFR1aURvY1JvdXRlUGFnZSB8IFR1aURvY1JvdXRlUGFnZUdyb3VwLFxuICAgICk6IFR1aURvY05hdmlnYXRpb25CYWRnZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtQmFkZ2VzLmdldChpdGVtKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkdyb3VwQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5QYWdlc0dyb3Vwc0FycltpbmRleF0gPSAhdGhpcy5vcGVuUGFnZXNHcm91cHNBcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVudU9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMubWVudU9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2guc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLm9wZW5BY3RpdmVQYWdlR3JvdXAoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Gb2N1c1NlYXJjaChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudC5jb2RlID09PSAnU2xhc2gnICYmXG4gICAgICAgICAgICAhdGhpcy5kb2MuYWN0aXZlRWxlbWVudD8ubWF0Y2hlcygnaW5wdXQsdGV4dGFyZWEsW2NvbnRlbnRlZGl0YWJsZV0nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGZpbHRlckl0ZW1zKFxuICAgICAgICBpdGVtczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBUdWlEb2NSb3V0ZVBhZ2VbXT4sXG4gICAgICAgIHNlYXJjaDogc3RyaW5nLFxuICAgICk6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlW10+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoc2VjdGlvbikgPT5cbiAgICAgICAgICAgIHR1aVVuaXFCeShcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmZpbHRlcigoe3RpdGxlLCBrZXl3b3JkcyA9ICcnfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzID0ga2V5d29yZHMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZS5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcy5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZS5pbmNsdWRlcyh0dWlUcmFuc2xpdGVyYXRlS2V5Ym9hcmRMYXlvdXQoc2VhcmNoKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLmluY2x1ZGVzKHR1aVRyYW5zbGl0ZXJhdGVLZXlib2FyZExheW91dChzZWFyY2gpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoLnJlcGxhY2VBbGwoJy0nLCAnJykuaW5jbHVkZXModGl0bGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZS5pbmNsdWRlcyhzZWFyY2gucmVwbGFjZUFsbCgvXFxzfHR1aS9nLCAnJykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcy5pbmNsdWRlcyhzZWFyY2gucmVwbGFjZUFsbCgvXFxzfHR1aS9nLCAnJykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2guc3BsaXQoL1xccy8pLmZpbmQoKHdvcmQpID0+IHRpdGxlLmluY2x1ZGVzKHdvcmQpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICd0aXRsZScsXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwSXRlbUJhZGdlcygpOiBSZWFkb25seU1hcDxcbiAgICAgICAgVHVpRG9jUm91dGVQYWdlIHwgVHVpRG9jUm91dGVQYWdlR3JvdXAsXG4gICAgICAgIFR1aURvY05hdmlnYXRpb25CYWRnZVxuICAgID4ge1xuICAgICAgICBjb25zdCBiYWRnZXMgPSBuZXcgTWFwPFxuICAgICAgICAgICAgVHVpRG9jUm91dGVQYWdlIHwgVHVpRG9jUm91dGVQYWdlR3JvdXAsXG4gICAgICAgICAgICBUdWlEb2NOYXZpZ2F0aW9uQmFkZ2VcbiAgICAgICAgPigpO1xuXG4gICAgICAgIGNvbnN0IGFkZCA9IChcbiAgICAgICAgICAgIGl0ZW06IFR1aURvY1JvdXRlUGFnZSB8IFR1aURvY1JvdXRlUGFnZUdyb3VwLFxuICAgICAgICAgICAgYmFkZ2U6IFR1aURvY05hdmlnYXRpb25CYWRnZSB8IG51bGwsXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKGJhZGdlKSB7XG4gICAgICAgICAgICAgICAgYmFkZ2VzLnNldChpdGVtLCBiYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBzZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR1aUlzUm91dGVQYWdlR3JvdXAoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGl0ZW0sIHRoaXMubmV3T3JVcGRhdGVkKGl0ZW0udmVyc2lvbiwgaXRlbS5zdWJQYWdlcykpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN1YlBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IGFkZChwYWdlLCB0aGlzLmxlYWZCYWRnZShwYWdlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZChpdGVtLCB0aGlzLmxlYWZCYWRnZShpdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhZGdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGxlYWZCYWRnZShpdGVtOiBUdWlEb2NSb3V0ZVBhZ2UpOiBUdWlEb2NOYXZpZ2F0aW9uQmFkZ2UgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNlY3Rpb25MZWFkcy5oYXMoaXRlbSkgJiYgdGhpcy5pc1JlY2VudChpdGVtLnZlcnNpb24pXG4gICAgICAgICAgICA/IEJBREdFLm5ld1xuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbmV3T3JVcGRhdGVkKFxuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIHBhZ2VzOiByZWFkb25seSBUdWlEb2NSb3V0ZVBhZ2VbXSA9IFtdLFxuICAgICk6IFR1aURvY05hdmlnYXRpb25CYWRnZSB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5pc1JlY2VudCh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIEJBREdFLm5ldztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmhhc1JlY2VudChwYWdlcykgPyBCQURHRS51cGRhdGVkIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1JlY2VudChwYWdlczogcmVhZG9ubHkgVHVpRG9jUm91dGVQYWdlW10gPSBbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGFnZXMuc29tZSgocGFnZSkgPT4gdGhpcy5pc1JlY2VudChwYWdlLnZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUmVjZW50KHZlcnNpb24gPSAnJyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7bWFqb3IsIG1pbm9yfSA9IHR1aVZlcnNpb25QYXJ0cyh2ZXJzaW9uKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbWFqb3IgPT09IHRoaXMuY3VycmVudC5tYWpvciAmJiB0aGlzLmN1cnJlbnQubWlub3IgLSBtaW5vciA8IE5FV19WRVJTSU9OX1JBTkdFXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGl2ZVJvdXRlKHJvdXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKHJvdXRlLCB7XG4gICAgICAgICAgICBwYXRoczogJ3N1YnNldCcsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogJ3N1YnNldCcsXG4gICAgICAgICAgICBmcmFnbWVudDogJ2lnbm9yZWQnLFxuICAgICAgICAgICAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkFjdGl2ZVBhZ2VHcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChwYWdlcywgcGFnZXNJbmRleCkgPT4ge1xuICAgICAgICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgcGFnZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCdyb3V0ZScgaW4gcGFnZSAmJiB0aGlzLmlzQWN0aXZlUm91dGUocGFnZS5yb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZXNBcnJbcGFnZXNJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHBhZ2Uucm91dGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdzdWJQYWdlcycgaW4gcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBwYWdlLnN1YlBhZ2VzLmZvckVhY2goKHN1YlBhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlUm91dGUoc3ViUGFnZS5yb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlc0FycltwYWdlc0luZGV4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZXNHcm91cHNBcnJbcGFnZXNJbmRleCAqIDEwMCArIHBhZ2VJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gc3ViUGFnZS5yb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbmF2aWdhdGVUb0FuY2hvckxpbmsoZnJhZ21lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlcyA9IGZyYWdtZW50ID8gdGhpcy5kb2MucXVlcnlTZWxlY3RvckFsbChgIyR7ZnJhZ21lbnR9YCkgOiBbXTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5vZGVzLmxlbmd0aCAmJiBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtdWxhdGUgOnRhcmdldCBldmVudFxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgdGFyZ2V0LmhyZWYgPSBgJHt0aGlzLmRvYy5sb2NhdGlvbi5wYXRobmFtZX0jJHtmcmFnbWVudH1gO1xuICAgICAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgdGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgdGhpcy5kb2MuYm9keS5hcHBlbmRDaGlsZCh0YXJnZXQpO1xuICAgICAgICB0YXJnZXQuY2xpY2soKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgIH1cbn1cbiIsIjx0dWktdGV4dGZpZWxkXG4gICAgKm5nSWY9XCJzZWFyY2hFbmFibGVkKClcIlxuICAgIHR1aVRleHRmaWVsZFNpemU9XCJtXCJcbiAgICBjbGFzcz1cInQtaW5wdXRcIlxuICAgIFtpY29uU3RhcnRdPVwiZG9jSWNvbnMuc2VhcmNoXCJcbiAgICBbb3Blbl09XCJvcGVuKCkgJiYgY2FuT3BlblwiXG4gICAgKGtleXVwKT1cIm9wZW4uc2V0KGNhbk9wZW4gJiYgJGV2ZW50LmNvZGUgIT09ICdFc2NhcGUnKVwiXG4gICAgKG9wZW5DaGFuZ2UpPVwib3Blbi5zZXQoJGV2ZW50KVwiXG4+XG4gICAgPGNvZGVcbiAgICAgICAgKm5nSWY9XCIhc2VhcmNoLnZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJ0LXNsYXNoXCJcbiAgICA+XG4gICAgICAgIC9cbiAgICA8L2NvZGU+XG4gICAgPGlucHV0XG4gICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICBjbGFzcz1cInQtcHJldmVudC1pb3Mtc2Nyb2xsXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgW3R1aUF1dG9Gb2N1c109XCIhIXNpZGViYXJcIlxuICAgIC8+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbk9wZW5cIj5cbiAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aVRleHRmaWVsZERyb3Bkb3duPlxuICAgICAgICAgICAgPHR1aS1vcHQtZ3JvdXBcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZmlsdGVyZWQoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbHNbaW5kZXhdIHx8ICcnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucm91dGUuaW5jbHVkZXMoJzovLycpOyBlbHNlIGludGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVsXT1cIml0ZW0ucmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0ucm91dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldCB8fCAnX3NlbGYnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlcm5hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVsXT1cIml0ZW0ucmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJhZ21lbnRdPVwiaXRlbS5mcmFnbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldCB8fCAnX3NlbGYnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJpdGVtLmljb24gYXMgaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdHVpLW9wdC1ncm91cD5cbiAgICAgICAgPC90dWktZGF0YS1saXN0PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC90dWktdGV4dGZpZWxkPlxuXG48bmF2IGNsYXNzPVwidC1uYXZpZ2F0aW9uXCI+XG4gICAgPHR1aS1zY3JvbGxiYXIgY2xhc3M9XCJ0LXNjcm9sbGJhclwiPlxuICAgICAgICA8dHVpLWFjY29yZGlvblxuICAgICAgICAgICAgW2NsYXNzLnQtYWNjb3JkaW9uLXN0YW5kYWxvbmVdPVwiIXNlYXJjaEVuYWJsZWQoKVwiXG4gICAgICAgICAgICBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3JvdW5kZWRdPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dHVpLWFjY29yZGlvbi1pdGVtXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGxhYmVsczsgaW5kZXggYXMgaW5kZXhcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICBbYm9yZGVyc109XCJudWxsXCJcbiAgICAgICAgICAgICAgICBbb3Blbl09XCIhIW9wZW5QYWdlc0FycltpbmRleF1cIlxuICAgICAgICAgICAgICAgIChvcGVuQ2hhbmdlKT1cIm9wZW5QYWdlc0FycltpbmRleF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGxhYmVsIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uQmFkZ2UoaW5kZXgpIGFzIGJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFkZ2VUcGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBiYWRnZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB0dWlBY2NvcmRpb25JdGVtQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInQtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zW2luZGV4XTsgaW5kZXggYXMgc3ViSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCAqIDEwMCArIHN1YkluZGV4fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC90dWktYWNjb3JkaW9uLWl0ZW0+XG4gICAgICAgIDwvdHVpLWFjY29yZGlvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInQtaXRlbXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNXaXRob3V0U2VjdGlvbnM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwYWdlc1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLCBpbmRleDogaXRlbXMubGVuZ3RoIC0gMSArIGluZGV4fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNwYWdlc1xuICAgICAgICAgICAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICAgICAgICAgICAgbGV0LWl0ZW09XCJpdGVtXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnN1YlBhZ2VzOyBlbHNlIHN1YlBhZ2VzVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucm91dGUuaW5jbHVkZXMoJzovLycpOyBlbHNlIGludGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJlbF09XCJpdGVtLnJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0ucm91dGVcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IHx8ICdfc2VsZidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbUJhZGdlKGl0ZW0pIGFzIGJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFkZ2VUcGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBiYWRnZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZXJuYWw+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwidC1zdWJsaW5rX2FjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWxdPVwiaXRlbS5yZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IHx8ICdfc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3R1aURvY1Njcm9sbEludG9WaWV3TGlua109XCJpc0FjdGl2ZShpdGVtLnJvdXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VNZW51KClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbUJhZGdlKGl0ZW0pIGFzIGJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiYWRnZVRwbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBiYWRnZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJpdGVtLmljb24gYXMgaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdWJQYWdlc1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3Vic2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7ZXhhY3Q6IGZhbHNlfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc3ViUGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGluayB0LXN1Ymxpbmtfc3Vic2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1jaGV2cm9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudC1jaGV2cm9uX2FjdGl2ZV09XCIhIW9wZW5QYWdlc0dyb3Vwc0FycltpbmRleF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImljb25zLm1vcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtQmFkZ2UoaXRlbSkgYXMgYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhZGdlVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGJhZGdlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1leHBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidC1leHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cIiEhb3BlblBhZ2VzR3JvdXBzQXJyW2luZGV4XVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0LXNlY3Rpb24gdC1zZWN0aW9uX2JvcmRlcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViUGFnZSBvZiAkcGFnZXMoaXRlbS5zdWJQYWdlcylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3ViUGFnZS5yb3V0ZS5pbmNsdWRlcygnOi8vJyk7IGVsc2UgaW50ZXJuYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LXN1YmxpbmsgdC1zdWJsaW5rX3NtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJlbF09XCJzdWJQYWdlLnJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJzdWJQYWdlLnJvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwic3ViUGFnZS50YXJnZXQgfHwgJ19zZWxmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1YlBhZ2UudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtQmFkZ2Uoc3ViUGFnZSkgYXMgYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhZGdlVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGJhZGdlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cInN1YlBhZ2UuaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlcm5hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInQtc3VibGlua19hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtc3VibGluayB0LXN1Ymxpbmtfc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJlbF09XCJzdWJQYWdlLnJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1YlBhZ2UuZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1YlBhZ2Uucm91dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwic3ViUGFnZS50YXJnZXQgfHwgJ19zZWxmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aURvY1Njcm9sbEludG9WaWV3TGlua109XCJpc0FjdGl2ZShzdWJQYWdlLnJvdXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTWVudSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdWJQYWdlLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1CYWRnZShzdWJQYWdlKSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiYWRnZVRwbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogYmFkZ2V9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cInN1YlBhZ2UuaWNvbiBhcyBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWV4cGFuZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjYmFkZ2VUcGxcbiAgICAgICAgICAgIGxldC1iYWRnZVxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICB0dWlCYWRnZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwidC1iYWRnZVwiXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYmFkZ2UuYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgYmFkZ2UubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3R1aS1zY3JvbGxiYXI+XG48L25hdj5cblxuPG5nLWNvbnRlbnQgLz5cbiJdfQ==
|