UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

155 lines 24 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core'; import { Observable, merge, map, tap } from 'rxjs'; import { ObservableInput, publishRef } from '../../../core/public-api'; import { ContextChartService } from '../../chart.service'; import { Orientation } from '../../types'; import * as i0 from "@angular/core"; import * as i1 from "../../chart.service"; const _c0 = ["aclBarPath", ""]; function BarPathComponent__svg_ng_container_1__svg_rect_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelement(0, "rect", 3); i0.ɵɵpipe(1, "pure"); i0.ɵɵpipe(2, "pure"); i0.ɵɵpipe(3, "pure"); i0.ɵɵpipe(4, "pure"); i0.ɵɵpipe(5, "pure"); } if (rf & 2) { const item_r1 = ctx.$implicit; const i_r2 = ctx.index; const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵattribute("width", ctx_r2.innerBandWidth)("x", i0.ɵɵpipeBind2(1, 6, item_r1.x, ctx_r2.getRectX) || 0)("y", i0.ɵɵpipeBind3(2, 9, i_r2, ctx_r2.getRectY, item_r1.y) || 0)("height", item_r1.y ? i0.ɵɵpipeBind2(3, 13, 0, ctx_r2.context.y) - i0.ɵɵpipeBind2(4, 16, item_r1.y, ctx_r2.context.y) : 0)("fill", item_r1.color)("opacity", i0.ɵɵpipeBind3(5, 19, item_r1.x, ctx_r2.handleOpacity, ctx_r2.activateLegend)); } } function BarPathComponent__svg_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, BarPathComponent__svg_ng_container_1__svg_rect_1_Template, 6, 23, "rect", 2); i0.ɵɵpipe(2, "async"); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, ctx_r2.barData$)); } } function BarPathComponent__svg_ng_template_2__svg_rect_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelement(0, "rect", 3); i0.ɵɵpipe(1, "pure"); i0.ɵɵpipe(2, "pure"); i0.ɵɵpipe(3, "pure"); i0.ɵɵpipe(4, "pure"); } if (rf & 2) { const item_r4 = ctx.$implicit; const i_r5 = ctx.index; const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵattribute("height", ctx_r2.innerBandWidth)("y", i0.ɵɵpipeBind2(1, 6, item_r4.x, ctx_r2.getRectX) || 0)("x", i0.ɵɵpipeBind2(2, 9, i_r5, ctx_r2.getStackedRectY) || 0)("width", item_r4.y ? i0.ɵɵpipeBind2(3, 12, item_r4.y, ctx_r2.context.y) : 0)("fill", item_r4.color)("opacity", i0.ɵɵpipeBind3(4, 15, item_r4.x, ctx_r2.handleOpacity, ctx_r2.activateLegend)); } } function BarPathComponent__svg_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, BarPathComponent__svg_ng_template_2__svg_rect_0_Template, 5, 19, "rect", 2); i0.ɵɵpipe(1, "async"); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(1, 1, ctx_r2.barData$)); } } export class BarPathComponent { get isStacked() { return this.type === 'stacked'; } get innerBandWidth() { return ((this.adaptiveBandWidth ? this.isStacked ? this.context.x.bandwidth() : this.context.barInnerScale(this.barPadding).bandwidth() : this.bandWidth) || 0); } constructor(context, cdr) { this.context = context; this.cdr = cdr; this.barPadding = 8; this.type = 'standard'; this.orientation = Orientation; this.preValue = 0; this.barData = []; this.barData$ = merge(this.data$, this.context.legendChange$$, this.context.seriesData$).pipe(map(() => { this.preValue = 0; return this.data .map((item, index) => ({ ...item, color: item.color || this.context.getChartDefaultColor(index), })) .filter(item => !this.context.disabledLegend.has(item.x)); }), tap(res => { this.barData = res; }), publishRef()); this.getRectX = (x) => this.isStacked ? 0 : this.context.barInnerScale(this.barPadding)(x); this.getRectY = (index, y) => { if (!this.isStacked) { return this.context.y(y); } const previous = this.context.y(this.barData[index - 1 > 0 ? index - 1 : 0].y); const diffH = Math.abs(this.context.y(0) - this.context.y(y)); const res = index === 0 ? previous : this.preValue - diffH; this.preValue = res; return res; }; this.getStackedRectY = (index) => { if (!this.isStacked) { return 0; } const previous = this.context.y(this.barData[index - 1 > 0 ? index - 1 : 0].y); const diffH = Math.abs(this.context.y(0) - previous); const res = index === 0 ? 0 : index === 1 ? previous : this.preValue + diffH; this.preValue = res; return res; }; this.handleVisibility = (name) => this.context.disabledLegend.has(name) ? 'hidden' : ''; this.handleOpacity = (name, activateLegend) => activateLegend ? (activateLegend === name ? 1 : 0.2) : 1; } ngOnInit() { this.context.legendActivate$$.subscribe(legend => { this.activateLegend = legend; this.cdr.detectChanges(); }); this.context.update$$.subscribe(() => { this.cdr.detectChanges(); }); } static { this.ɵfac = function BarPathComponent_Factory(t) { return new (t || BarPathComponent)(i0.ɵɵdirectiveInject(i1.ContextChartService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BarPathComponent, selectors: [["g", "aclBarPath", ""]], inputs: { stroke: "stroke", data: "data", barPadding: "barPadding", groupName: "groupName", type: "type", bandWidth: "bandWidth", adaptiveBandWidth: "adaptiveBandWidth" }, attrs: _c0, decls: 4, vars: 2, consts: [["elseTemplate", ""], [4, "ngIf", "ngIfElse"], ["class", "rect", 4, "ngFor", "ngForOf"], [1, "rect"]], template: function BarPathComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelementStart(0, "g"); i0.ɵɵtemplate(1, BarPathComponent__svg_ng_container_1_Template, 3, 3, "ng-container", 1)(2, BarPathComponent__svg_ng_template_2_Template, 2, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { const elseTemplate_r6 = i0.ɵɵreference(3); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.context.barOptions.orientation === ctx.orientation.VERTICAL)("ngIfElse", elseTemplate_r6); } }, styles: [".tooltipClass{pointer-events:none;max-width:800px!important}.tooltip-content[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-6))}.tooltip-content[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{margin-bottom:8px}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:0;margin:0;list-style:none}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]:not(:last-child), .tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:not(:last-child){margin-bottom:6px}.tooltip-content[_ngcontent-%COMP%] .context-list[_ngcontent-%COMP%]{display:flex;flex-direction:column}.tooltip-content[_ngcontent-%COMP%] .context-list[_ngcontent-%COMP%] .active[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-10))}.tooltip-content[_ngcontent-%COMP%] .context-item[_ngcontent-%COMP%]{display:flex}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .left[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .right[_ngcontent-%COMP%]{text-align:right;white-space:nowrap}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .column-layout[_ngcontent-%COMP%] .right[_ngcontent-%COMP%]{flex:1 1 auto;text-align:right}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .column-layout[_ngcontent-%COMP%] .left[_ngcontent-%COMP%]{margin-right:8px}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .item-icon[_ngcontent-%COMP%]{margin-right:4px;width:6px;border-radius:50%;height:6px;background-color:rgb(var(--aui-color-n-10));display:inline-block;font-size:6px}"], changeDetection: 0 }); } } __decorate([ ObservableInput(true, []), __metadata("design:type", Observable) ], BarPathComponent.prototype, "data$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BarPathComponent, [{ type: Component, args: [{ selector: 'g[aclBarPath]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:g>\n <ng-container\n *ngIf=\"\n context.barOptions.orientation === orientation.VERTICAL;\n else elseTemplate\n \"\n >\n <rect\n *ngFor=\"let item of barData$ | async; let i = index\"\n class=\"rect\"\n [attr.width]=\"innerBandWidth\"\n [attr.x]=\"(item.x | pure: getRectX) || 0\"\n [attr.y]=\"(i | pure: getRectY:item.y) || 0\"\n [attr.height]=\"\n item.y ? (0 | pure: context.y) - (item.y | pure: context.y) : 0\n \"\n [attr.fill]=\"item.color\"\n [attr.opacity]=\"item.x | pure: handleOpacity:activateLegend\"\n ></rect>\n </ng-container>\n <ng-template #elseTemplate>\n <rect\n *ngFor=\"let item of barData$ | async; let i = index\"\n class=\"rect\"\n [attr.height]=\"innerBandWidth\"\n [attr.y]=\"(item.x | pure: getRectX) || 0\"\n [attr.x]=\"(i | pure: getStackedRectY) || 0\"\n [attr.width]=\"item.y ? (item.y | pure: context.y) : 0\"\n [attr.fill]=\"item.color\"\n [attr.opacity]=\"item.x | pure: handleOpacity:activateLegend\"\n ></rect>\n </ng-template>\n</svg:g>\n", styles: ["::ng-deep .tooltipClass{pointer-events:none;max-width:800px!important}.tooltip-content{color:rgb(var(--aui-color-n-6))}.tooltip-content .title{margin-bottom:8px}.tooltip-content .context ul,.tooltip-content .context li{padding:0;margin:0;list-style:none}.tooltip-content .context ul:not(:last-child),.tooltip-content .context li:not(:last-child){margin-bottom:6px}.tooltip-content .context-list{display:flex;flex-direction:column}.tooltip-content .context-list .active{color:rgb(var(--aui-color-n-10))}.tooltip-content .context-item{display:flex}.tooltip-content .context .left{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tooltip-content .context .right{text-align:right;white-space:nowrap}.tooltip-content .context .column-layout .right{flex:1 1 auto;text-align:right}.tooltip-content .context .column-layout .left{margin-right:8px}.tooltip-content .context .item-icon{margin-right:4px;width:6px;border-radius:50%;height:6px;background-color:rgb(var(--aui-color-n-10));display:inline-block;font-size:6px}\n"] }] }], () => [{ type: i1.ContextChartService }, { type: i0.ChangeDetectorRef }], { stroke: [{ type: Input }], data: [{ type: Input }], data$: [], barPadding: [{ type: Input }], groupName: [{ type: Input }], type: [{ type: Input }], bandWidth: [{ type: Input }], adaptiveBandWidth: [{ type: Input }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(BarPathComponent, { className: "BarPathComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLXBhdGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NoYXJ0L2NvbW1vbi9zZXJpZXMvYmFyLXBhdGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NoYXJ0L2NvbW1vbi9zZXJpZXMvYmFyLXBhdGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7OztJQ050QywwQkFXUTs7Ozs7Ozs7Ozs7Ozs7SUFqQlYsNkJBS0M7SUFDQyw2RkFXQzs7Ozs7SUFWa0IsY0FBcUI7SUFBckIsK0RBQXFCOzs7O0lBYXhDLDBCQVNROzs7Ozs7Ozs7Ozs7SUFUUiw0RkFTQzs7OztJQVJrQiwrREFBcUI7O0FEQTVDLE1BQU0sT0FBTyxnQkFBZ0I7SUF5QjNCLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQXNCRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQ2QsQ0FBQyxDQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUUs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SUFPSixRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7aUZBN0VVLGdCQUFnQjtvRUFBaEIsZ0JBQWdCOztZQ3RCN0IseUJBQU87WUFvQkwsQUFuQkEsd0ZBS0MsMEdBYzBCO1lBWTdCLGlCQUFROzs7WUE5QkgsY0FFUTtZQUFBLEFBRlIsc0ZBRVEsNkJBRWI7OztBRHFCRTtJQURDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOzhCQUNsQixVQUFVOytDQUVoQjtpRkFQUyxnQkFBZ0I7Y0FQNUIsU0FBUzsyQkFFRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07b0ZBR3RDLE1BQU07a0JBQWQsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUdOLEtBQUssTUFJSSxVQUFVO2tCQUFsQixLQUFLO1lBRUcsU0FBUztrQkFBakIsS0FBSztZQUVHLElBQUk7a0JBQVosS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFFRyxpQkFBaUI7a0JBQXpCLEtBQUs7O2tGQWpCSyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY2FsZUJhbmQgfSBmcm9tICdkMyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtZXJnZSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0LCBwdWJsaXNoUmVmIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IENoYXJ0RGF0YUl0ZW0gfSBmcm9tICcuLi8uLi8uLi92aWV3LWNoYXJ0L3R5cGVzJztcbmltcG9ydCB7IENvbnRleHRDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWVudGF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdnW2FjbEJhclBhdGhdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhci1wYXRoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFyUGF0aENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0cm9rZTogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRhOiBBcnJheTxDaGFydERhdGFJdGVtPHsgeDogc3RyaW5nOyB5OiBudW1iZXI7IGNvbG9yPzogc3RyaW5nIH0+PjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KHRydWUsIFtdKVxuICBkYXRhJCE6IE9ic2VydmFibGU8XG4gICAgQXJyYXk8Q2hhcnREYXRhSXRlbTx7IHg6IHN0cmluZzsgeTogbnVtYmVyOyBjb2xvcj86IHN0cmluZyB9Pj5cbiAgPjtcblxuICBASW5wdXQoKSBiYXJQYWRkaW5nID0gODtcblxuICBASW5wdXQoKSBncm91cE5hbWU6IHN0cmluZztcblxuICBASW5wdXQoKSB0eXBlOiAnc3RhbmRhcmQnIHwgJ3N0YWNrZWQnID0gJ3N0YW5kYXJkJztcblxuICBASW5wdXQoKSBiYW5kV2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKSBhZGFwdGl2ZUJhbmRXaWR0aDogYm9vbGVhbjtcblxuICBwYXRoOiBzdHJpbmc7XG4gIG9yaWVudGF0aW9uID0gT3JpZW50YXRpb247XG4gIHByZVZhbHVlID0gMDtcbiAgYmFyRGF0YTogQ2hhcnREYXRhSXRlbVtdID0gW107XG4gIGFjdGl2YXRlTGVnZW5kOiBzdHJpbmc7XG5cbiAgZ2V0IGlzU3RhY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnc3RhY2tlZCc7XG4gIH1cblxuICBiYXJEYXRhJCA9IG1lcmdlKFxuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy5jb250ZXh0LmxlZ2VuZENoYW5nZSQkLFxuICAgIHRoaXMuY29udGV4dC5zZXJpZXNEYXRhJCxcbiAgKS5waXBlKFxuICAgIG1hcCgoKSA9PiB7XG4gICAgICB0aGlzLnByZVZhbHVlID0gMDtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBjb2xvcjogaXRlbS5jb2xvciB8fCB0aGlzLmNvbnRleHQuZ2V0Q2hhcnREZWZhdWx0Q29sb3IoaW5kZXgpLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICF0aGlzLmNvbnRleHQuZGlzYWJsZWRMZWdlbmQuaGFzKGl0ZW0ueCBhcyBzdHJpbmcpKTtcbiAgICB9KSxcbiAgICB0YXAocmVzID0+IHtcbiAgICAgIHRoaXMuYmFyRGF0YSA9IHJlcztcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgZ2V0IGlubmVyQmFuZFdpZHRoKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5hZGFwdGl2ZUJhbmRXaWR0aFxuICAgICAgICA/IHRoaXMuaXNTdGFja2VkXG4gICAgICAgICAgPyAoPFNjYWxlQmFuZDxzdHJpbmc+PnRoaXMuY29udGV4dC54KS5iYW5kd2lkdGgoKVxuICAgICAgICAgIDogdGhpcy5jb250ZXh0LmJhcklubmVyU2NhbGUodGhpcy5iYXJQYWRkaW5nKS5iYW5kd2lkdGgoKVxuICAgICAgICA6IHRoaXMuYmFuZFdpZHRoKSB8fCAwXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjb250ZXh0OiBDb250ZXh0Q2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIGdldFJlY3RYID0gKHg6IHN0cmluZyB8IG51bWJlciB8IERhdGUpID0+XG4gICAgdGhpcy5pc1N0YWNrZWRcbiAgICAgID8gMFxuICAgICAgOiB0aGlzLmNvbnRleHQuYmFySW5uZXJTY2FsZSh0aGlzLmJhclBhZGRpbmcpKHggYXMgc3RyaW5nKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbnRleHQubGVnZW5kQWN0aXZhdGUkJC5zdWJzY3JpYmUobGVnZW5kID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVMZWdlbmQgPSBsZWdlbmQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5jb250ZXh0LnVwZGF0ZSQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRSZWN0WSA9IChpbmRleDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNTdGFja2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnkoeSk7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5jb250ZXh0LnkoXG4gICAgICB0aGlzLmJhckRhdGFbaW5kZXggLSAxID4gMCA/IGluZGV4IC0gMSA6IDBdLnksXG4gICAgKTtcbiAgICBjb25zdCBkaWZmSCA9IE1hdGguYWJzKHRoaXMuY29udGV4dC55KDApIC0gdGhpcy5jb250ZXh0LnkoeSkpO1xuICAgIGNvbnN0IHJlcyA9IGluZGV4ID09PSAwID8gcHJldmlvdXMgOiB0aGlzLnByZVZhbHVlIC0gZGlmZkg7XG4gICAgdGhpcy5wcmVWYWx1ZSA9IHJlcztcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIGdldFN0YWNrZWRSZWN0WSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzU3RhY2tlZCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5jb250ZXh0LnkoXG4gICAgICB0aGlzLmJhckRhdGFbaW5kZXggLSAxID4gMCA/IGluZGV4IC0gMSA6IDBdLnksXG4gICAgKTtcbiAgICBjb25zdCBkaWZmSCA9IE1hdGguYWJzKHRoaXMuY29udGV4dC55KDApIC0gcHJldmlvdXMpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICBpbmRleCA9PT0gMCA/IDAgOiBpbmRleCA9PT0gMSA/IHByZXZpb3VzIDogdGhpcy5wcmVWYWx1ZSArIGRpZmZIO1xuICAgIHRoaXMucHJlVmFsdWUgPSByZXM7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBoYW5kbGVWaXNpYmlsaXR5ID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICB0aGlzLmNvbnRleHQuZGlzYWJsZWRMZWdlbmQuaGFzKG5hbWUpID8gJ2hpZGRlbicgOiAnJztcblxuICBoYW5kbGVPcGFjaXR5ID0gKG5hbWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGFjdGl2YXRlTGVnZW5kOiBzdHJpbmcpID0+XG4gICAgYWN0aXZhdGVMZWdlbmQgPyAoYWN0aXZhdGVMZWdlbmQgPT09IG5hbWUgPyAxIDogMC4yKSA6IDE7XG59XG4iLCI8c3ZnOmc+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIlxuICAgICAgY29udGV4dC5iYXJPcHRpb25zLm9yaWVudGF0aW9uID09PSBvcmllbnRhdGlvbi5WRVJUSUNBTDtcbiAgICAgIGVsc2UgZWxzZVRlbXBsYXRlXG4gICAgXCJcbiAgPlxuICAgIDxyZWN0XG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiYXJEYXRhJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwicmVjdFwiXG4gICAgICBbYXR0ci53aWR0aF09XCJpbm5lckJhbmRXaWR0aFwiXG4gICAgICBbYXR0ci54XT1cIihpdGVtLnggfCBwdXJlOiBnZXRSZWN0WCkgfHwgMFwiXG4gICAgICBbYXR0ci55XT1cIihpIHwgcHVyZTogZ2V0UmVjdFk6aXRlbS55KSB8fCAwXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJcbiAgICAgICAgaXRlbS55ID8gKDAgfCBwdXJlOiBjb250ZXh0LnkpIC0gKGl0ZW0ueSB8IHB1cmU6IGNvbnRleHQueSkgOiAwXG4gICAgICBcIlxuICAgICAgW2F0dHIuZmlsbF09XCJpdGVtLmNvbG9yXCJcbiAgICAgIFthdHRyLm9wYWNpdHldPVwiaXRlbS54IHwgcHVyZTogaGFuZGxlT3BhY2l0eTphY3RpdmF0ZUxlZ2VuZFwiXG4gICAgPjwvcmVjdD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgIDxyZWN0XG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiYXJEYXRhJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwicmVjdFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaW5uZXJCYW5kV2lkdGhcIlxuICAgICAgW2F0dHIueV09XCIoaXRlbS54IHwgcHVyZTogZ2V0UmVjdFgpIHx8IDBcIlxuICAgICAgW2F0dHIueF09XCIoaSB8IHB1cmU6IGdldFN0YWNrZWRSZWN0WSkgfHwgMFwiXG4gICAgICBbYXR0ci53aWR0aF09XCJpdGVtLnkgPyAoaXRlbS55IHwgcHVyZTogY29udGV4dC55KSA6IDBcIlxuICAgICAgW2F0dHIuZmlsbF09XCJpdGVtLmNvbG9yXCJcbiAgICAgIFthdHRyLm9wYWNpdHldPVwiaXRlbS54IHwgcHVyZTogaGFuZGxlT3BhY2l0eTphY3RpdmF0ZUxlZ2VuZFwiXG4gICAgPjwvcmVjdD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvc3ZnOmc+XG4iXX0=