@c8y/ngx-components 1018.503.56 → 1018.503.62
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/context-dashboard/context-dashboard.component.d.ts +5 -1
- package/context-dashboard/dashboard-detail.component.d.ts +1 -0
- package/core/common/common.module.d.ts +2 -1
- package/core/common/component-outlet.directive.d.ts +24 -0
- package/core/common/index.d.ts +1 -0
- package/esm2020/context-dashboard/cockpit-dashboard/cockpit-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/context-dashboard.component.mjs +9 -2
- package/esm2020/context-dashboard/dashboard-availability.component.mjs +3 -3
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
- package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.mjs +3 -3
- package/esm2020/core/action/action-outlet.component.mjs +6 -5
- package/esm2020/core/common/common.module.mjs +8 -5
- package/esm2020/core/common/component-outlet.directive.mjs +56 -0
- package/esm2020/core/common/index.mjs +2 -1
- package/esm2020/core/data-grid/column/cell-renderer.component.mjs +5 -4
- package/esm2020/core/data-grid/column/filtering-form-renderer.component.mjs +5 -4
- package/esm2020/core/docs/help-and-support-outlet/help-and-support-outlet.component.mjs +7 -6
- package/esm2020/core/docs/legal-notices-outlet/legal-notices-outlet.component.mjs +6 -5
- package/esm2020/core/drawer/drawer-outlet/drawer-outlet.component.mjs +5 -4
- package/esm2020/core/navigator/navigator-node.component.mjs +6 -5
- package/esm2020/core/stepper/stepper-outlet.component.mjs +8 -7
- package/esm2020/core/tabs/tabs-outlet.component.mjs +5 -4
- package/esm2020/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +18 -11
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +2 -2
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +80 -23
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +18 -11
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +2 -2
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +79 -23
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +6 -0
- package/locales/en.po +6 -0
- package/locales/es.po +6 -0
- package/locales/fr.po +6 -0
- package/locales/ja_JP.po +8 -0
- package/locales/ko.po +6 -0
- package/locales/locales.pot +6 -0
- package/locales/nl.po +6 -0
- package/locales/pl.po +6 -0
- package/locales/pt_BR.po +6 -0
- package/locales/ru.po +6 -0
- package/locales/zh_CN.po +6 -0
- package/locales/zh_TW.po +6 -0
- package/package.json +1 -1
|
@@ -40,6 +40,10 @@ export declare class ContextDashboardComponent implements OnInit, OnDestroy {
|
|
|
40
40
|
showContextHelpButton: boolean;
|
|
41
41
|
/** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */
|
|
42
42
|
translateWidgetTitle: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Hides dashboard availability selection.
|
|
45
|
+
*/
|
|
46
|
+
hideAvailability: boolean;
|
|
43
47
|
class: string;
|
|
44
48
|
widgets: Widget[];
|
|
45
49
|
mo: ContextDashboardManagedObject;
|
|
@@ -132,5 +136,5 @@ export declare class ContextDashboardComponent implements OnInit, OnDestroy {
|
|
|
132
136
|
private addReportDashboardSettings;
|
|
133
137
|
private canCopyDashboard;
|
|
134
138
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContextDashboardComponent, never>;
|
|
135
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContextDashboardComponent, "c8y-context-dashboard", never, { "name": "name"; "childrenClasses": "childrenClasses"; "context": "context"; "setTitle": "setTitle"; "disabled": "disabled"; "defaultWidgets": "defaultWidgets"; "canCopy": "canCopy"; "canDelete": "canDelete"; "isLoading": "isLoading"; "breadcrumbSettings": "breadcrumbSettings"; "showContextHelpButton": "showContextHelpButton"; "translateWidgetTitle": "translateWidgetTitle"; }, {}, never, never, false, never>;
|
|
139
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContextDashboardComponent, "c8y-context-dashboard", never, { "name": "name"; "childrenClasses": "childrenClasses"; "context": "context"; "setTitle": "setTitle"; "disabled": "disabled"; "defaultWidgets": "defaultWidgets"; "canCopy": "canCopy"; "canDelete": "canDelete"; "isLoading": "isLoading"; "breadcrumbSettings": "breadcrumbSettings"; "showContextHelpButton": "showContextHelpButton"; "translateWidgetTitle": "translateWidgetTitle"; "hideAvailability": "hideAvailability"; }, {}, never, never, false, never>;
|
|
136
140
|
}
|
|
@@ -67,6 +67,7 @@ export declare class DashboardDetailComponent {
|
|
|
67
67
|
navigatorNodes$: Observable<NavigatorNode[]>;
|
|
68
68
|
result: Promise<ContextDashboard>;
|
|
69
69
|
globalRolesIds: DashboardGlobalRoles;
|
|
70
|
+
hideAvailability: boolean;
|
|
70
71
|
applyToDevicesOfTypePermitted: boolean;
|
|
71
72
|
get applyToDevicesOfTypeTitle(): string;
|
|
72
73
|
readonly DEFAULT_DASHBOARD_MARGIN = 12;
|
|
@@ -37,6 +37,7 @@ import * as i31 from "@angular/common";
|
|
|
37
37
|
import * as i32 from "../i18n/i18n.module";
|
|
38
38
|
import * as i33 from "ngx-bootstrap/tooltip";
|
|
39
39
|
import * as i34 from "@angular/cdk/scrolling";
|
|
40
|
+
import * as i35 from "./component-outlet.directive";
|
|
40
41
|
export declare function initializeServices(translateService: TranslateService, state: AppStateService, userPreferences: UserPreferencesService): () => void;
|
|
41
42
|
/**
|
|
42
43
|
* Commonly used directives, data access and translation. This module is the shared
|
|
@@ -65,6 +66,6 @@ export declare class CommonModule {
|
|
|
65
66
|
static forRoot(): ModuleWithProviders<CommonModule>;
|
|
66
67
|
constructor();
|
|
67
68
|
static ɵfac: i0.ɵɵFactoryDeclaration<CommonModule, never>;
|
|
68
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<CommonModule, [typeof i1.EmptyStateComponent, typeof i2.IconDirective, typeof i3.OutletDirective, typeof i4.HumanizePipe, typeof i5.ShouldShowMoPipe, typeof i6.GetGroupIconPipe, typeof i7.HumanizeAppNamePipe, typeof i8.IfAllowedDirective, typeof i9.ShortenUserNamePipe, typeof i10.UserNameInitialsPipe, typeof i11.ForOfDirective, typeof i12.LoadMoreComponent, typeof i13.MapFunctionPipe, typeof i14.ProgressBarComponent, typeof i15.DatePipe, typeof i16.NumberPipe, typeof i17.LoadingComponent, typeof i18.DropdownDirectionDirective, typeof i19.TextareaAutoresizeDirective, typeof i20.TabsetAriaDirective, typeof i21.OperationResultComponent, typeof i22.VirtualScrollerWrapperComponent, typeof i23.VirtualScrollWindowDirective, typeof i24.BytesPipe, typeof i25.ShowIfFilterPipe, typeof i26.SkipLinkDirective, typeof i27.MarkdownToHtmlPipe, typeof i28.MoNamePipe, typeof i29.GenericFileIconPipe, typeof i30.StringifyObjectPipe], [typeof i31.CommonModule, typeof i32.I18nModule, typeof i33.TooltipModule, typeof i34.ScrollingModule], [typeof i1.EmptyStateComponent, typeof i2.IconDirective, typeof i3.OutletDirective, typeof i32.I18nModule, typeof i31.CommonModule, typeof i7.HumanizeAppNamePipe, typeof i4.HumanizePipe, typeof i5.ShouldShowMoPipe, typeof i6.GetGroupIconPipe, typeof i8.IfAllowedDirective, typeof i9.ShortenUserNamePipe, typeof i10.UserNameInitialsPipe, typeof i11.ForOfDirective, typeof i12.LoadMoreComponent, typeof i13.MapFunctionPipe, typeof i14.ProgressBarComponent, typeof i15.DatePipe, typeof i16.NumberPipe, typeof i17.LoadingComponent, typeof i18.DropdownDirectionDirective, typeof i19.TextareaAutoresizeDirective, typeof i20.TabsetAriaDirective, typeof i21.OperationResultComponent, typeof i22.VirtualScrollerWrapperComponent, typeof i23.VirtualScrollWindowDirective, typeof i24.BytesPipe, typeof i25.ShowIfFilterPipe, typeof i26.SkipLinkDirective, typeof i27.MarkdownToHtmlPipe, typeof i28.MoNamePipe, typeof i29.GenericFileIconPipe, typeof i30.StringifyObjectPipe]>;
|
|
69
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<CommonModule, [typeof i1.EmptyStateComponent, typeof i2.IconDirective, typeof i3.OutletDirective, typeof i4.HumanizePipe, typeof i5.ShouldShowMoPipe, typeof i6.GetGroupIconPipe, typeof i7.HumanizeAppNamePipe, typeof i8.IfAllowedDirective, typeof i9.ShortenUserNamePipe, typeof i10.UserNameInitialsPipe, typeof i11.ForOfDirective, typeof i12.LoadMoreComponent, typeof i13.MapFunctionPipe, typeof i14.ProgressBarComponent, typeof i15.DatePipe, typeof i16.NumberPipe, typeof i17.LoadingComponent, typeof i18.DropdownDirectionDirective, typeof i19.TextareaAutoresizeDirective, typeof i20.TabsetAriaDirective, typeof i21.OperationResultComponent, typeof i22.VirtualScrollerWrapperComponent, typeof i23.VirtualScrollWindowDirective, typeof i24.BytesPipe, typeof i25.ShowIfFilterPipe, typeof i26.SkipLinkDirective, typeof i27.MarkdownToHtmlPipe, typeof i28.MoNamePipe, typeof i29.GenericFileIconPipe, typeof i30.StringifyObjectPipe], [typeof i31.CommonModule, typeof i32.I18nModule, typeof i33.TooltipModule, typeof i34.ScrollingModule, typeof i35.C8yComponentOutlet], [typeof i1.EmptyStateComponent, typeof i2.IconDirective, typeof i3.OutletDirective, typeof i32.I18nModule, typeof i31.CommonModule, typeof i7.HumanizeAppNamePipe, typeof i4.HumanizePipe, typeof i5.ShouldShowMoPipe, typeof i6.GetGroupIconPipe, typeof i8.IfAllowedDirective, typeof i9.ShortenUserNamePipe, typeof i10.UserNameInitialsPipe, typeof i11.ForOfDirective, typeof i12.LoadMoreComponent, typeof i13.MapFunctionPipe, typeof i14.ProgressBarComponent, typeof i15.DatePipe, typeof i16.NumberPipe, typeof i17.LoadingComponent, typeof i18.DropdownDirectionDirective, typeof i19.TextareaAutoresizeDirective, typeof i20.TabsetAriaDirective, typeof i21.OperationResultComponent, typeof i22.VirtualScrollerWrapperComponent, typeof i23.VirtualScrollWindowDirective, typeof i24.BytesPipe, typeof i25.ShowIfFilterPipe, typeof i26.SkipLinkDirective, typeof i27.MarkdownToHtmlPipe, typeof i28.MoNamePipe, typeof i29.GenericFileIconPipe, typeof i30.StringifyObjectPipe, typeof i35.C8yComponentOutlet]>;
|
|
69
70
|
static ɵinj: i0.ɵɵInjectorDeclaration<CommonModule>;
|
|
70
71
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EnvironmentInjector, Injector, OnChanges, OnDestroy, SimpleChanges, Type, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Simplified version of [NgComponentOutlet](https://github.com/angular/angular/blob/main/packages/common/src/directives/ng_component_outlet.ts)
|
|
5
|
+
*
|
|
6
|
+
* In contrast to NgComponentOutlet it allows to set the environment injector.
|
|
7
|
+
*
|
|
8
|
+
* A [PR](https://github.com/angular/angular/pull/54764) has been raised to add that functionality in Angular.
|
|
9
|
+
*
|
|
10
|
+
* TODO: Remove this directive once the PR is merged.
|
|
11
|
+
*/
|
|
12
|
+
export declare class C8yComponentOutlet implements OnChanges, OnDestroy {
|
|
13
|
+
private __viewContainerRef;
|
|
14
|
+
c8yComponentOutlet: Type<any> | null;
|
|
15
|
+
c8yComponentOutletInjector?: Injector;
|
|
16
|
+
c8yComponentOutletEnvironmentInjector?: EnvironmentInjector;
|
|
17
|
+
private _componentRef;
|
|
18
|
+
constructor(__viewContainerRef: ViewContainerRef);
|
|
19
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
private _needToReCreateComponentInstance;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<C8yComponentOutlet, never>;
|
|
23
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<C8yComponentOutlet, "[c8yComponentOutlet]", never, { "c8yComponentOutlet": "c8yComponentOutlet"; "c8yComponentOutletInjector": "c8yComponentOutletInjector"; "c8yComponentOutletEnvironmentInjector": "c8yComponentOutletEnvironmentInjector"; }, {}, never, never, true, never>;
|
|
24
|
+
}
|
package/core/common/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './bytes.pipe';
|
|
|
3
3
|
export * from './color.service';
|
|
4
4
|
export * from './common.constants';
|
|
5
5
|
export * from './common.module';
|
|
6
|
+
export * from './component-outlet.directive';
|
|
6
7
|
export * from './date.pipe';
|
|
7
8
|
export * from './device.service';
|
|
8
9
|
export * from './dropdown-direction.directive';
|
|
@@ -37,14 +37,14 @@ export class CockpitDashboardComponent {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
CockpitDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CockpitDashboardComponent, deps: [{ token: i1.AppStateService }, { token: COCKPIT_HOME_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
-
CockpitDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
|
|
40
|
+
CockpitDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CockpitDashboardComponent, decorators: [{
|
|
42
42
|
type: Component,
|
|
43
|
-
args: [{ selector: 'c8y-cockpit-dashboard', template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n" }]
|
|
43
|
+
args: [{ selector: 'c8y-cockpit-dashboard', template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n" }]
|
|
44
44
|
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: undefined, decorators: [{
|
|
45
45
|
type: Optional
|
|
46
46
|
}, {
|
|
47
47
|
type: Inject,
|
|
48
48
|
args: [COCKPIT_HOME_DASHBOARD_CONFIG]
|
|
49
49
|
}] }]; } });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ja3BpdC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29ja3BpdC1kYXNoYm9hcmQvY29ja3BpdC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29ja3BpdC1kYXNoYm9hcmQvY29ja3BpdC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUVMLDZCQUE2QixFQUM3Qiw0QkFBNEIsRUFDN0IsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQU1uQyxNQUFNLE9BQU8seUJBQXlCO0lBS3BDLFlBQ1UsUUFBeUIsRUFHekIsbUJBQTJDO1FBSDNDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBR3pCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFSckQsbUJBQWMsR0FBRyw0QkFBNEIsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLGVBQWUsQ0FBQztRQUNoQyxjQUFTLEdBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUWxDLE1BQU0sTUFBTSxHQUFHO1lBQ2IsR0FBRyxJQUFJLENBQUMsbUJBQW1CO1lBQzNCLGFBQWEsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUI7WUFDM0UsWUFBWSxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLHlCQUF5QjtTQUNuRixDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUE4QjtRQUN6RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztTQUMzQztRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDN0M7UUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQ25GLElBQUksQ0FBQyxhQUNQLEVBQUUsQ0FBQztTQUNKO1FBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUNuQztJQUNILENBQUM7O3NIQXpDVSx5QkFBeUIsaURBUTFCLDZCQUE2QjswR0FSNUIseUJBQXlCLDZEQ1p0Qyw0T0FVQTsyRkRFYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCOzswQkFVOUIsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29ja3BpdERhc2hib2FyZENvbmZpZyxcbiAgQ09DS1BJVF9IT01FX0RBU0hCT0FSRF9DT05GSUcsXG4gIERFRkFVTFRfQ09DS1BJVF9IT01FX1dJREdFVFNcbn0gZnJvbSAnLi9jb2NrcGl0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jb2NrcGl0LWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2NrcGl0LWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29ja3BpdERhc2hib2FyZENvbXBvbmVudCB7XG4gIGRlZmF1bHRXaWRnZXRzID0gREVGQVVMVF9DT0NLUElUX0hPTUVfV0lER0VUUztcbiAgZGFzaGJvYXJkTmFtZSA9ICdob21lLWNvY2twaXQxJztcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdIb21lJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChDT0NLUElUX0hPTUVfREFTSEJPQVJEX0NPTkZJRylcbiAgICBwcml2YXRlIGhvbWVEYXNoYm9hcmRDb25maWc6IENvY2twaXREYXNoYm9hcmRDb25maWdcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5ob21lRGFzaGJvYXJkQ29uZmlnLFxuICAgICAgZGFzaGJvYXJkTmFtZTogYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlPy5jb25maWc/LmhvbWVEYXNoYm9hcmROYW1lLFxuICAgICAgdXNlclNwZWNpZmljOiBhcHBTdGF0ZS5jdXJyZW50QXBwbGljYXRpb24udmFsdWU/LmNvbmZpZz8udXNlclNwZWNpZmljSG9tZURhc2hib2FyZFxuICAgIH07XG4gICAgdGhpcy5hcHBseURhc2hib2FyZENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURhc2hib2FyZENvbmZpZyhjb25maWc6IENvY2twaXREYXNoYm9hcmRDb25maWcpIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuZGFzaGJvYXJkTmFtZSkge1xuICAgICAgdGhpcy5kYXNoYm9hcmROYW1lID0gY29uZmlnLmRhc2hib2FyZE5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5kZWZhdWx0V2lkZ2V0cykge1xuICAgICAgdGhpcy5kZWZhdWx0V2lkZ2V0cyA9IGNvbmZpZy5kZWZhdWx0V2lkZ2V0cztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnVzZXJTcGVjaWZpYyAmJiB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZE5hbWUgPSBgJHt0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLnVzZXJOYW1lLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1fJHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmROYW1lXG4gICAgICB9YDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnBhZ2VUaXRsZSkge1xuICAgICAgdGhpcy5wYWdlVGl0bGUgPSBjb25maWcucGFnZVRpdGxlO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAge3sgcGFnZVRpdGxlIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1jb250ZXh0LWRhc2hib2FyZFxuICBbbmFtZV09XCJkYXNoYm9hcmROYW1lXCJcbiAgW2RlZmF1bHRXaWRnZXRzXT1cImRlZmF1bHRXaWRnZXRzXCJcbiAgW2NhbkRlbGV0ZV09XCJmYWxzZVwiXG4gIFtoaWRlQXZhaWxhYmlsaXR5XT1cInRydWVcIlxuPjwvYzh5LWNvbnRleHQtZGFzaGJvYXJkPlxuIl19
|
|
@@ -47,6 +47,10 @@ export class ContextDashboardComponent {
|
|
|
47
47
|
this.canDelete = true;
|
|
48
48
|
this.isLoading = true;
|
|
49
49
|
this.showContextHelpButton = true;
|
|
50
|
+
/**
|
|
51
|
+
* Hides dashboard availability selection.
|
|
52
|
+
*/
|
|
53
|
+
this.hideAvailability = false;
|
|
50
54
|
this.class = '';
|
|
51
55
|
this.widgets = [];
|
|
52
56
|
}
|
|
@@ -160,6 +164,7 @@ export class ContextDashboardComponent {
|
|
|
160
164
|
deviceType: this.context.type,
|
|
161
165
|
isDeviceType: this.contextDashboardService.isDeviceType(this.mo),
|
|
162
166
|
isNamedDashboard: this.contextDashboardService.isNamed(this.mo),
|
|
167
|
+
hideAvailability: this.hideAvailability,
|
|
163
168
|
isReport
|
|
164
169
|
};
|
|
165
170
|
const modal = this.bsModal.show(DashboardDetailComponent, {
|
|
@@ -476,7 +481,7 @@ export class ContextDashboardComponent {
|
|
|
476
481
|
}
|
|
477
482
|
}
|
|
478
483
|
ContextDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ContextDashboardService }, { token: i3.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: i4.WidgetService }, { token: i5.BsModalService }, { token: i6.InventoryService }, { token: i3.GainsightService }, { token: i3.ActionBarService }, { token: i7.TranslateService }, { token: i3.ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
479
|
-
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/users-guide/cockpit/#dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
484
|
+
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/users-guide/cockpit/#dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
480
485
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ContextDashboardComponent, decorators: [{
|
|
481
486
|
type: Component,
|
|
482
487
|
args: [{ selector: 'c8y-context-dashboard', host: {
|
|
@@ -512,8 +517,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
512
517
|
type: Input
|
|
513
518
|
}], translateWidgetTitle: [{
|
|
514
519
|
type: Input
|
|
520
|
+
}], hideAvailability: [{
|
|
521
|
+
type: Input
|
|
515
522
|
}], class: [{
|
|
516
523
|
type: HostBinding,
|
|
517
524
|
args: ['class']
|
|
518
525
|
}] } });
|
|
519
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixZQUFZLEVBR1osb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFHUCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsd0JBQXdCLEVBSXhCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxF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QkFHTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdOLEtBQUs7c0JBREosV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ2hhbmdlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGFzaGJvYXJkU2V0dGluZ3MsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgV2lkZ2V0LFxuICBXaWRnZXRDaGFuZ2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGV2ZXJ5LCBmaW5kSW5kZXgsIGtlYmFiQ2FzZSwga2V5QnksIG9taXQsIHNvbWUsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuLyoqXG4gKiBUaGUgY29udGV4dCBkYXNoYm9hcmQgaXMgYSBkYXNoYm9hcmQgd2hpY2ggcmVzb2x2ZXMgaXQgZGF0YSBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQgKGRldmljZSBvciBncm91cClcbiAqIGl0IGlzIGRpc3BsYXllZCBvbi4gSXQgdXN1YWxseSB1c2VzIHRoZSByb3V0ZS5kYXRhIGZvciBpdCwgYnV0IHlvdSBjYW4gcGFzc1xuICogYSBkaWZmZXJlbnQgbWFuYWdlZE9iamVjdCB0byB0aGUgW21vXSBpbnB1dCBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoYXQgYmVoYXZpb3IuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jb250ZXh0LWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBzdHlsZTogYFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgYCxcbiAgICBjbGFzczogJ2Rhc2hib2FyZCBjOHktZ3JpZC1kYXNoYm9hcmQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBjaGlsZHJlbkNsYXNzZXMgPSAnJztcbiAgQElucHV0KClcbiAgY29udGV4dDogYW55O1xuICBASW5wdXQoKVxuICBzZXRUaXRsZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBkZWZhdWx0V2lkZ2V0czogV2lkZ2V0W10gPSBbXTtcbiAgQElucHV0KClcbiAgY2FuQ29weSA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGNhbkRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGJyZWFkY3J1bWJTZXR0aW5nczogQnJlYWRjcnVtYkl0ZW07XG4gIEBJbnB1dCgpXG4gIHNob3dDb250ZXh0SGVscEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGV0aGVyIHRvIHRyYW5zbGF0ZSB3aWRnZXQgdGl0bGVzLiBIb3dldmVyLCBkYXNoYm9hcmQncyBvd24gc2V0dGluZyB0YWtlcyBwcmVjZWRlbmNlLiBJdCBkb2VzIG5vdCBvdmVycmlkZSBkYXNoYm9hcmQncyBzZXR0aW5nICovXG4gIEBJbnB1dCgpIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIHdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICB0aXRsZTogc3RyaW5nO1xuICBpc0NvcHlEaXNhYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIGRhdGFTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChDT05URVhUX0RBU0hCT0FSRF9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyU2VydmljZTogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCB0byB0aGUgd2lkZ2V0XG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIHdpZGdldCB0byBhcHBseSB0aGUgY29udGV4dCB0by5cbiAgICovXG4gIGFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCkge1xuICAgIGlmICh3aWRnZXQuY29uZmlnLmRldmljZSkge1xuICAgICAgd2lkZ2V0LmNvbmZpZy5kZXZpY2UgPSB7IGlkOiB0aGlzLmNvbnRleHQuaWQsIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHJvdXRlIGxpc3RlbmVyLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1Yikge1xuICAgICAgdGhpcy5kYXRhU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB0byB0aGUgZGVmYXVsdCB3aWRnZXRzLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZSgpIHtcbiAgICBjb25zdCBtZXNnID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHJlc2V0IHRoaXMgZGFzaGJvYXJkLiBBbGwgY2hhbmdlcyB0byB0aGUgZGFzaGJvYXJkIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IGRhc2hib2FyZCcpLCBtZXNnLCBTdGF0dXMuV0FSTklORywge1xuICAgICAgICBvazogZ2V0dGV4dCgnUmVzZXRgZGFzaGJvYXJkYCcpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5tYXBXaWRnZXRzKHRoaXMuZGVmYXVsdFdpZGdldHMpO1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqL1xuICBhc3luYyB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBjaGlsZDtcbiAgICBjb25zdCBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgPSB0aGlzLm1vO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IG1hcHBlZENoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuXG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jb3B5Q2xpcGJvYXJkID0ge1xuICAgICAgZGFzaGJvYXJkOiBjbG9uZURlZXAodGhpcy5tby5jOHlfRGFzaGJvYXJkKSxcbiAgICAgIGNvbnRleHQ6IGNsb25lRGVlcCh7XG4gICAgICAgIGNvbnRleHQ6IHZpZXdDb250ZXh0LFxuICAgICAgICBjb250ZXh0RGF0YTogdGhpcy5jb250ZXh0XG4gICAgICB9KVxuICAgIH07XG5cbiAgICBpZiAodmlld0NvbnRleHQpIHtcbiAgICAgIGNvbnN0IGN0eCA9IHZpZXdDb250ZXh0LnNwbGl0KCcvJykuc2hpZnQoKTtcbiAgICAgIGNvbnN0IG1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAnRGFzaGJvYXJkIGNvcGllZC4gTmF2aWdhdGUgdG8gdGhlIGRlc2lyZWQge3sgY3R4IH19IGFuZCBzZWxlY3QgXCJQYXN0ZSBkYXNoYm9hcmRcIicsXG4gICAgICAgIHsgY3R4IH1cbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MobXNnKTtcbiAgICB9XG4gICAgdGhpcy5hY3Rpb25CYXJTZXJ2aWNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGNvbXBsZXRlIGRhc2hib2FyZCBhbmQgbmF2aWdhdGUgYXdheS5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZURhc2hib2FyZCgpIHtcbiAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZSh0aGlzLm1vKTtcbiAgICBpZiAodGhpcy5yb3V0ZS5wYXJlbnQpIHtcbiAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QudXJsLm1hcChzZWdtZW50ID0+IHNlZ21lbnQucGF0aCkuam9pbignLycpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyb3V0ZSk7XG4gICAgfVxuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREVMRVRFX0RBU0hCT0FSRCxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkRFTEVURSxcbiAgICAgIG5hbWU6IHRoaXMuZGFzaGJvYXJkLm5hbWUsXG4gICAgICBpZDogdGhpcy5tby5pZCxcbiAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRDb250ZXh0Rm9yR1ModGhpcy5jb250ZXh0KVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBjdXJyZW50IGRhc2hib2FyZFxuICAgKi9cbiAgYXN5bmMgZWRpdERhc2hib2FyZCgpIHtcbiAgICBjb25zdCBpc1JlcG9ydCA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNSZXBvcnQodGhpcy5tbyk7XG4gICAgaWYgKGlzUmVwb3J0KSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGljb24sIHByaW9yaXR5LCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBkZXNjcmlwdGlvbiB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhc2hib2FyZCwgeyBuYW1lLCBpY29uLCBwcmlvcml0eSwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgZGVzY3JpcHRpb24gfSk7XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGRhc2hib2FyZDogdGhpcy5kYXNoYm9hcmQsXG4gICAgICBkZXZpY2VUeXBlOiB0aGlzLmNvbnRleHQudHlwZSxcbiAgICAgIGlzRGV2aWNlVHlwZTogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyksXG4gICAgICBpc05hbWVkRGFzaGJvYXJkOiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzTmFtZWQodGhpcy5tbyksXG4gICAgICBpc1JlcG9ydFxuICAgIH07XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhEYXNoYm9hcmREZXRhaWxDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtbGcnLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBrZXlib2FyZDogZmFsc2VcbiAgICB9KS5jb250ZW50IGFzIERhc2hib2FyZERldGFpbENvbXBvbmVudDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGFzaGJvYXJkTU8gPSBjbG9uZURlZXAodGhpcy5tbyk7XG4gICAgICBjb25zdCBjZmcgPSBhd2FpdCBtb2RhbC5yZXN1bHQ7XG4gICAgICBpZiAoaXNSZXBvcnQpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBwcmlvcml0eSwgZGVzY3JpcHRpb24sIC4uLmRhc2hib2FyZENmZyB9ID0gY2ZnO1xuICAgICAgICBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkID0gZGFzaGJvYXJkQ2ZnO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlcG9ydCh7XG4gICAgICAgICAgaWQ6IHRoaXMuY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgYzh5X0lzTmF2aWdhdG9yTm9kZSxcbiAgICAgICAgICBwcmlvcml0eSxcbiAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQgPSBjZmc7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKGRhc2hib2FyZE1PKTtcbiAgICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UucmVmcmVzaFRhYnMoZGFzaGJvYXJkTU8pO1xuICAgICAgdGhpcy5vbkxvYWQoKTtcbiAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRGV2aWNlVHlwZURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRhc2hib2FyZD8uZGV2aWNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyBhIHdpZGdldCBvbiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSB3aWRnZXQgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZWRpdFdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gY2hhbmdlLnNvdXJjZTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbihcbiAgICAgIGNoYW5nZS53aWRnZXQubmFtZSB8fCBjaGFuZ2Uud2lkZ2V0LmNvbXBvbmVudElkXG4gICAgKTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhpcy5hZGRXaWRnZXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRXaWRnZXQoe1xuICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgZGF0YTogeyAuLi5jb21wb25lbnQuZGF0YSwgLi4uY2hhbmdlLndpZGdldCwgX3g6IHgsIF95OiB5LCBfd2lkdGg6IHdpZHRoLCBfaGVpZ2h0OiBoZWlnaHQgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3aWRnZXQgdG8gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkIERlZmluZSBhIHNlbGVjdGVkIGNvbXBvbmVudCB0byBzd2l0Y2ggdG8gZWRpdCBtb2RlIGRpcmVjdGx5LlxuICAgKi9cbiAgYXN5bmMgYWRkV2lkZ2V0KHNlbGVjdGVkPzogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCBwYXJ0aWFsQ2xvbmVTZWxlY3RlZCA9IHNlbGVjdGVkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zZWxlY3RlZCxcbiAgICAgICAgICBkYXRhOiBjbG9uZURlZXAoc2VsZWN0ZWQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgOiBzZWxlY3RlZDtcblxuICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgPyB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgOiB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFdpZGdldENvbmZpZ0NvbXBvbmVudD4gPSB7XG4gICAgICBtbzogdGhpcy5tbyxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dC5jOHlfUmVwb3J0ID8ge30gOiBhY3RpdmVDb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IHBhcnRpYWxDbG9uZVNlbGVjdGVkXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coV2lkZ2V0Q29uZmlnQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfSkuY29udGVudCBhcyBXaWRnZXRDb25maWdDb21wb25lbnQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3V2lkZ2V0ID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKCF0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW5bbmV3V2lkZ2V0LmlkXSA9IG5ld1dpZGdldDtcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgICAgbmV3V2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3NlcyhuZXdXaWRnZXQpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaWRnZXQobmV3V2lkZ2V0KTtcbiAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSB3aWRnZXQgb3IgYWRkcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdCBvblxuICAgKiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSBuZXcgd2lkZ2V0XG4gICAqL1xuICBhc3luYyB1cGRhdGVXaWRnZXQod2lkZ2V0KSB7XG4gICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGhpcy53aWRnZXRzLCB7IGlkOiB3aWRnZXQuaWQgfSk7XG4gICAgY29uc3QgaXNOZXcgPSBpbmRleCA9PT0gLTE7XG4gICAgY29uc3QgbWFwcGVkV2lkZ2V0ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy53aWRnZXRzLnB1c2gobWFwcGVkV2lkZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZShpbmRleCwgMSwgbWFwcGVkV2lkZ2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHdpZGdldCBhbmQgcmVhcnJhbmdlcyB0aGUgcmVtYWluaW5nIG9uZXNcbiAgICogaWYgbmVjZXNzYXJ5LlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqL1xuICBhc3luYyBkZWxldGVXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB3aWRnZXRUaXRsZSA9IGNoYW5nZS53aWRnZXQudGl0bGU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnUmVtb3ZlIHdpZGdldCcpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gcmVtb3ZlIHdpZGdldCBcInt7IHdpZGdldFRpdGxlIH19XCIgZnJvbSB5b3VyIGRhc2hib2FyZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IHdpZGdldFRpdGxlIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAge1xuICAgICAgICAgIG9rOiBnZXR0ZXh0KCdSZW1vdmUnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gb24gY2FuY2VsOiBkbyBub3RoaW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgd2lkZ2V0LCBzb3VyY2UgfSA9IGNoYW5nZTtcbiAgICAgIGRlbGV0ZSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW5bd2lkZ2V0LmlkXTtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLndpZGdldHMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICAgIHRoaXMud2lkZ2V0cy5zcGxpY2UodGhpcy53aWRnZXRzLmluZGV4T2YocmVtb3ZlZCksIDEpO1xuXG4gICAgICBjb25zdCB7IGRhc2hib2FyZCB9ID0gc291cmNlO1xuICAgICAgZGFzaGJvYXJkLmNoaWxkcmVuID0gZGFzaGJvYXJkLmNoaWxkcmVuLmZpbHRlcihjID0+IGMuZGF0YS5pZCAhPT0gd2lkZ2V0LmlkKTtcblxuICAgICAgLy8gdXNpbmcgc2V0VGltZW91dCB0byBnaXZlIHRoZSBjb21wb25lbnQgdGhlIGNoYW5jZSB0byByZW1vdmUgaXQuXG4gICAgICBjb25zdCBzbGVlcCA9IHRpbWVvdXQgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcbiAgICAgIGF3YWl0IHNsZWVwKDApO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZShzb3VyY2UpO1xuICAgICAgY2hpbGQuY29sbGFwc2VVcEFsbCgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgYWRkRGFzaGJvYXJkQ2xhc3NUb0JvZHkoKSB7XG4gICAgdGhpcy5jbGFzcy5zcGxpdCgnICcpLmZvckVhY2goY3NzQ2xhc3MgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBjc3NDbGFzcyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIHJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKSB7XG4gICAgdGhpcy5jbGFzcy5zcGxpdCgnICcpLmZvckVhY2goY3NzQ2xhc3MgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBjc3NDbGFzcyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgZGFzaGJvYXJkIHNldHRpbmdzIHRvIGZyb3plbiBvciB2aWNlIHZlcnNhLlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIGN1cnJlbnQgc2V0dGluZ3Mgb2YgdGhlIGRhc2hib2FyZC5cbiAgICovXG4gIGFzeW5jIHRvZ2dsZUZyZWV6ZShzZXR0aW5nczogRGFzaGJvYXJkU2V0dGluZ3MpIHtcbiAgICB0aGlzLnRvZ2dsZUlzRnJvemVuRmxhZyhzZXR0aW5ncyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkLmlzRnJvemVuKSB7XG4gICAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdZb3VyIGRhc2hib2FyZCBpcyBsb2NrZWQgbm93LicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdZb3VyIGRhc2hib2FyZCBpcyB1bmxvY2tlZCBub3cuJykpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgdGhpcy50b2dnbGVJc0Zyb3plbkZsYWcoc2V0dGluZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVwb3J0KG1vOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pikge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZShtbyk7XG4gICAgdGhpcy5jb250ZXh0ID0gcmVzLmRhdGE7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhID0gdGhpcy5jb250ZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZU5hdmlnYXRvckl0ZW0ocmVzLmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVJc0Zyb3plbkZsYWcoc2V0dGluZ3M6IERhc2hib2FyZFNldHRpbmdzKSB7XG4gICAgc2V0dGluZ3MuaXNGcm96ZW4gPSAhc2V0dGluZ3MuaXNGcm96ZW47XG4gICAgdGhpcy5kYXNoYm9hcmQuaXNGcm96ZW4gPSBzZXR0aW5ncy5pc0Zyb3plbjtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbnRleHREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBkYXNoYm9hcmQgfSkgPT4ge1xuICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YTtcbiAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQ/Lm5hbWU7XG4gICAgICB0aGlzLm1vID0gZGFzaGJvYXJkO1xuICAgICAgdGhpcy5kYXNoYm9hcmQgPSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgICB0aGlzLnBhdGNoU2Vuc29yUGhvbmVEYXNoYm9hcmQodGhpcy5kYXNoYm9hcmQsIHRoaXMubW8ub3duZXIsIHRoaXMuY29udGV4dD8udHlwZSk7XG4gICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBlbmFibGUgdHJhbnNsYXRpb24gZm9yIHdpZGdldHMgd2l0aGluIHRoZSBkYXNoYm9hcmQsIHRoZSBcInRyYW5zbGF0ZVdpZGdldFRpdGxlXCIgZmxhZyBtdXN0IGJlIGVuYWJsZWQuXG4gICAqIFRoZSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBwYXRjaGVkLCBhcyB0aGUgXCJTZW5zb3IgQXBwXCIgZG9lcyBub3QgcHJvdmlkZSB0aGlzIHNldHRpbmcuXG4gICAqL1xuICBwcml2YXRlIHBhdGNoU2Vuc29yUGhvbmVEYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkLCBvd25lcjogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2M4eV9TZW5zb3JQaG9uZScgJiYgb3duZXIuaW5jbHVkZXMoJ2RldmljZV9waG9uZScpKSB7XG4gICAgICBkYXNoYm9hcmQudHJhbnNsYXRlV2lkZ2V0VGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hbWVkRGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgICAgIC5nZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKHRoaXMubmFtZSwgdGhpcy5kZWZhdWx0V2lkZ2V0cywgdGhpcy5jb250ZXh0KVxuICAgICAgLnN1YnNjcmliZShtbyA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29udGV4dCB8fCB7fTtcbiAgICAgICAgdGhpcy5tbyA9IG1vO1xuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Mb2FkKHRyYWNrRXhwZXJpZW5jZT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjYW5FZGl0RGFzaGJvYXJkID0gYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jYW5FZGl0RGFzaGJvYXJkKHRoaXMubW8pO1xuICAgIHRoaXMuZGlzYWJsZWQgPSAhY2FuRWRpdERhc2hib2FyZDtcbiAgICB0aGlzLmNhbkNvcHkgPVxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZURhc2hib2FyZCh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbykgfHxcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNHcm91cERhc2hib2FyZCh0aGlzLm1vKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDaGlsZHJlbiA9IGNsb25lRGVlcCh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pO1xuICAgIGNvbnN0IGlzRGV2aWNlVHlwZSA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pO1xuICAgIGNvbnN0IGlzUmVwb3J0ID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc1JlcG9ydCh0aGlzLm1vKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzID0ge1xuICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAuLi50aGlzLmRhc2hib2FyZC5jbGFzc2VzXG4gICAgfTtcbiAgICB0aGlzLmlzQ29weURpc2FibGVkID0gIXRoaXMuY2FuQ29weURhc2hib2FyZCgpO1xuICAgIHRoaXMud2lkZ2V0cyA9IGF3YWl0IFByb21pc2UuYWxsPFdpZGdldD4oXG4gICAgICB2YWx1ZXMoZGFzaGJvYXJkQ2hpbGRyZW4pLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldCk7XG4gICAgICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWNrRXhwZXJpZW5jZSkge1xuICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2xvYWRXaWRnZXQnLCB7XG4gICAgICAgICAgICB3aWRnZXROYW1lOiB3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuY2xhc3MgPSBPYmplY3Qua2V5cyhkYXNoYm9hcmRDbGFzc2VzKS5qb2luKCcgJyk7XG4gICAgaWYgKGlzUmVwb3J0KSB7XG4gICAgICB0aGlzLmFkZFJlcG9ydERhc2hib2FyZFNldHRpbmdzKCk7XG4gICAgfVxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIGlzUmVwb3J0XG4gICAgICAgID8gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuUkVQT1JUU1xuICAgICAgICA6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsXG4gICAgICB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRBU0hCT0FSRF9WSUVXLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5MT0FELFxuICAgICAgICBuYW1lOiB0aGlzLmRhc2hib2FyZC5uYW1lLFxuICAgICAgICBpZDogdGhpcy5tby5pZCxcbiAgICAgICAgZGFzaGJvYXJkVHlwZTogdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZSA/IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSA6IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IGlzUmVwb3J0XG4gICAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuUkVQT1JUXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldDogV2lkZ2V0KSB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dC5uYW1lO1xuICAgIHRoaXMuYnJlYWRjcnVtYlNldHRpbmdzID0ge1xuICAgICAgaWNvbjogJ3RoJyxcbiAgICAgIGxhYmVsOiAnUmVwb3J0cycsXG4gICAgICBwYXRoOiAncmVwb3J0cydcbiAgICB9O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbkNvcHlEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZCA9IGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgIChjb25maWcuZGV2aWNlICYmIGNvbmZpZy5kZXZpY2UuaWQgIT09IHRoaXMuY29udGV4dC5pZCkgfHxcbiAgICAgICAgc29tZShkYXRhUG9pbnRzLCBkYXRhUG9pbnQgPT4gZGF0YVBvaW50Ll9fdGFyZ2V0Py5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZDtcbiAgfVxufVxuIiwiPGM4eS10aXRsZSAqbmdJZj1cInRpdGxlXCI+XG4gIHt7IHRpdGxlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIi0xXCJcbiAgKm5nSWY9XCJkZWZhdWx0V2lkZ2V0cy5sZW5ndGggPiAwXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCBkYXNoYm9hcmQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBweC1ldmVudD1cIlJlc2V0IGRhc2hib2FyZFwiXG4gICAgKGNsaWNrKT1cInJlc3RvcmUoKVwiXG4gICAgW2Rpc2FibGVkXT1cImRhc2hib2FyZD8uaXNGcm96ZW4gfHwgZGlzYWJsZWRcIlxuICAgIGRhdGEtY3k9XCJjb250ZXh0LWRhc2hib2FyZC0tYnV0dG9uLXJlc2V0LWRhc2hib2FyZFwiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICBjOHlJY29uPVwicmVzZXRcIlxuICAgID48L2k+XG4gICAge3sgJ1Jlc2V0IGRhc2hib2FyZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktaGVscFxuICBzcmM9XCIvdXNlcnMtZ3VpZGUvY29ja3BpdC8jZGFzaGJvYXJkc1wiXG4gICpuZ0lmPVwic2hvd0NvbnRleHRIZWxwQnV0dG9uXCJcbj48L2M4eS1oZWxwPlxuXG48Yzh5LXdpZGdldHMtZGFzaGJvYXJkXG4gIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICBbY29udGV4dERhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxuICBbd2lkZ2V0c109XCJ3aWRnZXRzXCJcbiAgW3NldHRpbmdzXT1cIntcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpc0Zyb3plbjogZGFzaGJvYXJkPy5pc0Zyb3plbixcbiAgICBpc0Rpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBjYW5EZWxldGU6IGNhbkRlbGV0ZSxcbiAgICB0cmFuc2xhdGVXaWRnZXRUaXRsZTogZGFzaGJvYXJkPy50cmFuc2xhdGVXaWRnZXRUaXRsZSA/PyB0cmFuc2xhdGVXaWRnZXRUaXRsZSxcbiAgICBhbGxvd0Z1bGxzY3JlZW46IG1vZHVsZUNvbmZpZy5hbGxvd0Z1bGxzY3JlZW4sXG4gICAgdGl0bGU6IHNldFRpdGxlID8gZGFzaGJvYXJkLm5hbWUgfHwgdGl0bGUgOiB1bmRlZmluZWQsXG4gICAgd2lkZ2V0TWFyZ2luOiBkYXNoYm9hcmQ/LndpZGdldE1hcmdpbixcbiAgICBjYW5Db3B5OiBjYW5Db3B5LFxuICAgIGlzQ29weURpc2FibGVkOiBpc0NvcHlEaXNhYmxlZCxcbiAgICBkZWZhdWx0V2lkdGg6IGRhc2hib2FyZD8uY29sdW1ucyA+PSAyNCA/IDggOiA0LFxuICAgIGNvbHVtbnM6IGRhc2hib2FyZD8uY29sdW1ucyB8fCAxMlxuICB9XCJcbiAgW2JyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlNldHRpbmdzXCJcbiAgKG9uRnJlZXplKT1cInRvZ2dsZUZyZWV6ZSgkZXZlbnQpXCJcbiAgKG9uQ2hhbmdlRGFzaGJvYXJkKT1cInVwZGF0ZURhc2hib2FyZENoaWxkcmVuKCRldmVudClcIlxuICAob25BZGRXaWRnZXQpPVwiYWRkV2lkZ2V0KClcIlxuICAob25FZGl0V2lkZ2V0KT1cImVkaXRXaWRnZXQoJGV2ZW50KVwiXG4gIChvbkRlbGV0ZVdpZGdldCk9XCJkZWxldGVXaWRnZXQoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJlZGl0RGFzaGJvYXJkKClcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixZQUFZLEVBR1osb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFHUCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsd0JBQXdCLEVBSXhCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxF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QUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sS0FBSztzQkFESixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhclNlcnZpY2UsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnJlYWRjcnVtYkl0ZW0sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRTZXR0aW5ncyxcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSwgdmFsdWVzIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRyxcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRSxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBASW5wdXQoKVxuICBjYW5Db3B5ID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgY2FuRGVsZXRlID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgYnJlYWRjcnVtYlNldHRpbmdzOiBCcmVhZGNydW1iSXRlbTtcbiAgQElucHV0KClcbiAgc2hvd0NvbnRleHRIZWxwQnV0dG9uID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgdG8gdHJhbnNsYXRlIHdpZGdldCB0aXRsZXMuIEhvd2V2ZXIsIGRhc2hib2FyZCdzIG93biBzZXR0aW5nIHRha2VzIHByZWNlZGVuY2UuIEl0IGRvZXMgbm90IG92ZXJyaWRlIGRhc2hib2FyZCdzIHNldHRpbmcgKi9cbiAgQElucHV0KCkgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIaWRlcyBkYXNoYm9hcmQgYXZhaWxhYmlsaXR5IHNlbGVjdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGhpZGVBdmFpbGFiaWxpdHkgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgY2xhc3MgPSAnJztcblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlOiBDb250ZXh0RGFzaGJvYXJkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoQ09OVEVYVF9EQVNIQk9BUkRfQ09ORklHKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBDb250ZXh0RGFzaGJvYXJkQ29uZmlnLFxuICAgIHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWw6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvbkJhclNlcnZpY2U6IEFjdGlvbkJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgIHRoaXMubG9hZENvbnRleHREYXNoYm9hcmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2FkTmFtZWREYXNoYm9hcmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZGFzaGJvYXJkIHdpZGdldHMgdG8gdGhlIGRlZmF1bHQgd2lkZ2V0cy5cbiAgICovXG4gIGFzeW5jIHJlc3RvcmUoKSB7XG4gICAgY29uc3QgbWVzZyA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byByZXNldCB0aGlzIGRhc2hib2FyZC4gQWxsIGNoYW5nZXMgdG8gdGhlIGRhc2hib2FyZCB3aWxsIGdldCBsb3N0IGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShnZXR0ZXh0KCdSZXNldCBkYXNoYm9hcmQnKSwgbWVzZywgU3RhdHVzLldBUk5JTkcsIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ1Jlc2V0YGRhc2hib2FyZGAnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UubWFwV2lkZ2V0cyh0aGlzLmRlZmF1bHRXaWRnZXRzKTtcbiAgICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgICAgYXdhaXQgdGhpcy5vbkxvYWQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYWxsIGRhc2hib2FyZHMgY2hpbGRyZW4ncy4gVXNlZnVsIGZvciBwb3NpdGlvbiBjaGFuZ2VzIG9uIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgdG8gY2hhbmdlLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQ6IERhc2hib2FyZENoaWxkQ2hhbmdlIHwgRGFzaGJvYXJkQ2hhbmdlKSB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gY2hpbGQ7XG4gICAgY29uc3QgZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0ID0gdGhpcy5tbztcbiAgICBjb25zdCBtYXBwZWRDaGlsZHJlbjogeyBbaWQ6IHN0cmluZ106IFdpZGdldCB9ID0ga2V5QnkoXG4gICAgICBjaGlsZHJlbi5tYXAoYyA9PiB0aGlzLmNvbXBvbmVudFRvV2lkZ2V0KGMpKSxcbiAgICAgICdpZCdcbiAgICApO1xuICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBtYXBwZWRDaGlsZHJlbjtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUoZGFzaGJvYXJkTU8pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgZGFzaGJvYXJkIGFuZCBjdXJyZW50IGNvbnRleHQgdG8gYSBjbGlwYm9hcmQuXG4gICAqL1xuICBhc3luYyBjb3B5RGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IHZpZXdDb250ZXh0ID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YT8uY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuY29weUNsaXBib2FyZCA9IHtcbiAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICBjb250ZXh0OiBjbG9uZURlZXAoe1xuICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgY29udGV4dERhdGE6IHRoaXMuY29udGV4dFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgaWYgKHZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICBjb25zdCBtc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ0Rhc2hib2FyZCBjb3BpZWQuIE5hdmlnYXRlIHRvIHRoZSBkZXNpcmVkIHt7IGN0eCB9fSBhbmQgc2VsZWN0IFwiUGFzdGUgZGFzaGJvYXJkXCInLFxuICAgICAgICB7IGN0eCB9XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uQmFyU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRFTEVURV9EQVNIQk9BUkQsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5ERUxFVEUsXG4gICAgICBuYW1lOiB0aGlzLmRhc2hib2FyZC5uYW1lLFxuICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKHRoaXMuY29udGV4dClcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgY3VycmVudCBkYXNoYm9hcmRcbiAgICovXG4gIGFzeW5jIGVkaXREYXNoYm9hcmQoKSB7XG4gICAgY29uc3QgaXNSZXBvcnQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgIGlmIChpc1JlcG9ydCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBwcmlvcml0eSwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXNoYm9hcmQsIHsgbmFtZSwgaWNvbiwgcHJpb3JpdHksIGM4eV9Jc05hdmlnYXRvck5vZGUsIGRlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBkYXNoYm9hcmQ6IHRoaXMuZGFzaGJvYXJkLFxuICAgICAgZGV2aWNlVHlwZTogdGhpcy5jb250ZXh0LnR5cGUsXG4gICAgICBpc0RldmljZVR5cGU6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pLFxuICAgICAgaXNOYW1lZERhc2hib2FyZDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc05hbWVkKHRoaXMubW8pLFxuICAgICAgaGlkZUF2YWlsYWJpbGl0eTogdGhpcy5oaWRlQXZhaWxhYmlsaXR5LFxuICAgICAgaXNSZXBvcnRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfSkuY29udGVudCBhcyBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZE1PID0gY2xvbmVEZWVwKHRoaXMubW8pO1xuICAgICAgY29uc3QgY2ZnID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKGlzUmVwb3J0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgaWNvbiwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgcHJpb3JpdHksIGRlc2NyaXB0aW9uLCAuLi5kYXNoYm9hcmRDZmcgfSA9IGNmZztcbiAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZCA9IGRhc2hib2FyZENmZztcbiAgICAgICAgdGhpcy51cGRhdGVSZXBvcnQoe1xuICAgICAgICAgIGlkOiB0aGlzLmNvbnRleHQuaWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkID0gY2ZnO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnJlZnJlc2hUYWJzKGRhc2hib2FyZE1PKTtcbiAgICAgIHRoaXMub25Mb2FkKCk7XG4gICAgICBtb2RhbC5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcGFydGlhbENsb25lU2VsZWN0ZWQgPSBzZWxlY3RlZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc2VsZWN0ZWQsXG4gICAgICAgICAgZGF0YTogY2xvbmVEZWVwKHNlbGVjdGVkLmRhdGEpXG4gICAgICAgIH1cbiAgICAgIDogc2VsZWN0ZWQ7XG5cbiAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhID8gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhIDogdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGFydGlhbDxXaWRnZXRDb25maWdDb21wb25lbnQ+ID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogYWN0aXZlQ29udGV4dCxcbiAgICAgIHNlbGVjdGVkOiBwYXJ0aWFsQ2xvbmVTZWxlY3RlZFxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1sZycsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgIH0pLmNvbnRlbnQgYXMgV2lkZ2V0Q29uZmlnQ29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5ld1dpZGdldCA9IGF3YWl0IG1vZGFsLnJlc3VsdDtcbiAgICAgIGlmICghdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuW25ld1dpZGdldC5pZF0gPSBuZXdXaWRnZXQ7XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICAgIG5ld1dpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMobmV3V2lkZ2V0KTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlV2lkZ2V0KG5ld1dpZGdldCk7XG4gICAgICBtb2RhbC5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgd2lkZ2V0IG9yIGFkZHMgYSBuZXcgb25lIGlmIGl0IGRvZXNuJ3QgZXhpc3Qgb25cbiAgICogdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHdpZGdldCBUaGUgbmV3IHdpZGdldFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlV2lkZ2V0KHdpZGdldCkge1xuICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRoaXMud2lkZ2V0cywgeyBpZDogd2lkZ2V0LmlkIH0pO1xuICAgIGNvbnN0IGlzTmV3ID0gaW5kZXggPT09IC0xO1xuICAgIGNvbnN0IG1hcHBlZFdpZGdldCA9IGF3YWl0IHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KTtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKG1hcHBlZFdpZGdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2lkZ2V0cy5zcGxpY2UoaW5kZXgsIDEsIG1hcHBlZFdpZGdldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSB3aWRnZXQgYW5kIHJlYXJyYW5nZXMgdGhlIHJlbWFpbmluZyBvbmVzXG4gICAqIGlmIG5lY2Vzc2FyeS5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlV2lkZ2V0KGNoYW5nZTogV2lkZ2V0Q2hhbmdlKSB7XG4gICAgY29uc3Qgd2lkZ2V0VGl0bGUgPSBjaGFuZ2Uud2lkZ2V0LnRpdGxlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ1JlbW92ZSB3aWRnZXQnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICdZb3UgYXJlIGFib3V0IHRvIHJlbW92ZSB3aWRnZXQgXCJ7eyB3aWRnZXRUaXRsZSB9fVwiIGZyb20geW91ciBkYXNoYm9hcmQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICAgICksXG4gICAgICAgICAgeyB3aWRnZXRUaXRsZSB9XG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnUmVtb3ZlJyksXG4gICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG9uIGNhbmNlbDogZG8gbm90aGluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHdpZGdldCwgc291cmNlIH0gPSBjaGFuZ2U7XG4gICAgICBkZWxldGUgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuW3dpZGdldC5pZF07XG4gICAgICBjb25zdCByZW1vdmVkID0gdGhpcy53aWRnZXRzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IHdpZGdldC5pZCk7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKHRoaXMud2lkZ2V0cy5pbmRleE9mKHJlbW92ZWQpLCAxKTtcblxuICAgICAgY29uc3QgeyBkYXNoYm9hcmQgfSA9IHNvdXJjZTtcbiAgICAgIGRhc2hib2FyZC5jaGlsZHJlbiA9IGRhc2hib2FyZC5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmRhdGEuaWQgIT09IHdpZGdldC5pZCk7XG5cbiAgICAgIC8vIHVzaW5nIHNldFRpbWVvdXQgdG8gZ2l2ZSB0aGUgY29tcG9uZW50IHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0LlxuICAgICAgY29uc3Qgc2xlZXAgPSB0aW1lb3V0ID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcblxuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2Uoc291cmNlKTtcbiAgICAgIGNoaWxkLmNvbGxhcHNlVXBBbGwoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIGFkZERhc2hib2FyZENsYXNzVG9Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICByZW1vdmVEYXNoYm9hcmRDbGFzc0Zyb21Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGRhc2hib2FyZCBzZXR0aW5ncyB0byBmcm96ZW4gb3IgdmljZSB2ZXJzYS5cbiAgICogQHBhcmFtIHNldHRpbmdzIFRoZSBjdXJyZW50IHNldHRpbmdzIG9mIHRoZSBkYXNoYm9hcmQuXG4gICAqL1xuICBhc3luYyB0b2dnbGVGcmVlemUoc2V0dGluZ3M6IERhc2hib2FyZFNldHRpbmdzKSB7XG4gICAgdGhpcy50b2dnbGVJc0Zyb3plbkZsYWcoc2V0dGluZ3MpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICAgIGlmICh0aGlzLmRhc2hib2FyZC5pc0Zyb3plbikge1xuICAgICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnWW91ciBkYXNoYm9hcmQgaXMgbG9ja2VkIG5vdy4nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnWW91ciBkYXNoYm9hcmQgaXMgdW5sb2NrZWQgbm93LicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIHRoaXMudG9nZ2xlSXNGcm96ZW5GbGFnKHNldHRpbmdzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJlcG9ydChtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUobW8pO1xuICAgIHRoaXMuY29udGV4dCA9IHJlcy5kYXRhO1xuICAgIGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YSA9IHRoaXMuY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGVOYXZpZ2F0b3JJdGVtKHJlcy5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlSXNGcm96ZW5GbGFnKHNldHRpbmdzOiBEYXNoYm9hcmRTZXR0aW5ncykge1xuICAgIHNldHRpbmdzLmlzRnJvemVuID0gIXNldHRpbmdzLmlzRnJvemVuO1xuICAgIHRoaXMuZGFzaGJvYXJkLmlzRnJvemVuID0gc2V0dGluZ3MuaXNGcm96ZW47XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0RGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZGFzaGJvYXJkIH0pID0+IHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGE7XG4gICAgICB0aGlzLnRpdGxlID0gdGhpcy5jb250ZXh0Py5uYW1lO1xuICAgICAgdGhpcy5tbyA9IGRhc2hib2FyZDtcbiAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgdGhpcy5wYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkLCB0aGlzLm1vLm93bmVyLCB0aGlzLmNvbnRleHQ/LnR5cGUpO1xuICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gZW5hYmxlIHRyYW5zbGF0aW9uIGZvciB3aWRnZXRzIHdpdGhpbiB0aGUgZGFzaGJvYXJkLCB0aGUgXCJ0cmFuc2xhdGVXaWRnZXRUaXRsZVwiIGZsYWcgbXVzdCBiZSBlbmFibGVkLlxuICAgKiBUaGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgcGF0Y2hlZCwgYXMgdGhlIFwiU2Vuc29yIEFwcFwiIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBzZXR0aW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZCwgb3duZXI6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjOHlfU2Vuc29yUGhvbmUnICYmIG93bmVyLmluY2x1ZGVzKCdkZXZpY2VfcGhvbmUnKSkge1xuICAgICAgZGFzaGJvYXJkLnRyYW5zbGF0ZVdpZGdldFRpdGxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWROYW1lZERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZSh0aGlzLm5hbWUsIHRoaXMuZGVmYXVsdFdpZGdldHMsIHRoaXMuY29udGV4dClcbiAgICAgIC5zdWJzY3JpYmUobW8gPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbnRleHQgfHwge307XG4gICAgICAgIHRoaXMubW8gPSBtbztcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQgPSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uTG9hZCh0cmFja0V4cGVyaWVuY2U/OiBib29sZWFuKSB7XG4gICAgY29uc3QgY2FuRWRpdERhc2hib2FyZCA9IGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuY2FuRWRpdERhc2hib2FyZCh0aGlzLm1vKTtcbiAgICB0aGlzLmRpc2FibGVkID0gIWNhbkVkaXREYXNoYm9hcmQ7XG4gICAgdGhpcy5jYW5Db3B5ID1cbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VEYXNoYm9hcmQodGhpcy5tbykgfHxcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzR3JvdXBEYXNoYm9hcmQodGhpcy5tbyk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2hpbGRyZW4gPSBjbG9uZURlZXAodGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcbiAgICBjb25zdCBpc1JlcG9ydCA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNSZXBvcnQodGhpcy5tbyk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICdjOHktZ3JpZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgZGFzaGJvYXJkOiB0cnVlLFxuICAgICAgLi4udGhpcy5kYXNoYm9hcmQuY2xhc3Nlc1xuICAgIH07XG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9ICF0aGlzLmNhbkNvcHlEYXNoYm9hcmQoKTtcbiAgICB0aGlzLndpZGdldHMgPSBhd2FpdCBQcm9taXNlLmFsbDxXaWRnZXQ+KFxuICAgICAgdmFsdWVzKGRhc2hib2FyZENoaWxkcmVuKS5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQpO1xuICAgICAgICBpZiAoaXNEZXZpY2VUeXBlKSB7XG4gICAgICAgICAgdGhpcy5hcHBseURldmljZVRhcmdldCh3aWRnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFja0V4cGVyaWVuY2UpIHtcbiAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdsb2FkV2lkZ2V0Jywge1xuICAgICAgICAgICAgd2lkZ2V0TmFtZTogd2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmNsYXNzID0gT2JqZWN0LmtleXMoZGFzaGJvYXJkQ2xhc3Nlcykuam9pbignICcpO1xuICAgIGlmIChpc1JlcG9ydCkge1xuICAgICAgdGhpcy5hZGRSZXBvcnREYXNoYm9hcmRTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICBpc1JlcG9ydFxuICAgICAgICA/IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLlJFUE9SVFNcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfVklFVyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuTE9BRCxcbiAgICAgICAgbmFtZTogdGhpcy5kYXNoYm9hcmQubmFtZSxcbiAgICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBpc1JlcG9ydFxuICAgICAgICAgID8gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULlJFUE9SVFxuICAgICAgICAgIDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRDb250ZXh0Rm9yR1ModGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQ6IFdpZGdldCkge1xuICAgIGNvbnN0IGhhc0hlYWRlckNsYXNzID0gV0lER0VUX0hFQURFUl9DTEFTU0VTLmZpbmQoXG4gICAgICBlbCA9PiB3aWRnZXQuY2xhc3NlcyAmJiB3aWRnZXQuY2xhc3Nlc1tlbC5jbGFzc11cbiAgICApO1xuICAgIGNvbnN0IHdpZGdldENsYXNzZXMgPSBoYXNIZWFkZXJDbGFzc1xuICAgICAgPyB7IC4uLndpZGdldC5jbGFzc2VzIH1cbiAgICAgIDogeyAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLCAuLi53aWRnZXQuY2xhc3NlcyB9O1xuICAgIHJldHVybiB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIFtrZWJhYkNhc2Uod2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lKV06IHRydWUsXG4gICAgICAuLi53aWRnZXRDbGFzc2VzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9uZW50VG9XaWRnZXQoY2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9taXQoY2hpbGQuZGF0YSwgWydjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcsICd0cmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCddKSwgLy8gcmVtb3ZlIGxlZ2FjeVxuICAgICAgLi4uKHtcbiAgICAgICAgX3g6IGNoaWxkLngsXG4gICAgICAgIF95OiBjaGlsZC55LFxuICAgICAgICBfd2lkdGg6IGNoaWxkLndpZHRoLFxuICAgICAgICBfaGVpZ2h0OiBjaGlsZC5oZWlnaHRcbiAgICAgIH0gYXMgV2lkZ2V0KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFJlcG9ydERhc2hib2FyZFNldHRpbmdzKCkge1xuICAgIHRoaXMuc2V0VGl0bGUgPSB0cnVlO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQubmFtZTtcbiAgICB0aGlzLmJyZWFkY3J1bWJTZXR0aW5ncyA9IHtcbiAgICAgIGljb246ICd0aCcsXG4gICAgICBsYWJlbDogJ1JlcG9ydHMnLFxuICAgICAgcGF0aDogJ3JlcG9ydHMnXG4gICAgfTtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5Db3B5RGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQgPSBldmVyeSh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNoaWxkLmNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbnN0IGRhdGFQb2ludHMgPSBjb25maWcuZGF0YXBvaW50cyB8fCBbXTtcbiAgICAgIHJldHVybiAhKFxuICAgICAgICAoY29uZmlnLmRldmljZSAmJiBjb25maWcuZGV2aWNlLmlkICE9PSB0aGlzLmNvbnRleHQuaWQpIHx8XG4gICAgICAgIHNvbWUoZGF0YVBvaW50cywgZGF0YVBvaW50ID0+IGRhdGFQb2ludC5fX3RhcmdldD8uaWQgIT09IHRoaXMuY29udGV4dC5pZClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQ7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgKm5nSWY9XCJ0aXRsZVwiPlxuICB7eyB0aXRsZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCItMVwiXG4gICpuZ0lmPVwiZGVmYXVsdFdpZGdldHMubGVuZ3RoID4gMFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVzZXQgZGFzaGJvYXJkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcHgtZXZlbnQ9XCJSZXNldCBkYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIFtkaXNhYmxlZF09XCJkYXNoYm9hcmQ/LmlzRnJvemVuIHx8IGRpc2FibGVkXCJcbiAgICBkYXRhLWN5PVwiY29udGV4dC1kYXNoYm9hcmQtLWJ1dHRvbi1yZXNldC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cInJlc2V0XCJcbiAgICA+PC9pPlxuICAgIHt7ICdSZXNldCBkYXNoYm9hcmQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL3VzZXJzLWd1aWRlL2NvY2twaXQvI2Rhc2hib2FyZHNcIlxuICAqbmdJZj1cInNob3dDb250ZXh0SGVscEJ1dHRvblwiXG4+PC9jOHktaGVscD5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNGcm96ZW46IGRhc2hib2FyZD8uaXNGcm96ZW4sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUgPz8gdHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZC5uYW1lIHx8IHRpdGxlIDogdW5kZWZpbmVkLFxuICAgIHdpZGdldE1hcmdpbjogZGFzaGJvYXJkPy53aWRnZXRNYXJnaW4sXG4gICAgY2FuQ29weTogY2FuQ29weSxcbiAgICBpc0NvcHlEaXNhYmxlZDogaXNDb3B5RGlzYWJsZWQsXG4gICAgZGVmYXVsdFdpZHRoOiBkYXNoYm9hcmQ/LmNvbHVtbnMgPj0gMjQgPyA4IDogNCxcbiAgICBjb2x1bW5zOiBkYXNoYm9hcmQ/LmNvbHVtbnMgfHwgMTJcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIChvbkZyZWV6ZSk9XCJ0b2dnbGVGcmVlemUoJGV2ZW50KVwiXG4gIChvbkNoYW5nZURhc2hib2FyZCk9XCJ1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbigkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25DaGFuZ2VTdGFydCk9XCJhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpXCJcbiAgKG9uQ2hhbmdlRW5kKT1cInJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKVwiXG4gIChvbkVkaXREYXNoYm9hcmQpPVwiZWRpdERhc2hib2FyZCgpXCJcbiAgKG9uQ29weURhc2hib2FyZCk9XCJjb3B5RGFzaGJvYXJkKClcIlxuICAob25EZWxldGVEYXNoYm9hcmQpPVwiZGVsZXRlRGFzaGJvYXJkKClcIlxuPjwvYzh5LXdpZGdldHMtZGFzaGJvYXJkPlxuIl19
|
|
@@ -78,13 +78,13 @@ export class DashboardAvailabilityComponent {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
-
DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
|
|
81
|
+
DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
|
|
82
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
|
|
83
83
|
type: Component,
|
|
84
|
-
args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
|
|
84
|
+
args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
|
|
85
85
|
}], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i2.GainsightService }]; }, propDecorators: { globalRolesIds: [{
|
|
86
86
|
type: Input
|
|
87
87
|
}], globalRolesIdsChange: [{
|
|
88
88
|
type: Output
|
|
89
89
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbkIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFNbkMsTUFBTSxPQUFPLDhCQUE4QjtJQUN6Qzs7O09BR0c7SUFDSCxJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxHQUF5QjtRQUMxQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyx5QkFBeUIsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHLHlCQUF5QixDQUFDO1lBQ2pELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFRRCxZQUNVLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFEbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBVGxDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQzFFLHFCQUFnQixHQUFXLEVBQUUs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QyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUM7YUFDN0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7OzJIQS9FVSw4QkFBOEI7K0dBQTlCLDhCQUE4QiwyS0NiM0MsZzJCQTRCQTsyRkRmYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNEJBQTRCO3NJQVNsQyxjQUFjO3NCQURqQixLQUFLO2dCQVdJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElVc2VyR3JvdXAsIFVzZXJHcm91cFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlLCBJdGVtIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHbG9iYWxSb2xlcyxcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGFzaGJvYXJkLWF2YWlsYWJpbGl0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRBdmFpbGFiaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSWRzIG9mIGdsb2JhbCByb2xlcyBhc3NpZ25lZCB0byB0aGUgZGFzaGJvYXJkIG9yIGEgc3RyaW5nIFwiYWxsXCIgaW5kaWNhdGluZyB0aGUgc2VsZWN0aW9uIG9mIGFsbCBnbG9iYWwgcm9sZXMuXG4gICAqIFRoZSB2YWx1ZSB1bmRlZmluZWQgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50IHRvICdhbGwnLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGdsb2JhbFJvbGVzSWRzKCk6IERhc2hib2FyZEdsb2JhbFJvbGVzIHtcbiAgICByZXR1cm4gdGhpcy5fZ2xvYmFsUm9sZXNJZHM7XG4gIH1cbiAgc2V0IGdsb2JhbFJvbGVzSWRzKGlkczogRGFzaGJvYXJkR2xvYmFsUm9sZXMpIHtcbiAgICBpZiAoIWlkcyB8fCBpZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQpIHtcbiAgICAgIHRoaXMuX2dsb2JhbFJvbGVzSWRzID0gQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZ2xvYmFsUm9sZXNJZHMgPSBbLi4uaWRzXTtcbiAgfVxuICBAT3V0cHV0KCkgZ2xvYmFsUm9sZXNJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZEdsb2JhbFJvbGVzPigpO1xuICBnbG9iYWxSb2xlc0l0ZW1zOiBJdGVtW10gPSBbXTtcbiAgZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkOiBJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBnbG9iYWxSb2xlczogSVVzZXJHcm91cFtdID0gW107XG4gIHByaXZhdGUgUEFHRV9TSVpFID0gMTAwO1xuICBwcml2YXRlIF9nbG9iYWxSb2xlc0lkczogRGFzaGJvYXJkR2xvYmFsUm9sZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyR3JvdXBTZXJ2aWNlOiBVc2VyR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5nbG9iYWxSb2xlcyA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsUm9sZXMoKTtcbiAgICB0aGlzLmdsb2JhbFJvbGVzSXRlbXMgPSB0aGlzLm1hcEdsb2JhbFJvbGVzVG9JdGVtcygpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZEdsb2JhbFJvbGVzSXRlbXMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoaXRlbXM6IEl0ZW1bXSkge1xuICAgIGlmICghaXRlbXMgfHwgIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsSXRlbXNTZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLmdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZCA9IGl0ZW1zO1xuXG4gICAgaWYgKGFsbEl0ZW1zU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHNDaGFuZ2UuZW1pdChBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfQVZBSUxBQklMSVRZLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5BUFBMWV9HTE9CQUxfUk9MRVNfQ0hBTkdFUyxcbiAgICAgICAgZ2xvYmFsUm9sZXM6IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEdsb2JhbFJvbGVzSWRzID0gaXRlbXMubWFwKGkgPT4gaS5pZCk7XG4gICAgICB0aGlzLmdsb2JhbFJvbGVzSWRzQ2hhbmdlLmVtaXQoWy4uLnNlbGVjdGVkR2xvYmFsUm9sZXNJZHNdKTtcblxuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRBU0hCT0FSRF9BVkFJTEFCSUxJVFksXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkFQUExZX0dMT0JBTF9ST0xFU19DSEFOR0VTLFxuICAgICAgICBnbG9iYWxSb2xlczogc2VsZWN0ZWRHbG9iYWxSb2xlc0lkcz8uc29ydCgpPy5qb2luKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0R2xvYmFsUm9sZXMoKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnVzZXJHcm91cFNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSB9KSkuZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwR2xvYmFsUm9sZXNUb0l0ZW1zKCk6IEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsUm9sZXMubWFwKCh7IG5hbWUsIGlkIH0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgaWRcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkR2xvYmFsUm9sZXNJdGVtcygpOiBJdGVtW10ge1xuICAgIGlmICghdGhpcy5nbG9iYWxSb2xlc0lkcyB8fCB0aGlzLmdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKSB7XG4gICAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlc0lkc1xuICAgICAgLm1hcChnbG9iYWxSb2xlSWQgPT4gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zLmZpbmQoZ1IgPT4gZ1IuaWQgPT09IGdsb2JhbFJvbGVJZCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG59XG4iLCI8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMjQgbS1iLTBcIj5cbiAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCI+XG4gICAgPHNwYW4+e3sgJ0F2YWlsYWJpbGl0eWBvZiBkYXNoYm9hcmQgYmFzZWQgb24gcGVybWlzc2lvbnNgJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxsYWJlbCBmb3I9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tci00XCIgaWQ9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgIHt7ICdHbG9iYWwgcm9sZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICdTZWxlY3QgdGhlIGdsb2JhbCByb2xlcyBmb3Igd2hpY2ggdGhlIGRhc2hib2FyZCB3aWxsIGJlIGF2YWlsYWJsZScgfCB0cmFuc2xhdGVcbiAgICAgIH19XCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgPlxuICAgIDwvYnV0dG9uPlxuICA8L2xhYmVsPlxuICA8Yzh5LXNlbGVjdFxuICAgIHN0eWxlPVwid2lkdGg6IDE4MHB4XCJcbiAgICBbaXRlbXNdPVwiZ2xvYmFsUm9sZXNJdGVtc1wiXG4gICAgW3NlbGVjdGVkXT1cImdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZFwiXG4gICAgKG9uQ2hhbmdlKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiXG4gID48L2M4eS1zZWxlY3Q+XG48L2M4eS1mb3JtLWdyb3VwPlxuIl19
|