UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

125 lines 17.8 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, NgZone, PLATFORM_ID, } from '@angular/core'; import { PieChartComponent } from '@swimlane/ngx-charts'; import { MonitoringAppGenComponent } from '../../metadata/decorators'; import { ChartDataModel, } from '../ChartDataModel'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@swimlane/ngx-charts"; import * as i3 from "@ionic/angular"; import * as i4 from "../../ui-directive/export-data.directive"; let TapVariablePieChartGridComponent = class TapVariablePieChartGridComponent extends PieChartComponent { set label(indexOrArray) { this.chartModel.initLabel(indexOrArray); } set variable(variableOrArray) { this.input = this.chartModel.initVariable(variableOrArray); } set input(inputs) { this.subscription = this.chartModel .defineInputStreamSingle(inputs, false, 0) .subscribe((result) => { let index = 0; for (const item of result) { if (this.results[index] !== undefined) { if (item.value !== this.results[index].value) { this.results = result; } } else { this.results = result; } index++; } this.resizeComponent(); }); } onResize(event) { this.innerWidth = window.innerWidth; this.resizeComponent(); } constructor(myChartElement, zone, cd, platformId, cdr) { super(myChartElement, zone, cd, platformId); this.cdr = cdr; this.results = [ { name: '---', value: 0, extra: 0, }, ]; this.chartModel = new ChartDataModel(); this.colorScheme = { domain: [ '#5DADE2', '#9B59B6', '#F39C12', '#5AA454', '#A10A28', '#C7B42C', '#AAAAAA', ], }; this.showExportButton = false; } ngAfterContentInit() { this.innerWidth = window.innerWidth; this.resizeComponent(); this.cdr.detectChanges(); } onSelect(event) { /* Not implemented this.chartModel.showDetail(event, this.modalController, TapVariableDataPopupComponent); */ } resizeComponent() { if (this.innerWidth <= 400) { this.innerWidth = 400; } this.innerHeight = (150 * this.results.length) / (this.innerWidth / 300); if (this.innerHeight <= 150) { this.innerHeight = 150; } this.cdr.detectChanges(); } ngOnDestroy() { this.subscription?.unsubscribe(); this.chartModel.destroyCurrentSub(); } }; /** @nocollapse */ TapVariablePieChartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TapVariablePieChartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariablePieChartGridComponent, selector: "tap-variable-pie-chart-grid", inputs: { colorScheme: "colorScheme", showExportButton: "showExportButton", exportedFileName: "exportedFileName", label: "label", variable: "variable", input: "input" }, host: { listeners: { "window:resize": "onResize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PieGridComponent, selector: "ngx-charts-pie-grid", inputs: ["designatedTotal", "tooltipDisabled", "tooltipText", "label", "minWidth", "activeEntries"], outputs: ["activate", "deactivate"] }, { kind: "component", type: i3.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }] }); TapVariablePieChartGridComponent = __decorate([ MonitoringAppGenComponent({ constraints: { isNumber: 'YES', }, }), __metadata("design:paramtypes", [ElementRef, NgZone, ChangeDetectorRef, String, ChangeDetectorRef]) ], TapVariablePieChartGridComponent); export { TapVariablePieChartGridComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartGridComponent, decorators: [{ type: Component, args: [{ selector: 'tap-variable-pie-chart-grid', template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { colorScheme: [{ type: Input }], showExportButton: [{ type: Input }], exportedFileName: [{ type: Input }], label: [{ type: Input }], variable: [{ type: Input }], input: [{ type: Input }], onResize: [{ type: HostListener, args: ['window:resize', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsY0FBYyxHQUdmLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQWFwQixJQUFNLGdDQUFnQyxHQUF0QyxNQUFNLGdDQUNYLFNBQVEsaUJBQWlCO0lBcUN6QixJQUNJLEtBQUssQ0FBQyxZQUFzRDtRQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFDSSxRQUFRLENBQ1YsZUFBZ0U7UUFFaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFDSSxLQUFLLENBQUMsTUFBNkI7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVTthQUNoQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDeEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUE0QixFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUU7d0JBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBNEIsQ0FBQztxQkFDN0M7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUE0QixDQUFDO2lCQUM3QztnQkFDRCxLQUFLLEVBQUUsQ0FBQzthQUNUO1lBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQ0UsY0FBK0IsRUFDL0IsSUFBWSxFQUNaLEVBQXFCLEVBQ0EsVUFBa0IsRUFDL0IsR0FBc0I7UUFFOUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBN0VoQyxZQUFPLEdBQXVCO1lBQzVCO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxDQUFDO2FBQ1Q7U0FDRixDQUFDO1FBS00sZUFBVSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBSzFELGdCQUFXLEdBQUc7WUFDWixNQUFNLEVBQUU7Z0JBQ04sU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUzthQUNWO1NBQ0YsQ0FBQztRQUdGLHFCQUFnQixHQUFZLEtBQUssQ0FBQztJQW1EbEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF5QjtRQUNoQzs7VUFFRTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN0QyxDQUFDOztpSkFoSFUsZ0NBQWdDLG1HQWdGakMsV0FBVztxSUFoRlYsZ0NBQWdDLGtVQ2pDN0MsdWxCQXFCQTtBRFlhLGdDQUFnQztJQVY1Qyx5QkFBeUIsQ0FBQztRQUN6QixXQUFXLEVBQUU7WUFDWCxRQUFRLEVBQUUsS0FBSztTQUNoQjtLQUNGLENBQUM7cUNBbUZrQixVQUFVO1FBQ3BCLE1BQU07UUFDUixpQkFBaUIsVUFFUixpQkFBaUI7R0FqRnJCLGdDQUFnQyxDQWlINUM7U0FqSFksZ0NBQWdDOzRGQUFoQyxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsNkJBQTZCOzswQkFvRnBDLE1BQU07MkJBQUMsV0FBVzs0RUE1RHJCLFdBQVc7c0JBRFYsS0FBSztnQkFjTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBTUYsUUFBUTtzQkFEWCxLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFxQk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0VmFyaWFibGUgfSBmcm9tICdAaW90aXplL3RhcC9kYXRhJztcbmltcG9ydCB7IFBpZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnQHN3aW1sYW5lL25neC1jaGFydHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBDaGFydERhdGFNb2RlbCxcbiAgQ2hhcnRJbnB1dFNpbmdsZSxcbiAgQ2hhcnRJbnB1dFN0cmVhbVZhcixcbn0gZnJvbSAnLi4vQ2hhcnREYXRhTW9kZWwnO1xuaW1wb3J0IHsgT25DaGFydFNlbGVjdEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkLXR5cGVzJztcblxuQE1vbml0b3JpbmdBcHBHZW5Db21wb25lbnQoe1xuICBjb25zdHJhaW50czoge1xuICAgIGlzTnVtYmVyOiAnWUVTJyxcbiAgfSxcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlUGllQ2hhcnRHcmlkQ29tcG9uZW50XG4gIGV4dGVuZHMgUGllQ2hhcnRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgcmVzdWx0czogQ2hhcnRJbnB1dFNpbmdsZVtdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICctLS0nLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBleHRyYTogMCxcbiAgICB9LFxuICBdO1xuXG4gIGlubmVyV2lkdGghOiBudW1iZXI7XG4gIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuXG4gIHByaXZhdGUgY2hhcnRNb2RlbDogQ2hhcnREYXRhTW9kZWwgPSBuZXcgQ2hhcnREYXRhTW9kZWwoKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKVxuICBjb2xvclNjaGVtZSA9IHtcbiAgICBkb21haW46IFtcbiAgICAgICcjNURBREUyJyxcbiAgICAgICcjOUI1OUI2JyxcbiAgICAgICcjRjM5QzEyJyxcbiAgICAgICcjNUFBNDU0JyxcbiAgICAgICcjQTEwQTI4JyxcbiAgICAgICcjQzdCNDJDJyxcbiAgICAgICcjQUFBQUFBJyxcbiAgICBdLFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBleHBvcnRlZEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChpbmRleE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuaW5pdExhYmVsKGluZGV4T3JBcnJheSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUoXG4gICAgdmFyaWFibGVPckFycmF5OiBBYnN0cmFjdFZhcmlhYmxlPG51bWJlciB8IG51bWJlcltdPiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLmlucHV0ID0gdGhpcy5jaGFydE1vZGVsLmluaXRWYXJpYWJsZSh2YXJpYWJsZU9yQXJyYXkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlucHV0KGlucHV0czogQ2hhcnRJbnB1dFN0cmVhbVZhcltdKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYXJ0TW9kZWxcbiAgICAgIC5kZWZpbmVJbnB1dFN0cmVhbVNpbmdsZShpbnB1dHMsIGZhbHNlLCAwKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDaGFydElucHV0U2luZ2xlW10pID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3VsdCBhcyBDaGFydElucHV0U2luZ2xlW10pIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXN1bHRzW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAhPT0gdGhpcy5yZXN1bHRzW2luZGV4XS52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG15Q2hhcnRFbGVtZW50OiBFbGVtZW50UmVmPGFueT4sXG4gICAgem9uZTogTmdab25lLFxuICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKG15Q2hhcnRFbGVtZW50LCB6b25lLCBjZCwgcGxhdGZvcm1JZCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogT25DaGFydFNlbGVjdEV2ZW50KSB7XG4gICAgLyogTm90IGltcGxlbWVudGVkXG4gICAgdGhpcy5jaGFydE1vZGVsLnNob3dEZXRhaWwoZXZlbnQsIHRoaXMubW9kYWxDb250cm9sbGVyLCBUYXBWYXJpYWJsZURhdGFQb3B1cENvbXBvbmVudCk7XG4gICAgKi9cbiAgfVxuXG4gIHJlc2l6ZUNvbXBvbmVudCgpIHtcbiAgICBpZiAodGhpcy5pbm5lcldpZHRoIDw9IDQwMCkge1xuICAgICAgdGhpcy5pbm5lcldpZHRoID0gNDAwO1xuICAgIH1cbiAgICB0aGlzLmlubmVySGVpZ2h0ID0gKDE1MCAqIHRoaXMucmVzdWx0cy5sZW5ndGgpIC8gKHRoaXMuaW5uZXJXaWR0aCAvIDMwMCk7XG4gICAgaWYgKHRoaXMuaW5uZXJIZWlnaHQgPD0gMTUwKSB7XG4gICAgICB0aGlzLmlubmVySGVpZ2h0ID0gMTUwO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuZGVzdHJveUN1cnJlbnRTdWIoKTtcbiAgfVxufVxuIiwiPGRpdiAjY29udGFpbmVyUmVmIHN0eWxlPVwid2lkdGg6IDEwMCU7IG92ZXJmbG93OiBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgPG5neC1jaGFydHMtcGllLWdyaWRcbiAgICAjY2hhcnRzXG4gICAgW3ZpZXddPVwiW2NvbnRhaW5lclJlZi5vZmZzZXRXaWR0aCwgaW5uZXJIZWlnaHRdXCJcbiAgICBbc2NoZW1lXT1cImNvbG9yU2NoZW1lXCJcbiAgICBbYW5pbWF0aW9uc109XCJmYWxzZVwiXG4gICAgW3Jlc3VsdHNdPVwicmVzdWx0c1wiXG4gICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgPlxuICA8L25neC1jaGFydHMtcGllLWdyaWQ+XG4gIDxpb24tZmFiLWJ1dHRvblxuICAgIGlkPVwiZXhwb3J0RmFiQnV0dG9uXCJcbiAgICBzaXplPVwic21hbGxcIlxuICAgIHRhcEV4cG9ydERhdGFcbiAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgIFtleHBvcnRlZEZpbGVOYW1lXT1cImV4cG9ydGVkRmlsZU5hbWVcIlxuICAgIFtkYXRhVG9FeHBvcnRdPVwicmVzdWx0c1wiXG4gID5cbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvZGl2PlxuIl19