@c8y/ngx-components 1021.73.3 → 1021.73.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/branding/shared/data/store-branding.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
- package/core/beta-feature/beta-preview.service.d.ts +1 -1
- package/core/beta-feature/beta-preview.service.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +4 -1
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/esm2022/branding/shared/data/store-branding.service.mjs +13 -4
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +4 -5
- package/esm2022/core/beta-feature/beta-preview.service.mjs +10 -6
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +27 -14
- package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selector.component.mjs +3 -3
- package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +12 -3
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -4
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +35 -18
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +314 -41
- package/locales/es.po +315 -42
- package/locales/fr.po +315 -42
- package/locales/ja_JP.po +308 -47
- package/locales/ko.po +314 -42
- package/locales/locales.pot +5 -27
- package/locales/nl.po +312 -40
- package/locales/pl.po +315 -42
- package/locales/pt_BR.po +312 -39
- package/locales/zh_CN.po +312 -40
- package/locales/zh_TW.po +313 -42
- package/package.json +1 -1
|
@@ -37,10 +37,10 @@ export class PackageVersionsComponent {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageVersionsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.ContextRouteService }, { token: i2.PluginsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageVersionsComponent, selector: "c8y-package-versions", ngImport: i0, template: "<c8y-title>{{ package?.name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"package?.name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Versions' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"card content-fullpage d-grid\"\n [ngClass]=\"{ 'grid__col--6-6-0': !selectedPlugin, 'grid__col--0-6-6': !!selectedPlugin }\"\n>\n <c8y-package-versions-list\n class=\"d-contents\"\n (onVersionSelect)=\"selectVersion($event)\"\n ></c8y-package-versions-list>\n\n <!-- Package contents -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedVersion }\"\n >\n <div class=\"large-padding card-header separator visible-sm visible-xs fit-w sticky-top\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-8\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"clearSelectedVersion()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n <div
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageVersionsComponent, selector: "c8y-package-versions", ngImport: i0, template: "<c8y-title>{{ package?.name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"package?.name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Versions' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"card content-fullpage d-grid\"\n [ngClass]=\"{ 'grid__col--6-6-0': !selectedPlugin, 'grid__col--0-6-6': !!selectedPlugin }\"\n>\n <c8y-package-versions-list\n class=\"d-contents\"\n (onVersionSelect)=\"selectVersion($event)\"\n ></c8y-package-versions-list>\n\n <!-- Package contents -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedVersion }\"\n >\n <div class=\"large-padding card-header separator visible-sm visible-xs fit-w sticky-top\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-8\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"clearSelectedVersion()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n <div class=\"card-title\">\n {{ packageContentsTitle | translate: { selectedVersion } }}\n </div>\n </div>\n </div>\n <div class=\"card-header large-padding separator sticky-top visible-md visible-lg\">\n <div class=\"card-title\">\n <ng-container *ngIf=\"selectedVersion\">\n {{ packageContentsTitle | translate: { selectedVersion } }}\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <c8y-package-contents\n [selectedVersion]=\"selectedVersion\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-package-contents>\n </div>\n </div>\n\n <!-- Plugin readme -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedPlugin }\"\n >\n <div\n class=\"card-header separator sticky-top\"\n *ngIf=\"selectedPlugin\"\n >\n <button\n class=\"btn-clean\"\n (click)=\"closeOverview()\"\n >\n <i c8yIcon=\"caret-back\"></i>\n {{ 'Back to package versions overview ' | translate }}\n </button>\n </div>\n <div\n class=\"card-block p-l-16 p-r-16 overflow-visible\"\n *ngIf=\"selectedPlugin\"\n >\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of "README", add the file "README.md" to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i4.PackageContentsComponent, selector: "c8y-package-contents", inputs: ["selectedVersion", "selectedPlugin"], outputs: ["showOverview"] }, { kind: "component", type: i5.PackageVersionsListComponent, selector: "c8y-package-versions-list", outputs: ["onVersionSelect"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i2.MarkdownToHtmlPipe, name: "markdownToHtml" }] }); }
|
|
41
41
|
}
|
|
42
42
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageVersionsComponent, decorators: [{
|
|
43
43
|
type: Component,
|
|
44
|
-
args: [{ selector: 'c8y-package-versions', template: "<c8y-title>{{ package?.name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"package?.name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Versions' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"card content-fullpage d-grid\"\n [ngClass]=\"{ 'grid__col--6-6-0': !selectedPlugin, 'grid__col--0-6-6': !!selectedPlugin }\"\n>\n <c8y-package-versions-list\n class=\"d-contents\"\n (onVersionSelect)=\"selectVersion($event)\"\n ></c8y-package-versions-list>\n\n <!-- Package contents -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedVersion }\"\n >\n <div class=\"large-padding card-header separator visible-sm visible-xs fit-w sticky-top\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-8\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"clearSelectedVersion()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n <div
|
|
44
|
+
args: [{ selector: 'c8y-package-versions', template: "<c8y-title>{{ package?.name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"package?.name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Versions' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"card content-fullpage d-grid\"\n [ngClass]=\"{ 'grid__col--6-6-0': !selectedPlugin, 'grid__col--0-6-6': !!selectedPlugin }\"\n>\n <c8y-package-versions-list\n class=\"d-contents\"\n (onVersionSelect)=\"selectVersion($event)\"\n ></c8y-package-versions-list>\n\n <!-- Package contents -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedVersion }\"\n >\n <div class=\"large-padding card-header separator visible-sm visible-xs fit-w sticky-top\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-8\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"clearSelectedVersion()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n <div class=\"card-title\">\n {{ packageContentsTitle | translate: { selectedVersion } }}\n </div>\n </div>\n </div>\n <div class=\"card-header large-padding separator sticky-top visible-md visible-lg\">\n <div class=\"card-title\">\n <ng-container *ngIf=\"selectedVersion\">\n {{ packageContentsTitle | translate: { selectedVersion } }}\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <c8y-package-contents\n [selectedVersion]=\"selectedVersion\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-package-contents>\n </div>\n </div>\n\n <!-- Plugin readme -->\n <div\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedPlugin }\"\n >\n <div\n class=\"card-header separator sticky-top\"\n *ngIf=\"selectedPlugin\"\n >\n <button\n class=\"btn-clean\"\n (click)=\"closeOverview()\"\n >\n <i c8yIcon=\"caret-back\"></i>\n {{ 'Back to package versions overview ' | translate }}\n </button>\n </div>\n <div\n class=\"card-block p-l-16 p-r-16 overflow-visible\"\n *ngIf=\"selectedPlugin\"\n >\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of "README", add the file "README.md" to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n" }]
|
|
45
45
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.ContextRouteService }, { type: i2.PluginsService }] });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMtdmVyc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZXMtdmVyc2lvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZXMtdmVyc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFNN0IsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQyxZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUY5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFWeEMsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFLM0IseUJBQW9CLEdBQUcsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFNOUUsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDM0YsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUF5QjtRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxTQUFTLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlO1FBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7K0dBdENVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDREQ2RyQyxreUdBb0dBOzs0RkR0RmEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGFja2FnZS12ZXJzaW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlcy12ZXJzaW9ucy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUGFja2FnZVZlcnNpb25zQ29tcG9uZW50IHtcbiAgcGFja2FnZTogSUFwcGxpY2F0aW9uID0ge307XG4gIHNlbGVjdGVkVmVyc2lvbjogc3RyaW5nO1xuICBzZWxlY3RlZFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW47XG4gIHBsdWdpbkJhc2VVcmw6IHN0cmluZztcbiAgcGx1Z2luTWFya2Rvd246IHN0cmluZztcbiAgcGFja2FnZUNvbnRlbnRzVGl0bGUgPSBnZXR0ZXh0KCdWZXJzaW9uIHt7IHNlbGVjdGVkVmVyc2lvbiB9fSBwYWNrYWdlIGNvbnRlbnRzJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhY2thZ2UgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk/LmNvbnRleHREYXRhO1xuICB9XG5cbiAgYXN5bmMgc2hvd1BsdWdpbk92ZXJ2aWV3KHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICB0aGlzLnNlbGVjdGVkUGx1Z2luID0gcGx1Z2luO1xuICAgIGNvbnN0IGJhc2VVcmwgPSBgL2FwcHMvJHtwbHVnaW4uaWR9L2A7XG4gICAgdGhpcy5wbHVnaW5CYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLnBsdWdpbk1hcmtkb3duID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRSZWFkbWVGaWxlQ29udGVudChiYXNlVXJsKTtcbiAgfVxuXG4gIGNsb3NlT3ZlcnZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFBsdWdpbiA9IG51bGw7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkVmVyc2lvbigpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbiA9IG51bGw7XG4gIH1cblxuICBzZWxlY3RWZXJzaW9uKHZlcnNpb246IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmVyc2lvbiAhPT0gdmVyc2lvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgdGhpcy5jbG9zZU92ZXJ2aWV3KCk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IHBhY2thZ2U/Lm5hbWUgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1hdG9tJ1wiXG4gICAgW2xhYmVsXT1cIidFY29zeXN0ZW0nIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYmlnLXBhcmNlbCdcIlxuICAgIFtsYWJlbF09XCInRXh0ZW5zaW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtwYXRoXT1cIidlY29zeXN0ZW0vZXh0ZW5zaW9uL2V4dGVuc2lvbnMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cInBhY2thZ2U/Lm5hbWUgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cIidWZXJzaW9ucycgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48ZGl2XG4gIGNsYXNzPVwiY2FyZCBjb250ZW50LWZ1bGxwYWdlIGQtZ3JpZFwiXG4gIFtuZ0NsYXNzXT1cInsgJ2dyaWRfX2NvbC0tNi02LTAnOiAhc2VsZWN0ZWRQbHVnaW4sICdncmlkX19jb2wtLTAtNi02JzogISFzZWxlY3RlZFBsdWdpbiB9XCJcbj5cbiAgPGM4eS1wYWNrYWdlLXZlcnNpb25zLWxpc3RcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIChvblZlcnNpb25TZWxlY3QpPVwic2VsZWN0VmVyc2lvbigkZXZlbnQpXCJcbiAgPjwvYzh5LXBhY2thZ2UtdmVyc2lvbnMtbGlzdD5cblxuICA8IS0tIFBhY2thZ2UgY29udGVudHMgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImlubmVyLXNjcm9sbCBzcGxpdC12aWV3X19kZXRhaWxcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NwbGl0LXZpZXdfX2RldGFpbC0tc2VsZWN0ZWQnOiBzZWxlY3RlZFZlcnNpb24gfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtcGFkZGluZyBjYXJkLWhlYWRlciBzZXBhcmF0b3IgdmlzaWJsZS1zbSB2aXNpYmxlLXhzIGZpdC13IHN0aWNreS10b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gdGV4dC1wcmltYXJ5IG0tci04XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRWZXJzaW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QmFjazwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAge3sgcGFja2FnZUNvbnRlbnRzVGl0bGUgfCB0cmFuc2xhdGU6IHsgc2VsZWN0ZWRWZXJzaW9uIH0gfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbGFyZ2UtcGFkZGluZyBzZXBhcmF0b3Igc3RpY2t5LXRvcCB2aXNpYmxlLW1kIHZpc2libGUtbGdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZlcnNpb25cIj5cbiAgICAgICAgICB7eyBwYWNrYWdlQ29udGVudHNUaXRsZSB8IHRyYW5zbGF0ZTogeyBzZWxlY3RlZFZlcnNpb24gfSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgc3BsaXQtdmlld19fbGlzdFwiPlxuICAgICAgPGM4eS1wYWNrYWdlLWNvbnRlbnRzXG4gICAgICAgIFtzZWxlY3RlZFZlcnNpb25dPVwic2VsZWN0ZWRWZXJzaW9uXCJcbiAgICAgICAgW3NlbGVjdGVkUGx1Z2luXT1cInNlbGVjdGVkUGx1Z2luXCJcbiAgICAgICAgKHNob3dPdmVydmlldyk9XCJzaG93UGx1Z2luT3ZlcnZpZXcoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktcGFja2FnZS1jb250ZW50cz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQbHVnaW4gcmVhZG1lIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJpbm5lci1zY3JvbGwgc3BsaXQtdmlld19fZGV0YWlsXCJcbiAgICBbbmdDbGFzc109XCJ7ICdzcGxpdC12aWV3X19kZXRhaWwtLXNlbGVjdGVkJzogc2VsZWN0ZWRQbHVnaW4gfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRQbHVnaW5cIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4tY2xlYW5cIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2VPdmVydmlldygpXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cImNhcmV0LWJhY2tcIj48L2k+XG4gICAgICAgIHt7ICdCYWNrIHRvIHBhY2thZ2UgdmVyc2lvbnMgb3ZlcnZpZXcgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrIHAtbC0xNiBwLXItMTYgb3ZlcmZsb3ctdmlzaWJsZVwiXG4gICAgICAqbmdJZj1cInNlbGVjdGVkUGx1Z2luXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWFya2Rvd24tY29udGVudFwiXG4gICAgICAgICpuZ0lmPVwicGx1Z2luTWFya2Rvd25cIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInBsdWdpbk1hcmtkb3duIHwgbWFya2Rvd25Ub0h0bWw6IHsgYmFzZVVybDogcGx1Z2luQmFzZVVybCB9IHwgYXN5bmNcIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIndXNlci1tYW51YWwnXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBSRUFETUUubWQgZm91bmQgZm9yIHBsdWdpbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc3VidGl0bGVdPVwiXG4gICAgICAgICAgJ1RvIHZpZXcgdGhlIGNvbnRlbnRzIG9mICZxdW90O1JFQURNRSZxdW90OywgYWRkIHRoZSBmaWxlICZxdW90O1JFQURNRS5tZCZxdW90OyB0byB0aGUgcGx1Z2luLidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIXBsdWdpbk1hcmtkb3duXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -214,7 +214,7 @@ export class DatapointsGraphWidgetConfigComponent {
|
|
|
214
214
|
(this.config?.datapoints?.filter(dp => dp.__active)?.length || 0) > 0;
|
|
215
215
|
}
|
|
216
216
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsGraphWidgetConfigComponent, deps: [{ token: i1.WidgetConfigComponent, optional: true }, { token: i1.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsGraphWidgetConfigComponent, isStandalone: true, selector: "c8y-datapoints-graph-widget-config", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [ChartEventsService, ChartAlarmsService], ngImport: i0, template: "<div class=\"no-card-context d-flex-md fit-h--md\">\n <div class=\"col-md-5 bg-level-1 conf-col inner-scroll p-l-0\">\n <div class=\"p-l-24\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n </div>\n\n <div class=\"col-md-7 sticky-top p-t-8 inner-scroll widget-preview\">\n <div class=\"p-r-24 d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label class=\"text-12\">{{ 'Options' | translate }}</label>\n <c8y-time-context\n *ngIf=\"\n dateSelection === DATE_SELECTION.CONFIG &&\n formGroup.get('displayDateSelection').value === true\n \"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: config?.displayDateSelection,\n interval: config?.displayDateSelection,\n aggregation: config?.displayAggregationSelection\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n ></c8y-charts>\n\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n\n <form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n >\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching datapoints into single axis.</span>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & Events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i7.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i8.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }] }); }
|
|
217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsGraphWidgetConfigComponent, isStandalone: true, selector: "c8y-datapoints-graph-widget-config", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [ChartEventsService, ChartAlarmsService], ngImport: i0, template: "<div class=\"no-card-context d-flex-md fit-h--md\">\n <div class=\"col-md-5 bg-level-1 conf-col inner-scroll p-l-0\">\n <div class=\"p-l-24\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n </div>\n\n <div class=\"col-md-7 sticky-top p-t-8 inner-scroll widget-preview\">\n <div class=\"p-r-24 d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label class=\"text-12\">{{ 'Options' | translate }}</label>\n <c8y-time-context\n *ngIf=\"\n dateSelection === DATE_SELECTION.CONFIG &&\n formGroup.get('displayDateSelection').value === true\n \"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: config?.displayDateSelection,\n interval: config?.displayDateSelection,\n aggregation: config?.displayAggregationSelection\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n ></c8y-charts>\n\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n\n <form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n >\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i7.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i8.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }] }); }
|
|
218
218
|
}
|
|
219
219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsGraphWidgetConfigComponent, decorators: [{
|
|
220
220
|
type: Component,
|
|
@@ -228,7 +228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
228
228
|
DatapointSelectorModule,
|
|
229
229
|
AlarmEventSelectorModule,
|
|
230
230
|
TimeContextComponent
|
|
231
|
-
], providers: [ChartEventsService, ChartAlarmsService], template: "<div class=\"no-card-context d-flex-md fit-h--md\">\n <div class=\"col-md-5 bg-level-1 conf-col inner-scroll p-l-0\">\n <div class=\"p-l-24\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n </div>\n\n <div class=\"col-md-7 sticky-top p-t-8 inner-scroll widget-preview\">\n <div class=\"p-r-24 d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label class=\"text-12\">{{ 'Options' | translate }}</label>\n <c8y-time-context\n *ngIf=\"\n dateSelection === DATE_SELECTION.CONFIG &&\n formGroup.get('displayDateSelection').value === true\n \"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: config?.displayDateSelection,\n interval: config?.displayDateSelection,\n aggregation: config?.displayAggregationSelection\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n ></c8y-charts>\n\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n\n <form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n >\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching datapoints into single axis.</span>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & Events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n" }]
|
|
231
|
+
], providers: [ChartEventsService, ChartAlarmsService], template: "<div class=\"no-card-context d-flex-md fit-h--md\">\n <div class=\"col-md-5 bg-level-1 conf-col inner-scroll p-l-0\">\n <div class=\"p-l-24\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-level-1 separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n </div>\n\n <div class=\"col-md-7 sticky-top p-t-8 inner-scroll widget-preview\">\n <div class=\"p-r-24 d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label class=\"text-12\">{{ 'Options' | translate }}</label>\n <c8y-time-context\n *ngIf=\"\n dateSelection === DATE_SELECTION.CONFIG &&\n formGroup.get('displayDateSelection').value === true\n \"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: config?.displayDateSelection,\n interval: config?.displayDateSelection,\n aggregation: config?.displayAggregationSelection\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n ></c8y-charts>\n\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n\n <form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n >\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n" }]
|
|
232
232
|
}], ctorParameters: () => [{ type: i1.WidgetConfigComponent, decorators: [{
|
|
233
233
|
type: Optional
|
|
234
234
|
}] }, { type: i1.ContextDashboardComponent, decorators: [{
|
|
@@ -236,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
236
236
|
}] }], propDecorators: { config: [{
|
|
237
237
|
type: Input
|
|
238
238
|
}] } });
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC1jb25maWcvZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC1jb25maWcvZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUVWLFdBQVcsRUFDWCxPQUFPLEVBRVAsaUNBQWlDLEVBQ2xDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUdMLHVCQUF1QixFQUV4QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDdEIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBRUwsd0JBQXdCLEVBRXpC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VUE0UkEsMkNEdk9JLFlBQVksdWdCQUNaLFVBQVUsb3ZEQUNWLFdBQVcsOEJBQ1gsYUFBYSxpa0JBQ2IsYUFBYSwrVkFDYixlQUFlLDJOQUNmLHVCQUF1QixxVEFDdkIsd0JBQXdCLHNVQUN4QixvQkFBb0I7OzRGQUlYLG9DQUFvQztrQkFsQmhELFNBQVM7K0JBQ0Usb0NBQW9DLFFBQ3hDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLG9CQUFvQjtxQkFDckIsYUFDVSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDOzswQkEwQ2hELFFBQVE7OzBCQUNSLFFBQVE7eUNBeENGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgTmdGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge1xuICBDb21tb25Nb2R1bGUsXG4gIENvcmVNb2R1bGUsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIEZvcm1zTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBPbkJlZm9yZVNhdmUsXG4gIFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29uZmlnLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsT3B0aW9ucyxcbiAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50LFxuICBXaWRnZXRDb25maWdDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQge1xuICBBbGFybURldGFpbHMsXG4gIEFsYXJtRXZlbnRTZWxlY3Rvck1vZHVsZSxcbiAgRXZlbnREZXRhaWxzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7XG4gIENoYXJ0QWxhcm1zU2VydmljZSxcbiAgQ2hhcnRFdmVudHNTZXJ2aWNlLFxuICBDaGFydHNDb21wb25lbnQsXG4gIERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsXG4gIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0VGltZVByb3BzLFxuICBEQVRFX1NFTEVDVElPTl9FWFRFTkRFRCxcbiAgVGltZUNvbnRleHRQcm9wc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2VjaGFydCc7XG5pbXBvcnQgeyBUaW1lQ29udGV4dENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvdGltZS1jb250ZXh0JztcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnJyxcbiAgaG9zdDogeyBjbGFzczogJ2QtY29udGVudHMnIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcmVNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIENoYXJ0c0NvbXBvbmVudCxcbiAgICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgICBBbGFybUV2ZW50U2VsZWN0b3JNb2R1bGUsXG4gICAgVGltZUNvbnRleHRDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQ2hhcnRFdmVudHNTZXJ2aWNlLCBDaGFydEFsYXJtc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25CZWZvcmVTYXZlLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtID0gaW5qZWN0KE5nRm9ybSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZSA9IGluamVjdChXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UpO1xuXG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB8IHVuZGVmaW5lZDtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIERBVEVfU0VMRUNUSU9OID0gREFURV9TRUxFQ1RJT05fRVhURU5ERUQ7XG4gIGRhdGVTZWxlY3Rpb246IERBVEVfU0VMRUNUSU9OX0VYVEVOREVEIHwgdW5kZWZpbmVkO1xuICBkYXRlU2VsZWN0aW9uSGVscCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgZ2V0dGV4dChgQ2hvb3NlIGhvdyB0byBzZWxlY3QgYSBkYXRlIHJhbmdlLCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICA8dWwgY2xhc3M9XCJtLWwtMCBwLWwtOCBtLXQtOCBtLWItMFwiPlxuICAgIDxsaT5cbiAgICAgIDxiPldpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gb25seSB0byB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxiPldpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb246PC9iPlxuICAgICAgcmVzdHJpY3RzIHRoZSBkYXRlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0IHZpZXcgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxiPkRhc2hib2FyZCB0aW1lIHJhbmdlOjwvYj5cbiAgICAgIHJlc3RyaWN0cyBkYXRlIHNlbGVjdGlvbiB0byB0aGUgZ2xvYmFsIGRhc2hib2FyZCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICA8L2xpPlxuICA8L3VsPmApXG4gICk7XG4gIGRhdGFwb2ludFNlbGVjdERlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7XG4gICAgc2hvd1JhbmdlOiB0cnVlLFxuICAgIHNob3dDaGFydDogdHJ1ZVxuICB9O1xuICBkYXRhcG9pbnRTZWxlY3Rpb25Db25maWc6IFBhcnRpYWw8RGF0YXBvaW50U2VsZWN0b3JNb2RhbE9wdGlvbnM+ID0ge307XG4gIGFjdGl2ZURhdGFwb2ludHNFeGlzdHMgPSBmYWxzZTtcbiAgYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0RwcyA9IGZhbHNlO1xuICB0aW1lUHJvcHM6IERhdGFwb2ludHNHcmFwaFdpZGdldFRpbWVQcm9wcyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB3aWRnZXRDb25maWc6IFdpZGdldENvbmZpZ0NvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhc2hib2FyZENvbnRleHRDb21wb25lbnQ6IENvbnRleHREYXNoYm9hcmRDb21wb25lbnRcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZz8uZGF0YXBvaW50cz8uZm9yRWFjaChkcCA9PiB0aGlzLmFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkcCkpO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnIHx8IHt9KTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hbGFybXMuc2V0VmFsdWUoXG4gICAgICB0aGlzLmNvbmZpZz8uYWxhcm1zRXZlbnRzQ29uZmlncz8uZmlsdGVyKGFlID0+IGFlLnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJykgYXMgQWxhcm1EZXRhaWxzW11cbiAgICApO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmV2ZW50cy5zZXRWYWx1ZShcbiAgICAgIHRoaXMuY29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoYWUgPT4gYWUudGltZWxpbmVUeXBlID09PSAnRVZFTlQnKSBhcyBFdmVudERldGFpbHNbXVxuICAgICk7XG5cbiAgICB0aGlzLmluaXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVEYXRhcG9pbnRzRXhpc3RzKCk7XG4gICAgdGhpcy5jaGVja0Zvck1hdGNoaW5nRGF0YXBvaW50cygpO1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5hbGFybXMgfHwgW10pLFxuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5ldmVudHMgfHwgW10pXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICB0aGlzLnNldEFjdGl2ZURhdGFwb2ludHNFeGlzdHMoKTtcbiAgICAgIHRoaXMuY2hlY2tGb3JNYXRjaGluZ0RhdGFwb2ludHMoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRUaW1lQ29udGV4dCh0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRlRnJvbSAmJiB0aGlzLmNvbmZpZy5kYXRlVG8pIHtcbiAgICAgIHRoaXMudGltZVByb3BzID0ge1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUodGhpcy5jb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmNvbmZpZz8uZGF0ZVRvKSxcbiAgICAgICAgaW50ZXJ2YWw6IHRoaXMuY29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IHRoaXMuY29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuY29uZmlnPy5yZWFsdGltZSA/IG51bGwgOiB0aGlzLmNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25CZWZvcmVTYXZlKFxuICAgIGNvbmZpZz86IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ1xuICApOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCAmJiBjb25maWcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBvbWl0KHRoaXMuZm9ybUdyb3VwLnZhbHVlLCBbJ2FsYXJtcycsICdldmVudHMnXSksIHtcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5hbGFybXMgfHwgW10pLFxuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5ldmVudHMgfHwgW10pXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGltZVByb3BzQ2hhbmdlZCh0aW1lUHJvcHM6IFRpbWVDb250ZXh0UHJvcHMpOiB2b2lkIHtcbiAgICBpZiAodGltZVByb3BzLnJlYWx0aW1lICE9PSB0aGlzLmNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSk7XG4gICAgfVxuICAgIGlmICh0aW1lUHJvcHMucmVhbHRpbWUpIHtcbiAgICAgIGlmICh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgIT09IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmludGVydmFsKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBpbnRlcnZhbDogdGltZVByb3BzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRjaFZhbHVlcyA9IHtcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKSxcbiAgICAgIGludGVydmFsOiB0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAuLi4odGltZVByb3BzLmFnZ3JlZ2F0aW9uICYmIHsgYWdncmVnYXRpb246IHRpbWVQcm9wcy5hZ2dyZWdhdGlvbiB9KSxcbiAgICAgIC4uLih0aW1lUHJvcHMucmVhbHRpbWUgJiYgeyByZWFsdGltZTogdGltZVByb3BzLnJlYWx0aW1lIH0pXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUocGF0Y2hWYWx1ZXMpO1xuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQodGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMpOiB2b2lkIHtcbiAgICBjb25zdCBpbml0aWFsVGltZVJhbmdlID0ge1xuICAgICAgZGF0ZUZyb206IHRpbWVQcm9wcy5kYXRlRnJvbSxcbiAgICAgIGRhdGVUbzogdGltZVByb3BzLmRhdGVUbyxcbiAgICAgIGludGVydmFsOiB0aW1lUHJvcHMuaW50ZXJ2YWwgfHwgJ2N1c3RvbSdcbiAgICB9O1xuICAgIGlmICghdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpKSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKGluaXRpYWxUaW1lUmFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4udGltZVByb3BzLCAuLi5pbml0aWFsVGltZVJhbmdlIH0pO1xuICB9XG5cbiAgdXBkYXRlVGltZVJhbmdlT25SZWFsdGltZShcbiAgICB0aW1lUmFuZ2U6IFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVJhbmdlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBkYXRlU2VsZWN0aW9uQ2hhbmdlKGRhdGVTZWxlY3Rpb246IERBVEVfU0VMRUNUSU9OX0VYVEVOREVEKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlU2VsZWN0aW9uID0gZGF0ZVNlbGVjdGlvbjtcblxuICAgIGlmIChkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTl9FWFRFTkRFRC5DT05GSUcpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRpc3BsYXlEYXRlU2VsZWN0aW9uLmVuYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRpc3BsYXlEYXRlU2VsZWN0aW9uIHNob3VsZCBiZSBmYWxzZSBhbmQgZGlzYWJsZWQgd2hlbiBkYXRlU2VsZWN0aW9uIGlzIG5vdCBDT05GSUdcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kaXNwbGF5RGF0ZVNlbGVjdGlvbi5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICB3aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0OiB0cnVlLFxuICAgICAgcmVhbHRpbWU6IGZhbHNlLFxuICAgICAgZGlzcGxheURhdGVTZWxlY3Rpb246IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkYXRhcG9pbnQ6IEtQSURldGFpbHMpIHtcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB7IGlkIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0Zvck1hdGNoaW5nRGF0YXBvaW50cygpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxNYXRjaCA9IHRoaXMuY29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5ldmVyeShhZSA9PlxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUuZGF0YXBvaW50cz8uc29tZShkcCA9PiBkcC5fX3RhcmdldD8uaWQgPT09IGFlLl9fdGFyZ2V0Py5pZClcbiAgICApO1xuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGFsbE1hdGNoKSB7XG4gICAgICAgIHRoaXMuYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0RwcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGFybXNPckV2ZW50c0hhdmVOb01hdGNoaW5nRHBzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGF0YXBvaW50czogW1xuICAgICAgICBbXSBhcyBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzW10sXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV1cbiAgICAgIF0sXG4gICAgICBhbGFybXM6IFtbXSBhcyBBbGFybURldGFpbHNbXV0sXG4gICAgICBldmVudHM6IFtbXSBhcyBFdmVudERldGFpbHNbXV0sXG4gICAgICBkaXNwbGF5TWFya2VkTGluZTogW3RydWUsIFtdXSxcbiAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogW3RydWUsIFtdXSxcbiAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd0xhYmVsQW5kVW5pdDogW3RydWUsIFtdXSxcbiAgICAgIGRpc3BsYXlEYXRlU2VsZWN0aW9uOiBbZmFsc2UsIFtdXSxcbiAgICAgIGRpc3BsYXlBZ2dyZWdhdGlvblNlbGVjdGlvbjogW2ZhbHNlLCBbXV0sXG4gICAgICB3aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0OiBbZmFsc2UsIFtdXSxcbiAgICAgIGNhbkRlY291cGxlR2xvYmFsVGltZUNvbnRleHQ6IFtmYWxzZSwgW11dLFxuICAgICAgZGF0ZUZyb206IFtudWxsIGFzIHVua25vd24gYXMgRGF0ZSwgW11dLFxuICAgICAgZGF0ZVRvOiBbbnVsbCBhcyB1bmtub3duIGFzIERhdGUsIFtdXSxcbiAgICAgIGludGVydmFsOiBbJ2RheXMnIGFzIEludGVydmFsWydpZCddLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWdncmVnYXRpb246IFtudWxsIGFzIGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGwsIFtdXSxcbiAgICAgIHJlYWx0aW1lOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzaG93U2xpZGVyOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHlBeGlzU3BsaXRMaW5lczogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgeEF4aXNTcGxpdExpbmVzOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgdGhpcy5kYXRlU2VsZWN0aW9uID0gREFURV9TRUxFQ1RJT05fRVhURU5ERUQuQ09ORklHO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVNlbGVjdGlvbiA9IERBVEVfU0VMRUNUSU9OX0VYVEVOREVELkRBU0hCT0FSRF9DT05URVhUO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRpc3BsYXlEYXRlU2VsZWN0aW9uLmRpc2FibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlRGF0YXBvaW50c0V4aXN0cygpIHtcbiAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNFeGlzdHMgPVxuICAgICAgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpPy5sZW5ndGggfHwgMCkgPiAwO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibm8tY2FyZC1jb250ZXh0IGQtZmxleC1tZCBmaXQtaC0tbWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGJnLWxldmVsLTEgY29uZi1jb2wgaW5uZXItc2Nyb2xsIHAtbC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtbC0yNFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICBjbGFzcz1cImJnLWxldmVsLTEgc2VwYXJhdG9yLWJvdHRvbSBkLWJsb2NrXCJcbiAgICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICAgIFtkZWZhdWx0Rm9ybU9wdGlvbnNdPVwiZGF0YXBvaW50U2VsZWN0RGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMSBzZXBhcmF0b3ItYm90dG9tIGQtYmxvY2tcIlxuICAgICAgICAgIG5hbWU9XCJhbGFybXNcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsYXJtc1wiXG4gICAgICAgICAgW3RpbWVsaW5lVHlwZV09XCInQUxBUk0nXCJcbiAgICAgICAgICBbZGF0YXBvaW50c109XCJjb25maWc/LmRhdGFwb2ludHNcIlxuICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdFwiXG4gICAgICAgICAgbmFtZT1cImV2ZW50c1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cIidFVkVOVCdcIlxuICAgICAgICAgIFtkYXRhcG9pbnRzXT1cImNvbmZpZz8uZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC03IHN0aWNreS10b3AgcC10LTggaW5uZXItc2Nyb2xsIHdpZGdldC1wcmV2aWV3XCI+XG4gICAgPGRpdiBjbGFzcz1cInAtci0yNCBkLWNvbCBmaXQtaFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcC10LTggZm9ybS1ncm91cC1zbSBkLWZsZXggYS1pLWNlbnRlciBtLWItOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgbS1yLTRcIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwibS1iLTBcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGF0ZSBzZWxlY3Rpb25cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGVTZWxlY3Rpb25IZWxwVGVtcGxhdGVcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGF0ZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEYXNoYm9hcmQgdGltZSByYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiREFURV9TRUxFQ1RJT04uREFTSEJPQVJEX0NPTlRFWFRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnV2lkZ2V0IGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIkRBVEVfU0VMRUNUSU9OLkNPTkZJR1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdXaWRnZXQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtMTJcIj57eyAnT3B0aW9ucycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGM4eS10aW1lLWNvbnRleHRcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTi5DT05GSUcgJiZcbiAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdkaXNwbGF5RGF0ZVNlbGVjdGlvbicpLnZhbHVlID09PSB0cnVlXG4gICAgICAgIFwiXG4gICAgICAgIFtjaGFuZ2VkRGF0ZUNvbnRleHRdPVwidGltZVByb3BzXCJcbiAgICAgICAgW2NvbnRyb2xzQXZhaWxhYmxlXT1cIntcbiAgICAgICAgICByZWFsdGltZTogdHJ1ZSxcbiAgICAgICAgICB0aW1lUmFuZ2U6IGNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgaW50ZXJ2YWw6IGNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgYWdncmVnYXRpb246IGNvbmZpZz8uZGlzcGxheUFnZ3JlZ2F0aW9uU2VsZWN0aW9uXG4gICAgICAgIH1cIlxuICAgICAgICAoY29udGV4dENoYW5nZSk9XCJ0aW1lUHJvcHNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPjwvYzh5LXRpbWUtY29udGV4dD5cbiAgICAgIDxjOHktY2hhcnRzXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBwLXJlbGF0aXZlXCJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRzRXhpc3RzXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICBbYWxlcnRzXT1cImFsZXJ0c1wiXG4gICAgICAgICh0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lKT1cInVwZGF0ZVRpbWVSYW5nZU9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gICAgICAgIChjb25maWdDaGFuZ2VPblpvb21PdXQpPVwidXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktY2hhcnRzPlxuXG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBtLXQtMjRcIlxuICAgICAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgc2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3N1YnRpdGxlXT1cIidTZWxlY3QgZGF0YSBwb2ludCB0byByZW5kZXIgY2hhcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhYWN0aXZlRGF0YXBvaW50c0V4aXN0c1wiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgICAgIDxmb3JtXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBwLXQtOFwiXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPnt7ICdEaXNwbGF5IG9wdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IG0tYi0yNCBtLXQtMFwiPlxuICAgICAgICAgIDxsZWdlbmQ+e3sgJ0F4aXMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC1iLTE2IG0tYi0wIHAtdC04IGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInWSBheGlzIGhlbHBlciBsaW5lcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInlBeGlzU3BsaXRMaW5lc1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlkgYXhpcyBoZWxwZXIgbGluZXM8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidYIGF4aXMgaGVscGVyIGxpbmVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieEF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+WCBheGlzIGhlbHBlciBsaW5lczwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01lcmdlIGF4aXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+TWVyZ2UgbWF0Y2hpbmcgZGF0YXBvaW50cyBpbnRvIHNpbmdsZSBheGlzLjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IG0tYi0yNCBtLXQtMFwiPlxuICAgICAgICAgIDxsZWdlbmQ+e3sgJ0FsYXJtcyAmIEV2ZW50cycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMTYgbS1iLTAgcC10LTggZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidTaG93IHZlcnRpY2FsIGxpbmUgb24gZXZlcnkgb2NjdXJyZW5jZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHZlcnRpY2FsIGxpbmUgb24gZXZlcnkgb2NjdXJyZW5jZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgaWNvbiB3aGVuIHRyaWdnZXJlZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZFBvaW50XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc3BsYXlNYXJrZWRQb2ludFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgaWNvbiB3aGVuIHRyaWdnZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIG0tbC04XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0Rwc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13YXJuaW5nXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBtLWItMjQgbS10LTBcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdDaGFydCcgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMTYgbS1iLTAgcC10LTggZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidFbmFibGUgZGF0ZSBzZWxlY3Rpb24gaW4gdGhlIHdpZGdldCB2aWV3LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheURhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheURhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5EYXRlIHNlbGVjdGlvbiBpbiB0aGUgd2lkZ2V0IHZpZXcuPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gbS1sLThcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAnRGF0ZSBzZWxlY3Rpb24gaW4gd2lkZ2V0IHZpZXcgaXMgbm90IHBvc3NpYmxlIHdoZW4gdXNpbmcgZGFzaGJvYXJkIHRpbWUgcmFuZ2UuJ1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAnRGF0ZSBzZWxlY3Rpb24gaW4gd2lkZ2V0IHZpZXcgaXMgbm90IHBvc3NpYmxlIHdoZW4gdXNpbmcgZGFzaGJvYXJkIHRpbWUgcmFuZ2UuJ1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTi5EQVNIQk9BUkRfQ09OVEVYVFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FnZ3JlZ2F0aW9uIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheUFnZ3JlZ2F0aW9uU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc3BsYXlBZ2dyZWdhdGlvblNlbGVjdGlvblwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkFnZ3JlZ2F0aW9uIHNlbGVjdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgbGFiZWxzIGFuZCB1bml0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwic2hvd0xhYmVsQW5kVW5pdFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaG93TGFiZWxBbmRVbml0XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RGlzcGxheSBsYWJlbHMgYW5kIHVuaXRzIG9uIHktYXhpczwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgc2xpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaG93U2xpZGVyXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dTbGlkZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHNsaWRlcjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVNlbGVjdGlvbkhlbHBUZW1wbGF0ZT5cbiAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGVTZWxlY3Rpb25IZWxwXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC1jb25maWcvZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC1jb25maWcvZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUVWLFdBQVcsRUFDWCxPQUFPLEVBRVAsaUNBQWlDLEVBQ2xDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUdMLHVCQUF1QixFQUV4QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDdEIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBRUwsd0JBQXdCLEVBRXpC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VUE0UkEsMkNEdk9JLFlBQVksdWdCQUNaLFVBQVUsb3ZEQUNWLFdBQVcsOEJBQ1gsYUFBYSxpa0JBQ2IsYUFBYSwrVkFDYixlQUFlLDJOQUNmLHVCQUF1QixxVEFDdkIsd0JBQXdCLHNVQUN4QixvQkFBb0I7OzRGQUlYLG9DQUFvQztrQkFsQmhELFNBQVM7K0JBQ0Usb0NBQW9DLFFBQ3hDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLG9CQUFvQjtxQkFDckIsYUFDVSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDOzswQkEwQ2hELFFBQVE7OzBCQUNSLFFBQVE7eUNBeENGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgTmdGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge1xuICBDb21tb25Nb2R1bGUsXG4gIENvcmVNb2R1bGUsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIEZvcm1zTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBPbkJlZm9yZVNhdmUsXG4gIFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29uZmlnLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsT3B0aW9ucyxcbiAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50LFxuICBXaWRnZXRDb25maWdDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQge1xuICBBbGFybURldGFpbHMsXG4gIEFsYXJtRXZlbnRTZWxlY3Rvck1vZHVsZSxcbiAgRXZlbnREZXRhaWxzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7XG4gIENoYXJ0QWxhcm1zU2VydmljZSxcbiAgQ2hhcnRFdmVudHNTZXJ2aWNlLFxuICBDaGFydHNDb21wb25lbnQsXG4gIERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsXG4gIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0VGltZVByb3BzLFxuICBEQVRFX1NFTEVDVElPTl9FWFRFTkRFRCxcbiAgVGltZUNvbnRleHRQcm9wc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2VjaGFydCc7XG5pbXBvcnQgeyBUaW1lQ29udGV4dENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvdGltZS1jb250ZXh0JztcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnJyxcbiAgaG9zdDogeyBjbGFzczogJ2QtY29udGVudHMnIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcmVNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIENoYXJ0c0NvbXBvbmVudCxcbiAgICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgICBBbGFybUV2ZW50U2VsZWN0b3JNb2R1bGUsXG4gICAgVGltZUNvbnRleHRDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQ2hhcnRFdmVudHNTZXJ2aWNlLCBDaGFydEFsYXJtc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25CZWZvcmVTYXZlLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtID0gaW5qZWN0KE5nRm9ybSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZSA9IGluamVjdChXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UpO1xuXG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB8IHVuZGVmaW5lZDtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIERBVEVfU0VMRUNUSU9OID0gREFURV9TRUxFQ1RJT05fRVhURU5ERUQ7XG4gIGRhdGVTZWxlY3Rpb246IERBVEVfU0VMRUNUSU9OX0VYVEVOREVEIHwgdW5kZWZpbmVkO1xuICBkYXRlU2VsZWN0aW9uSGVscCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgZ2V0dGV4dChgQ2hvb3NlIGhvdyB0byBzZWxlY3QgYSBkYXRlIHJhbmdlLCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICA8dWwgY2xhc3M9XCJtLWwtMCBwLWwtOCBtLXQtOCBtLWItMFwiPlxuICAgIDxsaT5cbiAgICAgIDxiPldpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gb25seSB0byB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxiPldpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb246PC9iPlxuICAgICAgcmVzdHJpY3RzIHRoZSBkYXRlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0IHZpZXcgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxiPkRhc2hib2FyZCB0aW1lIHJhbmdlOjwvYj5cbiAgICAgIHJlc3RyaWN0cyBkYXRlIHNlbGVjdGlvbiB0byB0aGUgZ2xvYmFsIGRhc2hib2FyZCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICA8L2xpPlxuICA8L3VsPmApXG4gICk7XG4gIGRhdGFwb2ludFNlbGVjdERlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7XG4gICAgc2hvd1JhbmdlOiB0cnVlLFxuICAgIHNob3dDaGFydDogdHJ1ZVxuICB9O1xuICBkYXRhcG9pbnRTZWxlY3Rpb25Db25maWc6IFBhcnRpYWw8RGF0YXBvaW50U2VsZWN0b3JNb2RhbE9wdGlvbnM+ID0ge307XG4gIGFjdGl2ZURhdGFwb2ludHNFeGlzdHMgPSBmYWxzZTtcbiAgYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0RwcyA9IGZhbHNlO1xuICB0aW1lUHJvcHM6IERhdGFwb2ludHNHcmFwaFdpZGdldFRpbWVQcm9wcyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB3aWRnZXRDb25maWc6IFdpZGdldENvbmZpZ0NvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhc2hib2FyZENvbnRleHRDb21wb25lbnQ6IENvbnRleHREYXNoYm9hcmRDb21wb25lbnRcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZz8uZGF0YXBvaW50cz8uZm9yRWFjaChkcCA9PiB0aGlzLmFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkcCkpO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnIHx8IHt9KTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hbGFybXMuc2V0VmFsdWUoXG4gICAgICB0aGlzLmNvbmZpZz8uYWxhcm1zRXZlbnRzQ29uZmlncz8uZmlsdGVyKGFlID0+IGFlLnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJykgYXMgQWxhcm1EZXRhaWxzW11cbiAgICApO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmV2ZW50cy5zZXRWYWx1ZShcbiAgICAgIHRoaXMuY29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoYWUgPT4gYWUudGltZWxpbmVUeXBlID09PSAnRVZFTlQnKSBhcyBFdmVudERldGFpbHNbXVxuICAgICk7XG5cbiAgICB0aGlzLmluaXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVEYXRhcG9pbnRzRXhpc3RzKCk7XG4gICAgdGhpcy5jaGVja0Zvck1hdGNoaW5nRGF0YXBvaW50cygpO1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5hbGFybXMgfHwgW10pLFxuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5ldmVudHMgfHwgW10pXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICB0aGlzLnNldEFjdGl2ZURhdGFwb2ludHNFeGlzdHMoKTtcbiAgICAgIHRoaXMuY2hlY2tGb3JNYXRjaGluZ0RhdGFwb2ludHMoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRUaW1lQ29udGV4dCh0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRlRnJvbSAmJiB0aGlzLmNvbmZpZy5kYXRlVG8pIHtcbiAgICAgIHRoaXMudGltZVByb3BzID0ge1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUodGhpcy5jb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmNvbmZpZz8uZGF0ZVRvKSxcbiAgICAgICAgaW50ZXJ2YWw6IHRoaXMuY29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IHRoaXMuY29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuY29uZmlnPy5yZWFsdGltZSA/IG51bGwgOiB0aGlzLmNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25CZWZvcmVTYXZlKFxuICAgIGNvbmZpZz86IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZ1xuICApOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCAmJiBjb25maWcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBvbWl0KHRoaXMuZm9ybUdyb3VwLnZhbHVlLCBbJ2FsYXJtcycsICdldmVudHMnXSksIHtcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5hbGFybXMgfHwgW10pLFxuICAgICAgICAgIC4uLih0aGlzLmZvcm1Hcm91cC52YWx1ZS5ldmVudHMgfHwgW10pXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGltZVByb3BzQ2hhbmdlZCh0aW1lUHJvcHM6IFRpbWVDb250ZXh0UHJvcHMpOiB2b2lkIHtcbiAgICBpZiAodGltZVByb3BzLnJlYWx0aW1lICE9PSB0aGlzLmNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSk7XG4gICAgfVxuICAgIGlmICh0aW1lUHJvcHMucmVhbHRpbWUpIHtcbiAgICAgIGlmICh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgIT09IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmludGVydmFsKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBpbnRlcnZhbDogdGltZVByb3BzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRjaFZhbHVlcyA9IHtcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKSxcbiAgICAgIGludGVydmFsOiB0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAuLi4odGltZVByb3BzLmFnZ3JlZ2F0aW9uICYmIHsgYWdncmVnYXRpb246IHRpbWVQcm9wcy5hZ2dyZWdhdGlvbiB9KSxcbiAgICAgIC4uLih0aW1lUHJvcHMucmVhbHRpbWUgJiYgeyByZWFsdGltZTogdGltZVByb3BzLnJlYWx0aW1lIH0pXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUocGF0Y2hWYWx1ZXMpO1xuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQodGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMpOiB2b2lkIHtcbiAgICBjb25zdCBpbml0aWFsVGltZVJhbmdlID0ge1xuICAgICAgZGF0ZUZyb206IHRpbWVQcm9wcy5kYXRlRnJvbSxcbiAgICAgIGRhdGVUbzogdGltZVByb3BzLmRhdGVUbyxcbiAgICAgIGludGVydmFsOiB0aW1lUHJvcHMuaW50ZXJ2YWwgfHwgJ2N1c3RvbSdcbiAgICB9O1xuICAgIGlmICghdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpKSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKGluaXRpYWxUaW1lUmFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4udGltZVByb3BzLCAuLi5pbml0aWFsVGltZVJhbmdlIH0pO1xuICB9XG5cbiAgdXBkYXRlVGltZVJhbmdlT25SZWFsdGltZShcbiAgICB0aW1lUmFuZ2U6IFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVJhbmdlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBkYXRlU2VsZWN0aW9uQ2hhbmdlKGRhdGVTZWxlY3Rpb246IERBVEVfU0VMRUNUSU9OX0VYVEVOREVEKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlU2VsZWN0aW9uID0gZGF0ZVNlbGVjdGlvbjtcblxuICAgIGlmIChkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTl9FWFRFTkRFRC5DT05GSUcpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRpc3BsYXlEYXRlU2VsZWN0aW9uLmVuYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRpc3BsYXlEYXRlU2VsZWN0aW9uIHNob3VsZCBiZSBmYWxzZSBhbmQgZGlzYWJsZWQgd2hlbiBkYXRlU2VsZWN0aW9uIGlzIG5vdCBDT05GSUdcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kaXNwbGF5RGF0ZVNlbGVjdGlvbi5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICB3aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0OiB0cnVlLFxuICAgICAgcmVhbHRpbWU6IGZhbHNlLFxuICAgICAgZGlzcGxheURhdGVTZWxlY3Rpb246IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkYXRhcG9pbnQ6IEtQSURldGFpbHMpIHtcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB7IGlkIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0Zvck1hdGNoaW5nRGF0YXBvaW50cygpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxNYXRjaCA9IHRoaXMuY29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5ldmVyeShhZSA9PlxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUuZGF0YXBvaW50cz8uc29tZShkcCA9PiBkcC5fX3RhcmdldD8uaWQgPT09IGFlLl9fdGFyZ2V0Py5pZClcbiAgICApO1xuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGFsbE1hdGNoKSB7XG4gICAgICAgIHRoaXMuYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0RwcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGFybXNPckV2ZW50c0hhdmVOb01hdGNoaW5nRHBzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGF0YXBvaW50czogW1xuICAgICAgICBbXSBhcyBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzW10sXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV1cbiAgICAgIF0sXG4gICAgICBhbGFybXM6IFtbXSBhcyBBbGFybURldGFpbHNbXV0sXG4gICAgICBldmVudHM6IFtbXSBhcyBFdmVudERldGFpbHNbXV0sXG4gICAgICBkaXNwbGF5TWFya2VkTGluZTogW3RydWUsIFtdXSxcbiAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogW3RydWUsIFtdXSxcbiAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd0xhYmVsQW5kVW5pdDogW3RydWUsIFtdXSxcbiAgICAgIGRpc3BsYXlEYXRlU2VsZWN0aW9uOiBbZmFsc2UsIFtdXSxcbiAgICAgIGRpc3BsYXlBZ2dyZWdhdGlvblNlbGVjdGlvbjogW2ZhbHNlLCBbXV0sXG4gICAgICB3aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0OiBbZmFsc2UsIFtdXSxcbiAgICAgIGNhbkRlY291cGxlR2xvYmFsVGltZUNvbnRleHQ6IFtmYWxzZSwgW11dLFxuICAgICAgZGF0ZUZyb206IFtudWxsIGFzIHVua25vd24gYXMgRGF0ZSwgW11dLFxuICAgICAgZGF0ZVRvOiBbbnVsbCBhcyB1bmtub3duIGFzIERhdGUsIFtdXSxcbiAgICAgIGludGVydmFsOiBbJ2RheXMnIGFzIEludGVydmFsWydpZCddLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWdncmVnYXRpb246IFtudWxsIGFzIGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGwsIFtdXSxcbiAgICAgIHJlYWx0aW1lOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzaG93U2xpZGVyOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHlBeGlzU3BsaXRMaW5lczogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgeEF4aXNTcGxpdExpbmVzOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgdGhpcy5kYXRlU2VsZWN0aW9uID0gREFURV9TRUxFQ1RJT05fRVhURU5ERUQuQ09ORklHO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVNlbGVjdGlvbiA9IERBVEVfU0VMRUNUSU9OX0VYVEVOREVELkRBU0hCT0FSRF9DT05URVhUO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRpc3BsYXlEYXRlU2VsZWN0aW9uLmRpc2FibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlRGF0YXBvaW50c0V4aXN0cygpIHtcbiAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNFeGlzdHMgPVxuICAgICAgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpPy5sZW5ndGggfHwgMCkgPiAwO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibm8tY2FyZC1jb250ZXh0IGQtZmxleC1tZCBmaXQtaC0tbWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGJnLWxldmVsLTEgY29uZi1jb2wgaW5uZXItc2Nyb2xsIHAtbC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtbC0yNFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICBjbGFzcz1cImJnLWxldmVsLTEgc2VwYXJhdG9yLWJvdHRvbSBkLWJsb2NrXCJcbiAgICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICAgIFtkZWZhdWx0Rm9ybU9wdGlvbnNdPVwiZGF0YXBvaW50U2VsZWN0RGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMSBzZXBhcmF0b3ItYm90dG9tIGQtYmxvY2tcIlxuICAgICAgICAgIG5hbWU9XCJhbGFybXNcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsYXJtc1wiXG4gICAgICAgICAgW3RpbWVsaW5lVHlwZV09XCInQUxBUk0nXCJcbiAgICAgICAgICBbZGF0YXBvaW50c109XCJjb25maWc/LmRhdGFwb2ludHNcIlxuICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdFwiXG4gICAgICAgICAgbmFtZT1cImV2ZW50c1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cIidFVkVOVCdcIlxuICAgICAgICAgIFtkYXRhcG9pbnRzXT1cImNvbmZpZz8uZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC03IHN0aWNreS10b3AgcC10LTggaW5uZXItc2Nyb2xsIHdpZGdldC1wcmV2aWV3XCI+XG4gICAgPGRpdiBjbGFzcz1cInAtci0yNCBkLWNvbCBmaXQtaFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcC10LTggZm9ybS1ncm91cC1zbSBkLWZsZXggYS1pLWNlbnRlciBtLWItOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgbS1yLTRcIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwibS1iLTBcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGF0ZSBzZWxlY3Rpb25cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGVTZWxlY3Rpb25IZWxwVGVtcGxhdGVcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGF0ZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEYXNoYm9hcmQgdGltZSByYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiREFURV9TRUxFQ1RJT04uREFTSEJPQVJEX0NPTlRFWFRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnV2lkZ2V0IGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIkRBVEVfU0VMRUNUSU9OLkNPTkZJR1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdXaWRnZXQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtMTJcIj57eyAnT3B0aW9ucycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGM4eS10aW1lLWNvbnRleHRcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTi5DT05GSUcgJiZcbiAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdkaXNwbGF5RGF0ZVNlbGVjdGlvbicpLnZhbHVlID09PSB0cnVlXG4gICAgICAgIFwiXG4gICAgICAgIFtjaGFuZ2VkRGF0ZUNvbnRleHRdPVwidGltZVByb3BzXCJcbiAgICAgICAgW2NvbnRyb2xzQXZhaWxhYmxlXT1cIntcbiAgICAgICAgICByZWFsdGltZTogdHJ1ZSxcbiAgICAgICAgICB0aW1lUmFuZ2U6IGNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgaW50ZXJ2YWw6IGNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgYWdncmVnYXRpb246IGNvbmZpZz8uZGlzcGxheUFnZ3JlZ2F0aW9uU2VsZWN0aW9uXG4gICAgICAgIH1cIlxuICAgICAgICAoY29udGV4dENoYW5nZSk9XCJ0aW1lUHJvcHNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPjwvYzh5LXRpbWUtY29udGV4dD5cbiAgICAgIDxjOHktY2hhcnRzXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBwLXJlbGF0aXZlXCJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRzRXhpc3RzXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICBbYWxlcnRzXT1cImFsZXJ0c1wiXG4gICAgICAgICh0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lKT1cInVwZGF0ZVRpbWVSYW5nZU9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gICAgICAgIChjb25maWdDaGFuZ2VPblpvb21PdXQpPVwidXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktY2hhcnRzPlxuXG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBtLXQtMjRcIlxuICAgICAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgc2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3N1YnRpdGxlXT1cIidTZWxlY3QgZGF0YSBwb2ludCB0byByZW5kZXIgY2hhcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhYWN0aXZlRGF0YXBvaW50c0V4aXN0c1wiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgICAgIDxmb3JtXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBwLXQtOFwiXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPnt7ICdEaXNwbGF5IG9wdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IG0tYi0yNCBtLXQtMFwiPlxuICAgICAgICAgIDxsZWdlbmQ+e3sgJ0F4aXMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC1iLTE2IG0tYi0wIHAtdC04IGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInWS1heGlzIGhlbHBlciBsaW5lcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInlBeGlzU3BsaXRMaW5lc1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlktYXhpcyBoZWxwZXIgbGluZXM8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidYLWF4aXMgaGVscGVyIGxpbmVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieEF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+WC1heGlzIGhlbHBlciBsaW5lczwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01lcmdlIG1hdGNoaW5nIGRhdGEgcG9pbnRzIGludG8gc2luZ2xlIGF4aXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+TWVyZ2UgbWF0Y2hpbmcgZGF0YSBwb2ludHMgaW50byBzaW5nbGUgYXhpczwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IG0tYi0yNCBtLXQtMFwiPlxuICAgICAgICAgIDxsZWdlbmQ+e3sgJ0FsYXJtcyAmIGV2ZW50cycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMTYgbS1iLTAgcC10LTggZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidTaG93IHZlcnRpY2FsIGxpbmUgb24gZXZlcnkgb2NjdXJyZW5jZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHZlcnRpY2FsIGxpbmUgb24gZXZlcnkgb2NjdXJyZW5jZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgaWNvbiB3aGVuIHRyaWdnZXJlZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZFBvaW50XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc3BsYXlNYXJrZWRQb2ludFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgaWNvbiB3aGVuIHRyaWdnZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIG0tbC04XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0Rwc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13YXJuaW5nXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBtLWItMjQgbS10LTBcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdDaGFydCcgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMTYgbS1iLTAgcC10LTggZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidFbmFibGUgZGF0ZSBzZWxlY3Rpb24gaW4gdGhlIHdpZGdldCB2aWV3LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheURhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheURhdGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5EYXRlIHNlbGVjdGlvbiBpbiB0aGUgd2lkZ2V0IHZpZXcuPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gbS1sLThcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAnRGF0ZSBzZWxlY3Rpb24gaW4gd2lkZ2V0IHZpZXcgaXMgbm90IHBvc3NpYmxlIHdoZW4gdXNpbmcgZGFzaGJvYXJkIHRpbWUgcmFuZ2UuJ1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAnRGF0ZSBzZWxlY3Rpb24gaW4gd2lkZ2V0IHZpZXcgaXMgbm90IHBvc3NpYmxlIHdoZW4gdXNpbmcgZGFzaGJvYXJkIHRpbWUgcmFuZ2UuJ1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlU2VsZWN0aW9uID09PSBEQVRFX1NFTEVDVElPTi5EQVNIQk9BUkRfQ09OVEVYVFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FnZ3JlZ2F0aW9uIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheUFnZ3JlZ2F0aW9uU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc3BsYXlBZ2dyZWdhdGlvblNlbGVjdGlvblwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkFnZ3JlZ2F0aW9uIHNlbGVjdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgbGFiZWxzIGFuZCB1bml0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBuYW1lPVwic2hvd0xhYmVsQW5kVW5pdFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaG93TGFiZWxBbmRVbml0XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RGlzcGxheSBsYWJlbHMgYW5kIHVuaXRzIG9uIFktYXhpczwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgc2xpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaG93U2xpZGVyXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dTbGlkZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHNsaWRlcjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVNlbGVjdGlvbkhlbHBUZW1wbGF0ZT5cbiAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGVTZWxlY3Rpb25IZWxwXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|