@rfprodz/client-d3-charts 1.4.13 → 1.4.15
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/esm2022/lib/components/bar-chart/bar-chart.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples/chart-examples.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-bar/chart-examples-bar.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-force-directed/chart-examples-force-directed.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-gauge/chart-examples-gauge.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-line/chart-examples-line.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-pie/chart-examples-pie.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-radar/chart-examples-radar.component.mjs +3 -3
- package/esm2022/lib/components/force-directed-chart/force-directed-chart.component.mjs +3 -3
- package/esm2022/lib/components/gauge-chart/gauge-chart.component.mjs +3 -3
- package/esm2022/lib/components/line-chart/line-chart.component.mjs +3 -3
- package/esm2022/lib/components/pie-chart/pie-chart.component.mjs +3 -3
- package/esm2022/lib/components/radar-chart/radar-chart.component.mjs +3 -3
- package/esm2022/lib/d3-charts.module.mjs +4 -4
- package/esm2022/lib/util/force-directed-chart.util.mjs +2 -2
- package/fesm2022/rfprodz-client-d3-charts.mjs +44 -44
- package/fesm2022/rfprodz-client-d3-charts.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -54,10 +54,10 @@ export class AppBarChartComponent extends AppD3ChartBase {
|
|
|
54
54
|
this.drawChart();
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
58
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
57
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppBarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppBarChartComponent, selector: "app-bar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
59
59
|
}
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppBarChartComponent, decorators: [{
|
|
61
61
|
type: Component,
|
|
62
62
|
args: [{ selector: 'app-bar-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
63
63
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -8,10 +8,10 @@ import * as i5 from "../chart-examples-pie/chart-examples-pie.component";
|
|
|
8
8
|
import * as i6 from "../chart-examples-gauge/chart-examples-gauge.component";
|
|
9
9
|
import * as i7 from "../chart-examples-force-directed/chart-examples-force-directed.component";
|
|
10
10
|
export class AppChartExamplesComponent {
|
|
11
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
12
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
11
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesComponent, selector: "app-chart-examples", ngImport: i0, template: "<app-chart-examples-bar></app-chart-examples-bar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-line></app-chart-examples-line>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-radar></app-chart-examples-radar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-pie></app-chart-examples-pie>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-gauge></app-chart-examples-gauge>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-force-directed></app-chart-examples-force-directed>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AppChartExamplesLineComponent, selector: "app-chart-examples-line" }, { kind: "component", type: i3.AppChartExamplesRadaraComponent, selector: "app-chart-examples-radar" }, { kind: "component", type: i4.AppChartExamplesBarComponent, selector: "app-chart-examples-bar" }, { kind: "component", type: i5.AppChartExamplesPieComponent, selector: "app-chart-examples-pie" }, { kind: "component", type: i6.AppChartExamplesGaugeComponent, selector: "app-chart-examples-gauge" }, { kind: "component", type: i7.AppChartExamplesForceDirectedComponent, selector: "app-chart-examples-force-directed" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
16
|
args: [{ selector: 'app-chart-examples', changeDetection: ChangeDetectionStrategy.OnPush, template: "<app-chart-examples-bar></app-chart-examples-bar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-line></app-chart-examples-line>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-radar></app-chart-examples-radar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-pie></app-chart-examples-pie>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-gauge></app-chart-examples-gauge>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-force-directed></app-chart-examples-force-directed>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
17
17
|
}] });
|
|
@@ -37,10 +37,10 @@ export class AppChartExamplesBarComponent {
|
|
|
37
37
|
return timer(timeout).pipe(first(), map(() => ({ data: this.chartData, options: this.chartOptions })));
|
|
38
38
|
}));
|
|
39
39
|
}
|
|
40
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
41
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
40
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesBarComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesBarComponent, selector: "app-chart-examples-bar", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppBarChartComponent, selector: "app-bar-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
42
42
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesBarComponent, decorators: [{
|
|
44
44
|
type: Component,
|
|
45
45
|
args: [{ selector: 'app-chart-examples-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
46
46
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -75,10 +75,10 @@ export class AppChartExamplesForceDirectedComponent {
|
|
|
75
75
|
return timer(timeout).pipe(first(), map(() => ({ data: this.chartData, options: this.chartOptions })));
|
|
76
76
|
}));
|
|
77
77
|
}
|
|
78
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
79
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
78
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesForceDirectedComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesForceDirectedComponent, selector: "app-chart-examples-force-directed", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
80
|
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesForceDirectedComponent, decorators: [{
|
|
82
82
|
type: Component,
|
|
83
83
|
args: [{ selector: 'app-chart-examples-force-directed', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
84
84
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -75,10 +75,10 @@ export class AppChartExamplesGaugeComponent {
|
|
|
75
75
|
return timer(timeout).pipe(first(), map(() => ({ data: this.chartData, options: this.chartOptions })));
|
|
76
76
|
}));
|
|
77
77
|
}
|
|
78
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
79
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
78
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesGaugeComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesGaugeComponent, selector: "app-chart-examples-gauge", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-gauge-chart\n [chartId]=\"'gauge-example-1'\"\n [data]=\"config.data.first\"\n [options]=\"config.options.first\"\n [value]=\"value.first\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-2'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.second\"\n [value]=\"value.second\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-3'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.third\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-4'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.fourth\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppGaugeChartComponent, selector: "app-gauge-chart", inputs: ["chartId", "value", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
80
|
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesGaugeComponent, decorators: [{
|
|
82
82
|
type: Component,
|
|
83
83
|
args: [{ selector: 'app-chart-examples-gauge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-gauge-chart\n [chartId]=\"'gauge-example-1'\"\n [data]=\"config.data.first\"\n [options]=\"config.options.first\"\n [value]=\"value.first\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-2'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.second\"\n [value]=\"value.second\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-3'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.third\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-4'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.fourth\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
84
84
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -86,10 +86,10 @@ export class AppChartExamplesLineComponent {
|
|
|
86
86
|
dateFormat,
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
90
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
89
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesLineComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
90
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesLineComponent, selector: "app-chart-examples-line", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-line-chart\n [chartId]=\"'line-example-1'\"\n [data]=\"[config.data[0]]\"\n [datasetLabels]=\"[config.datasetLabels[0]]\"\n [options]=\"config.options\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-2'\"\n [data]=\"[config.data[1]]\"\n [datasetLabels]=\"[config.datasetLabels[1]]\"\n [options]=\"config.optionsDateDdMmYy\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [datasetLabels]=\"[config.datasetLabels[1], config.datasetLabels[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-4'\"\n [data]=\"config.data\"\n [datasetLabels]=\"config.datasetLabels\"\n [options]=\"config.optionsDateMmYyyy\"\n ></app-line-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppLineChartComponent, selector: "app-line-chart", inputs: ["chartId", "data", "datasetLabels", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
91
91
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesLineComponent, decorators: [{
|
|
93
93
|
type: Component,
|
|
94
94
|
args: [{ selector: 'app-chart-examples-line', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-line-chart\n [chartId]=\"'line-example-1'\"\n [data]=\"[config.data[0]]\"\n [datasetLabels]=\"[config.datasetLabels[0]]\"\n [options]=\"config.options\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-2'\"\n [data]=\"[config.data[1]]\"\n [datasetLabels]=\"[config.datasetLabels[1]]\"\n [options]=\"config.optionsDateDdMmYy\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [datasetLabels]=\"[config.datasetLabels[1], config.datasetLabels[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-4'\"\n [data]=\"config.data\"\n [datasetLabels]=\"config.datasetLabels\"\n [options]=\"config.optionsDateMmYyyy\"\n ></app-line-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
95
95
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -43,10 +43,10 @@ export class AppChartExamplesPieComponent {
|
|
|
43
43
|
return timer(timeout).pipe(first(), map(() => ({ data: this.chartData, options: this.chartOptions })));
|
|
44
44
|
}));
|
|
45
45
|
}
|
|
46
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
47
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
46
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesPieComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesPieComponent, selector: "app-chart-examples-pie", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options.first\"></app-pie-chart>\n\n <app-pie-chart [chartId]=\"'pie-example-2'\" [data]=\"config.data\" [options]=\"config.options.second\"></app-pie-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppPieChartComponent, selector: "app-pie-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
48
48
|
}
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesPieComponent, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
51
|
args: [{ selector: 'app-chart-examples-pie', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options.first\"></app-pie-chart>\n\n <app-pie-chart [chartId]=\"'pie-example-2'\" [data]=\"config.data\" [options]=\"config.options.second\"></app-pie-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
52
52
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -52,10 +52,10 @@ export class AppChartExamplesRadaraComponent {
|
|
|
52
52
|
return timer(timeout).pipe(first(), map(() => ({ data: this.chartData, options: this.chartOptions })));
|
|
53
53
|
}));
|
|
54
54
|
}
|
|
55
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
56
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
55
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesRadaraComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppChartExamplesRadaraComponent, selector: "app-chart-examples-radar", ngImport: i0, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-3'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppRadarChartComponent, selector: "app-radar-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
57
57
|
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppChartExamplesRadaraComponent, decorators: [{
|
|
59
59
|
type: Component,
|
|
60
60
|
args: [{ selector: 'app-chart-examples-radar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"chartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-3'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
61
61
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
|
|
@@ -59,10 +59,10 @@ export class AppForceDirectedChartComponent extends AppD3ChartBase {
|
|
|
59
59
|
this.drawChart();
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
63
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
62
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppForceDirectedChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
63
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
64
64
|
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
|
|
66
66
|
type: Component,
|
|
67
67
|
args: [{ selector: 'app-force-directed-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
68
68
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -60,10 +60,10 @@ export class AppGaugeChartComponent extends AppD3ChartBase {
|
|
|
60
60
|
this.drawChart();
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
64
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
63
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppGaugeChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
64
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppGaugeChartComponent, selector: "app-gauge-chart", inputs: { chartId: "chartId", value: "value", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
65
65
|
}
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppGaugeChartComponent, decorators: [{
|
|
67
67
|
type: Component,
|
|
68
68
|
args: [{ selector: 'app-gauge-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
69
69
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -61,10 +61,10 @@ export class AppLineChartComponent extends AppD3ChartBase {
|
|
|
61
61
|
this.drawChart();
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
65
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
64
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppLineChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppLineChartComponent, selector: "app-line-chart", inputs: { chartId: "chartId", data: "data", datasetLabels: "datasetLabels", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
66
66
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppLineChartComponent, decorators: [{
|
|
68
68
|
type: Component,
|
|
69
69
|
args: [{ selector: 'app-line-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
70
70
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -57,10 +57,10 @@ export class AppPieChartComponent extends AppD3ChartBase {
|
|
|
57
57
|
this.drawChart();
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
61
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
60
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppPieChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
61
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppPieChartComponent, selector: "app-pie-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
62
62
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppPieChartComponent, decorators: [{
|
|
64
64
|
type: Component,
|
|
65
65
|
args: [{ selector: 'app-pie-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
66
66
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -69,10 +69,10 @@ export class AppRadarChartComponent extends AppD3ChartBase {
|
|
|
69
69
|
this.drawChart();
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
73
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
72
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppRadarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
73
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: AppRadarChartComponent, selector: "app-radar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
74
74
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppRadarChartComponent, decorators: [{
|
|
76
76
|
type: Component,
|
|
77
77
|
args: [{ selector: 'app-radar-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
78
78
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -15,8 +15,8 @@ import { AppPieChartComponent } from './components/pie-chart/pie-chart.component
|
|
|
15
15
|
import { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
export class AppD3ChartsModule {
|
|
18
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
19
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.
|
|
18
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppD3ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
19
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.7", ngImport: i0, type: AppD3ChartsModule, declarations: [AppGaugeChartComponent,
|
|
20
20
|
AppPieChartComponent,
|
|
21
21
|
AppRadarChartComponent,
|
|
22
22
|
AppForceDirectedChartComponent,
|
|
@@ -35,9 +35,9 @@ export class AppD3ChartsModule {
|
|
|
35
35
|
AppBarChartComponent,
|
|
36
36
|
AppLineChartComponent,
|
|
37
37
|
AppChartExamplesComponent] }); }
|
|
38
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.
|
|
38
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppD3ChartsModule, imports: [CommonModule] }); }
|
|
39
39
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: AppD3ChartsModule, decorators: [{
|
|
41
41
|
type: NgModule,
|
|
42
42
|
args: [{
|
|
43
43
|
imports: [CommonModule],
|
|
@@ -22,7 +22,7 @@ export const defaultForceDirectedChartConfig = Object.freeze({
|
|
|
22
22
|
bottom: 20,
|
|
23
23
|
left: 20,
|
|
24
24
|
},
|
|
25
|
-
linkStrokeColor: '
|
|
25
|
+
linkStrokeColor: 'lightgray',
|
|
26
26
|
linkStrokeWidth: 1.5,
|
|
27
27
|
labelTextWrapWidth: 60,
|
|
28
28
|
color: d3.scaleOrdinal(d3.schemeCategory10),
|
|
@@ -252,4 +252,4 @@ export const drawForceDirectedChart = (container, data, options) => {
|
|
|
252
252
|
});
|
|
253
253
|
return config;
|
|
254
254
|
};
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtZGlyZWN0ZWQtY2hhcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3V0aWwvZm9yY2UtZGlyZWN0ZWQtY2hhcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQU96QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUErQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZGLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztJQUNYLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDYixLQUFLLEVBQUUsR0FBRztRQUNWLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsUUFBUSxFQUFFLEVBQUU7SUFDWixRQUFRLEVBQUUsRUFBRTtJQUNaLGVBQWUsRUFBRSxFQUFFO0lBQ25CLE1BQU0sRUFBRTtRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxlQUFlLEVBQUUsTUFBTTtJQUN2QixlQUFlLEVBQUUsR0FBRztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQyxTQUFTLEVBQUUsU0FBUztJQUNwQixlQUFlLEVBQUUsV0FBVztJQUM1QixlQUFlLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQUM7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUNi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SUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVuRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRW5DLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuaW1wb3J0IHtcbiAgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEsXG4gIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9yY2UtZGlyZWN0ZWQtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi51dGlsJztcblxuLyoqXG4gKiBUaGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcmNlRGlyZWN0ZWRDaGFydENvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgY2hhcnRUaXRsZTogJycsXG4gIHdpZHRoOiA2MDAsXG4gIGhlaWdodDogNjAwLFxuICBjZW50ZXJDYWxjTW9kOiAxLjYsXG4gIGNoYXJnZToge1xuICAgIHN0cmVuZ3RoOiAtMTAsXG4gICAgdGhldGE6IDAuNixcbiAgICBkaXN0YW5jZU1heDogMjAwMCxcbiAgfSxcbiAgZGlzdGFuY2U6IDc1LFxuICBmb250U2l6ZTogMTAsXG4gIGNvbGxpc2lvblJhZGl1czogMzAsXG4gIG1hcmdpbjoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDIwLFxuICAgIGJvdHRvbTogMjAsXG4gICAgbGVmdDogMjAsXG4gIH0sXG4gIGxpbmtTdHJva2VDb2xvcjogJ2dyYXknLFxuICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgbGFiZWxUZXh0V3JhcFdpZHRoOiA2MCxcbiAgY29sb3I6IGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKSxcbiAgbm9kZUNvbG9yOiAnI2YwMDAwMCcsXG4gIG5vZGVTdHJva2VDb2xvcjogJ2xpZ2h0Z3JheScsXG4gIG5vZGVTdHJva2VXaWR0aDogMSxcbn0pO1xuXG4vKipcbiAqIFRoZSBmb3JjZSBkdXJlY3RlZCBjaGFydCB0aWNrIGhhbmRsZXIuXG4gKiBAcGFyYW0gbGluayBjaGFydCBsaW5rc1xuICogQHBhcmFtIG5vZGUgY2hhcnQgbm9kZXNcbiAqIEBwYXJhbSB0ZXh0IGNoYXJ0IHRleHRcbiAqIEByZXR1cm5zIHJvdGF0aW9uIGFuZ2xlXG4gKi9cbmNvbnN0IHRpY2tlZCA9IChcbiAgbGluaz86IGQzLlNlbGVjdGlvbjxTVkdMaW5lRWxlbWVudCwgZDMuU2ltdWxhdGlvbkxpbmtEYXR1bTxJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGU+LCBTVkdTVkdFbGVtZW50LCB1bmtub3duPixcbiAgbm9kZT86IGQzLlNlbGVjdGlvbjxTVkdDaXJjbGVFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIFNWR1NWR0VsZW1lbnQsIHVua25vd24+LFxuICB0ZXh0PzogZDMuU2VsZWN0aW9uPFNWR1RleHRFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIFNWR0dFbGVtZW50LCB1bmtub3duPixcbikgPT4ge1xuICBpZiAodHlwZW9mIGxpbmsgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbGlua1xuICAgICAgLmF0dHIoJ3gxJywgZCA9PiAoZC5zb3VyY2UgYXMgeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KS54ID8/IDApXG4gICAgICAuYXR0cigneTEnLCBkID0+IChkLnNvdXJjZSBhcyB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pLnkgPz8gMClcbiAgICAgIC5hdHRyKCd4MicsIGQgPT4gKGQudGFyZ2V0IGFzIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkueCA/PyAwKVxuICAgICAgLmF0dHIoJ3kyJywgZCA9PiAoZC50YXJnZXQgYXMgeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KS55ID8/IDApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBub2RlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5vZGUuYXR0cignY3gnLCBkID0+IGQueCA/PyAwKS5hdHRyKCdjeScsIGQgPT4gZC55ID8/IDApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IGR4ID0gMTA7XG4gICAgY29uc3QgZHkgPSA1O1xuICAgIHRleHQuYXR0cigneCcsIGQgPT4gKGQueCA/PyAwKSArIGR4KS5hdHRyKCd5JywgZCA9PiAoZC55ID8/IDApIC0gZHkpO1xuICB9XG5cbiAgcmV0dXJuICdyb3RhdGUoMCknO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29udGFpbmVyIGZvciB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgc3ZnIGVsZW1lbnQgYW5kIHRoZSBnIGVsZW1lbnRcbiAqL1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMpID0+IHtcbiAgY29uc3QgaWQgPSBjb250YWluZXIubmF0aXZlRWxlbWVudC5pZCA/PyAnZm9yY2UtZGlyZWN0ZWQtMCc7XG5cbiAgZDMuc2VsZWN0KGAjJHtpZH1gKS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuICBjb25zdCBzdmcgPSBkM1xuICAgIC5zZWxlY3QoYCMke2lkfWApXG4gICAgLmFwcGVuZCgnc3ZnJylcbiAgICAuYXR0cignd2lkdGgnLCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLmxlZnQgKyBjb25maWcubWFyZ2luLnJpZ2h0KVxuICAgIC5hdHRyKCdoZWlnaHQnLCBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IGRhdGEuXG4gKiBAcGFyYW0gZyB0aGUgc3ZnIGcgZWxlbWVudFxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqL1xuY29uc3QgYXBwbHlDaGFydERhdGEgPSAoZzogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhKSA9PiB7XG4gIGNvbnN0IGltYWdlWFkgPSAxMDtcbiAgZy5hcHBlbmQoJ2RlZnMnKVxuICAgIC5zZWxlY3RBbGwoJ3BhdHRlcm4nKVxuICAgIC5kYXRhKGRhdGEuZW50aXRpZXMpXG4gICAgLmVudGVyKClcbiAgICAuYXBwZW5kKCdwYXR0ZXJuJylcbiAgICAuYXR0cignaWQnLCAodmFsLCBpKSA9PiBgaW1nLSR7dmFsLmluZGV4fWApXG4gICAgLmF0dHIoJ3gnLCAwKVxuICAgIC5hdHRyKCd5JywgMClcbiAgICAuYXR0cignaGVpZ2h0JywgdmFsID0+IHtcbiAgICAgIGNvbnN0IGJhc2VWYWx1ZSA9IDMwO1xuICAgICAgcmV0dXJuIGJhc2VWYWx1ZSArIHZhbC5saW5rc0NvdW50ICogMjtcbiAgICB9KVxuICAgIC5hdHRyKCd3aWR0aCcsIHZhbCA9PiB7XG4gICAgICBjb25zdCBiYXNlVmFsdWUgPSAzMDtcbiAgICAgIHJldHVybiBiYXNlVmFsdWUgKyB2YWwubGlua3NDb3VudCAqIDI7XG4gICAgfSlcbiAgICAuYXBwZW5kKCdpbWFnZScpXG4gICAgLmF0dHIoJ3gnLCBpbWFnZVhZKVxuICAgIC5hdHRyKCd5JywgaW1hZ2VYWSlcbiAgICAuYXR0cignaGVpZ2h0JywgdmFsID0+IHtcbiAgICAgIGNvbnN0IGJhc2VWYWx1ZSA9IDMwO1xuICAgICAgcmV0dXJuIGJhc2VWYWx1ZSArIHZhbC5saW5rc0NvdW50ICogMjtcbiAgICB9KVxuICAgIC5hdHRyKCd3aWR0aCcsIHZhbCA9PiB7XG4gICAgICBjb25zdCBiYXNlVmFsdWUgPSAzMDtcbiAgICAgIHJldHVybiBiYXNlVmFsdWUgKyB2YWwubGlua3NDb3VudCAqIDI7XG4gICAgfSlcbiAgICAuYXR0cigneGxpbms6aHJlZicsIHZhbCA9PiB2YWwuaW1nKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgbGlua3MuXG4gKiBAcGFyYW0gc3ZnIHRoZSBzdmcgZWxlbWVudFxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBsaW5rc1xuICovXG5jb25zdCBjcmVhdGVMaW5rcyA9IChcbiAgc3ZnOiBkMy5TZWxlY3Rpb248U1ZHU1ZHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LFxuICBjb25maWc6IElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zLFxuICBkYXRhOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YSxcbikgPT4ge1xuICByZXR1cm4gc3ZnXG4gICAgLnNlbGVjdEFsbCgnLmxpbmsnKVxuICAgIC5kYXRhKGRhdGEubGlua3MpXG4gICAgLmVudGVyKClcbiAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAuYXR0cignY2xhc3MnLCAnbGluaycpXG4gICAgLnN0eWxlKCdzdHJva2UnLCBjb25maWcubGlua1N0cm9rZUNvbG9yKVxuICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgY29uZmlnLmxpbmtTdHJva2VXaWR0aCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IGZvcmNlcy5cbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgZm9yY2VzXG4gKi9cbmNvbnN0IGNyZWF0ZUZvcmNlcyA9IChjb25maWc6IElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zLCBkYXRhOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YSkgPT4ge1xuICByZXR1cm4gZDNcbiAgICAuZm9yY2VTaW11bGF0aW9uKGRhdGEubm9kZXMpXG4gICAgLmZvcmNlKFxuICAgICAgJ2xpbmsnLFxuICAgICAgZDMuZm9yY2VMaW5rKCkuaWQoZCA9PiBkLmluZGV4ID8/IDApLFxuICAgIClcbiAgICAuZm9yY2UoJ2NoYXJnZScsIGQzLmZvcmNlTWFueUJvZHkoKS5zdHJlbmd0aChjb25maWcuY2hhcmdlLnN0cmVuZ3RoKS50aGV0YShjb25maWcuY2hhcmdlLnRoZXRhKS5kaXN0YW5jZU1heChjb25maWcuY2hhcmdlLmRpc3RhbmNlTWF4KSlcbiAgICAuZm9yY2UoJ2NlbnRlcicsIGQzLmZvcmNlQ2VudGVyKGNvbmZpZy53aWR0aCAvIGNvbmZpZy5jZW50ZXJDYWxjTW9kLCBjb25maWcuaGVpZ2h0IC8gY29uZmlnLmNlbnRlckNhbGNNb2QpKVxuICAgIC5mb3JjZShcbiAgICAgICdjb2xsaXNpb24nLFxuICAgICAgZDMuZm9yY2VDb2xsaWRlKCkucmFkaXVzKGQgPT4gY29uZmlnLmNvbGxpc2lvblJhZGl1cyksXG4gICAgKVxuICAgIC5mb3JjZShcbiAgICAgICdsaW5rJyxcbiAgICAgIGQzXG4gICAgICAgIC5mb3JjZUxpbmsoZGF0YS5saW5rcylcbiAgICAgICAgLmlkKGQgPT4gZC5pbmRleCA/PyAwKVxuICAgICAgICAuZGlzdGFuY2UoY29uZmlnLmRpc3RhbmNlKVxuICAgICAgICAubGlua3MoZGF0YS5saW5rcyksXG4gICAgKTtcbn07XG5cbi8qKlxuICogVGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IG5vZGUgZHJhZyBzdGFydCBoYW5kbGVyLlxuICogQHBhcmFtIGV2ZW50IGEgZHJhZyBldmVudFxuICogQHBhcmFtIGRhdHVtIHRoZSBjaGFydCBkYXRhXG4gKiBAcGFyYW0gZm9yY2UgdGhlIGNoYXJ0IGZvcmNlc1xuICovXG5jb25zdCBub2RlRHJhZ1N0YXJ0SGFuZGxlciA9IChcbiAgZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5rbm93bj4sXG4gIGRhdHVtOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsXG4gIGZvcmNlOiBkMy5TaW11bGF0aW9uPElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5kZWZpbmVkPixcbikgPT4ge1xuICBpZiAoIWV2ZW50LmFjdGl2ZSAmJiB0eXBlb2YgZm9yY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgYWxwaGFUYXJnZXQgPSAwLjM7XG4gICAgZm9yY2UuYWxwaGFUYXJnZXQoYWxwaGFUYXJnZXQpLnJlc3RhcnQoKTtcbiAgfVxuICBkYXR1bS5meCA9IGV2ZW50Lng7XG4gIGRhdHVtLmZ5ID0gZXZlbnQueTtcbn07XG5cbi8qKlxuICogVGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IG5vZGUgZHJhZyBoYW5kbGVyLlxuICogQHBhcmFtIGV2ZW50IGEgZHJhZyBldmVudFxuICogQHBhcmFtIGRhdHVtIHRoZSBjaGFydCBkYXRhXG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IG5vZGVEcmFnSGFuZGxlciA9IChcbiAgZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5rbm93bj4sXG4gIGRhdHVtOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsXG4gIGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsXG4pID0+IHtcbiAgZGF0dW0uZnggPSBldmVudC54ID4gY29uZmlnLm1hcmdpbi5sZWZ0ICYmIGV2ZW50LnggPCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLnJpZ2h0ID8gZXZlbnQueCA6IGRhdHVtLmZ4O1xuICBkYXR1bS5meSA9IGV2ZW50LnkgPiBjb25maWcubWFyZ2luLnRvcCAmJiBldmVudC55IDwgY29uZmlnLndpZHRoICsgY29uZmlnLm1hcmdpbi5ib3R0b20gPyBldmVudC55IDogZGF0dW0uZnk7XG59O1xuXG4vKipcbiAqIFRoZSBmb3JjZSBkaXJlY3RlZCBjaGFydCBub2RlIGRyYWcgZW5kIGhhbmRsZXIuXG4gKiBAcGFyYW0gZXZlbnQgYSBkcmFnIGV2ZW50XG4gKiBAcGFyYW0gZGF0dW0gdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBmb3JjZSB0aGUgY2hhcnQgZm9yY2VzXG4gKi9cbmNvbnN0IG5vZGVEcmFnRW5kSGFuZGxlciA9IChcbiAgZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5rbm93bj4sXG4gIGRhdHVtOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsXG4gIGZvcmNlOiBkMy5TaW11bGF0aW9uPElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5kZWZpbmVkPixcbikgPT4ge1xuICBpZiAoIWV2ZW50LmFjdGl2ZSAmJiB0eXBlb2YgZm9yY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZm9yY2UuYWxwaGFUYXJnZXQoMCk7XG4gIH1cbiAgZGF0dW0uZnggPSBudWxsO1xuICBkYXR1bS5meSA9IG51bGw7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IG5vZGVzLlxuICogQHBhcmFtIHN2ZyB0aGUgc3ZnIGVsZW1lbnRcbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKiBAcGFyYW0gZm9yY2UgdGhlIGNoYXJ0IGZvcmNlc1xuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdGhlIGNoYXJ0IG5vZGVzXG4gKi9cbmNvbnN0IGNyZWF0ZU5vZGVzID0gKFxuICBzdmc6IGQzLlNlbGVjdGlvbjxTVkdTVkdFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sXG4gIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhLFxuICBmb3JjZTogZDMuU2ltdWxhdGlvbjxJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIHVuZGVmaW5lZD4sXG4gIGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3QgYmFzZSA9IDU7XG4gIHJldHVybiBzdmdcbiAgICAuc2VsZWN0QWxsKCcubm9kZScpXG4gICAgLmRhdGEoZGF0YS5ub2RlcylcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ25vZGUnKVxuICAgIC5hdHRyKCdyJywgbm9kZSA9PiBiYXNlICsgKChub2RlLnZhbHVlID8/IDEpICsgKG5vZGUubGlua3NDb3VudCA/PyAxKSkpXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCBjb25maWcubm9kZVN0cm9rZVdpZHRoKVxuICAgIC5zdHlsZSgnc3Ryb2tlJywgY29uZmlnLm5vZGVTdHJva2VDb2xvcilcbiAgICAuc3R5bGUoJ2ZpbGwnLCBub2RlID0+ICh0eXBlb2Ygbm9kZS5pbWcgPT09ICd1bmRlZmluZWQnIHx8IG5vZGUuaW1nID09PSAnJyA/IGNvbmZpZy5ub2RlQ29sb3IgOiBgdXJsKCR7bm9kZS5pbWd9KWApKVxuICAgIC5jYWxsKFxuICAgICAgZDNcbiAgICAgICAgLmRyYWc8U1ZHQ2lyY2xlRWxlbWVudCwgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlPigpXG4gICAgICAgIC5vbihcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgIGZ1bmN0aW9uIChcbiAgICAgICAgICAgIHRoaXM6IFNWR0NpcmNsZUVsZW1lbnQsXG4gICAgICAgICAgICBldmVudDogZDMuRDNEcmFnRXZlbnQ8U1ZHQ2lyY2xlRWxlbWVudCwgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmtub3duPixcbiAgICAgICAgICAgIGRhdHVtOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBub2RlRHJhZ1N0YXJ0SGFuZGxlcihldmVudCwgZGF0dW0sIGZvcmNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC5vbihcbiAgICAgICAgICAnZHJhZycsXG4gICAgICAgICAgZnVuY3Rpb24gKFxuICAgICAgICAgICAgdGhpczogU1ZHQ2lyY2xlRWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50OiBkMy5EM0RyYWdFdmVudDxTVkdDaXJjbGVFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIHVua25vd24+LFxuICAgICAgICAgICAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5vZGVEcmFnSGFuZGxlcihldmVudCwgZGF0dW0sIGNvbmZpZyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAub24oXG4gICAgICAgICAgJ2VuZCcsXG4gICAgICAgICAgZnVuY3Rpb24gKFxuICAgICAgICAgICAgdGhpczogU1ZHQ2lyY2xlRWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50OiBkMy5EM0RyYWdFdmVudDxTVkdDaXJjbGVFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIHVua25vd24+LFxuICAgICAgICAgICAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5vZGVEcmFnRW5kSGFuZGxlcihldmVudCwgZGF0dW0sIGZvcmNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IHRleHQgbGFiZWxzLlxuICogQHBhcmFtIHN2ZyB0aGUgc3ZnIGVsZW1lbnRcbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgdGV4dCBsYWJlbHNcbiAqL1xuY29uc3QgY3JlYXRlVGV4dCA9IChzdmc6IGQzLlNlbGVjdGlvbjxTVkdTVkdFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhKSA9PiB7XG4gIHJldHVybiBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcbiAgICAuZGF0YShkYXRhLm5vZGVzKVxuICAgIC5lbnRlcigpXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCcpXG4gICAgLnRleHQobm9kZSA9PiBub2RlLm5hbWUgPz8gYE4vQSAoaWQuICR7bm9kZS5pbmRleH0pYCk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBmb3JjZSBkaXJlY3RlZCBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBjaGFydCBvcHRpb25zXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgZHJhd0ZvcmNlRGlyZWN0ZWRDaGFydCA9IChcbiAgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgZGF0YTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEsXG4gIG9wdGlvbnM/OiBQYXJ0aWFsPElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zPixcbikgPT4ge1xuICBjb25zdCBjb25maWc6IElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zID0gZ2VuZXJhdGVDb25maWd1cmF0aW9uPElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zPihcbiAgICBkZWZhdWx0Rm9yY2VEaXJlY3RlZENoYXJ0Q29uZmlnLFxuICAgIG9wdGlvbnMsXG4gICAge30sXG4gICk7XG5cbiAgY29uc3QgeyBzdmcsIGcgfSA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIGNvbmZpZyk7XG5cbiAgYXBwbHlDaGFydERhdGEoZywgZGF0YSk7XG5cbiAgY29uc3QgbGluayA9IGNyZWF0ZUxpbmtzKHN2ZywgY29uZmlnLCBkYXRhKTtcblxuICBjb25zdCBmb3JjZSA9IGNyZWF0ZUZvcmNlcyhjb25maWcsIGRhdGEpO1xuXG4gIGNvbnN0IG5vZGUgPSBjcmVhdGVOb2RlcyhzdmcsIGRhdGEsIGZvcmNlLCBjb25maWcpO1xuXG4gIGNvbnN0IHRleHQgPSBjcmVhdGVUZXh0KHN2ZywgZGF0YSk7XG5cbiAgZm9yY2Uub24oJ3RpY2snLCAoKSA9PiB7XG4gICAgdGlja2VkKGxpbmssIG5vZGUsIHRleHQpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiJdfQ==
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtZGlyZWN0ZWQtY2hhcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3V0aWwvZm9yY2UtZGlyZWN0ZWQtY2hhcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQU96QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUErQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZGLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztJQUNYLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDYixLQUFLLEVBQUUsR0FBRztRQUNWLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsUUFBUSxFQUFFLEVBQUU7SUFDWixRQUFRLEVBQUUsRUFBRTtJQUNaLGVBQWUsRUFBRSxFQUFFO0lBQ25CLE1BQU0sRUFBRTtRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxlQUFlLEVBQUUsV0FBVztJQUM1QixlQUFlLEVBQUUsR0FBRztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQyxTQUFTLEVBQUUsU0FBUztJQUNwQixlQUFlLEVBQUUsV0FBVztJQUM1QixlQUFlLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQUM7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUNi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SUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVuRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRW5DLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuaW1wb3J0IHtcbiAgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEsXG4gIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9yY2UtZGlyZWN0ZWQtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi51dGlsJztcblxuLyoqXG4gKiBUaGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcmNlRGlyZWN0ZWRDaGFydENvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgY2hhcnRUaXRsZTogJycsXG4gIHdpZHRoOiA2MDAsXG4gIGhlaWdodDogNjAwLFxuICBjZW50ZXJDYWxjTW9kOiAxLjYsXG4gIGNoYXJnZToge1xuICAgIHN0cmVuZ3RoOiAtMTAsXG4gICAgdGhldGE6IDAuNixcbiAgICBkaXN0YW5jZU1heDogMjAwMCxcbiAgfSxcbiAgZGlzdGFuY2U6IDc1LFxuICBmb250U2l6ZTogMTAsXG4gIGNvbGxpc2lvblJhZGl1czogMzAsXG4gIG1hcmdpbjoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDIwLFxuICAgIGJvdHRvbTogMjAsXG4gICAgbGVmdDogMjAsXG4gIH0sXG4gIGxpbmtTdHJva2VDb2xvcjogJ2xpZ2h0Z3JheScsXG4gIGxpbmtTdHJva2VXaWR0aDogMS41LFxuICBsYWJlbFRleHRXcmFwV2lkdGg6IDYwLFxuICBjb2xvcjogZDMuc2NhbGVPcmRpbmFsKGQzLnNjaGVtZUNhdGVnb3J5MTApLFxuICBub2RlQ29sb3I6ICcjZjAwMDAwJyxcbiAgbm9kZVN0cm9rZUNvbG9yOiAnbGlnaHRncmF5JyxcbiAgbm9kZVN0cm9rZVdpZHRoOiAxLFxufSk7XG5cbi8qKlxuICogVGhlIGZvcmNlIGR1cmVjdGVkIGNoYXJ0IHRpY2sgaGFuZGxlci5cbiAqIEBwYXJhbSBsaW5rIGNoYXJ0IGxpbmtzXG4gKiBAcGFyYW0gbm9kZSBjaGFydCBub2Rlc1xuICogQHBhcmFtIHRleHQgY2hhcnQgdGV4dFxuICogQHJldHVybnMgcm90YXRpb24gYW5nbGVcbiAqL1xuY29uc3QgdGlja2VkID0gKFxuICBsaW5rPzogZDMuU2VsZWN0aW9uPFNWR0xpbmVFbGVtZW50LCBkMy5TaW11bGF0aW9uTGlua0RhdHVtPElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZT4sIFNWR1NWR0VsZW1lbnQsIHVua25vd24+LFxuICBub2RlPzogZDMuU2VsZWN0aW9uPFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgU1ZHU1ZHRWxlbWVudCwgdW5rbm93bj4sXG4gIHRleHQ/OiBkMy5TZWxlY3Rpb248U1ZHVGV4dEVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgU1ZHR0VsZW1lbnQsIHVua25vd24+LFxuKSA9PiB7XG4gIGlmICh0eXBlb2YgbGluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsaW5rXG4gICAgICAuYXR0cigneDEnLCBkID0+IChkLnNvdXJjZSBhcyB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pLnggPz8gMClcbiAgICAgIC5hdHRyKCd5MScsIGQgPT4gKGQuc291cmNlIGFzIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkueSA/PyAwKVxuICAgICAgLmF0dHIoJ3gyJywgZCA9PiAoZC50YXJnZXQgYXMgeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KS54ID8/IDApXG4gICAgICAuYXR0cigneTInLCBkID0+IChkLnRhcmdldCBhcyB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pLnkgPz8gMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIG5vZGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbm9kZS5hdHRyKCdjeCcsIGQgPT4gZC54ID8/IDApLmF0dHIoJ2N5JywgZCA9PiBkLnkgPz8gMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHRleHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgZHggPSAxMDtcbiAgICBjb25zdCBkeSA9IDU7XG4gICAgdGV4dC5hdHRyKCd4JywgZCA9PiAoZC54ID8/IDApICsgZHgpLmF0dHIoJ3knLCBkID0+IChkLnkgPz8gMCkgLSBkeSk7XG4gIH1cblxuICByZXR1cm4gJ3JvdGF0ZSgwKSc7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb250YWluZXIgZm9yIHRoZSBmb3JjZSBkaXJlY3RlZCBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdGhlIG9iamVjdCB3aXRoIHRoZSBzdmcgZWxlbWVudCBhbmQgdGhlIGcgZWxlbWVudFxuICovXG5jb25zdCBjcmVhdGVDb250YWluZXIgPSAoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiwgY29uZmlnOiBJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdmb3JjZS1kaXJlY3RlZC0wJztcblxuICBkMy5zZWxlY3QoYCMke2lkfWApLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gIGNvbnN0IHN2ZyA9IGQzXG4gICAgLnNlbGVjdChgIyR7aWR9YClcbiAgICAuYXBwZW5kKCdzdmcnKVxuICAgIC5hdHRyKCd3aWR0aCcsIGNvbmZpZy53aWR0aCArIGNvbmZpZy5tYXJnaW4ubGVmdCArIGNvbmZpZy5tYXJnaW4ucmlnaHQpXG4gICAgLmF0dHIoJ2hlaWdodCcsIGNvbmZpZy5oZWlnaHQgKyBjb25maWcubWFyZ2luLnRvcCArIGNvbmZpZy5tYXJnaW4uYm90dG9tKVxuICAgIC5hdHRyKCdjbGFzcycsIGlkKTtcbiAgY29uc3QgZyA9IHN2Z1xuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7Y29uZmlnLndpZHRoIC8gMiArIGNvbmZpZy5tYXJnaW4ubGVmdH0sJHtjb25maWcuaGVpZ2h0IC8gMiArIGNvbmZpZy5tYXJnaW4udG9wfSlgKTtcblxuICByZXR1cm4geyBzdmcsIGcgfTtcbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgZGF0YS5cbiAqIEBwYXJhbSBnIHRoZSBzdmcgZyBlbGVtZW50XG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICovXG5jb25zdCBhcHBseUNoYXJ0RGF0YSA9IChnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPiwgZGF0YTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEpID0+IHtcbiAgY29uc3QgaW1hZ2VYWSA9IDEwO1xuICBnLmFwcGVuZCgnZGVmcycpXG4gICAgLnNlbGVjdEFsbCgncGF0dGVybicpXG4gICAgLmRhdGEoZGF0YS5lbnRpdGllcylcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ3BhdHRlcm4nKVxuICAgIC5hdHRyKCdpZCcsICh2YWwsIGkpID0+IGBpbWctJHt2YWwuaW5kZXh9YClcbiAgICAuYXR0cigneCcsIDApXG4gICAgLmF0dHIoJ3knLCAwKVxuICAgIC5hdHRyKCdoZWlnaHQnLCB2YWwgPT4ge1xuICAgICAgY29uc3QgYmFzZVZhbHVlID0gMzA7XG4gICAgICByZXR1cm4gYmFzZVZhbHVlICsgdmFsLmxpbmtzQ291bnQgKiAyO1xuICAgIH0pXG4gICAgLmF0dHIoJ3dpZHRoJywgdmFsID0+IHtcbiAgICAgIGNvbnN0IGJhc2VWYWx1ZSA9IDMwO1xuICAgICAgcmV0dXJuIGJhc2VWYWx1ZSArIHZhbC5saW5rc0NvdW50ICogMjtcbiAgICB9KVxuICAgIC5hcHBlbmQoJ2ltYWdlJylcbiAgICAuYXR0cigneCcsIGltYWdlWFkpXG4gICAgLmF0dHIoJ3knLCBpbWFnZVhZKVxuICAgIC5hdHRyKCdoZWlnaHQnLCB2YWwgPT4ge1xuICAgICAgY29uc3QgYmFzZVZhbHVlID0gMzA7XG4gICAgICByZXR1cm4gYmFzZVZhbHVlICsgdmFsLmxpbmtzQ291bnQgKiAyO1xuICAgIH0pXG4gICAgLmF0dHIoJ3dpZHRoJywgdmFsID0+IHtcbiAgICAgIGNvbnN0IGJhc2VWYWx1ZSA9IDMwO1xuICAgICAgcmV0dXJuIGJhc2VWYWx1ZSArIHZhbC5saW5rc0NvdW50ICogMjtcbiAgICB9KVxuICAgIC5hdHRyKCd4bGluazpocmVmJywgdmFsID0+IHZhbC5pbWcpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBmb3JjZSBkaXJlY3RlZCBjaGFydCBsaW5rcy5cbiAqIEBwYXJhbSBzdmcgdGhlIHN2ZyBlbGVtZW50XG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICogQHJldHVybnMgdGhlIGNoYXJ0IGxpbmtzXG4gKi9cbmNvbnN0IGNyZWF0ZUxpbmtzID0gKFxuICBzdmc6IGQzLlNlbGVjdGlvbjxTVkdTVkdFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sXG4gIGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsXG4gIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhLFxuKSA9PiB7XG4gIHJldHVybiBzdmdcbiAgICAuc2VsZWN0QWxsKCcubGluaycpXG4gICAgLmRhdGEoZGF0YS5saW5rcylcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgIC5hdHRyKCdjbGFzcycsICdsaW5rJylcbiAgICAuc3R5bGUoJ3N0cm9rZScsIGNvbmZpZy5saW5rU3Ryb2tlQ29sb3IpXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCBjb25maWcubGlua1N0cm9rZVdpZHRoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgZm9yY2VzLlxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBmb3JjZXNcbiAqL1xuY29uc3QgY3JlYXRlRm9yY2VzID0gKGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMsIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhKSA9PiB7XG4gIHJldHVybiBkM1xuICAgIC5mb3JjZVNpbXVsYXRpb24oZGF0YS5ub2RlcylcbiAgICAuZm9yY2UoXG4gICAgICAnbGluaycsXG4gICAgICBkMy5mb3JjZUxpbmsoKS5pZChkID0+IGQuaW5kZXggPz8gMCksXG4gICAgKVxuICAgIC5mb3JjZSgnY2hhcmdlJywgZDMuZm9yY2VNYW55Qm9keSgpLnN0cmVuZ3RoKGNvbmZpZy5jaGFyZ2Uuc3RyZW5ndGgpLnRoZXRhKGNvbmZpZy5jaGFyZ2UudGhldGEpLmRpc3RhbmNlTWF4KGNvbmZpZy5jaGFyZ2UuZGlzdGFuY2VNYXgpKVxuICAgIC5mb3JjZSgnY2VudGVyJywgZDMuZm9yY2VDZW50ZXIoY29uZmlnLndpZHRoIC8gY29uZmlnLmNlbnRlckNhbGNNb2QsIGNvbmZpZy5oZWlnaHQgLyBjb25maWcuY2VudGVyQ2FsY01vZCkpXG4gICAgLmZvcmNlKFxuICAgICAgJ2NvbGxpc2lvbicsXG4gICAgICBkMy5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZCA9PiBjb25maWcuY29sbGlzaW9uUmFkaXVzKSxcbiAgICApXG4gICAgLmZvcmNlKFxuICAgICAgJ2xpbmsnLFxuICAgICAgZDNcbiAgICAgICAgLmZvcmNlTGluayhkYXRhLmxpbmtzKVxuICAgICAgICAuaWQoZCA9PiBkLmluZGV4ID8/IDApXG4gICAgICAgIC5kaXN0YW5jZShjb25maWcuZGlzdGFuY2UpXG4gICAgICAgIC5saW5rcyhkYXRhLmxpbmtzKSxcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgbm9kZSBkcmFnIHN0YXJ0IGhhbmRsZXIuXG4gKiBAcGFyYW0gZXZlbnQgYSBkcmFnIGV2ZW50XG4gKiBAcGFyYW0gZGF0dW0gdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBmb3JjZSB0aGUgY2hhcnQgZm9yY2VzXG4gKi9cbmNvbnN0IG5vZGVEcmFnU3RhcnRIYW5kbGVyID0gKFxuICBldmVudDogZDMuRDNEcmFnRXZlbnQ8U1ZHQ2lyY2xlRWxlbWVudCwgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmtub3duPixcbiAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgZm9yY2U6IGQzLlNpbXVsYXRpb248SUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmRlZmluZWQ+LFxuKSA9PiB7XG4gIGlmICghZXZlbnQuYWN0aXZlICYmIHR5cGVvZiBmb3JjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBhbHBoYVRhcmdldCA9IDAuMztcbiAgICBmb3JjZS5hbHBoYVRhcmdldChhbHBoYVRhcmdldCkucmVzdGFydCgpO1xuICB9XG4gIGRhdHVtLmZ4ID0gZXZlbnQueDtcbiAgZGF0dW0uZnkgPSBldmVudC55O1xufTtcblxuLyoqXG4gKiBUaGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgbm9kZSBkcmFnIGhhbmRsZXIuXG4gKiBAcGFyYW0gZXZlbnQgYSBkcmFnIGV2ZW50XG4gKiBAcGFyYW0gZGF0dW0gdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuY29uc3Qgbm9kZURyYWdIYW5kbGVyID0gKFxuICBldmVudDogZDMuRDNEcmFnRXZlbnQ8U1ZHQ2lyY2xlRWxlbWVudCwgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmtub3duPixcbiAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgY29uZmlnOiBJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucyxcbikgPT4ge1xuICBkYXR1bS5meCA9IGV2ZW50LnggPiBjb25maWcubWFyZ2luLmxlZnQgJiYgZXZlbnQueCA8IGNvbmZpZy53aWR0aCArIGNvbmZpZy5tYXJnaW4ucmlnaHQgPyBldmVudC54IDogZGF0dW0uZng7XG4gIGRhdHVtLmZ5ID0gZXZlbnQueSA+IGNvbmZpZy5tYXJnaW4udG9wICYmIGV2ZW50LnkgPCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLmJvdHRvbSA/IGV2ZW50LnkgOiBkYXR1bS5meTtcbn07XG5cbi8qKlxuICogVGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IG5vZGUgZHJhZyBlbmQgaGFuZGxlci5cbiAqIEBwYXJhbSBldmVudCBhIGRyYWcgZXZlbnRcbiAqIEBwYXJhbSBkYXR1bSB0aGUgY2hhcnQgZGF0YVxuICogQHBhcmFtIGZvcmNlIHRoZSBjaGFydCBmb3JjZXNcbiAqL1xuY29uc3Qgbm9kZURyYWdFbmRIYW5kbGVyID0gKFxuICBldmVudDogZDMuRDNEcmFnRXZlbnQ8U1ZHQ2lyY2xlRWxlbWVudCwgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmtub3duPixcbiAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgZm9yY2U6IGQzLlNpbXVsYXRpb248SUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLCB1bmRlZmluZWQ+LFxuKSA9PiB7XG4gIGlmICghZXZlbnQuYWN0aXZlICYmIHR5cGVvZiBmb3JjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3JjZS5hbHBoYVRhcmdldCgwKTtcbiAgfVxuICBkYXR1bS5meCA9IG51bGw7XG4gIGRhdHVtLmZ5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgbm9kZXMuXG4gKiBAcGFyYW0gc3ZnIHRoZSBzdmcgZWxlbWVudFxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBmb3JjZSB0aGUgY2hhcnQgZm9yY2VzXG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgbm9kZXNcbiAqL1xuY29uc3QgY3JlYXRlTm9kZXMgPSAoXG4gIHN2ZzogZDMuU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPixcbiAgZGF0YTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEsXG4gIGZvcmNlOiBkMy5TaW11bGF0aW9uPElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5kZWZpbmVkPixcbiAgY29uZmlnOiBJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCBiYXNlID0gNTtcbiAgcmV0dXJuIHN2Z1xuICAgIC5zZWxlY3RBbGwoJy5ub2RlJylcbiAgICAuZGF0YShkYXRhLm5vZGVzKVxuICAgIC5lbnRlcigpXG4gICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAuYXR0cignY2xhc3MnLCAnbm9kZScpXG4gICAgLmF0dHIoJ3InLCBub2RlID0+IGJhc2UgKyAoKG5vZGUudmFsdWUgPz8gMSkgKyAobm9kZS5saW5rc0NvdW50ID8/IDEpKSlcbiAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIGNvbmZpZy5ub2RlU3Ryb2tlV2lkdGgpXG4gICAgLnN0eWxlKCdzdHJva2UnLCBjb25maWcubm9kZVN0cm9rZUNvbG9yKVxuICAgIC5zdHlsZSgnZmlsbCcsIG5vZGUgPT4gKHR5cGVvZiBub2RlLmltZyA9PT0gJ3VuZGVmaW5lZCcgfHwgbm9kZS5pbWcgPT09ICcnID8gY29uZmlnLm5vZGVDb2xvciA6IGB1cmwoJHtub2RlLmltZ30pYCkpXG4gICAgLmNhbGwoXG4gICAgICBkM1xuICAgICAgICAuZHJhZzxTVkdDaXJjbGVFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGU+KClcbiAgICAgICAgLm9uKFxuICAgICAgICAgICdzdGFydCcsXG4gICAgICAgICAgZnVuY3Rpb24gKFxuICAgICAgICAgICAgdGhpczogU1ZHQ2lyY2xlRWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50OiBkMy5EM0RyYWdFdmVudDxTVkdDaXJjbGVFbGVtZW50LCBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YU5vZGUsIHVua25vd24+LFxuICAgICAgICAgICAgZGF0dW06IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5vZGVEcmFnU3RhcnRIYW5kbGVyKGV2ZW50LCBkYXR1bSwgZm9yY2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgLm9uKFxuICAgICAgICAgICdkcmFnJyxcbiAgICAgICAgICBmdW5jdGlvbiAoXG4gICAgICAgICAgICB0aGlzOiBTVkdDaXJjbGVFbGVtZW50LFxuICAgICAgICAgICAgZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5rbm93bj4sXG4gICAgICAgICAgICBkYXR1bTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbm9kZURyYWdIYW5kbGVyKGV2ZW50LCBkYXR1bSwgY29uZmlnKTtcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC5vbihcbiAgICAgICAgICAnZW5kJyxcbiAgICAgICAgICBmdW5jdGlvbiAoXG4gICAgICAgICAgICB0aGlzOiBTVkdDaXJjbGVFbGVtZW50LFxuICAgICAgICAgICAgZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PFNWR0NpcmNsZUVsZW1lbnQsIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSwgdW5rbm93bj4sXG4gICAgICAgICAgICBkYXR1bTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFOb2RlLFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbm9kZURyYWdFbmRIYW5kbGVyKGV2ZW50LCBkYXR1bSwgZm9yY2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgdGV4dCBsYWJlbHMuXG4gKiBAcGFyYW0gc3ZnIHRoZSBzdmcgZWxlbWVudFxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEByZXR1cm5zIHRoZSBjaGFydCB0ZXh0IGxhYmVsc1xuICovXG5jb25zdCBjcmVhdGVUZXh0ID0gKHN2ZzogZDMuU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPiwgZGF0YTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEpID0+IHtcbiAgcmV0dXJuIHN2Z1xuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxuICAgIC5kYXRhKGRhdGEubm9kZXMpXG4gICAgLmVudGVyKClcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAudGV4dChub2RlID0+IG5vZGUubmFtZSA/PyBgTi9BIChpZC4gJHtub2RlLmluZGV4fSlgKTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIGNoYXJ0IG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkcmF3Rm9yY2VEaXJlY3RlZENoYXJ0ID0gKFxuICBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxuICBkYXRhOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YSxcbiAgb3B0aW9ucz86IFBhcnRpYWw8SUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnM+LFxuKSA9PiB7XG4gIGNvbnN0IGNvbmZpZzogSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMgPSBnZW5lcmF0ZUNvbmZpZ3VyYXRpb248SUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnM+KFxuICAgIGRlZmF1bHRGb3JjZURpcmVjdGVkQ2hhcnRDb25maWcsXG4gICAgb3B0aW9ucyxcbiAgICB7fSxcbiAgKTtcblxuICBjb25zdCB7IHN2ZywgZyB9ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgY29uZmlnKTtcblxuICBhcHBseUNoYXJ0RGF0YShnLCBkYXRhKTtcblxuICBjb25zdCBsaW5rID0gY3JlYXRlTGlua3Moc3ZnLCBjb25maWcsIGRhdGEpO1xuXG4gIGNvbnN0IGZvcmNlID0gY3JlYXRlRm9yY2VzKGNvbmZpZywgZGF0YSk7XG5cbiAgY29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGVzKHN2ZywgZGF0YSwgZm9yY2UsIGNvbmZpZyk7XG5cbiAgY29uc3QgdGV4dCA9IGNyZWF0ZVRleHQoc3ZnLCBkYXRhKTtcblxuICBmb3JjZS5vbigndGljaycsICgpID0+IHtcbiAgICB0aWNrZWQobGluaywgbm9kZSwgdGV4dCk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIl19
|