@testgorilla/tgo-ui 2.26.6 → 2.26.7
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/step/step.component.d.ts +12 -4
- package/components/stepper/stepper.component.d.ts +11 -3
- package/components/universal-skills-report/universal-skills-report.component.d.ts +5 -5
- package/components/universal-skills-spider-charts/universal-skills-spider-charts.component.d.ts +33 -0
- package/components/universal-skills-spider-charts/universal-skills-spider-charts.component.module.d.ts +16 -0
- package/esm2022/assets/i18n/en.json +4 -1
- package/esm2022/components/spider-chart/spider-chart.component.mjs +2 -2
- package/esm2022/components/step/step.component.mjs +51 -11
- package/esm2022/components/stepper/stepper.component.mjs +51 -17
- package/esm2022/components/universal-skills-report/universal-skills-report.component.mjs +17 -66
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.mjs +86 -0
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.module.mjs +52 -0
- package/esm2022/models/universal-skills-report.model.mjs +33 -0
- package/esm2022/public-api.mjs +5 -2
- package/esm2022/services/universal-skills.service.mjs +71 -0
- package/fesm2022/testgorilla-tgo-ui.mjs +280 -72
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/{components/universal-skills-report → models}/universal-skills-report.model.d.ts +7 -0
- package/package.json +1 -1
- package/projects/tgo-canopy-ui/assets/i18n/en.json +4 -1
- package/public-api.d.ts +3 -1
- package/services/universal-skills.service.d.ts +11 -0
- package/esm2022/components/universal-skills-report/universal-skills-report.model.mjs +0 -33
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { EventEmitter, TemplateRef } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, DestroyRef, ElementRef, EventEmitter, TemplateRef } from '@angular/core';
|
|
2
2
|
import { IconName } from '../icon/icon.model';
|
|
3
3
|
import { ApplicationTheme } from '../../models/application-theme.model';
|
|
4
4
|
import { HtmlDescription, StepperPosition } from '../stepper/stepper.model';
|
|
5
|
+
import { FocusMonitor } from "@angular/cdk/a11y";
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class StepComponent {
|
|
7
|
+
export declare class StepComponent implements AfterViewInit {
|
|
7
8
|
private readonly defaultAppTheme;
|
|
9
|
+
private focusMonitor;
|
|
10
|
+
private destroyRef;
|
|
8
11
|
/**
|
|
9
12
|
* Input property for the label of the step.
|
|
10
13
|
*
|
|
@@ -153,9 +156,14 @@ export declare class StepComponent {
|
|
|
153
156
|
* @memberof StepComponent
|
|
154
157
|
*/
|
|
155
158
|
stepSelected: EventEmitter<number>;
|
|
156
|
-
|
|
159
|
+
protected keyboardFocused: import("@angular/core").WritableSignal<boolean>;
|
|
160
|
+
stepElement: ElementRef<HTMLElement>;
|
|
161
|
+
constructor(defaultAppTheme: ApplicationTheme, focusMonitor: FocusMonitor, destroyRef: DestroyRef);
|
|
162
|
+
ngAfterViewInit(): void;
|
|
157
163
|
protected get hasLastStepDefaultIcon(): boolean;
|
|
158
164
|
protected onStepSelected(index: number): void;
|
|
159
|
-
|
|
165
|
+
protected subscriberFocus(): void;
|
|
166
|
+
onKeydown($event: KeyboardEvent): void;
|
|
167
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StepComponent, [{ optional: true; }, null, null]>;
|
|
160
168
|
static ɵcmp: i0.ɵɵComponentDeclaration<StepComponent, "ui-step", never, { "label": { "alias": "label"; "required": false; }; "isVisited": { "alias": "isVisited"; "required": false; }; "submitted": { "alias": "submitted"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "index": { "alias": "index"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "isLast": { "alias": "isLast"; "required": false; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "prevStepIsVisited": { "alias": "prevStepIsVisited"; "required": false; }; "mobileMode": { "alias": "mobileMode"; "required": false; }; "finalIcon": { "alias": "finalIcon"; "required": false; }; "showIconWhenSelected": { "alias": "showIconWhenSelected"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "position": { "alias": "position"; "required": false; }; "htmlDescription": { "alias": "htmlDescription"; "required": false; }; "boldLabel": { "alias": "boldLabel"; "required": false; }; "descriptionTpl": { "alias": "descriptionTpl"; "required": false; }; "labelTooltip": { "alias": "labelTooltip"; "required": false; }; "alwaysShowIcon": { "alias": "alwaysShowIcon"; "required": false; }; "context": { "alias": "context"; "required": false; }; }, { "stepSelected": "stepSelected"; }, never, never, false, never>;
|
|
161
169
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
1
|
+
import { DestroyRef, ElementRef, EventEmitter } from '@angular/core';
|
|
2
2
|
import { Step, StepperPosition } from './stepper.model';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { ApplicationTheme } from "../../models/application-theme.model";
|
|
5
|
+
import { FocusMonitor } from "@angular/cdk/a11y";
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export declare class StepperComponent {
|
|
7
8
|
private readonly defaultAppTheme;
|
|
8
9
|
protected readonly isMobile$: Observable<boolean>;
|
|
10
|
+
protected focusMonitor: FocusMonitor;
|
|
11
|
+
protected destroyRef: DestroyRef;
|
|
9
12
|
/**
|
|
10
13
|
*
|
|
11
14
|
* Auto selects first step as visited
|
|
@@ -77,10 +80,15 @@ export declare class StepperComponent {
|
|
|
77
80
|
protected selectedIndex: number;
|
|
78
81
|
get isOpen(): boolean;
|
|
79
82
|
set isOpen(value: boolean);
|
|
80
|
-
|
|
83
|
+
protected keyboardFocused: import("@angular/core").WritableSignal<boolean>;
|
|
84
|
+
stepperElement: ElementRef<HTMLElement>;
|
|
85
|
+
constructor(defaultAppTheme: ApplicationTheme, isMobile$: Observable<boolean>, focusMonitor: FocusMonitor, destroyRef: DestroyRef);
|
|
86
|
+
ngAfterViewInit(): void;
|
|
81
87
|
protected onSelect(changedIndex: number, step: Step): void;
|
|
82
88
|
protected showStepsToggle(): void;
|
|
83
89
|
protected onCloseStepList(): void;
|
|
84
|
-
|
|
90
|
+
protected subscriberFocus(): void;
|
|
91
|
+
private selectedStepFocus;
|
|
92
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StepperComponent, [{ optional: true; }, null, null, null]>;
|
|
85
93
|
static ɵcmp: i0.ɵɵComponentDeclaration<StepperComponent, "ui-stepper", never, { "setFirstStepAutoSelect": { "alias": "firstStepAutoSelect"; "required": false; }; "steps": { "alias": "steps"; "required": false; }; "setSelectedIndex": { "alias": "selectedIndex"; "required": false; }; "lastStepFinalIcon": { "alias": "lastStepFinalIcon"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "position": { "alias": "position"; "required": false; }; "ariaRequired": { "alias": "ariaRequired"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, false, never>;
|
|
86
94
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
2
|
import { ApplicationTheme } from '../../models/application-theme.model';
|
|
3
3
|
import { RebrandBadgeColor } from '../badge/badge.model';
|
|
4
|
-
import { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes } from '
|
|
4
|
+
import { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes } from '../../models/universal-skills-report.model';
|
|
5
|
+
import { UniversalSkillsService } from '../../services/universal-skills.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export declare class UniversalSkillsReportComponent implements OnInit {
|
|
7
8
|
private readonly defaultAppTheme;
|
|
9
|
+
private universalSkillsService;
|
|
8
10
|
/**
|
|
9
11
|
* Defines the application theme
|
|
10
12
|
* @property applicationTheme
|
|
@@ -21,13 +23,11 @@ export declare class UniversalSkillsReportComponent implements OnInit {
|
|
|
21
23
|
skillAreaDataList: SkillAreaData[];
|
|
22
24
|
readonly translationContext = "UNIVERSAL_SKILLS_REPORT.";
|
|
23
25
|
skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;
|
|
24
|
-
constructor(defaultAppTheme: ApplicationTheme);
|
|
26
|
+
constructor(defaultAppTheme: ApplicationTheme, universalSkillsService: UniversalSkillsService);
|
|
25
27
|
ngOnInit(): void;
|
|
26
28
|
getScoreBadgeLabel(percentileScoring: number): string;
|
|
27
29
|
getScoreBadgeColor(percentileScoring: number): RebrandBadgeColor;
|
|
28
|
-
private initializeSkillAreaGroupMap;
|
|
29
|
-
private prepareSkillAreaGroupMap;
|
|
30
30
|
checkScoreClassification([percentileScoring, isLabelRequest]: [number, boolean]): string | RebrandBadgeColor;
|
|
31
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<UniversalSkillsReportComponent, [{ optional: true; }]>;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UniversalSkillsReportComponent, [{ optional: true; }, null]>;
|
|
32
32
|
static ɵcmp: i0.ɵɵComponentDeclaration<UniversalSkillsReportComponent, "ui-universal-skills-report", never, { "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "skillAreaDataList": { "alias": "skillAreaDataList"; "required": false; }; }, {}, never, never, false, never>;
|
|
33
33
|
}
|
package/components/universal-skills-spider-charts/universal-skills-spider-charts.component.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ApplicationTheme } from '../../models/application-theme.model';
|
|
3
|
+
import { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes, SkillAreaSpiderChartData } from '../../models/universal-skills-report.model';
|
|
4
|
+
import { UniversalSkillsService } from '../../services/universal-skills.service';
|
|
5
|
+
import { UiTranslatePipe } from '../../pipes/ui-translate.pipe';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class UniversalSkillsSpiderChartsComponent implements OnInit {
|
|
8
|
+
private readonly defaultAppTheme;
|
|
9
|
+
private universalSkillsService;
|
|
10
|
+
private uiTranslatePipe;
|
|
11
|
+
/**
|
|
12
|
+
* Defines the application theme
|
|
13
|
+
* @property applicationTheme
|
|
14
|
+
* @type {ApplicationTheme}
|
|
15
|
+
* @memberof UniversalSkillsSpiderChartsComponent
|
|
16
|
+
*/
|
|
17
|
+
applicationTheme: ApplicationTheme;
|
|
18
|
+
/**
|
|
19
|
+
* The list of items to be used
|
|
20
|
+
* @property items
|
|
21
|
+
* @type {SkillAreaData[]}
|
|
22
|
+
* @memberof UniversalSkillsReportComponent
|
|
23
|
+
*/
|
|
24
|
+
skillAreaDataList: SkillAreaData[];
|
|
25
|
+
readonly translationContext = "UNIVERSAL_SKILLS_REPORT.";
|
|
26
|
+
skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;
|
|
27
|
+
skillAreaSpiderChartData: SkillAreaSpiderChartData[];
|
|
28
|
+
constructor(defaultAppTheme: ApplicationTheme, universalSkillsService: UniversalSkillsService, uiTranslatePipe: UiTranslatePipe);
|
|
29
|
+
ngOnInit(): void;
|
|
30
|
+
prepareSpiderChartData(): void;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UniversalSkillsSpiderChartsComponent, [{ optional: true; }, null, null]>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UniversalSkillsSpiderChartsComponent, "ui-universal-skills-spider-charts", never, { "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "skillAreaDataList": { "alias": "skillAreaDataList"; "required": false; }; }, {}, never, never, false, never>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./universal-skills-spider-charts.component";
|
|
3
|
+
import * as i2 from "@angular/common";
|
|
4
|
+
import * as i3 from "../accordion/accordion.component.module";
|
|
5
|
+
import * as i4 from "../badge/badge.component.module";
|
|
6
|
+
import * as i5 from "../progress-bar/progress-bar.component.module";
|
|
7
|
+
import * as i6 from "../spider-chart/spider-chart.module";
|
|
8
|
+
import * as i7 from "../divider/divider.component.module";
|
|
9
|
+
import * as i8 from "../../pipes/memoize-func.pipe";
|
|
10
|
+
import * as i9 from "../../pipes/ui-translate.pipe";
|
|
11
|
+
import * as i10 from "../../pipes/ui-ordinal-suffix.pipe";
|
|
12
|
+
export declare class UniversalSkillsSpiderChartsComponentModule {
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UniversalSkillsSpiderChartsComponentModule, never>;
|
|
14
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UniversalSkillsSpiderChartsComponentModule, [typeof i1.UniversalSkillsSpiderChartsComponent], [typeof i2.CommonModule, typeof i3.AccordionComponentModule, typeof i4.BadgeComponentModule, typeof i5.ProgressBarComponentModule, typeof i6.SpiderChartComponentModule, typeof i7.DividerComponentModule, typeof i8.MemoizeFuncPipe, typeof i9.UiTranslatePipe, typeof i10.OrdinalSuffixPipe, typeof i2.KeyValuePipe], [typeof i1.UniversalSkillsSpiderChartsComponent]>;
|
|
15
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<UniversalSkillsSpiderChartsComponentModule>;
|
|
16
|
+
}
|
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
"MAX_SELECTED_ERROR": "You’ve reached the maximum of ({{max}}) tags. Remove a tag to add another."
|
|
12
12
|
},
|
|
13
13
|
"STEPPER": {
|
|
14
|
-
"FINAL_STEP": "Final step"
|
|
14
|
+
"FINAL_STEP": "Final step",
|
|
15
|
+
"COMPLETED": "Completed",
|
|
16
|
+
"INCOMPLETE": "Incomplete",
|
|
17
|
+
"SELECTED_OF": "Selected ({{selected}} of {{total}}) current step"
|
|
15
18
|
},
|
|
16
19
|
"SLIDER": {
|
|
17
20
|
"MAX_LESS_THAN_MIN": "Max value ({{max}}) cannot be less then current min value ({{min}})",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
2
|
import { LargeSpiderChartSize, SmallSpiderChartSize } from './spider-chart.model';
|
|
3
|
-
import { Color } from '
|
|
3
|
+
import { Color } from '../../models/colors.model';
|
|
4
4
|
import { BaseChartDirective } from 'ng2-charts';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
@@ -422,4 +422,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
422
422
|
type: ViewChildren,
|
|
423
423
|
args: ['legendItem']
|
|
424
424
|
}] } });
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBR3BILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFTaEQsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1FOzs7O1dBSUc7UUFDTSxTQUFJLEdBQW9CLE9BQU8sQ0FBQztRQVN6Qzs7OztXQUlHO1FBQ00sYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUUvQjs7OztXQUlHO1FBQ00sY0FBUyxHQUFXLHVEQUF1RCxDQUFDO1FBRXJGOzs7O1dBSUc7UUFDTSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLHFCQUFnQixHQUFxQixPQUFPLENBQUM7UUFRdEQsbUJBQWMsR0FBdUI7WUFDbkMsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixtQkFBYyxHQUFnRCxFQUFFLENBQUM7UUFDakUsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5Qiw4QkFBeUIsR0FB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QUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUMzQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7K0dBMVpVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9RQTZDcEIsa0JBQWtCLG9aQ3JFL0IsZzBIQXFGQTs7NEZEN0RhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7OEJBVWxCLElBQUk7c0JBQVosS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUV5QixLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRyxlQUFlO3NCQUE5QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDRSxjQUFjO3NCQUE3QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDVyx1QkFBdUI7c0JBQS9ELFlBQVk7dUJBQUMseUJBQXlCO2dCQUNYLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSwgU21hbGxTcGlkZXJDaGFydFNpemUsIFNwaWRlckNoYXJ0RGF0YSwgU3BpZGVyQ2hhcnRTaXplIH0gZnJvbSAnLi9zcGlkZXItY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi10aGVtZS5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydCwgQ2hhcnREYXRhLCBDaGFydE9wdGlvbnMgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4vLi4vLi4vbW9kZWxzL2NvbG9ycy5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2hhcnREaXJlY3RpdmUgfSBmcm9tICduZzItY2hhcnRzJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvY2FsaXphdGlvbi9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9jYWxpemF0aW9uL2xhbmd1YWdlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktc3BpZGVyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwaWRlci1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwaWRlci1jaGFydC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTcGlkZXJDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7U3BpZGVyQ2hhcnRTaXplfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IFNwaWRlckNoYXJ0U2l6ZSA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtTcGlkZXJDaGFydERhdGF9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc3BpZGVyQ2hhcnREYXRhOiBTcGlkZXJDaGFydERhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwIHNpemUgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc3RlcFNpemU6IG51bWJlciA9IDIwO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhlIHNwaWRlciBjaGFydC5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICdSYWRhciBjaGFydC4gUHJlc3MgdGFiIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIGNoYXJ0Lic7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNwaWRlciBjaGFydCBpcyBsb2FkaW5nLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqXG4gICAqIERlZmluZXMgdGhlIGFwcGxpY2F0aW9uIHRoZW1lXG4gICAqXG4gICAqIEB0eXBlIHtBcHBsaWNhdGlvblRoZW1lfVxuICAgKiBAbWVtYmVyb2YgU3Bpbm5lckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgQFZpZXdDaGlsZChCYXNlQ2hhcnREaXJlY3RpdmUpIGNoYXJ0OiBCYXNlQ2hhcnREaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGRyZW4oJ2xhYmVsQ29udGFpbmVyJykgbGFiZWxDb250YWluZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Zha2VEYXRhUG9pbnRzJykgZmFrZURhdGFQb2ludHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignZmFrZURhdGFQb2ludHNTZWNvbmRhcnknKSBmYWtlRGF0YVBvaW50c1NlY29uZGFyeTogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdsZWdlbmRJdGVtJykgbGVnZW5kSXRlbXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICByYWRhckNoYXJ0RGF0YTogQ2hhcnREYXRhPCdyYWRhcic+ID0ge1xuICAgIGxhYmVsczogW10sXG4gICAgZGF0YXNldHM6IFtdLFxuICB9O1xuICByYWRhckNoYXJ0T3B0aW9uczogQ2hhcnRPcHRpb25zPCdyYWRhcic+O1xuICBsYWJlbFBvc2l0aW9uczogeyBba2V5OiBzdHJpbmddOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfSA9IHt9O1xuICBsYWJlbFBvc2l0aW9uc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9jdXNlZExhYmVsSW5kZXg6IG51bWJlciA9IDA7XG4gIGZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXg6IG51bWJlciA9IDA7XG4gIGxvYWRpbmdDaGFydERhdGE6IENoYXJ0RGF0YTwncmFkYXInPiA9IHtcbiAgICBsYWJlbHM6IFsxLCAyLCAzLCA0LCA1LCA2XSxcbiAgICBkYXRhc2V0czogW10sXG4gIH07XG4gIGxvYWRpbmdDaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uczwncmFkYXInPiA9IHtcbiAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgIGxheW91dDoge1xuICAgICAgcGFkZGluZzoge1xuICAgICAgICBsZWZ0OiA0MCxcbiAgICAgICAgcmlnaHQ6IDQwLFxuICAgICAgICB0b3A6IDQwLFxuICAgICAgICBib3R0b206IDQwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNjYWxlczoge1xuICAgICAgcjoge1xuICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICBjb2xvcjogQ29sb3IuR1JBWVNDQUxFXzMwLFxuICAgICAgICB9LFxuICAgICAgICBncmlkOiB7XG4gICAgICAgICAgY29sb3I6ICgpID0+IENvbG9yLkdSQVlTQ0FMRV8zMCxcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3VnZ2VzdGVkTWluOiAwLFxuICAgICAgICBzdWdnZXN0ZWRNYXg6IDEwMCxcbiAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICBzdGVwU2l6ZTogdGhpcy5zdGVwU2l6ZSxcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQ29udGV4dCA9ICdDSEFSVFMuU1BJREVSLic7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRFcnJvcnMoKTtcbiAgICAgIHRoaXMuc2V0Q2hhcnREYXRhKCk7XG4gICAgICB0aGlzLnNldENoYXJ0T3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5wdXRFcnJvcnMoKSB7XG4gICAgaWYgKCF0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMgfHwgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsYWJlbHNcIiBpbnB1dCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24gfHwgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxEZXNjcmlwdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGFiZWxEZXNjcmlwdGlvblwiIGlucHV0IGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24gJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24ubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImxhYmVsRGVzY3JpcHRpb25cIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YWJhc2VMYWJlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhYmFzZUxhYmVsXCIgaW5wdXQgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YSB8fCB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcInBsb3REYXRhLmRhdGFcIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcInBsb3REYXRhLmRhdGFcIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGFydERhdGEoKSB7XG4gICAgY29uc3QgZGF0YXNldHMgPSBbXTtcbiAgICBkYXRhc2V0cy5wdXNoKHtcbiAgICAgIGxhYmVsOiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhYmFzZUxhYmVsLFxuICAgICAgZGF0YTogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YSxcbiAgICAgIGZpbGw6IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDIxMiwgMTYsIDE3MCwgMC4yKScsXG4gICAgICBib3JkZXJDb2xvcjogQ29sb3IuQlJBTkRfNTAsXG4gICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogQ29sb3IuQlJBTkRfNTAsXG4gICAgICBwb2ludEJvcmRlckNvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICBwb2ludEhvdmVyQm9yZGVyQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YS5sZW5ndGggPT09IDIpIHtcbiAgICAgIGRhdGFzZXRzLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMV0uZGF0YWJhc2VMYWJlbCxcbiAgICAgICAgZGF0YTogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMV0uZGF0YSxcbiAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgIGJvcmRlckNvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgICAgYm9yZGVyRGFzaDogWzUsIDVdLFxuICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLkJMQUNLLFxuICAgICAgICBwb2ludEJvcmRlckNvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIHBvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLlRHT19XSElURSxcbiAgICAgICAgcG9pbnRIb3ZlckJvcmRlckNvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJhZGFyQ2hhcnREYXRhID0ge1xuICAgICAgbGFiZWxzOiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMsXG4gICAgICBkYXRhc2V0czogZGF0YXNldHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnRPcHRpb25zKCkge1xuICAgIHRoaXMucmFkYXJDaGFydE9wdGlvbnMgPSB7XG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgbGluZToge1xuICAgICAgICAgIGJvcmRlcldpZHRoOiAzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgbGVmdDogNDAsXG4gICAgICAgICAgcmlnaHQ6IDQwLFxuICAgICAgICAgIHRvcDogNDAsXG4gICAgICAgICAgYm90dG9tOiA0MCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgcjoge1xuICAgICAgICAgIGFuZ2xlTGluZXM6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBjb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICAgICAgfSxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBjb2xvcjogY29udGV4dCA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpY2sudmFsdWUgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBDb2xvci5CTEFDSztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gQ29sb3IuR1JBWVNDQUxFXzMwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgICAgZmFtaWx5OiAnQXJpYWwnLFxuICAgICAgICAgICAgICBzaXplOiAxNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1Z2dlc3RlZE1pbjogMCxcbiAgICAgICAgICBzdWdnZXN0ZWRNYXg6IDEwMCxcbiAgICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgc3RlcFNpemU6IHRoaXMuc3RlcFNpemUsXG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnQ/LmNoYXJ0ICYmICF0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9nQ29ybmVyQ29vcmRpbmF0ZXModGhpcy5jaGFydC5jaGFydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2dDb3JuZXJDb29yZGluYXRlcyhjaGFydDogQ2hhcnQpIHtcbiAgICBjb25zdCBzY2FsZSA9IGNoYXJ0LnNjYWxlc1snciddIGFzIGFueTtcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJyA/IExhcmdlU3BpZGVyQ2hhcnRTaXplIDogU21hbGxTcGlkZXJDaGFydFNpemU7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5zaXplID09PSAnbGFyZ2UnID8gTGFyZ2VTcGlkZXJDaGFydFNpemUgOiBTbWFsbFNwaWRlckNoYXJ0U2l6ZTtcblxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbGFiZWxzIGFuZCBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgY29vcmRpbmF0ZXNcbiAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMuZm9yRWFjaCgobGFiZWwsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShpbmRleCwgc2NhbGUubWF4KTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBjYW52YXMgc2l6ZVxuICAgICAgY29uc3QgeFBlcmNlbnQgPSAocG9zaXRpb24ueCAvIGNhbnZhc1dpZHRoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHlQZXJjZW50ID0gKChjYW52YXNIZWlnaHQgLSBwb3NpdGlvbi55KSAvIGNhbnZhc0hlaWdodCkgKiAxMDA7IC8vIEludmVydGluZyB0aGUgWS1heGlzXG5cbiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdID0geyB4OiBOdW1iZXIoeFBlcmNlbnQudG9GaXhlZCgyKSksIHk6IE51bWJlcih5UGVyY2VudC50b0ZpeGVkKDIpKSB9O1xuICAgIH0pO1xuICAgIHRoaXMubGFiZWxQb3NpdGlvbnNWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGdldENlbnRlcmVkTGFiZWxCb3R0b21Qb3NpdGlvbihsYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5sYWJlbFBvc2l0aW9uc1tsYWJlbF07XG4gICAgY29uc3QgcGFkZGluZyA9IDc7XG4gICAgaWYgKHBvc2l0aW9uLnggPiA1MCB8fCBwb3NpdGlvbi54IDwgNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnl9JSAtICR7aGVpZ2h0IC8gMn1weClgO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24ueSA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgLSAke2hlaWdodH1weCAtICR7cGFkZGluZ31weClgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgKyAke3BhZGRpbmd9cHgpYDtcbiAgICB9XG4gIH1cblxuICBnZXRDZW50ZXJlZExhYmVsTGVmdFBvc2l0aW9uKGxhYmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAxNTtcbiAgICBpZiAocG9zaXRpb24ueCA9PT0gNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSAtICR7d2lkdGggLyAyfXB4KWA7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbi54IDwgNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSAtICR7d2lkdGh9cHggLSAke3BhZGRpbmd9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueH0lICsgJHtwYWRkaW5nfXB4KWA7XG4gICAgfVxuICB9XG5cbiAgb25MYWJlbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5mb2N1c05leHRMYWJlbChpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNMYWJlbChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyAxO1xuICAgIGlmIChuZXh0SW5kZXggPCB0aGlzLmxhYmVsQ29udGFpbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuZm9jdXNlZExhYmVsSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGluZGV4IC0gMTtcbiAgICBpZiAocHJldmlvdXNJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbENvbnRhaW5lcnMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzZWRMYWJlbEluZGV4ID0gcHJldmlvdXNJbmRleDtcbiAgfVxuXG4gIG9uTGVnZW5kSXRlbUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICB0aGlzLnRvZ2dsZURhdGFzZXRWaXNpYmlsaXR5KGluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0TGVnZW5kSXRlbShpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNMZWdlbmRJdGVtKGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dExlZ2VuZEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5sZWdlbmRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZ2V0KG5leHRJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNQcmV2aW91c0xlZ2VuZEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbmRleCAtIDE7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5sYXN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25GYWtlRGF0YVBvaW50c0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5mb2N1c05leHRGYWtlRGF0YVBvaW50KGluZGV4LCBpc1NlY29uZGFyeSk7XG4gICAgICB0aGlzLnNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4ICsgMSA+IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPyAwIDogaW5kZXggKyAxLCBpc1NlY29uZGFyeSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNGYWtlRGF0YVBvaW50KGluZGV4LCBpc1NlY29uZGFyeSk7XG4gICAgICB0aGlzLnNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4IC0gMSA8IDAgPyB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoIC0gMSA6IGluZGV4IC0gMSwgaXNTZWNvbmRhcnkpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dEZha2VEYXRhUG9pbnQoaW5kZXg6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5mYWtlRGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IG5leHRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNGYWtlRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuICAgIGlmIChwcmV2aW91c0luZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmdldChwcmV2aW91c0luZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5sYXN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoaW5kZXg6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGNoYXJ0SW5zdGFuY2UgPSB0aGlzLmNoYXJ0Py5jaGFydDtcbiAgICBpZiAoIWNoYXJ0SW5zdGFuY2UpIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gW3sgZGF0YXNldEluZGV4OiBpc1NlY29uZGFyeSA/IDEgOiAwLCBpbmRleCB9XTtcbiAgICBjb25zdCBtZXRhID0gY2hhcnRJbnN0YW5jZS5nZXREYXRhc2V0TWV0YShpc1NlY29uZGFyeSA/IDEgOiAwKTtcbiAgICBjb25zdCBkYXRhUG9pbnQgPSBtZXRhLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGV2ZW50UG9zaXRpb24gPSB7XG4gICAgICB4OiBkYXRhUG9pbnQueCxcbiAgICAgIHk6IGRhdGFQb2ludC55LFxuICAgIH07XG4gICAgaWYgKCFpc1NlY29uZGFyeSkge1xuICAgICAgdGhpcy5mb2N1c2VkRmFrZURhdGFQb2ludEluZGV4ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgY2hhcnRJbnN0YW5jZS50b29sdGlwPy5zZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50LCBldmVudFBvc2l0aW9uKTtcblxuICAgIGNoYXJ0SW5zdGFuY2UudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWN0aXZlRWxlbWVudCgpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciB0aGUgYWN0aXZlIGVsZW1lbnRzIHRvIGhpZGUgdGhlIHRvb2x0aXBcbiAgICBjaGFydEluc3RhbmNlLnRvb2x0aXA/LnNldEFjdGl2ZUVsZW1lbnRzKFtdLCB7IHg6IDAsIHk6IDAgfSk7XG5cbiAgICBjaGFydEluc3RhbmNlLnVwZGF0ZSgpO1xuICB9XG5cbiAgdG9nZ2xlRGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gY2hhcnRJbnN0YW5jZS5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgZGF0YXNldC5oaWRkZW4gPSAhZGF0YXNldC5oaWRkZW47XG4gICAgY2hhcnRJbnN0YW5jZS51cGRhdGUoKTtcbiAgfVxuXG4gIGlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG4gICAgcmV0dXJuICFjaGFydEluc3RhbmNlLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5oaWRkZW47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiPlxuICA8ZGl2IGNsYXNzPVwic3BhY2luZy1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsnc21hbGwtc3BhY2luZyc6IHJhZGFyQ2hhcnREYXRhLmxhYmVscyAmJiByYWRhckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoICUgMiA9PT0gMSAmJiAhbG9hZGluZ31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJzaXplID09PSAnbGFyZ2UnID8gJzI4MHB4JyA6ICcyMDBweCdcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplID09PSAnbGFyZ2UnID8gJzI4MHB4JyA6ICcyMDBweCdcIj5cbiAgICAgIEBpZiAoIWxvYWRpbmcpIHtcbiAgICAgICAgPGNhbnZhc1xuICAgICAgICAgIGJhc2VDaGFydFxuICAgICAgICAgIFtkYXRhXT1cInJhZGFyQ2hhcnREYXRhXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJyYWRhckNoYXJ0T3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cInJhZGFyXCJcbiAgICAgICAgICBjbGFzcz1cImNoYXJ0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2NhbnZhcz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y2FudmFzXG4gICAgICAgICAgYmFzZUNoYXJ0XG4gICAgICAgICAgW2RhdGFdPVwibG9hZGluZ0NoYXJ0RGF0YVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibG9hZGluZ0NoYXJ0T3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cInJhZGFyXCJcbiAgICAgICAgICBjbGFzcz1cImNoYXJ0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2NhbnZhcz5cbiAgICAgICAgPHVpLXNwaW5uZXI+PC91aS1zcGlubmVyPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGxhYmVsUG9zaXRpb25zVmlzaWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAobGFiZWwgb2Ygc3BpZGVyQ2hhcnREYXRhLmxhYmVsczsgdHJhY2sgbGFiZWwpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIiAjbGFiZWxDb250YWluZXJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibGFiZWwgKyAnOiAnICsgc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb25bJGluZGV4XVwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCIkaW5kZXggPT09IDAgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25MYWJlbEtleURvd24oJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCArICc6ICcgKyBzcGlkZXJDaGFydERhdGEubGFiZWxEZXNjcmlwdGlvblskaW5kZXhdXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiZ2V0Q2VudGVyZWRMYWJlbExlZnRQb3NpdGlvbihsYWJlbCwgbGFiZWxDb250YWluZXIub2Zmc2V0V2lkdGgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbV09XCJnZXRDZW50ZXJlZExhYmVsQm90dG9tUG9zaXRpb24obGFiZWwsIGxhYmVsQ29udGFpbmVyLm9mZnNldEhlaWdodClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgI2xhYmVsRWxlbWVudCBbc3R5bGUubWF4LXdpZHRoXT1cInNpemUgPT09ICdsYXJnZScgPyAnMTUwcHgnIDogJzEwMHB4J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnR3by1saW5lc109XCJsYWJlbC5sZW5ndGggPiAyMCAmJiBzaXplID09PSAnbGFyZ2UnICYmIHNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoIDwgOVwiPlxuICAgICAgICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGFbJGluZGV4XSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYWtlLWRhdGEtcG9pbnRzXCIgI2Zha2VEYXRhUG9pbnRzXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJmb2N1c2VkTGFiZWxJbmRleCA9PT0gJGluZGV4ID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRMYWJlbEluZGV4ID8gc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoJGluZGV4KSA6IG51bGxcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkZha2VEYXRhUG9pbnRzS2V5RG93bigkZXZlbnQsICRpbmRleClcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAocmFkYXJDaGFydERhdGEuZGF0YXNldHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZha2UtZGF0YS1wb2ludHMtc2Vjb25kYXJ5XCIgI2Zha2VEYXRhUG9pbnRzU2Vjb25kYXJ5XG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPT09ICRpbmRleCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPyBzaG93VG9vbHRpcEZvckRhdGFQb2ludCgkaW5kZXgsIHRydWUpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25GYWtlRGF0YVBvaW50c0tleURvd24oJGV2ZW50LCAkaW5kZXgsIHRydWUpXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmIChyYWRhckNoYXJ0RGF0YS5kYXRhc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGRhdGFzZXQgb2YgcmFkYXJDaGFydERhdGEuZGF0YXNldHM7IHRyYWNrIGRhdGFzZXQubGFiZWwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGF0YXNldFZpc2liaWxpdHkoJGluZGV4KVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cIiRpbmRleCA9PT0gMCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJpc0RhdGFzZXRWaXNpYmxlKCRpbmRleCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID9cbiAgICAgICAgICAoKHRyYW5zbGF0aW9uQ29udGV4dCArICdEQVRBU0VUX1ZJU0lCTEUnKSB8IHVpVHJhbnNsYXRlIDogeyBkYXRhc2V0OiBkYXRhc2V0LmxhYmVsIH0gfCBhc3luYykgOlxuICAgICAgICAgICgodHJhbnNsYXRpb25Db250ZXh0ICsgJ0RBVEFTRVRfSElEREVOJykgfCB1aVRyYW5zbGF0ZSA6IHsgZGF0YXNldDogZGF0YXNldC5sYWJlbCB9IHwgYXN5bmMpXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbkxlZ2VuZEl0ZW1LZXlEb3duKCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgI2xlZ2VuZEl0ZW0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGluZVwiIFtuZ0NsYXNzXT1cInsnc29saWQtbGluZSc6ICRpbmRleCA9PT0gMCwgJ2Rhc2hlZC1saW5lJzogJGluZGV4ID09PSAxfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1sYWJlbFwiIFtzdHlsZS50ZXh0LWRlY29yYXRpb25dPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID8gJ25vbmUnIDogJ2xpbmUtdGhyb3VnaCdcIj5cbiAgICAgICAgICAgIHt7IGRhdGFzZXQubGFiZWwgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuIl19
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUdMLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBR3BILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFPaEQsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1FOzs7O1dBSUc7UUFDTSxTQUFJLEdBQW9CLE9BQU8sQ0FBQztRQVN6Qzs7OztXQUlHO1FBQ00sYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUUvQjs7OztXQUlHO1FBQ00sY0FBUyxHQUFXLHVEQUF1RCxDQUFDO1FBRXJGOzs7O1dBSUc7UUFDTSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLHFCQUFnQixHQUFxQixPQUFPLENBQUM7UUFRdEQsbUJBQWMsR0FBdUI7WUFDbkMsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixtQkFBYyxHQUFnRCxFQUFFLENBQUM7UUFDakUsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5Qiw4QkFBeUIsR0FB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QUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUMzQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7K0dBMVpVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9RQTZDcEIsa0JBQWtCLG9aQ2pFL0IsZzBIQXFGQTs7NEZEakVhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7OEJBVWxCLElBQUk7c0JBQVosS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUV5QixLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRyxlQUFlO3NCQUE5QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDRSxjQUFjO3NCQUE3QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDVyx1QkFBdUI7c0JBQS9ELFlBQVk7dUJBQUMseUJBQXlCO2dCQUNYLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSwgU21hbGxTcGlkZXJDaGFydFNpemUsIFNwaWRlckNoYXJ0RGF0YSwgU3BpZGVyQ2hhcnRTaXplIH0gZnJvbSAnLi9zcGlkZXItY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi10aGVtZS5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydCwgQ2hhcnREYXRhLCBDaGFydE9wdGlvbnMgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uLy4uL21vZGVscy9jb2xvcnMubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLXNwaWRlci1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGlkZXItY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zcGlkZXItY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3BpZGVyQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIHNwaWRlciBjaGFydC5cbiAgICogQHR5cGUge1NwaWRlckNoYXJ0U2l6ZX1cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzaXplOiBTcGlkZXJDaGFydFNpemUgPSAnbGFyZ2UnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7U3BpZGVyQ2hhcnREYXRhfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHNwaWRlckNoYXJ0RGF0YTogU3BpZGVyQ2hhcnREYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCBzaXplIGZvciB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHN0ZXBTaXplOiBudW1iZXIgPSAyMDtcblxuICAvKipcbiAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgPSAnUmFkYXIgY2hhcnQuIFByZXNzIHRhYiB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBjaGFydC4nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzcGlkZXIgY2hhcnQgaXMgbG9hZGluZy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKlxuICAgKiBEZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiB0aGVtZVxuICAgKlxuICAgKiBAdHlwZSB7QXBwbGljYXRpb25UaGVtZX1cbiAgICogQG1lbWJlcm9mIFNwaW5uZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUgPSAnbGlnaHQnO1xuXG4gIEBWaWV3Q2hpbGQoQmFzZUNoYXJ0RGlyZWN0aXZlKSBjaGFydDogQmFzZUNoYXJ0RGlyZWN0aXZlO1xuICBAVmlld0NoaWxkcmVuKCdsYWJlbENvbnRhaW5lcicpIGxhYmVsQ29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdmYWtlRGF0YVBvaW50cycpIGZha2VEYXRhUG9pbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Zha2VEYXRhUG9pbnRzU2Vjb25kYXJ5JykgZmFrZURhdGFQb2ludHNTZWNvbmRhcnk6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignbGVnZW5kSXRlbScpIGxlZ2VuZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgcmFkYXJDaGFydERhdGE6IENoYXJ0RGF0YTwncmFkYXInPiA9IHtcbiAgICBsYWJlbHM6IFtdLFxuICAgIGRhdGFzZXRzOiBbXSxcbiAgfTtcbiAgcmFkYXJDaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uczwncmFkYXInPjtcbiAgbGFiZWxQb3NpdGlvbnM6IHsgW2tleTogc3RyaW5nXTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0gPSB7fTtcbiAgbGFiZWxQb3NpdGlvbnNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGZvY3VzZWRMYWJlbEluZGV4OiBudW1iZXIgPSAwO1xuICBmb2N1c2VkRmFrZURhdGFQb2ludEluZGV4OiBudW1iZXIgPSAwO1xuICBsb2FkaW5nQ2hhcnREYXRhOiBDaGFydERhdGE8J3JhZGFyJz4gPSB7XG4gICAgbGFiZWxzOiBbMSwgMiwgMywgNCwgNSwgNl0sXG4gICAgZGF0YXNldHM6IFtdLFxuICB9O1xuICBsb2FkaW5nQ2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbnM8J3JhZGFyJz4gPSB7XG4gICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgbGVmdDogNDAsXG4gICAgICAgIHJpZ2h0OiA0MCxcbiAgICAgICAgdG9wOiA0MCxcbiAgICAgICAgYm90dG9tOiA0MCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzY2FsZXM6IHtcbiAgICAgIHI6IHtcbiAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgY29sb3I6IENvbG9yLkdSQVlTQ0FMRV8zMCxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgIGNvbG9yOiAoKSA9PiBDb2xvci5HUkFZU0NBTEVfMzAsXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHN1Z2dlc3RlZE1pbjogMCxcbiAgICAgICAgc3VnZ2VzdGVkTWF4OiAxMDAsXG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgc3RlcFNpemU6IHRoaXMuc3RlcFNpemUsXG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkNvbnRleHQgPSAnQ0hBUlRTLlNQSURFUi4nO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmhhbmRsZUlucHV0RXJyb3JzKCk7XG4gICAgICB0aGlzLnNldENoYXJ0RGF0YSgpO1xuICAgICAgdGhpcy5zZXRDaGFydE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXJyb3JzKCkge1xuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzIHx8IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGFiZWxzXCIgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uIHx8IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImxhYmVsRGVzY3JpcHRpb25cIiBpbnB1dCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsYWJlbERlc2NyaXB0aW9uXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGFiYXNlTGFiZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwicGxvdERhdGEuZGF0YWJhc2VMYWJlbFwiIGlucHV0IGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEgfHwgdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwicGxvdERhdGEuZGF0YVwiIGlucHV0IGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YS5sZW5ndGggPT09IDIgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVsxXS5kYXRhICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVsxXS5kYXRhLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnREYXRhKCkge1xuICAgIGNvbnN0IGRhdGFzZXRzID0gW107XG4gICAgZGF0YXNldHMucHVzaCh7XG4gICAgICBsYWJlbDogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YWJhc2VMYWJlbCxcbiAgICAgIGRhdGE6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEsXG4gICAgICBmaWxsOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyMTIsIDE2LCAxNzAsIDAuMiknLFxuICAgICAgYm9yZGVyQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgICAgcG9pbnRCb3JkZXJDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgcG9pbnRIb3ZlckJhY2tncm91bmRDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgcG9pbnRIb3ZlckJvcmRlckNvbG9yOiBDb2xvci5CUkFORF81MCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGEubGVuZ3RoID09PSAyKSB7XG4gICAgICBkYXRhc2V0cy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGFiYXNlTGFiZWwsXG4gICAgICAgIGRhdGE6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICBib3JkZXJDb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICAgIGJvcmRlckRhc2g6IFs1LCA1XSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIHBvaW50QmFja2dyb3VuZENvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIHBvaW50SG92ZXJCb3JkZXJDb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5yYWRhckNoYXJ0RGF0YSA9IHtcbiAgICAgIGxhYmVsczogdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLFxuICAgICAgZGF0YXNldHM6IGRhdGFzZXRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldENoYXJ0T3B0aW9ucygpIHtcbiAgICB0aGlzLnJhZGFyQ2hhcnRPcHRpb25zID0ge1xuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIGxpbmU6IHtcbiAgICAgICAgICBib3JkZXJXaWR0aDogMyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgIGxlZnQ6IDQwLFxuICAgICAgICAgIHJpZ2h0OiA0MCxcbiAgICAgICAgICB0b3A6IDQwLFxuICAgICAgICAgIGJvdHRvbTogNDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NhbGVzOiB7XG4gICAgICAgIHI6IHtcbiAgICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgY29sb3I6IENvbG9yLkJMQUNLLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgY29sb3I6IGNvbnRleHQgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udGV4dC50aWNrLnZhbHVlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IuQkxBQ0s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIENvbG9yLkdSQVlTQ0FMRV8zMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb2ludExhYmVsczoge1xuICAgICAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgIGZhbWlseTogJ0FyaWFsJyxcbiAgICAgICAgICAgICAgc2l6ZTogMTQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWdnZXN0ZWRNaW46IDAsXG4gICAgICAgICAgc3VnZ2VzdGVkTWF4OiAxMDAsXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIHN0ZXBTaXplOiB0aGlzLnN0ZXBTaXplLFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXJ0Py5jaGFydCAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvZ0Nvcm5lckNvb3JkaW5hdGVzKHRoaXMuY2hhcnQuY2hhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nQ29ybmVyQ29vcmRpbmF0ZXMoY2hhcnQ6IENoYXJ0KSB7XG4gICAgY29uc3Qgc2NhbGUgPSBjaGFydC5zY2FsZXNbJ3InXSBhcyBhbnk7XG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLnNpemUgPT09ICdsYXJnZScgPyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSA6IFNtYWxsU3BpZGVyQ2hhcnRTaXplO1xuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJyA/IExhcmdlU3BpZGVyQ2hhcnRTaXplIDogU21hbGxTcGlkZXJDaGFydFNpemU7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGxhYmVscyBhbmQgY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIGNvb3JkaW5hdGVzXG4gICAgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmZvckVhY2goKGxhYmVsLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXgsIHNjYWxlLm1heCk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwZXJjZW50YWdlIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgY2FudmFzIHNpemVcbiAgICAgIGNvbnN0IHhQZXJjZW50ID0gKHBvc2l0aW9uLnggLyBjYW52YXNXaWR0aCkgKiAxMDA7XG4gICAgICBjb25zdCB5UGVyY2VudCA9ICgoY2FudmFzSGVpZ2h0IC0gcG9zaXRpb24ueSkgLyBjYW52YXNIZWlnaHQpICogMTAwOyAvLyBJbnZlcnRpbmcgdGhlIFktYXhpc1xuXG4gICAgICB0aGlzLmxhYmVsUG9zaXRpb25zW2xhYmVsXSA9IHsgeDogTnVtYmVyKHhQZXJjZW50LnRvRml4ZWQoMikpLCB5OiBOdW1iZXIoeVBlcmNlbnQudG9GaXhlZCgyKSkgfTtcbiAgICB9KTtcbiAgICB0aGlzLmxhYmVsUG9zaXRpb25zVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBnZXRDZW50ZXJlZExhYmVsQm90dG9tUG9zaXRpb24obGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSA3O1xuICAgIGlmIChwb3NpdGlvbi54ID4gNTAgfHwgcG9zaXRpb24ueCA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgLSAke2hlaWdodCAvIDJ9cHgpYDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uLnkgPCA1MCkge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueX0lIC0gJHtoZWlnaHR9cHggLSAke3BhZGRpbmd9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueX0lICsgJHtwYWRkaW5nfXB4KWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VudGVyZWRMYWJlbExlZnRQb3NpdGlvbihsYWJlbDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmxhYmVsUG9zaXRpb25zW2xhYmVsXTtcbiAgICBjb25zdCBwYWRkaW5nID0gMTU7XG4gICAgaWYgKHBvc2l0aW9uLnggPT09IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi54fSUgLSAke3dpZHRoIC8gMn1weClgO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24ueCA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi54fSUgLSAke3dpZHRofXB4IC0gJHtwYWRkaW5nfXB4KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSArICR7cGFkZGluZ31weClgO1xuICAgIH1cbiAgfVxuXG4gIG9uTGFiZWxLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0TGFiZWwoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzTGFiZWwoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0TGFiZWwoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5sYWJlbENvbnRhaW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5nZXQobmV4dEluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzZWRMYWJlbEluZGV4ID0gbmV4dEluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzTGFiZWwoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbmRleCAtIDE7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5sYWJlbENvbnRhaW5lcnMuZ2V0KHByZXZpb3VzSW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmxhc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5mb2N1c2VkTGFiZWxJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gIH1cblxuICBvbkxlZ2VuZEl0ZW1LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy50b2dnbGVEYXRhc2V0VmlzaWJpbGl0eShpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dExlZ2VuZEl0ZW0oaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzTGVnZW5kSXRlbShpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRMZWdlbmRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMubGVnZW5kSXRlbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxlZ2VuZEl0ZW1zLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZmlyc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNMZWdlbmRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuICAgIGlmIChwcmV2aW91c0luZGV4ID49IDApIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZ2V0KHByZXZpb3VzSW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmFrZURhdGFQb2ludHNLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0RmFrZURhdGFQb2ludChpbmRleCwgaXNTZWNvbmRhcnkpO1xuICAgICAgdGhpcy5zaG93VG9vbHRpcEZvckRhdGFQb2ludChpbmRleCArIDEgPiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoID8gMCA6IGluZGV4ICsgMSwgaXNTZWNvbmRhcnkpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzRmFrZURhdGFQb2ludChpbmRleCwgaXNTZWNvbmRhcnkpO1xuICAgICAgdGhpcy5zaG93VG9vbHRpcEZvckRhdGFQb2ludChpbmRleCAtIDEgPCAwID8gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCAtIDEgOiBpbmRleCAtIDEsIGlzU2Vjb25kYXJ5KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRGYWtlRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMuZmFrZURhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5nZXQobmV4dEluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoIWlzU2Vjb25kYXJ5KSB7XG4gICAgICB0aGlzLmZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzRmFrZURhdGFQb2ludChpbmRleDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGluZGV4IC0gMTtcbiAgICBpZiAocHJldmlvdXNJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmFrZURhdGFQb2ludHMgPSBpc1NlY29uZGFyeSA/IHRoaXMuZmFrZURhdGFQb2ludHNTZWNvbmRhcnkgOiB0aGlzLmZha2VEYXRhUG9pbnRzO1xuICAgICAgZmFrZURhdGFQb2ludHMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoIWlzU2Vjb25kYXJ5KSB7XG4gICAgICB0aGlzLmZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPSBwcmV2aW91c0luZGV4O1xuICAgIH1cbiAgfVxuXG4gIHNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IFt7IGRhdGFzZXRJbmRleDogaXNTZWNvbmRhcnkgPyAxIDogMCwgaW5kZXggfV07XG4gICAgY29uc3QgbWV0YSA9IGNoYXJ0SW5zdGFuY2UuZ2V0RGF0YXNldE1ldGEoaXNTZWNvbmRhcnkgPyAxIDogMCk7XG4gICAgY29uc3QgZGF0YVBvaW50ID0gbWV0YS5kYXRhW2luZGV4XTtcbiAgICBjb25zdCBldmVudFBvc2l0aW9uID0ge1xuICAgICAgeDogZGF0YVBvaW50LngsXG4gICAgICB5OiBkYXRhUG9pbnQueSxcbiAgICB9O1xuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIGNoYXJ0SW5zdGFuY2UudG9vbHRpcD8uc2V0QWN0aXZlRWxlbWVudHMoYWN0aXZlRWxlbWVudCwgZXZlbnRQb3NpdGlvbik7XG5cbiAgICBjaGFydEluc3RhbmNlLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGFjdGl2ZSBlbGVtZW50cyB0byBoaWRlIHRoZSB0b29sdGlwXG4gICAgY2hhcnRJbnN0YW5jZS50b29sdGlwPy5zZXRBY3RpdmVFbGVtZW50cyhbXSwgeyB4OiAwLCB5OiAwIH0pO1xuXG4gICAgY2hhcnRJbnN0YW5jZS51cGRhdGUoKTtcbiAgfVxuXG4gIHRvZ2dsZURhdGFzZXRWaXNpYmlsaXR5KGRhdGFzZXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGF0YXNldCA9IGNoYXJ0SW5zdGFuY2UuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIGRhdGFzZXQuaGlkZGVuID0gIWRhdGFzZXQuaGlkZGVuO1xuICAgIGNoYXJ0SW5zdGFuY2UudXBkYXRlKCk7XG4gIH1cblxuICBpc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuICAgIHJldHVybiAhY2hhcnRJbnN0YW5jZS5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uaGlkZGVuO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCJcbiAgdGFiaW5kZXg9XCIwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIj5cbiAgPGRpdiBjbGFzcz1cInNwYWNpbmctY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7J3NtYWxsLXNwYWNpbmcnOiByYWRhckNoYXJ0RGF0YS5sYWJlbHMgJiYgcmFkYXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCAlIDIgPT09IDEgJiYgIWxvYWRpbmd9XCI+XG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiXG4gICAgICBbc3R5bGUud2lkdGhdPVwic2l6ZSA9PT0gJ2xhcmdlJyA/ICcyODBweCcgOiAnMjAwcHgnXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwic2l6ZSA9PT0gJ2xhcmdlJyA/ICcyODBweCcgOiAnMjAwcHgnXCI+XG4gICAgICBAaWYgKCFsb2FkaW5nKSB7XG4gICAgICAgIDxjYW52YXNcbiAgICAgICAgICBiYXNlQ2hhcnRcbiAgICAgICAgICBbZGF0YV09XCJyYWRhckNoYXJ0RGF0YVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwicmFkYXJDaGFydE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJyYWRhclwiXG4gICAgICAgICAgY2xhc3M9XCJjaGFydFwiXG4gICAgICAgID5cbiAgICAgICAgPC9jYW52YXM+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGNhbnZhc1xuICAgICAgICAgIGJhc2VDaGFydFxuICAgICAgICAgIFtkYXRhXT1cImxvYWRpbmdDaGFydERhdGFcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImxvYWRpbmdDaGFydE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJyYWRhclwiXG4gICAgICAgICAgY2xhc3M9XCJjaGFydFwiXG4gICAgICAgID5cbiAgICAgICAgPC9jYW52YXM+XG4gICAgICAgIDx1aS1zcGlubmVyPjwvdWktc3Bpbm5lcj5cbiAgICAgIH1cblxuICAgICAgQGlmIChsYWJlbFBvc2l0aW9uc1Zpc2libGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWNvbnRhaW5lclwiPlxuICAgICAgICAgIEBmb3IgKGxhYmVsIG9mIHNwaWRlckNoYXJ0RGF0YS5sYWJlbHM7IHRyYWNrIGxhYmVsKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCIgI2xhYmVsQ29udGFpbmVyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImxhYmVsICsgJzogJyArIHNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uWyRpbmRleF1cIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiJGluZGV4ID09PSAwID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTGFiZWxLZXlEb3duKCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwgKyAnOiAnICsgc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb25bJGluZGV4XVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cImdldENlbnRlcmVkTGFiZWxMZWZ0UG9zaXRpb24obGFiZWwsIGxhYmVsQ29udGFpbmVyLm9mZnNldFdpZHRoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3R0b21dPVwiZ2V0Q2VudGVyZWRMYWJlbEJvdHRvbVBvc2l0aW9uKGxhYmVsLCBsYWJlbENvbnRhaW5lci5vZmZzZXRIZWlnaHQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiICNsYWJlbEVsZW1lbnQgW3N0eWxlLm1heC13aWR0aF09XCJzaXplID09PSAnbGFyZ2UnID8gJzE1MHB4JyA6ICcxMDBweCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy50d28tbGluZXNdPVwibGFiZWwubGVuZ3RoID4gMjAgJiYgc2l6ZSA9PT0gJ2xhcmdlJyAmJiBzcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA8IDlcIj5cbiAgICAgICAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhWyRpbmRleF0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFrZS1kYXRhLXBvaW50c1wiICNmYWtlRGF0YVBvaW50c1xuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZm9jdXNlZExhYmVsSW5kZXggPT09ICRpbmRleCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiJGluZGV4ID09PSBmb2N1c2VkTGFiZWxJbmRleCA/IHNob3dUb29sdGlwRm9yRGF0YVBvaW50KCRpbmRleCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25GYWtlRGF0YVBvaW50c0tleURvd24oJGV2ZW50LCAkaW5kZXgpXCI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHJhZGFyQ2hhcnREYXRhLmRhdGFzZXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYWtlLWRhdGEtcG9pbnRzLXNlY29uZGFyeVwiICNmYWtlRGF0YVBvaW50c1NlY29uZGFyeVxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJmb2N1c2VkRmFrZURhdGFQb2ludEluZGV4ID09PSAkaW5kZXggPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwiJGluZGV4ID09PSBmb2N1c2VkRmFrZURhdGFQb2ludEluZGV4ID8gc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoJGluZGV4LCB0cnVlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uRmFrZURhdGFQb2ludHNLZXlEb3duKCRldmVudCwgJGluZGV4LCB0cnVlKVwiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZiAocmFkYXJDaGFydERhdGEuZGF0YXNldHMubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY29udGFpbmVyXCI+XG4gICAgICBAZm9yIChkYXRhc2V0IG9mIHJhZGFyQ2hhcnREYXRhLmRhdGFzZXRzOyB0cmFjayBkYXRhc2V0LmxhYmVsKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURhdGFzZXRWaXNpYmlsaXR5KCRpbmRleClcIlxuICAgICAgICAgIFt0YWJpbmRleF09XCIkaW5kZXggPT09IDAgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRGF0YXNldFZpc2libGUoJGluZGV4KSA/XG4gICAgICAgICAgKCh0cmFuc2xhdGlvbkNvbnRleHQgKyAnREFUQVNFVF9WSVNJQkxFJykgfCB1aVRyYW5zbGF0ZSA6IHsgZGF0YXNldDogZGF0YXNldC5sYWJlbCB9IHwgYXN5bmMpIDpcbiAgICAgICAgICAoKHRyYW5zbGF0aW9uQ29udGV4dCArICdEQVRBU0VUX0hJRERFTicpIHwgdWlUcmFuc2xhdGUgOiB7IGRhdGFzZXQ6IGRhdGFzZXQubGFiZWwgfSB8IGFzeW5jKVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25MZWdlbmRJdGVtS2V5RG93bigkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAgICNsZWdlbmRJdGVtPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWxpbmVcIiBbbmdDbGFzc109XCJ7J3NvbGlkLWxpbmUnOiAkaW5kZXggPT09IDAsICdkYXNoZWQtbGluZSc6ICRpbmRleCA9PT0gMX1cIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGFiZWxcIiBbc3R5bGUudGV4dC1kZWNvcmF0aW9uXT1cImlzRGF0YXNldFZpc2libGUoJGluZGV4KSA/ICdub25lJyA6ICdsaW5lLXRocm91Z2gnXCI+XG4gICAgICAgICAgICB7eyBkYXRhc2V0LmxhYmVsIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbiJdfQ==
|