ng-tailwind 5.0.6 → 5.0.8
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/ngt-datatable/ngt-datatable.component.d.ts +4 -1
- package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +2 -1
- package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +12 -2
- package/components/ngt-multi-select/ngt-multi-select.component.d.ts +3 -1
- package/components/ngt-section/ngt-section.component.d.ts +3 -1
- package/components/ngt-select/ngt-select.component.d.ts +3 -1
- package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +10 -3
- package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +6 -2
- package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +43 -9
- package/esm2020/components/ngt-date/ngt-date.component.mjs +3 -3
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +24 -3
- package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +1 -1
- package/esm2020/components/ngt-section/ngt-section.component.mjs +11 -5
- package/esm2020/components/ngt-select/ngt-select.component.mjs +11 -5
- package/esm2020/services/http/ngt-translate.service.mjs +1 -1
- package/fesm2015/ng-tailwind.mjs +102 -20
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +95 -20
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/package.json +1 -1
- package/services/http/ngt-translate.service.d.ts +2 -0
|
@@ -24,12 +24,14 @@ export declare class NgtDatatableComponent implements OnInit, OnDestroy {
|
|
|
24
24
|
searchTermOnEnter: boolean;
|
|
25
25
|
defaultFilters: any;
|
|
26
26
|
filtersDescription: {};
|
|
27
|
+
canSelectAllRegisters: boolean;
|
|
27
28
|
onDataChange: EventEmitter<any>;
|
|
28
29
|
onClearFilter: EventEmitter<any>;
|
|
29
30
|
onClearSelectedElements: EventEmitter<any>;
|
|
30
31
|
onSelectedElementsChange: EventEmitter<Array<NgtCheckedElement>>;
|
|
31
32
|
onToogleAllCheckboxes: EventEmitter<any>;
|
|
32
33
|
onToogleCheckbox: EventEmitter<NgtCheckedElement>;
|
|
34
|
+
onSelectAllRegisters: EventEmitter<void>;
|
|
33
35
|
onOpenSearchModal: EventEmitter<string>;
|
|
34
36
|
onSearch: EventEmitter<any>;
|
|
35
37
|
searchModalTemplate: TemplateRef<any>;
|
|
@@ -40,6 +42,7 @@ export declare class NgtDatatableComponent implements OnInit, OnDestroy {
|
|
|
40
42
|
filtersTranslated: any[];
|
|
41
43
|
emptyStateVisible: boolean;
|
|
42
44
|
columnCount: any[];
|
|
45
|
+
hasSelectedAllElements: boolean;
|
|
43
46
|
selectedElements: Array<NgtCheckedElement>;
|
|
44
47
|
private searching;
|
|
45
48
|
private searchTimeout;
|
|
@@ -89,7 +92,7 @@ export declare class NgtDatatableComponent implements OnInit, OnDestroy {
|
|
|
89
92
|
private isValidFilter;
|
|
90
93
|
private destroySubscriptions;
|
|
91
94
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtDatatableComponent, [null, null, null, { optional: true; }]>;
|
|
92
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtDatatableComponent, "ngt-datatable", never, { "remoteResource": "remoteResource"; "type": "type"; "filterTagBgColor": "filterTagBgColor"; "filterTagMargin": "filterTagMargin"; "paginationMargin": "paginationMargin"; "inputSearch": "inputSearch"; "searchDelay": "searchDelay"; "searchTermMinLength": "searchTermMinLength"; "searchTermOnEnter": "searchTermOnEnter"; "defaultFilters": "defaultFilters"; "filtersDescription": "filtersDescription"; }, { "onDataChange": "onDataChange"; "onClearFilter": "onClearFilter"; "onClearSelectedElements": "onClearSelectedElements"; "onSelectedElementsChange": "onSelectedElementsChange"; "onToogleAllCheckboxes": "onToogleAllCheckboxes"; "onToogleCheckbox": "onToogleCheckbox"; "onOpenSearchModal": "onOpenSearchModal"; "onSearch": "onSearch"; }, never, ["*"], false, never>;
|
|
95
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtDatatableComponent, "ngt-datatable", never, { "remoteResource": "remoteResource"; "type": "type"; "filterTagBgColor": "filterTagBgColor"; "filterTagMargin": "filterTagMargin"; "paginationMargin": "paginationMargin"; "inputSearch": "inputSearch"; "searchDelay": "searchDelay"; "searchTermMinLength": "searchTermMinLength"; "searchTermOnEnter": "searchTermOnEnter"; "defaultFilters": "defaultFilters"; "filtersDescription": "filtersDescription"; "canSelectAllRegisters": "canSelectAllRegisters"; }, { "onDataChange": "onDataChange"; "onClearFilter": "onClearFilter"; "onClearSelectedElements": "onClearSelectedElements"; "onSelectedElementsChange": "onSelectedElementsChange"; "onToogleAllCheckboxes": "onToogleAllCheckboxes"; "onToogleCheckbox": "onToogleCheckbox"; "onSelectAllRegisters": "onSelectAllRegisters"; "onOpenSearchModal": "onOpenSearchModal"; "onSearch": "onSearch"; }, never, ["*"], false, never>;
|
|
93
96
|
}
|
|
94
97
|
export declare enum NgtDatatableType {
|
|
95
98
|
REMOTE = "REMOTE",
|
|
@@ -14,6 +14,7 @@ export declare class NgtThComponent implements OnChanges, OnDestroy {
|
|
|
14
14
|
reference: string;
|
|
15
15
|
sortReference: string;
|
|
16
16
|
modalWidth: string;
|
|
17
|
+
searchModalOverflow: string;
|
|
17
18
|
sortable: boolean;
|
|
18
19
|
searchable: boolean;
|
|
19
20
|
hasCustomSearch: boolean;
|
|
@@ -42,7 +43,7 @@ export declare class NgtThComponent implements OnChanges, OnDestroy {
|
|
|
42
43
|
private bindNgtStyle;
|
|
43
44
|
private destroySubscriptions;
|
|
44
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtThComponent, [null, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }]>;
|
|
45
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtThComponent, "[ngt-th]", never, { "reference": "reference"; "sortReference": "sortReference"; "modalWidth": "modalWidth"; "sortable": "sortable"; "searchable": "searchable"; "hasCustomSearch": "hasCustomSearch"; "searchLabel": "searchLabel"; "sortableTooltip": "sortableTooltip"; }, { "onEnableSearch": "onEnableSearch"; }, never, ["*", "[customSearchHeader]", "[customSearch]"], false, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtThComponent, "[ngt-th]", never, { "reference": "reference"; "sortReference": "sortReference"; "modalWidth": "modalWidth"; "searchModalOverflow": "searchModalOverflow"; "sortable": "sortable"; "searchable": "searchable"; "hasCustomSearch": "hasCustomSearch"; "searchLabel": "searchLabel"; "sortableTooltip": "sortableTooltip"; }, { "onEnableSearch": "onEnableSearch"; }, never, ["*", "[customSearchHeader]", "[customSearch]"], false, never>;
|
|
46
47
|
}
|
|
47
48
|
export interface NgtSortableTooltip {
|
|
48
49
|
ascending: string;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AfterContentInit, ElementRef, Injector, OnDestroy } from '@angular/core';
|
|
2
|
+
import { NgtTranslateService } from '../../../services/http/ngt-translate.service';
|
|
2
3
|
import { NgtStylizableDirective } from '../../../directives/ngt-stylizable/ngt-stylizable.directive';
|
|
3
4
|
import { NgtStylizableService } from '../../../services/ngt-stylizable/ngt-stylizable.service';
|
|
5
|
+
import { NgtCheckboxComponent } from '../../ngt-checkbox/ngt-checkbox.component';
|
|
4
6
|
import { NgtDatatableComponent } from '../ngt-datatable.component';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
export declare class NgtThCheckComponent implements AfterContentInit, OnDestroy {
|
|
@@ -8,15 +10,23 @@ export declare class NgtThCheckComponent implements AfterContentInit, OnDestroy
|
|
|
8
10
|
private hostElement;
|
|
9
11
|
private ngtStylizableDirective;
|
|
10
12
|
private ngtDataTable;
|
|
13
|
+
ngtTranslateService: NgtTranslateService;
|
|
14
|
+
ngtCheckbox: NgtCheckboxComponent;
|
|
11
15
|
checked: boolean;
|
|
12
16
|
ngtStyle: NgtStylizableService;
|
|
17
|
+
hasSelectedAllCheckboxes: boolean;
|
|
13
18
|
private subscriptions;
|
|
14
|
-
constructor(injector: Injector, hostElement: ElementRef, ngtStylizableDirective: NgtStylizableDirective, ngtDataTable: NgtDatatableComponent);
|
|
19
|
+
constructor(injector: Injector, hostElement: ElementRef, ngtStylizableDirective: NgtStylizableDirective, ngtDataTable: NgtDatatableComponent, ngtTranslateService: NgtTranslateService);
|
|
20
|
+
getSelectAllElementsCheckboxStyle(): string;
|
|
21
|
+
hasSelectedAllElements(): boolean;
|
|
22
|
+
canSelectAllFilter(): boolean;
|
|
23
|
+
getPaginationTotal(): number;
|
|
24
|
+
onToggleSelectAllElements(): void;
|
|
15
25
|
ngAfterContentInit(): void;
|
|
16
26
|
ngOnDestroy(): void;
|
|
17
27
|
onCheckboxChange(checked: boolean): void;
|
|
18
28
|
private bindNgtStyle;
|
|
19
29
|
private destroySubscriptions;
|
|
20
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtThCheckComponent, [null, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }]>;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtThCheckComponent, [null, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; }]>;
|
|
21
31
|
static ɵcmp: i0.ɵɵComponentDeclaration<NgtThCheckComponent, "[ngt-th-check]", never, {}, {}, never, ["*"], false, never>;
|
|
22
32
|
}
|
|
@@ -43,6 +43,7 @@ export declare class NgtMultiSelectComponent extends NgtBaseNgModel implements O
|
|
|
43
43
|
items: Array<any>;
|
|
44
44
|
searchable: boolean;
|
|
45
45
|
allowOriginalItemsUnselect: boolean;
|
|
46
|
+
autoSelectUniqueOption: boolean;
|
|
46
47
|
/** Validation */
|
|
47
48
|
isRequired: boolean;
|
|
48
49
|
isDisabled: boolean;
|
|
@@ -100,12 +101,13 @@ export declare class NgtMultiSelectComponent extends NgtBaseNgModel implements O
|
|
|
100
101
|
private compareWith;
|
|
101
102
|
private hasChangesBetweenBindings;
|
|
102
103
|
private isSelectedElement;
|
|
104
|
+
private canAutoSelectUniqueOption;
|
|
103
105
|
private isHidden;
|
|
104
106
|
private isColoquentResources;
|
|
105
107
|
private isDisabledByParent;
|
|
106
108
|
private destroySubscriptions;
|
|
107
109
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtMultiSelectComponent, [null, null, null, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; self: true; }, { optional: true; host: true; }, { optional: true; }]>;
|
|
108
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtMultiSelectComponent, "ngt-multi-select", never, { "customOptionTemplate": "customOptionTemplate"; "customHeaderTemplate": "customHeaderTemplate"; "label": "label"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpTextColor": "helpTextColor"; "helperReverseYPosition": "helperReverseYPosition"; "helperAutoXReverse": "helperAutoXReverse"; "shining": "shining"; "loading": "loading"; "bindLabel": "bindLabel"; "bindSearch": "bindSearch"; "itemsPerPage": "itemsPerPage"; "name": "name"; "remoteResource": "remoteResource"; "items": "items"; "searchable": "searchable"; "allowOriginalItemsUnselect": "allowOriginalItemsUnselect"; "isRequired": "isRequired"; "isDisabled": "isDisabled"; }, { "onDataChange": "onDataChange"; }, never, never, false, never>;
|
|
110
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtMultiSelectComponent, "ngt-multi-select", never, { "customOptionTemplate": "customOptionTemplate"; "customHeaderTemplate": "customHeaderTemplate"; "label": "label"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpTextColor": "helpTextColor"; "helperReverseYPosition": "helperReverseYPosition"; "helperAutoXReverse": "helperAutoXReverse"; "shining": "shining"; "loading": "loading"; "bindLabel": "bindLabel"; "bindSearch": "bindSearch"; "itemsPerPage": "itemsPerPage"; "name": "name"; "remoteResource": "remoteResource"; "items": "items"; "searchable": "searchable"; "allowOriginalItemsUnselect": "allowOriginalItemsUnselect"; "autoSelectUniqueOption": "autoSelectUniqueOption"; "isRequired": "isRequired"; "isDisabled": "isDisabled"; }, { "onDataChange": "onDataChange"; }, never, never, false, never>;
|
|
109
111
|
}
|
|
110
112
|
export interface NgtSelectContainerSelectableElementInterface {
|
|
111
113
|
uuid: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, ChangeDetectorRef, EventEmitter, Injector } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, Injector } from '@angular/core';
|
|
2
2
|
import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
|
|
3
3
|
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
4
4
|
import { NgtAbilityValidationService } from '../../services/validation/ngt-ability-validation.service';
|
|
@@ -8,6 +8,7 @@ export declare class NgtSectionComponent implements AfterViewInit {
|
|
|
8
8
|
private changeDetector;
|
|
9
9
|
private ngtStylizableDirective;
|
|
10
10
|
private ngtAbilityValidationService;
|
|
11
|
+
elementRef: ElementRef;
|
|
11
12
|
name: string;
|
|
12
13
|
icon: string;
|
|
13
14
|
caption: string;
|
|
@@ -30,6 +31,7 @@ export declare class NgtSectionComponent implements AfterViewInit {
|
|
|
30
31
|
open(): void;
|
|
31
32
|
close(): void;
|
|
32
33
|
toggle(): void;
|
|
34
|
+
scrollTo(): void;
|
|
33
35
|
remove(event: Event): void;
|
|
34
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtSectionComponent, [null, null, { optional: true; self: true; }, { optional: true; }]>;
|
|
35
37
|
static ɵcmp: i0.ɵɵComponentDeclaration<NgtSectionComponent, "ngt-section", never, { "name": "name"; "icon": "icon"; "caption": "caption"; "subtitle": "subtitle"; "accordion": "accordion"; "showSection": "showSection"; "removable": "removable"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpIconColor": "helpIconColor"; "isDisabled": "isDisabled"; }, { "onRemove": "onRemove"; "onToggleSection": "onToggleSection"; }, never, ["*"], false, never>;
|
|
@@ -75,6 +75,7 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
|
|
|
75
75
|
groupValue: (groupKey: string, cildren: any[]) => Object;
|
|
76
76
|
trackBy: (item: any) => any;
|
|
77
77
|
sortSelectedItemsFn: (a: any, b: any) => any;
|
|
78
|
+
isAllowedToRemoveFn: (a: any) => boolean;
|
|
78
79
|
/** Validation */
|
|
79
80
|
isRequired: boolean;
|
|
80
81
|
onLoadRemoteResource: EventEmitter<any>;
|
|
@@ -115,6 +116,7 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
|
|
|
115
116
|
end: any;
|
|
116
117
|
}): void;
|
|
117
118
|
hasSelectedValue(): string;
|
|
119
|
+
cantRemoveItem(itemValue: any): boolean;
|
|
118
120
|
getSelectClass(): string;
|
|
119
121
|
disabled(): boolean;
|
|
120
122
|
private initNgSelectItems;
|
|
@@ -137,7 +139,7 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
|
|
|
137
139
|
private isDisabledByParent;
|
|
138
140
|
private destroySubscriptions;
|
|
139
141
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtSelectComponent, [{ optional: true; self: true; }, { optional: true; host: true; }, { optional: true; }, null, null, null, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
|
|
140
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtSelectComponent, "ngt-select", never, { "label": "label"; "labelIcon": "labelIcon"; "labelIconColor": "labelIconColor"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpTextColor": "helpTextColor"; "shining": "shining"; "loading": "loading"; "loadingText": "loadingText"; "notFoundText": "notFoundText"; "dropdownPosition": "dropdownPosition"; "typeToSearchText": "typeToSearchText"; "clearAllTooltip": "clearAllTooltip"; "placeholder": "placeholder"; "createText": "createText"; "labelForId": "labelForId"; "dropdownPanelMinHeight": "dropdownPanelMinHeight"; "helperReverseYPosition": "helperReverseYPosition"; "helperAutoXReverse": "helperAutoXReverse"; "name": "name"; "autoLoad": "autoLoad"; "allowCreate": "allowCreate"; "allowOriginalItemsUnselect": "allowOriginalItemsUnselect"; "isDisabled": "isDisabled"; "isReadonly": "isReadonly"; "remoteResource": "remoteResource"; "hideSelected": "hideSelected"; "bindLabel": "bindLabel"; "bindValue": "bindValue"; "items": "items"; "inputAttrs": "inputAttrs"; "closeOnSelect": "closeOnSelect"; "clearable": "clearable"; "groupBy": "groupBy"; "maxSelectedItems": "maxSelectedItems"; "multiple": "multiple"; "searchable": "searchable"; "clearSearchOnAdd": "clearSearchOnAdd"; "virtualScroll": "virtualScroll"; "tabIndex": "tabIndex"; "typeahead": "typeahead"; "guessCompareWith": "guessCompareWith"; "autoSelectUniqueOption": "autoSelectUniqueOption"; "groupValue": "groupValue"; "trackBy": "trackBy"; "sortSelectedItemsFn": "sortSelectedItemsFn"; "isRequired": "isRequired"; "compareWith": "compareWith"; }, { "onLoadRemoteResource": "onLoadRemoteResource"; "onSelectedItemRemove": "onSelectedItemRemove"; "onClear": "onClear"; "onClose": "onClose"; }, ["ngtOptionTemplate", "ngtOptionSelectedTemplate", "ngtSelectHeaderTemplate"], never, false, never>;
|
|
142
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtSelectComponent, "ngt-select", never, { "label": "label"; "labelIcon": "labelIcon"; "labelIconColor": "labelIconColor"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpTextColor": "helpTextColor"; "shining": "shining"; "loading": "loading"; "loadingText": "loadingText"; "notFoundText": "notFoundText"; "dropdownPosition": "dropdownPosition"; "typeToSearchText": "typeToSearchText"; "clearAllTooltip": "clearAllTooltip"; "placeholder": "placeholder"; "createText": "createText"; "labelForId": "labelForId"; "dropdownPanelMinHeight": "dropdownPanelMinHeight"; "helperReverseYPosition": "helperReverseYPosition"; "helperAutoXReverse": "helperAutoXReverse"; "name": "name"; "autoLoad": "autoLoad"; "allowCreate": "allowCreate"; "allowOriginalItemsUnselect": "allowOriginalItemsUnselect"; "isDisabled": "isDisabled"; "isReadonly": "isReadonly"; "remoteResource": "remoteResource"; "hideSelected": "hideSelected"; "bindLabel": "bindLabel"; "bindValue": "bindValue"; "items": "items"; "inputAttrs": "inputAttrs"; "closeOnSelect": "closeOnSelect"; "clearable": "clearable"; "groupBy": "groupBy"; "maxSelectedItems": "maxSelectedItems"; "multiple": "multiple"; "searchable": "searchable"; "clearSearchOnAdd": "clearSearchOnAdd"; "virtualScroll": "virtualScroll"; "tabIndex": "tabIndex"; "typeahead": "typeahead"; "guessCompareWith": "guessCompareWith"; "autoSelectUniqueOption": "autoSelectUniqueOption"; "groupValue": "groupValue"; "trackBy": "trackBy"; "sortSelectedItemsFn": "sortSelectedItemsFn"; "isAllowedToRemoveFn": "isAllowedToRemoveFn"; "isRequired": "isRequired"; "compareWith": "compareWith"; }, { "onLoadRemoteResource": "onLoadRemoteResource"; "onSelectedItemRemove": "onSelectedItemRemove"; "onClear": "onClear"; "onClose": "onClose"; }, ["ngtOptionTemplate", "ngtOptionSelectedTemplate", "ngtSelectHeaderTemplate"], never, false, never>;
|
|
141
143
|
}
|
|
142
144
|
export declare enum NgtSelectDropdownPanelHeight {
|
|
143
145
|
AUTO = "auto",
|
|
@@ -24,12 +24,14 @@ export class NgtDatatableComponent {
|
|
|
24
24
|
this.searchTermOnEnter = true;
|
|
25
25
|
this.defaultFilters = {};
|
|
26
26
|
this.filtersDescription = {};
|
|
27
|
+
this.canSelectAllRegisters = false;
|
|
27
28
|
this.onDataChange = new EventEmitter();
|
|
28
29
|
this.onClearFilter = new EventEmitter();
|
|
29
30
|
this.onClearSelectedElements = new EventEmitter();
|
|
30
31
|
this.onSelectedElementsChange = new EventEmitter();
|
|
31
32
|
this.onToogleAllCheckboxes = new EventEmitter();
|
|
32
33
|
this.onToogleCheckbox = new EventEmitter();
|
|
34
|
+
this.onSelectAllRegisters = new EventEmitter();
|
|
33
35
|
this.onOpenSearchModal = new EventEmitter();
|
|
34
36
|
this.onSearch = new EventEmitter();
|
|
35
37
|
this.data = [];
|
|
@@ -332,6 +334,7 @@ export class NgtDatatableComponent {
|
|
|
332
334
|
}
|
|
333
335
|
this.onSelectedElementsChange.emit(this.selectedElements);
|
|
334
336
|
}));
|
|
337
|
+
this.subscriptions.push(this.onSelectAllRegisters.subscribe(() => this.hasSelectedAllElements = !this.hasSelectedAllElements));
|
|
335
338
|
}
|
|
336
339
|
canApplyFilters(filters) {
|
|
337
340
|
if (!this.searching) {
|
|
@@ -354,10 +357,10 @@ export class NgtDatatableComponent {
|
|
|
354
357
|
}
|
|
355
358
|
}
|
|
356
359
|
NgtDatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtDatatableComponent, deps: [{ token: i0.Injector }, { token: i1.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i2.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
357
|
-
NgtDatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtDatatableComponent, selector: "ngt-datatable", inputs: { remoteResource: "remoteResource", type: "type", filterTagBgColor: "filterTagBgColor", filterTagMargin: "filterTagMargin", paginationMargin: "paginationMargin", inputSearch: "inputSearch", searchDelay: "searchDelay", searchTermMinLength: "searchTermMinLength", searchTermOnEnter: "searchTermOnEnter", defaultFilters: "defaultFilters", filtersDescription: "filtersDescription" }, outputs: { onDataChange: "onDataChange", onClearFilter: "onClearFilter", onClearSelectedElements: "onClearSelectedElements", onSelectedElementsChange: "onSelectedElementsChange", onToogleAllCheckboxes: "onToogleAllCheckboxes", onToogleCheckbox: "onToogleCheckbox", onOpenSearchModal: "onOpenSearchModal", onSearch: "onSearch" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "ngtPagination", first: true, predicate: ["ngtPagination"], descendants: true, static: true }, { propertyName: "searchModal", first: true, predicate: ["searchModal"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-full\">\n <div class=\"flex flex-wrap w-full\">\n <ngt-tag *ngIf=\"hasAppliedFilters()\" class=\"w-full sm:w-auto {{ filterTagMargin }}\"\n [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\" color.bg=\"bg-red-500\" (click)=\"removeFilter()\" ngt-stylizable>\n Limpar Filtros\n </ngt-tag>\n\n <ng-container *ngIf=\"hasAppliedFilters()\">\n <ng-container *ngFor=\"let filter of filtersTranslated\">\n <ngt-tag class=\"w-full sm:w-auto {{ filterTagMargin }}\" [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\"\n [color.bg]=\"filterTagBgColor\" (click)=\"removeFilter(filter.reference)\" ngt-stylizable>\n {{ filter.translation + ': ' + (filter?.value?.tagValue ? filter.value.tagValue : filter.value)}}\n </ngt-tag>\n </ng-container>\n </ng-container>\n </div>\n\n <table style=\"display: table;\" class=\"text-left w-full border-collapse table-responsive\" #table>\n <ng-content></ng-content>\n </table>\n\n <p *ngIf=\"emptyStateVisible\" class=\"mt-8 mx-auto self-center text-center text-sm\">\n {{ ngtTranslateService.ngtDatatableNoDataFound }}\n </p>\n\n <div *ngIf=\"loading\">\n <div *ngFor=\"let i of [1, 2, 3, 4]\" class=\"flex w-full mt-3\">\n <ng-container *ngIf=\"columnCount.length >= 2\">\n <ng-container *ngFor=\"let j of columnCount; let last = last\">\n <ng-container *ngIf=\"last\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n\n <ng-container *ngIf=\"!last\">\n <ngt-shining class=\"h-10 w-full mr-10\"></ngt-shining>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"columnCount.length < 2\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full mr-10 ml-10\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n </div>\n </div>\n</div>\n\n<div class=\"clearfix {{ paginationMargin }}\" [hidden]='!data || data.length == 0'>\n <ngt-pagination [pagesInterval]='4' (onPageChange)='apply($event, false)' (onPerPageChange)='apply(1, false)'\n #ngtPagination>\n </ngt-pagination>\n</div>\n\n<ngt-modal
|
|
360
|
+
NgtDatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtDatatableComponent, selector: "ngt-datatable", inputs: { remoteResource: "remoteResource", type: "type", filterTagBgColor: "filterTagBgColor", filterTagMargin: "filterTagMargin", paginationMargin: "paginationMargin", inputSearch: "inputSearch", searchDelay: "searchDelay", searchTermMinLength: "searchTermMinLength", searchTermOnEnter: "searchTermOnEnter", defaultFilters: "defaultFilters", filtersDescription: "filtersDescription", canSelectAllRegisters: "canSelectAllRegisters" }, outputs: { onDataChange: "onDataChange", onClearFilter: "onClearFilter", onClearSelectedElements: "onClearSelectedElements", onSelectedElementsChange: "onSelectedElementsChange", onToogleAllCheckboxes: "onToogleAllCheckboxes", onToogleCheckbox: "onToogleCheckbox", onSelectAllRegisters: "onSelectAllRegisters", onOpenSearchModal: "onOpenSearchModal", onSearch: "onSearch" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "ngtPagination", first: true, predicate: ["ngtPagination"], descendants: true, static: true }, { propertyName: "searchModal", first: true, predicate: ["searchModal"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-full\">\n <div class=\"flex flex-wrap w-full\">\n <ngt-tag *ngIf=\"hasAppliedFilters()\" class=\"w-full sm:w-auto {{ filterTagMargin }}\"\n [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\" color.bg=\"bg-red-500\" (click)=\"removeFilter()\" ngt-stylizable>\n Limpar Filtros\n </ngt-tag>\n\n <ng-container *ngIf=\"hasAppliedFilters()\">\n <ng-container *ngFor=\"let filter of filtersTranslated\">\n <ngt-tag class=\"w-full sm:w-auto {{ filterTagMargin }}\" [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\"\n [color.bg]=\"filterTagBgColor\" (click)=\"removeFilter(filter.reference)\" ngt-stylizable>\n {{ filter.translation + ': ' + (filter?.value?.tagValue ? filter.value.tagValue : filter.value)}}\n </ngt-tag>\n </ng-container>\n </ng-container>\n </div>\n\n <table style=\"display: table;\" class=\"text-left w-full border-collapse table-responsive\" #table>\n <ng-content></ng-content>\n </table>\n\n <p *ngIf=\"emptyStateVisible\" class=\"mt-8 mx-auto self-center text-center text-sm\">\n {{ ngtTranslateService.ngtDatatableNoDataFound }}\n </p>\n\n <div *ngIf=\"loading\">\n <div *ngFor=\"let i of [1, 2, 3, 4]\" class=\"flex w-full mt-3\">\n <ng-container *ngIf=\"columnCount.length >= 2\">\n <ng-container *ngFor=\"let j of columnCount; let last = last\">\n <ng-container *ngIf=\"last\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n\n <ng-container *ngIf=\"!last\">\n <ngt-shining class=\"h-10 w-full mr-10\"></ngt-shining>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"columnCount.length < 2\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full mr-10 ml-10\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n </div>\n </div>\n</div>\n\n<div class=\"clearfix {{ paginationMargin }}\" [hidden]='!data || data.length == 0'>\n <ngt-pagination [pagesInterval]='4' (onPageChange)='apply($event, false)' (onPerPageChange)='apply(1, false)'\n #ngtPagination>\n </ngt-pagination>\n</div>\n\n<ngt-modal [customLayout]='true' [isDisabled]=\"false\" #searchModal>\n <ng-container *ngTemplateOutlet=\"searchModalTemplate\"></ng-container>\n</ngt-modal>\n", styles: ["@media (max-width: 767px){.table-responsive{display:block;position:relative;width:100%}.table-responsive thead,.table-responsive tbody,.table-responsive th,.table-responsive td,.table-responsive tr{display:block}.table-responsive td,.table-responsive th{height:50px}.table-responsive thead{float:left;margin-bottom:15px}.table-responsive tbody{width:auto;position:relative;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}.table-responsive tbody tr{display:inline-block;min-width:100%}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i5.NgtPaginationComponent, selector: "ngt-pagination", inputs: ["pagesInterval"], outputs: ["onPageChange", "onPerPageChange"] }, { kind: "component", type: i6.NgtModalComponent, selector: "ngt-modal", inputs: ["customLayout", "disableDefaultCloses", "isDisabled", "ngtStyle"], outputs: ["onCloseModal", "onOpenModal"] }, { kind: "component", type: i7.NgtTagComponent, selector: "ngt-tag", inputs: ["icon"] }, { kind: "directive", type: i8.NgtStylizableDirective, selector: "[ngt-stylizable]", inputs: ["color", "color.text", "color.bg", "color.border", "h", "w", "p", "px", "py", "pt", "pr", "pb", "pl", "m", "mx", "my", "mt", "mr", "mb", "ml", "border", "shadow", "rounded", "font", "text", "breakWords", "overflow", "position", "justifyContent", "cursor", "fontCase"] }] });
|
|
358
361
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtDatatableComponent, decorators: [{
|
|
359
362
|
type: Component,
|
|
360
|
-
args: [{ selector: 'ngt-datatable', template: "<div class=\"w-full\">\n <div class=\"flex flex-wrap w-full\">\n <ngt-tag *ngIf=\"hasAppliedFilters()\" class=\"w-full sm:w-auto {{ filterTagMargin }}\"\n [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\" color.bg=\"bg-red-500\" (click)=\"removeFilter()\" ngt-stylizable>\n Limpar Filtros\n </ngt-tag>\n\n <ng-container *ngIf=\"hasAppliedFilters()\">\n <ng-container *ngFor=\"let filter of filtersTranslated\">\n <ngt-tag class=\"w-full sm:w-auto {{ filterTagMargin }}\" [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\"\n [color.bg]=\"filterTagBgColor\" (click)=\"removeFilter(filter.reference)\" ngt-stylizable>\n {{ filter.translation + ': ' + (filter?.value?.tagValue ? filter.value.tagValue : filter.value)}}\n </ngt-tag>\n </ng-container>\n </ng-container>\n </div>\n\n <table style=\"display: table;\" class=\"text-left w-full border-collapse table-responsive\" #table>\n <ng-content></ng-content>\n </table>\n\n <p *ngIf=\"emptyStateVisible\" class=\"mt-8 mx-auto self-center text-center text-sm\">\n {{ ngtTranslateService.ngtDatatableNoDataFound }}\n </p>\n\n <div *ngIf=\"loading\">\n <div *ngFor=\"let i of [1, 2, 3, 4]\" class=\"flex w-full mt-3\">\n <ng-container *ngIf=\"columnCount.length >= 2\">\n <ng-container *ngFor=\"let j of columnCount; let last = last\">\n <ng-container *ngIf=\"last\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n\n <ng-container *ngIf=\"!last\">\n <ngt-shining class=\"h-10 w-full mr-10\"></ngt-shining>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"columnCount.length < 2\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full mr-10 ml-10\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n </div>\n </div>\n</div>\n\n<div class=\"clearfix {{ paginationMargin }}\" [hidden]='!data || data.length == 0'>\n <ngt-pagination [pagesInterval]='4' (onPageChange)='apply($event, false)' (onPerPageChange)='apply(1, false)'\n #ngtPagination>\n </ngt-pagination>\n</div>\n\n<ngt-modal
|
|
363
|
+
args: [{ selector: 'ngt-datatable', template: "<div class=\"w-full\">\n <div class=\"flex flex-wrap w-full\">\n <ngt-tag *ngIf=\"hasAppliedFilters()\" class=\"w-full sm:w-auto {{ filterTagMargin }}\"\n [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\" color.bg=\"bg-red-500\" (click)=\"removeFilter()\" ngt-stylizable>\n Limpar Filtros\n </ngt-tag>\n\n <ng-container *ngIf=\"hasAppliedFilters()\">\n <ng-container *ngFor=\"let filter of filtersTranslated\">\n <ngt-tag class=\"w-full sm:w-auto {{ filterTagMargin }}\" [class.sm:mr-4]=\"filterTagMargin == 'mb-4'\"\n [color.bg]=\"filterTagBgColor\" (click)=\"removeFilter(filter.reference)\" ngt-stylizable>\n {{ filter.translation + ': ' + (filter?.value?.tagValue ? filter.value.tagValue : filter.value)}}\n </ngt-tag>\n </ng-container>\n </ng-container>\n </div>\n\n <table style=\"display: table;\" class=\"text-left w-full border-collapse table-responsive\" #table>\n <ng-content></ng-content>\n </table>\n\n <p *ngIf=\"emptyStateVisible\" class=\"mt-8 mx-auto self-center text-center text-sm\">\n {{ ngtTranslateService.ngtDatatableNoDataFound }}\n </p>\n\n <div *ngIf=\"loading\">\n <div *ngFor=\"let i of [1, 2, 3, 4]\" class=\"flex w-full mt-3\">\n <ng-container *ngIf=\"columnCount.length >= 2\">\n <ng-container *ngFor=\"let j of columnCount; let last = last\">\n <ng-container *ngIf=\"last\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n\n <ng-container *ngIf=\"!last\">\n <ngt-shining class=\"h-10 w-full mr-10\"></ngt-shining>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"columnCount.length < 2\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full mr-10 ml-10\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </ng-container>\n </div>\n </div>\n</div>\n\n<div class=\"clearfix {{ paginationMargin }}\" [hidden]='!data || data.length == 0'>\n <ngt-pagination [pagesInterval]='4' (onPageChange)='apply($event, false)' (onPerPageChange)='apply(1, false)'\n #ngtPagination>\n </ngt-pagination>\n</div>\n\n<ngt-modal [customLayout]='true' [isDisabled]=\"false\" #searchModal>\n <ng-container *ngTemplateOutlet=\"searchModalTemplate\"></ng-container>\n</ngt-modal>\n", styles: ["@media (max-width: 767px){.table-responsive{display:block;position:relative;width:100%}.table-responsive thead,.table-responsive tbody,.table-responsive th,.table-responsive td,.table-responsive tr{display:block}.table-responsive td,.table-responsive th{height:50px}.table-responsive thead{float:left;margin-bottom:15px}.table-responsive tbody{width:auto;position:relative;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}.table-responsive tbody tr{display:inline-block;min-width:100%}}\n"] }]
|
|
361
364
|
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i2.NgtTranslateService, decorators: [{
|
|
362
365
|
type: Optional
|
|
363
366
|
}] }]; }, propDecorators: { table: [{
|
|
@@ -391,6 +394,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
391
394
|
type: Input
|
|
392
395
|
}], filtersDescription: [{
|
|
393
396
|
type: Input
|
|
397
|
+
}], canSelectAllRegisters: [{
|
|
398
|
+
type: Input
|
|
394
399
|
}], onDataChange: [{
|
|
395
400
|
type: Output
|
|
396
401
|
}], onClearFilter: [{
|
|
@@ -403,6 +408,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
403
408
|
type: Output
|
|
404
409
|
}], onToogleCheckbox: [{
|
|
405
410
|
type: Output
|
|
411
|
+
}], onSelectAllRegisters: [{
|
|
412
|
+
type: Output
|
|
406
413
|
}], onOpenSearchModal: [{
|
|
407
414
|
type: Output
|
|
408
415
|
}], onSearch: [{
|
|
@@ -429,4 +436,4 @@ export class NgtCheckedElement {
|
|
|
429
436
|
}
|
|
430
437
|
export class NgtCustomFilter {
|
|
431
438
|
}
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWRhdGF0YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtZGF0YXRhYmxlL25ndC1kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWRhdGF0YWJsZS9uZ3QtZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7OztBQVk1RCxNQUFNLE9BQU8scUJBQXFCO0lBbUQ5QixZQUNZLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLGNBQWlDLEVBRWxDLG1CQUF3QztRQUp2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFFbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQWxEbkMsU0FBSSxHQUFxQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDakQscUJBQWdCLEdBQVcsYUFBYSxDQUFDO1FBQ3pDLG9CQUFlLEdBQVcsTUFBTSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFXLGNBQWMsQ0FBQztRQUUxQyxnQkFBVyxHQUFXLEdBQUcsQ0FBQztRQUMxQix3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMsc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ2xDLG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUV2QixpQkFBWSxH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aUI7SUFDekIseUVBQWdCLENBQUE7SUFDaEIscUVBQWMsQ0FBQTtJQUNkLDJFQUFpQixDQUFBO0lBQ2pCLDZFQUFrQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSzVCO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtDQUk3QjtBQUVELE1BQU0sT0FBTyxlQUFlO0NBSTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGdldEVudW1Gcm9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vaGVscGVycy9lbnVtL2VudW0nO1xuaW1wb3J0IHsgTmd0SHR0cFBhZ2luYXRpb24sIE5ndEh0dHBSZXNwb25zZSwgTmd0SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWlucHV0L25ndC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LXBhZ2luYXRpb24vbmd0LXBhZ2luYXRpb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtZGF0YXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWRhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmd0LWRhdGF0YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd0RGF0YXRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRhYmxlOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ25ndFBhZ2luYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgbmd0UGFnaW5hdGlvbjogTmd0UGFnaW5hdGlvbkNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdzZWFyY2hNb2RhbCcsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzZWFyY2hNb2RhbDogTmd0TW9kYWxDb21wb25lbnQ7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZTogTmd0RGF0YXRhYmxlVHlwZSA9IE5ndERhdGF0YWJsZVR5cGUuUkVNT1RFO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJUYWdCZ0NvbG9yOiBzdHJpbmcgPSAnYmctYmx1ZS01MDAnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJUYWdNYXJnaW46IHN0cmluZyA9ICdtYi00JztcbiAgICBASW5wdXQoKSBwdWJsaWMgcGFnaW5hdGlvbk1hcmdpbjogc3RyaW5nID0gJ210LTIgbWQ6bXQtOCc7XG4gICAgQElucHV0KCkgcHVibGljIGlucHV0U2VhcmNoOiBOZ3RJbnB1dENvbXBvbmVudDtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRGVsYXk6IG51bWJlciA9IDUwMDtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoVGVybU1pbkxlbmd0aDogbnVtYmVyID0gMTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoVGVybU9uRW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogYW55ID0ge307XG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlcnNEZXNjcmlwdGlvbiA9IHt9O1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGVhckZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsZWFyU2VsZWN0ZWRFbGVtZW50czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdGVkRWxlbWVudHNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxOZ3RDaGVja2VkRWxlbWVudD4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Ub29nbGVBbGxDaGVja2JveGVzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uVG9vZ2xlQ2hlY2tib3g6IEV2ZW50RW1pdHRlcjxOZ3RDaGVja2VkRWxlbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW5TZWFyY2hNb2RhbDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgc2VhcmNoTW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBwdWJsaWMgZGF0YSA9IFtdO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGNsZWFuaW5nRmlsdGVyID0gZmFsc2U7XG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5ID0gZmFsc2U7XG4gICAgcHVibGljIGZpbHRlcnNUcmFuc2xhdGVkID0gW107XG4gICAgcHVibGljIGVtcHR5U3RhdGVWaXNpYmxlOiBib29sZWFuO1xuICAgIHB1YmxpYyBjb2x1bW5Db3VudCA9IFtdO1xuICAgIHB1YmxpYyBzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxOZ3RDaGVja2VkRWxlbWVudD4gPSBbXTtcblxuICAgIHByaXZhdGUgc2VhcmNoaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgY3VycmVudFN0YXRlID0ge1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBkZWZhdWx0RmlsdGVyczoge30sXG4gICAgICAgICAgICBzaWxlbnRGaWx0ZXJzOiB7fSxcbiAgICAgICAgICAgIHF1YWxpZmllZEZpbHRlcnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwU2VydmljZTogTmd0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudCAmJiB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucm93c1xuICAgICAgICAgICAgJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnJvd3NbMF0gJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnJvd3NbMF0uY2VsbHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uQ291bnQgPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucm93c1swXS5jZWxscztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlucHV0U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTZWFyY2hXaXRoSW5wdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdENoZWNrYm94RXZlbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hEZWxheSA9PSA1MDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVsYXkgPSB0aGlzLmluamVjdG9yLmdldCgnTmd0RGF0YXRhYmxlU2VhcmNoRGVsYXknLCA1MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybU1pbkxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1NaW5MZW5ndGggPSB0aGlzLmluamVjdG9yLmdldCgnTmd0RGF0YXRhYmxlU2VhcmNoVGVybU1pbkxlbmd0aCcsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlYXJjaE1vZGFsVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RhbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5TZWFyY2hNb2RhbChyZWZlcmVuY2U/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RhbC5vcGVuKCk7XG4gICAgICAgIHRoaXMub25PcGVuU2VhcmNoTW9kYWwuZW1pdChyZWZlcmVuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGVkRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLm9uQ2xlYXJTZWxlY3RlZEVsZW1lbnRzLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2goXG4gICAgICAgIGZpbHRlcnM6IE9iamVjdCxcbiAgICAgICAgc2VhcmNoVHlwZTogTmd0RGF0YXRhYmxlU2VhcmNoVHlwZSA9IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUuREVGQVVMVCxcbiAgICAgICAgYXBwbHlEZWxheU9uU2VhcmNoOiBib29sZWFuID0gdHJ1ZVxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5jYW5BcHBseUZpbHRlcnMoZmlsdGVycykpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2guZW1pdChmaWx0ZXJzKTtcblxuICAgICAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT0gTmd0RGF0YXRhYmxlU2VhcmNoVHlwZS5ERUZBVUxUKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycywgLi4uZmlsdGVycyB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnMgPSB7IC4uLnRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuc2lsZW50RmlsdGVycywgLi4uZmlsdGVycyB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyc0Rlc2NyaXB0aW9uKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5KDEsIGFwcGx5RGVsYXlPblNlYXJjaCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc29ydChmaWVsZDogYW55LCBkaXJlY3Rpb246IGFueSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5zb3J0ID0ge1xuICAgICAgICAgICAgZmllbGQ6IGZpZWxkLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseSh0aGlzLm5ndFBhZ2luYXRpb24uZ2V0Q3VycmVudFBhZ2UoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlZnJlc2goc3RheUluUGFnZTogTmd0RGF0YXRhYmxlUGFyYW0gPSBOZ3REYXRhdGFibGVQYXJhbS5SRVNFVF9QQUdFLCBsb2FkZXI6IE5ndERhdGF0YWJsZVBhcmFtID0gTmd0RGF0YXRhYmxlUGFyYW0uRU5BQkxFX0xPQURFUikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseShcbiAgICAgICAgICAgIHN0YXlJblBhZ2UgPyB0aGlzLm5ndFBhZ2luYXRpb24uZ2V0Q3VycmVudFBhZ2UoKSA6IDEsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGxvYWRlclxuICAgICAgICApLnRoZW4oKCkgPT4gIXRoaXMuZGF0YT8ubGVuZ3RoID8gdGhpcy5hcHBseSgxLCBmYWxzZSkgOiBudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5zb3J0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZXJQYWdlKHBlclBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLm5ndFBhZ2luYXRpb24ub25SZWdpc3RlcnNQZXJQYWdlQ2hhbmdlKHBlclBhZ2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBseUZpbHRlcnNEZXNjcmlwdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsZWFuaW5nRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNUcmFuc2xhdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IHJlZmVyZW5jZSBpbiB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLmRlZmF1bHRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyc0Rlc2NyaXB0aW9uW3JlZmVyZW5jZV0gJiYgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVyc1tyZWZlcmVuY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1RyYW5zbGF0ZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLmRlZmF1bHRGaWx0ZXJzW3JlZmVyZW5jZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbjogdGhpcy5maWx0ZXJzRGVzY3JpcHRpb25bcmVmZXJlbmNlXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RmlsdGVyRGVzY3JpcHRpb24ocmVmZXJlbmNlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzRGVzY3JpcHRpb25bcmVmZXJlbmNlXSA9IGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmVGaWx0ZXIocmVmZXJlbmNlPzogc3RyaW5nLCByZWZyZXNoOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlICYmICF0aGlzLmhhc0FwcGxpZWRGaWx0ZXIocmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2xlYW5pbmdGaWx0ZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIXJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNUcmFuc2xhdGVkID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLmRlZmF1bHRGaWx0ZXJzW3JlZmVyZW5jZV07XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuc2lsZW50RmlsdGVyc1tyZWZlcmVuY2VdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzVHJhbnNsYXRlZCA9IHRoaXMuZmlsdGVyc1RyYW5zbGF0ZWQuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAmJiBlbGVtZW50LnJlZmVyZW5jZSAhPT0gcmVmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vbkNsZWFyRmlsdGVyLmVtaXQocmVmZXJlbmNlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRTZWFyY2ggJiYgKHJlZmVyZW5jZSA9PT0gJ3Rlcm0nIHx8ICFyZWZlcmVuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFNlYXJjaC5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHkodGhpcy5uZ3RQYWdpbmF0aW9uLmdldEN1cnJlbnRQYWdlKCksIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFuaW5nRmlsdGVyID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0FwcGxpZWRGaWx0ZXIoZmlsdGVyOiBPYmplY3QgfCBOZ3RDdXN0b21GaWx0ZXIgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlOiBzdHJpbmcgPSB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyA/IGZpbHRlciA6IE9iamVjdC5rZXlzKGZpbHRlciA/PyB7fSlbMF07XG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5xdWFsaWZpZWRGaWx0ZXJzO1xuXG4gICAgICAgIHJldHVybiAhIU9iamVjdC5rZXlzKGFwcGxpZWRGaWx0ZXJzKS5maW5kKGtleSA9PiBrZXkgPT0gcmVmZXJlbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQXBwbGllZEZpbHRlcnMoc2VhcmNoVHlwZTogTmd0RGF0YXRhYmxlU2VhcmNoVHlwZSA9IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUuREVGQVVMVCkge1xuICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB7fTtcblxuICAgICAgICBpZiAoc2VhcmNoVHlwZSA9PSBOZ3REYXRhdGFibGVTZWFyY2hUeXBlLkRFRkFVTFQpIHtcbiAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycztcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUuU0lMRU5UKSB7XG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVycyA9IHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuc2lsZW50RmlsdGVycztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLmRlZmF1bHRGaWx0ZXJzLCAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnMgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhIU9iamVjdC52YWx1ZXMoYXBwbGllZEZpbHRlcnMpPy5maW5kKGZpbHRlciA9PiAhIWZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaW5wdXRTZWFyY2gpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmlucHV0U2VhcmNoLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNlYXJjaFdpdGhJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudHlwZSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy50eXBlLmN1cnJlbnRWYWx1ZSwgTmd0RGF0YXRhYmxlVHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXBwbHkocGFnZSA9IDEsIGFwcGx5RGVsYXlPblNlYXJjaDogYm9vbGVhbiA9IHRydWUsIGxvYWRlcjogTmd0RGF0YXRhYmxlUGFyYW0gPSBOZ3REYXRhdGFibGVQYXJhbS5FTkFCTEVfTE9BREVSKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5ndFBhZ2luYXRpb24uZGlzcGxheVBhZ2luYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBOZ3REYXRhdGFibGVUeXBlLlJFTU9URSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRWaXNpYmlsaXR5QXR0cmlidXRlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGx5RGVsYXlPblNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShwYWdlKS50aGVuKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNlYXJjaERlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZERhdGEocGFnZSkudGhlbigoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHByb3BlcnR5IFtyZW1vdGVSZXNvdXJjZV0gbmVlZHMgdG8gYmUgcHJlc2VudCB0byBiZSBhYmxlIHRvIG1ha2UgcmVtb3RlIHNlYXJjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09IE5ndERhdGF0YWJsZVR5cGUuRklYRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWaXNpYmlsaXR5QXR0cmlidXRlcygpO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWREYXRhKHBhZ2U6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbjogTmd0SHR0cFBhZ2luYXRpb24gPSB7IC4uLnRoaXMubmd0UGFnaW5hdGlvbi5nZXRQYWdpbmF0aW9uKCksIC4uLnsgcGFnZTogcGFnZSB9IH07XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMucXVhbGlmaWVkRmlsdGVycyA9IHRoaXMuZ2V0UXVhbGlmaWVkRmlsdGVycygpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dFNlYXJjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRTZWFyY2guaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZVJlc291cmNlLCB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnF1YWxpZmllZEZpbHRlcnMsIHBhZ2luYXRpb24sIHRoaXMuY3VycmVudFN0YXRlLnNvcnRcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Nlc3NSZW1vdGVSZXNwb25zZShyZXNwb25zZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndFBhZ2luYXRpb24ucHJvY2Nlc3NQYWdpbmF0aW9uKHJlc3BvbnNlLm1ldGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFNlYXJjaC5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZpc2liaWxpdHlBdHRyaWJ1dGVzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFNlYXJjaC5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFF1YWxpZmllZEZpbHRlcnMoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpZmllZEZpbHRlcnMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVxdWVzdGVkRmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycywgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5zaWxlbnRGaWx0ZXJzIH07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIGluIHJlcXVlc3RlZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0ZWRGaWx0ZXJzW3JlZmVyZW5jZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkRmlsdGVyKGZpbHRlciwgcmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgTmd0Q3VzdG9tRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnRhZ0xhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzRGVzY3JpcHRpb25bcmVmZXJlbmNlXSA9IGZpbHRlci50YWdMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyc0Rlc2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZEZpbHRlcnNbcmVmZXJlbmNlXSA9IGZpbHRlci50ZXJtO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkRmlsdGVyc1tyZWZlcmVuY2VdID0gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1YWxpZmllZEZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kVmlzaWJpbGl0eUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gTmd0RGF0YXRhYmxlVHlwZS5SRU1PVEUgJiYgIXRoaXMuZGF0YS5sZW5ndGggJiYgIXRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbXB0eVN0YXRlVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09IE5ndERhdGF0YWJsZVR5cGUuRklYRUQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlTdGF0ZVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlTdGF0ZVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Nlc3NSZW1vdGVSZXNwb25zZShyZXNwb25zZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNlYXJjaFdpdGhJbnB1dCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLmlucHV0U2VhcmNoLm9uVmFsdWVDaGFuZ2UoKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVyc1sndGVybSddKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKCd0ZXJtJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5zZWFyY2hUZXJtTWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVyc1sndGVybSddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7IHRlcm06ICcnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSB0aGlzLnNlYXJjaFRlcm1NaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm1PbkVudGVyKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0U2VhcmNoLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0U2VhcmNoLnZhbHVlICYmIHRoaXMuaW5wdXRTZWFyY2gudmFsdWUubGVuZ3RoID49IHRoaXMuc2VhcmNoVGVybU1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseSgxLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENoZWNrYm94RXZlbnQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5vblRvb2dsZUNoZWNrYm94LnN1YnNjcmliZSgoY2hlY2tlZEVsZW1lbnQ6IE5ndENoZWNrZWRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGNoZWNrZWRFbGVtZW50LmlkKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkRWxlbWVudC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGNoZWNrZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRFbGVtZW50c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuQXBwbHlGaWx0ZXJzKGZpbHRlcnM6IE9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoaW5nKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBpbiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZEZpbHRlcihmaWx0ZXJzW3JlZmVyZW5jZV0sIHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZEZpbHRlcihmaWx0ZXI6IHN0cmluZyB8IE5ndEN1c3RvbUZpbHRlciwgcmVmZXJlbmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaGFzVmFsdWU6IGJvb2xlYW4gPSAhISgoZmlsdGVyIGluc3RhbmNlb2YgTmd0Q3VzdG9tRmlsdGVyICYmIGZpbHRlci50ZXJtKSB8fCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCBpc0FwcGxpZWQ6IGJvb2xlYW4gPSB0aGlzLmhhc0FwcGxpZWRGaWx0ZXIocmVmZXJlbmNlKTtcblxuICAgICAgICByZXR1cm4gaXNBcHBsaWVkIHx8ICghaXNBcHBsaWVkICYmIGhhc1ZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIE5ndERhdGF0YWJsZVR5cGUge1xuICAgIFJFTU9URSA9ICdSRU1PVEUnLFxuICAgIEZJWEVEID0gJ0ZJWEVEJ1xufVxuXG5leHBvcnQgZW51bSBOZ3REYXRhdGFibGVTZWFyY2hUeXBlIHtcbiAgICBERUZBVUxUID0gJ0RFRkFVTFQnLFxuICAgIFNJTEVOVCA9ICdTSUxFTlQnLFxufVxuXG5leHBvcnQgZW51bSBOZ3REYXRhdGFibGVQYXJhbSB7XG4gICAgU1RBWV9JTl9QQUdFID0gMSxcbiAgICBSRVNFVF9QQUdFID0gMCxcbiAgICBFTkFCTEVfTE9BREVSID0gMSxcbiAgICBESVNBQkxFX0xPQURFUiA9IDBcbn1cblxuZXhwb3J0IGNsYXNzIE5ndENoZWNrZWRFbGVtZW50IHtcbiAgICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVmZXJlbmNlOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBOZ3RDdXN0b21GaWx0ZXIge1xuICAgIHB1YmxpYyB0ZXJtOiBzdHJpbmc7XG4gICAgcHVibGljIHRhZ1ZhbHVlOiBzdHJpbmc7XG4gICAgcHVibGljIHRhZ0xhYmVsPzogc3RyaW5nO1xufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCB3LWZ1bGxcIj5cbiAgICAgICAgPG5ndC10YWcgKm5nSWY9XCJoYXNBcHBsaWVkRmlsdGVycygpXCIgY2xhc3M9XCJ3LWZ1bGwgc206dy1hdXRvIHt7IGZpbHRlclRhZ01hcmdpbiB9fVwiXG4gICAgICAgICAgICBbY2xhc3Muc206bXItNF09XCJmaWx0ZXJUYWdNYXJnaW4gPT0gJ21iLTQnXCIgY29sb3IuYmc9XCJiZy1yZWQtNTAwXCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcigpXCIgbmd0LXN0eWxpemFibGU+XG4gICAgICAgICAgICBMaW1wYXIgRmlsdHJvc1xuICAgICAgICA8L25ndC10YWc+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0FwcGxpZWRGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzVHJhbnNsYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxuZ3QtdGFnIGNsYXNzPVwidy1mdWxsIHNtOnctYXV0byB7eyBmaWx0ZXJUYWdNYXJnaW4gfX1cIiBbY2xhc3Muc206bXItNF09XCJmaWx0ZXJUYWdNYXJnaW4gPT0gJ21iLTQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yLmJnXT1cImZpbHRlclRhZ0JnQ29sb3JcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlci5yZWZlcmVuY2UpXCIgbmd0LXN0eWxpemFibGU+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci50cmFuc2xhdGlvbiArICc6ICcgKyAoZmlsdGVyPy52YWx1ZT8udGFnVmFsdWUgPyBmaWx0ZXIudmFsdWUudGFnVmFsdWUgOiBmaWx0ZXIudmFsdWUpfX1cbiAgICAgICAgICAgICAgICA8L25ndC10YWc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8dGFibGUgc3R5bGU9XCJkaXNwbGF5OiB0YWJsZTtcIiBjbGFzcz1cInRleHQtbGVmdCB3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlIHRhYmxlLXJlc3BvbnNpdmVcIiAjdGFibGU+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3RhYmxlPlxuXG4gICAgPHAgKm5nSWY9XCJlbXB0eVN0YXRlVmlzaWJsZVwiIGNsYXNzPVwibXQtOCBteC1hdXRvIHNlbGYtY2VudGVyIHRleHQtY2VudGVyIHRleHQtc21cIj5cbiAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3REYXRhdGFibGVOb0RhdGFGb3VuZCB9fVxuICAgIDwvcD5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgWzEsIDIsIDMsIDRdXCIgY2xhc3M9XCJmbGV4IHctZnVsbCBtdC0zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uQ291bnQubGVuZ3RoID49IDJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBqIG9mIGNvbHVtbkNvdW50OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbCBtci0xMFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Db3VudC5sZW5ndGggPCAyXCI+XG4gICAgICAgICAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgICAgICAgICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsIG1yLTEwIG1sLTEwXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImNsZWFyZml4IHt7IHBhZ2luYXRpb25NYXJnaW4gfX1cIiBbaGlkZGVuXT0nIWRhdGEgfHwgZGF0YS5sZW5ndGggPT0gMCc+XG4gICAgPG5ndC1wYWdpbmF0aW9uIFtwYWdlc0ludGVydmFsXT0nNCcgKG9uUGFnZUNoYW5nZSk9J2FwcGx5KCRldmVudCwgZmFsc2UpJyAob25QZXJQYWdlQ2hhbmdlKT0nYXBwbHkoMSwgZmFsc2UpJ1xuICAgICAgICAjbmd0UGFnaW5hdGlvbj5cbiAgICA8L25ndC1wYWdpbmF0aW9uPlxuPC9kaXY+XG5cbjxuZ3QtbW9kYWwgI3NlYXJjaE1vZGFsIFtjdXN0b21MYXlvdXRdPSd0cnVlJyBbaXNEaXNhYmxlZF09XCJmYWxzZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hNb2RhbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25ndC1tb2RhbD5cbiJdfQ==
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWRhdGF0YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtZGF0YXRhYmxlL25ndC1kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWRhdGF0YWJsZS9uZ3QtZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7OztBQVk1RCxNQUFNLE9BQU8scUJBQXFCO0lBc0Q5QixZQUNZLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLGNBQWlDLEVBRWxDLG1CQUF3QztRQUp2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFFbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXJEbkMsU0FBSSxHQUFxQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDakQscUJBQWdCLEdBQVcsYUFBYSxDQUFDO1FBQ3pDLG9CQUFlLEdBQVcsTUFBTSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFXLGNBQWMsQ0FBQztRQUUxQyxnQkFBVyxHQUFXLEdBQUcsQ0FBQztRQUMxQix3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMsc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ2xDLG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QiwwQkFBcUIs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QkFHWDtBQUhELFdBQVksZ0JBQWdCO0lBQ3hCLHFDQUFpQixDQUFBO0lBQ2pCLG1DQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFHM0I7QUFFRCxNQUFNLENBQU4sSUFBWSxzQkFHWDtBQUhELFdBQVksc0JBQXNCO0lBQzlCLDZDQUFtQixDQUFBO0lBQ25CLDJDQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBR2pDO0FBRUQsTUFBTSxDQUFOLElBQVksaUJBS1g7QUFMRCxXQUFZLGlCQUFpQjtJQUN6Qix5RUFBZ0IsQ0FBQTtJQUNoQixxRUFBYyxDQUFBO0lBQ2QsMkVBQWlCLENBQUE7SUFDakIsNkVBQWtCLENBQUE7QUFDdEIsQ0FBQyxFQUxXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLNUI7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0NBSTdCO0FBRUQsTUFBTSxPQUFPLGVBQWU7Q0FJM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ2V0RW51bUZyb21TdHJpbmcgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2VudW0vZW51bSc7XG5pbXBvcnQgeyBOZ3RIdHRwUGFnaW5hdGlvbiwgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtaW5wdXQvbmd0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL25ndC1tb2RhbC9uZ3QtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtcGFnaW5hdGlvbi9uZ3QtcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1kYXRhdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3QtZGF0YXRhYmxlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3REYXRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgdGFibGU6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbmd0UGFnaW5hdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ3RQYWdpbmF0aW9uOiBOZ3RQYWdpbmF0aW9uQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaE1vZGFsJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHNlYXJjaE1vZGFsOiBOZ3RNb2RhbENvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdGVSZXNvdXJjZTogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0eXBlOiBOZ3REYXRhdGFibGVUeXBlID0gTmd0RGF0YXRhYmxlVHlwZS5SRU1PVEU7XG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlclRhZ0JnQ29sb3I6IHN0cmluZyA9ICdiZy1ibHVlLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlclRhZ01hcmdpbjogc3RyaW5nID0gJ21iLTQnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0aW9uTWFyZ2luOiBzdHJpbmcgPSAnbXQtMiBtZDptdC04JztcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5wdXRTZWFyY2g6IE5ndElucHV0Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hEZWxheTogbnVtYmVyID0gNTAwO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hUZXJtTWluTGVuZ3RoOiBudW1iZXIgPSAxO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hUZXJtT25FbnRlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGRlZmF1bHRGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyc0Rlc2NyaXB0aW9uID0ge307XG4gICAgQElucHV0KCkgcHVibGljIGNhblNlbGVjdEFsbFJlZ2lzdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGVhckZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsZWFyU2VsZWN0ZWRFbGVtZW50czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdGVkRWxlbWVudHNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxOZ3RDaGVja2VkRWxlbWVudD4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Ub29nbGVBbGxDaGVja2JveGVzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uVG9vZ2xlQ2hlY2tib3g6IEV2ZW50RW1pdHRlcjxOZ3RDaGVja2VkRWxlbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdEFsbFJlZ2lzdGVyczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuU2VhcmNoTW9kYWw6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIHNlYXJjaE1vZGFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcHVibGljIGRhdGEgPSBbXTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjbGVhbmluZ0ZpbHRlciA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeSA9IGZhbHNlO1xuICAgIHB1YmxpYyBmaWx0ZXJzVHJhbnNsYXRlZCA9IFtdO1xuICAgIHB1YmxpYyBlbXB0eVN0YXRlVmlzaWJsZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29sdW1uQ291bnQgPSBbXTtcbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRBbGxFbGVtZW50czogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VsZWN0ZWRFbGVtZW50czogQXJyYXk8Tmd0Q2hlY2tlZEVsZW1lbnQ+ID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIGN1cnJlbnRTdGF0ZSA9IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IHt9LFxuICAgICAgICAgICAgc2lsZW50RmlsdGVyczoge30sXG4gICAgICAgICAgICBxdWFsaWZpZWRGaWx0ZXJzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cFNlcnZpY2U6IE5ndEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHVibGljIG5ndFRyYW5zbGF0ZVNlcnZpY2U6IE5ndFRyYW5zbGF0ZVNlcnZpY2VcbiAgICApIHsgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnJvd3NcbiAgICAgICAgICAgICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5yb3dzWzBdICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5yb3dzWzBdLmNlbGxzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNvdW50ID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnJvd3NbMF0uY2VsbHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbnB1dFNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2VhcmNoV2l0aElucHV0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXRDaGVja2JveEV2ZW50KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRGVsYXkgPT0gNTAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlbGF5ID0gdGhpcy5pbmplY3Rvci5nZXQoJ05ndERhdGF0YWJsZVNlYXJjaERlbGF5JywgNTAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm1NaW5MZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtTWluTGVuZ3RoID0gdGhpcy5pbmplY3Rvci5nZXQoJ05ndERhdGF0YWJsZVNlYXJjaFRlcm1NaW5MZW5ndGgnLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZWFyY2hNb2RhbFRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kYWxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuU2VhcmNoTW9kYWwocmVmZXJlbmNlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kYWwub3BlbigpO1xuICAgICAgICB0aGlzLm9uT3BlblNlYXJjaE1vZGFsLmVtaXQocmVmZXJlbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3RlZEVsZW1lbnRzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5vbkNsZWFyU2VsZWN0ZWRFbGVtZW50cy5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKFxuICAgICAgICBmaWx0ZXJzOiBPYmplY3QsXG4gICAgICAgIHNlYXJjaFR5cGU6IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUgPSBOZ3REYXRhdGFibGVTZWFyY2hUeXBlLkRFRkFVTFQsXG4gICAgICAgIGFwcGx5RGVsYXlPblNlYXJjaDogYm9vbGVhbiA9IHRydWVcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuQXBwbHlGaWx0ZXJzKGZpbHRlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoZmlsdGVycyk7XG5cbiAgICAgICAgICAgIGlmIChzZWFyY2hUeXBlID09IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUuREVGQVVMVCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnMgPSB7IC4uLnRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnMsIC4uLmZpbHRlcnMgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5zaWxlbnRGaWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnMsIC4uLmZpbHRlcnMgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcnNEZXNjcmlwdGlvbigpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseSgxLCBhcHBseURlbGF5T25TZWFyY2gpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNvcnQoZmllbGQ6IGFueSwgZGlyZWN0aW9uOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuc29ydCA9IHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHkodGhpcy5uZ3RQYWdpbmF0aW9uLmdldEN1cnJlbnRQYWdlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWZyZXNoKHN0YXlJblBhZ2U6IE5ndERhdGF0YWJsZVBhcmFtID0gTmd0RGF0YXRhYmxlUGFyYW0uUkVTRVRfUEFHRSwgbG9hZGVyOiBOZ3REYXRhdGFibGVQYXJhbSA9IE5ndERhdGF0YWJsZVBhcmFtLkVOQUJMRV9MT0FERVIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHkoXG4gICAgICAgICAgICBzdGF5SW5QYWdlID8gdGhpcy5uZ3RQYWdpbmF0aW9uLmdldEN1cnJlbnRQYWdlKCkgOiAxLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBsb2FkZXJcbiAgICAgICAgKS50aGVuKCgpID0+ICF0aGlzLmRhdGE/Lmxlbmd0aCA/IHRoaXMuYXBwbHkoMSwgZmFsc2UpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhdGUuc29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGVyUGFnZShwZXJQYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uZ3RQYWdpbmF0aW9uLm9uUmVnaXN0ZXJzUGVyUGFnZUNoYW5nZShwZXJQYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXJzRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5jbGVhbmluZ0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJzVHJhbnNsYXRlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCByZWZlcmVuY2UgaW4gdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNEZXNjcmlwdGlvbltyZWZlcmVuY2VdICYmIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnNbcmVmZXJlbmNlXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNUcmFuc2xhdGVkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVyc1tyZWZlcmVuY2VdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb246IHRoaXMuZmlsdGVyc0Rlc2NyaXB0aW9uW3JlZmVyZW5jZV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpbHRlckRlc2NyaXB0aW9uKHJlZmVyZW5jZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyc0Rlc2NyaXB0aW9uW3JlZmVyZW5jZV0gPSBkZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlRmlsdGVyKHJlZmVyZW5jZT86IHN0cmluZywgcmVmcmVzaDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZSAmJiAhdGhpcy5oYXNBcHBsaWVkRmlsdGVyKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNsZWFuaW5nRmlsdGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLmRlZmF1bHRGaWx0ZXJzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5zaWxlbnRGaWx0ZXJzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzVHJhbnNsYXRlZCA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVyc1tyZWZlcmVuY2VdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnNbcmVmZXJlbmNlXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1RyYW5zbGF0ZWQgPSB0aGlzLmZpbHRlcnNUcmFuc2xhdGVkLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgJiYgZWxlbWVudC5yZWZlcmVuY2UgIT09IHJlZmVyZW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25DbGVhckZpbHRlci5lbWl0KHJlZmVyZW5jZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0U2VhcmNoICYmIChyZWZlcmVuY2UgPT09ICd0ZXJtJyB8fCAhcmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRTZWFyY2guY2xlYXJJbnB1dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVmcmVzaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5KHRoaXMubmd0UGFnaW5hdGlvbi5nZXRDdXJyZW50UGFnZSgpLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhbmluZ0ZpbHRlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNBcHBsaWVkRmlsdGVyKGZpbHRlcjogT2JqZWN0IHwgTmd0Q3VzdG9tRmlsdGVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZTogc3RyaW5nID0gdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgPyBmaWx0ZXIgOiBPYmplY3Qua2V5cyhmaWx0ZXIgPz8ge30pWzBdO1xuICAgICAgICBjb25zdCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMucXVhbGlmaWVkRmlsdGVycztcblxuICAgICAgICByZXR1cm4gISFPYmplY3Qua2V5cyhhcHBsaWVkRmlsdGVycykuZmluZChrZXkgPT4ga2V5ID09IHJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0FwcGxpZWRGaWx0ZXJzKHNlYXJjaFR5cGU6IE5ndERhdGF0YWJsZVNlYXJjaFR5cGUgPSBOZ3REYXRhdGFibGVTZWFyY2hUeXBlLkRFRkFVTFQpIHtcbiAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0ge307XG5cbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT0gTmd0RGF0YXRhYmxlU2VhcmNoVHlwZS5ERUZBVUxUKSB7XG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVycyA9IHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnM7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PSBOZ3REYXRhdGFibGVTZWFyY2hUeXBlLlNJTEVOVCkge1xuICAgICAgICAgICAgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnNpbGVudEZpbHRlcnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5kZWZhdWx0RmlsdGVycywgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5zaWxlbnRGaWx0ZXJzIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKGFwcGxpZWRGaWx0ZXJzKT8uZmluZChmaWx0ZXIgPT4gISFmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlucHV0U2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5pbnB1dFNlYXJjaC5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTZWFyY2hXaXRoSW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IGdldEVudW1Gcm9tU3RyaW5nKGNoYW5nZXMudHlwZS5jdXJyZW50VmFsdWUsIE5ndERhdGF0YWJsZVR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFwcGx5KHBhZ2UgPSAxLCBhcHBseURlbGF5T25TZWFyY2g6IGJvb2xlYW4gPSB0cnVlLCBsb2FkZXI6IE5ndERhdGF0YWJsZVBhcmFtID0gTmd0RGF0YXRhYmxlUGFyYW0uRU5BQkxFX0xPQURFUikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVhZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uZ3RQYWdpbmF0aW9uLmRpc3BsYXlQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gTmd0RGF0YXRhYmxlVHlwZS5SRU1PVEUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kVmlzaWJpbGl0eUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBseURlbGF5T25TZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZERhdGEocGFnZSkudGhlbigoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zZWFyY2hEZWxheSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKHBhZ2UpLnRoZW4oKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBwcm9wZXJ0eSBbcmVtb3RlUmVzb3VyY2VdIG5lZWRzIHRvIGJlIHByZXNlbnQgdG8gYmUgYWJsZSB0byBtYWtlIHJlbW90ZSBzZWFyY2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PSBOZ3REYXRhdGFibGVUeXBlLkZJWEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmlzaWJpbGl0eUF0dHJpYnV0ZXMoKTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRGF0YShwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb246IE5ndEh0dHBQYWdpbmF0aW9uID0geyAuLi50aGlzLm5ndFBhZ2luYXRpb24uZ2V0UGFnaW5hdGlvbigpLCAuLi57IHBhZ2U6IHBhZ2UgfSB9O1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLnF1YWxpZmllZEZpbHRlcnMgPSB0aGlzLmdldFF1YWxpZmllZEZpbHRlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0U2VhcmNoLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEh0dHBTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdGVSZXNvdXJjZSwgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycy5xdWFsaWZpZWRGaWx0ZXJzLCBwYWdpbmF0aW9uLCB0aGlzLmN1cnJlbnRTdGF0ZS5zb3J0XG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2NjZXNzUmVtb3RlUmVzcG9uc2UocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5tZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RQYWdpbmF0aW9uLnByb2NjZXNzUGFnaW5hdGlvbihyZXNwb25zZS5tZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRTZWFyY2guaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZS5lbWl0KHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRWaXNpYmlsaXR5QXR0cmlidXRlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRTZWFyY2guaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRRdWFsaWZpZWRGaWx0ZXJzKCkge1xuICAgICAgICBjb25zdCBxdWFsaWZpZWRGaWx0ZXJzID0ge307XG4gICAgICAgIGNvbnN0IHJlcXVlc3RlZEZpbHRlcnMgPSB7IC4uLnRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnMsIC4uLnRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuc2lsZW50RmlsdGVycyB9O1xuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRGaWx0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBpbiByZXF1ZXN0ZWRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gcmVxdWVzdGVkRmlsdGVyc1tyZWZlcmVuY2VdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZEZpbHRlcihmaWx0ZXIsIHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIE5ndEN1c3RvbUZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci50YWdMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0Rlc2NyaXB0aW9uW3JlZmVyZW5jZV0gPSBmaWx0ZXIudGFnTGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcnNEZXNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRGaWx0ZXJzW3JlZmVyZW5jZV0gPSBmaWx0ZXIudGVybTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZEZpbHRlcnNbcmVmZXJlbmNlXSA9IGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBxdWFsaWZpZWRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZFZpc2liaWxpdHlBdHRyaWJ1dGVzKCkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09IE5ndERhdGF0YWJsZVR5cGUuUkVNT1RFICYmICF0aGlzLmRhdGEubGVuZ3RoICYmICF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlTdGF0ZVZpc2libGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PSBOZ3REYXRhdGFibGVUeXBlLkZJWEVEKSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5U3RhdGVWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5U3RhdGVWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2NjZXNzUmVtb3RlUmVzcG9uc2UocmVzcG9uc2U6IGFueSkge1xuICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2hXaXRoSW5wdXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5pbnB1dFNlYXJjaC5vblZhbHVlQ2hhbmdlKCkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnNbJ3Rlcm0nXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbHRlcigndGVybScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuc2VhcmNoVGVybU1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMuZGVmYXVsdEZpbHRlcnNbJ3Rlcm0nXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiAnJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gdGhpcy5zZWFyY2hUZXJtTWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoKHsgdGVybTogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXJtT25FbnRlcikge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFNlYXJjaC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAxMykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFNlYXJjaC52YWx1ZSAmJiB0aGlzLmlucHV0U2VhcmNoLnZhbHVlLmxlbmd0aCA+PSB0aGlzLnNlYXJjaFRlcm1NaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHkoMSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDaGVja2JveEV2ZW50KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMub25Ub29nbGVDaGVja2JveC5zdWJzY3JpYmUoKGNoZWNrZWRFbGVtZW50OiBOZ3RDaGVja2VkRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBjaGVja2VkRWxlbWVudC5pZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZEVsZW1lbnQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChjaGVja2VkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudHNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RBbGxSZWdpc3RlcnMuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFzU2VsZWN0ZWRBbGxFbGVtZW50cyA9ICF0aGlzLmhhc1NlbGVjdGVkQWxsRWxlbWVudHMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BcHBseUZpbHRlcnMoZmlsdGVyczogT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hpbmcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIGluIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkRmlsdGVyKGZpbHRlcnNbcmVmZXJlbmNlXSwgcmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkRmlsdGVyKGZpbHRlcjogc3RyaW5nIHwgTmd0Q3VzdG9tRmlsdGVyLCByZWZlcmVuY2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYXNWYWx1ZTogYm9vbGVhbiA9ICEhKChmaWx0ZXIgaW5zdGFuY2VvZiBOZ3RDdXN0b21GaWx0ZXIgJiYgZmlsdGVyLnRlcm0pIHx8IGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGlzQXBwbGllZDogYm9vbGVhbiA9IHRoaXMuaGFzQXBwbGllZEZpbHRlcihyZWZlcmVuY2UpO1xuXG4gICAgICAgIHJldHVybiBpc0FwcGxpZWQgfHwgKCFpc0FwcGxpZWQgJiYgaGFzVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gTmd0RGF0YXRhYmxlVHlwZSB7XG4gICAgUkVNT1RFID0gJ1JFTU9URScsXG4gICAgRklYRUQgPSAnRklYRUQnXG59XG5cbmV4cG9ydCBlbnVtIE5ndERhdGF0YWJsZVNlYXJjaFR5cGUge1xuICAgIERFRkFVTFQgPSAnREVGQVVMVCcsXG4gICAgU0lMRU5UID0gJ1NJTEVOVCcsXG59XG5cbmV4cG9ydCBlbnVtIE5ndERhdGF0YWJsZVBhcmFtIHtcbiAgICBTVEFZX0lOX1BBR0UgPSAxLFxuICAgIFJFU0VUX1BBR0UgPSAwLFxuICAgIEVOQUJMRV9MT0FERVIgPSAxLFxuICAgIERJU0FCTEVfTE9BREVSID0gMFxufVxuXG5leHBvcnQgY2xhc3MgTmd0Q2hlY2tlZEVsZW1lbnQge1xuICAgIHB1YmxpYyBpZDogc3RyaW5nO1xuICAgIHB1YmxpYyBjaGVja2VkOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWZlcmVuY2U6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE5ndEN1c3RvbUZpbHRlciB7XG4gICAgcHVibGljIHRlcm06IHN0cmluZztcbiAgICBwdWJsaWMgdGFnVmFsdWU6IHN0cmluZztcbiAgICBwdWJsaWMgdGFnTGFiZWw/OiBzdHJpbmc7XG59XG4iLCI8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIHctZnVsbFwiPlxuICAgICAgICA8bmd0LXRhZyAqbmdJZj1cImhhc0FwcGxpZWRGaWx0ZXJzKClcIiBjbGFzcz1cInctZnVsbCBzbTp3LWF1dG8ge3sgZmlsdGVyVGFnTWFyZ2luIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5zbTptci00XT1cImZpbHRlclRhZ01hcmdpbiA9PSAnbWItNCdcIiBjb2xvci5iZz1cImJnLXJlZC01MDBcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKClcIiBuZ3Qtc3R5bGl6YWJsZT5cbiAgICAgICAgICAgIExpbXBhciBGaWx0cm9zXG4gICAgICAgIDwvbmd0LXRhZz5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXBwbGllZEZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNUcmFuc2xhdGVkXCI+XG4gICAgICAgICAgICAgICAgPG5ndC10YWcgY2xhc3M9XCJ3LWZ1bGwgc206dy1hdXRvIHt7IGZpbHRlclRhZ01hcmdpbiB9fVwiIFtjbGFzcy5zbTptci00XT1cImZpbHRlclRhZ01hcmdpbiA9PSAnbWItNCdcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3IuYmddPVwiZmlsdGVyVGFnQmdDb2xvclwiIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoZmlsdGVyLnJlZmVyZW5jZSlcIiBuZ3Qtc3R5bGl6YWJsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLnRyYW5zbGF0aW9uICsgJzogJyArIChmaWx0ZXI/LnZhbHVlPy50YWdWYWx1ZSA/IGZpbHRlci52YWx1ZS50YWdWYWx1ZSA6IGZpbHRlci52YWx1ZSl9fVxuICAgICAgICAgICAgICAgIDwvbmd0LXRhZz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDx0YWJsZSBzdHlsZT1cImRpc3BsYXk6IHRhYmxlO1wiIGNsYXNzPVwidGV4dC1sZWZ0IHctZnVsbCBib3JkZXItY29sbGFwc2UgdGFibGUtcmVzcG9uc2l2ZVwiICN0YWJsZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvdGFibGU+XG5cbiAgICA8cCAqbmdJZj1cImVtcHR5U3RhdGVWaXNpYmxlXCIgY2xhc3M9XCJtdC04IG14LWF1dG8gc2VsZi1jZW50ZXIgdGV4dC1jZW50ZXIgdGV4dC1zbVwiPlxuICAgICAgICB7eyBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndERhdGF0YWJsZU5vRGF0YUZvdW5kIH19XG4gICAgPC9wPlxuXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBbMSwgMiwgMywgNF1cIiBjbGFzcz1cImZsZXggdy1mdWxsIG10LTNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Db3VudC5sZW5ndGggPj0gMlwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGogb2YgY29sdW1uQ291bnQ7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsIG1yLTEwXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkNvdW50Lmxlbmd0aCA8IDJcIj5cbiAgICAgICAgICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgICAgICAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGwgbXItMTAgbWwtMTBcIj48L25ndC1zaGluaW5nPlxuICAgICAgICAgICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXgge3sgcGFnaW5hdGlvbk1hcmdpbiB9fVwiIFtoaWRkZW5dPSchZGF0YSB8fCBkYXRhLmxlbmd0aCA9PSAwJz5cbiAgICA8bmd0LXBhZ2luYXRpb24gW3BhZ2VzSW50ZXJ2YWxdPSc0JyAob25QYWdlQ2hhbmdlKT0nYXBwbHkoJGV2ZW50LCBmYWxzZSknIChvblBlclBhZ2VDaGFuZ2UpPSdhcHBseSgxLCBmYWxzZSknXG4gICAgICAgICNuZ3RQYWdpbmF0aW9uPlxuICAgIDwvbmd0LXBhZ2luYXRpb24+XG48L2Rpdj5cblxuPG5ndC1tb2RhbCBbY3VzdG9tTGF5b3V0XT0ndHJ1ZScgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiAjc2VhcmNoTW9kYWw+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaE1vZGFsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmd0LW1vZGFsPlxuIl19
|