@esfaenza/es-charts 12.2.13 → 13.1.4
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/esfaenza-es-charts.d.ts +1 -6
- package/esm2020/esfaenza-es-charts.mjs +5 -0
- package/esm2020/lib/adapters/classes/BaseAdapter.mjs +50 -0
- package/{esm2015/lib/adapters/classes/IBaseAdapter.js → esm2020/lib/adapters/classes/IBaseAdapter.mjs} +0 -0
- package/{esm2015/lib/adapters/index.js → esm2020/lib/adapters/index.mjs} +0 -0
- package/esm2020/lib/components/base/base-chart.component.mjs +339 -0
- package/esm2020/lib/components/chart-pager/chart-pager.component.mjs +89 -0
- package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- package/esm2020/lib/components/specializations/es-area-chart.component.mjs +78 -0
- package/esm2020/lib/components/specializations/es-chart.component.mjs +111 -0
- package/esm2020/lib/components/specializations/es-line-chart.component.mjs +110 -0
- package/esm2020/lib/components/specializations/es-pie-chart.component.mjs +99 -0
- package/esm2020/lib/components/specializations/es-vertical-2d-chart.component.mjs +96 -0
- package/esm2020/lib/components/specializations/es-vertical-chart.component.mjs +93 -0
- package/esm2020/lib/components/specializations/es-vertical-stacked-chart.component.mjs +93 -0
- package/esm2020/lib/es-charts.module.mjs +61 -0
- package/{esm2015/lib/models/EsChaartsModuleConfig.js → esm2020/lib/models/EsChaartsModuleConfig.mjs} +0 -0
- package/esm2020/lib/models/core/classes/ChartDispatcher.mjs +91 -0
- package/{esm2015/lib/models/core/classes/ChartLoader.js → esm2020/lib/models/core/classes/ChartLoader.mjs} +0 -0
- package/{esm2015/lib/models/core/classes/ChartThemes.js → esm2020/lib/models/core/classes/ChartThemes.mjs} +0 -0
- package/{esm2015/lib/models/core/index.js → esm2020/lib/models/core/index.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/AreaChartData.js → esm2020/lib/models/data/classes/AreaChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/LineChartData.js → esm2020/lib/models/data/classes/LineChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/PagedChartData.js → esm2020/lib/models/data/classes/PagedChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/PieChartData.js → esm2020/lib/models/data/classes/PieChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/Vertical2DChartData.js → esm2020/lib/models/data/classes/Vertical2DChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/VerticalChartData.js → esm2020/lib/models/data/classes/VerticalChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/VerticalStackedChartData.js → esm2020/lib/models/data/classes/VerticalStackedChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/DateValue.js → esm2020/lib/models/data/classes/base/DateValue.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/KeyValue.js → esm2020/lib/models/data/classes/base/KeyValue.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/KeyValueColor.js → esm2020/lib/models/data/classes/base/KeyValueColor.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/Limit.js → esm2020/lib/models/data/classes/base/Limit.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/LineSerie.js → esm2020/lib/models/data/classes/base/LineSerie.mjs} +0 -0
- package/{esm2015/lib/models/data/index.js → esm2020/lib/models/data/index.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/AreaChartSettings.js → esm2020/lib/models/settings/classes/AreaChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/LineChartSettings.js → esm2020/lib/models/settings/classes/LineChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/PieChartSettings.js → esm2020/lib/models/settings/classes/PieChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/Vertical2DChartSettings.js → esm2020/lib/models/settings/classes/Vertical2DChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/VerticalChartSettings.js → esm2020/lib/models/settings/classes/VerticalChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/VerticalStackedChartSettings.js → esm2020/lib/models/settings/classes/VerticalStackedChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/BaseInterval.js → esm2020/lib/models/settings/classes/base/BaseInterval.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/BaseSettings.js → esm2020/lib/models/settings/classes/base/BaseSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/LegendPad.js → esm2020/lib/models/settings/classes/base/LegendPad.mjs} +0 -0
- package/{esm2015/lib/models/settings/index.js → esm2020/lib/models/settings/index.mjs} +0 -0
- package/esm2020/lib/services/classes/AreaChartService.mjs +134 -0
- package/esm2020/lib/services/classes/LineChartService.mjs +356 -0
- package/esm2020/lib/services/classes/PieChartService.mjs +111 -0
- package/esm2020/lib/services/classes/Vertical2DChartService.mjs +160 -0
- package/esm2020/lib/services/classes/VerticalChartService.mjs +103 -0
- package/esm2020/lib/services/classes/VerticalStackedChartService.mjs +124 -0
- package/{esm2015/lib/services/classes/base/IBaseService.js → esm2020/lib/services/classes/base/IBaseService.mjs} +0 -0
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/esm2020/public-api.mjs +38 -0
- package/fesm2015/{esfaenza-es-charts.js → esfaenza-es-charts.mjs} +530 -384
- package/fesm2015/esfaenza-es-charts.mjs.map +1 -0
- package/fesm2020/esfaenza-es-charts.mjs +2747 -0
- package/fesm2020/esfaenza-es-charts.mjs.map +1 -0
- package/lib/adapters/classes/BaseAdapter.d.ts +3 -0
- package/lib/components/base/base-chart.component.d.ts +12 -0
- package/lib/components/chart-pager/chart-pager.component.d.ts +3 -0
- package/lib/components/specializations/es-area-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-line-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-pie-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-2d-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-stacked-chart.component.d.ts +3 -0
- package/lib/es-charts.module.d.ts +13 -0
- package/lib/models/core/classes/ChartDispatcher.d.ts +3 -0
- package/lib/services/classes/LineChartService.d.ts +4 -0
- package/package.json +22 -10
- package/public-api.d.ts +2 -0
- package/bundles/esfaenza-es-charts.umd.js +0 -3212
- package/bundles/esfaenza-es-charts.umd.js.map +0 -1
- package/esfaenza-es-charts.metadata.json +0 -1
- package/esm2015/esfaenza-es-charts.js +0 -11
- package/esm2015/lib/adapters/classes/BaseAdapter.js +0 -47
- package/esm2015/lib/components/base/base-chart.component.js +0 -311
- package/esm2015/lib/components/chart-pager/chart-pager.component.js +0 -84
- package/esm2015/lib/components/specializations/es-area-chart.component.js +0 -75
- package/esm2015/lib/components/specializations/es-chart.component.js +0 -108
- package/esm2015/lib/components/specializations/es-line-chart.component.js +0 -98
- package/esm2015/lib/components/specializations/es-pie-chart.component.js +0 -89
- package/esm2015/lib/components/specializations/es-vertical-2d-chart.component.js +0 -87
- package/esm2015/lib/components/specializations/es-vertical-chart.component.js +0 -85
- package/esm2015/lib/components/specializations/es-vertical-stacked-chart.component.js +0 -85
- package/esm2015/lib/es-charts.module.js +0 -42
- package/esm2015/lib/models/core/classes/ChartDispatcher.js +0 -88
- package/esm2015/lib/services/classes/AreaChartService.js +0 -135
- package/esm2015/lib/services/classes/LineChartService.js +0 -326
- package/esm2015/lib/services/classes/PieChartService.js +0 -112
- package/esm2015/lib/services/classes/Vertical2DChartService.js +0 -163
- package/esm2015/lib/services/classes/VerticalChartService.js +0 -105
- package/esm2015/lib/services/classes/VerticalStackedChartService.js +0 -127
- package/esm2015/public-api.js +0 -36
- package/fesm2015/esfaenza-es-charts.js.map +0 -1
package/esfaenza-es-charts.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
|
+
/// <amd-module name="@esfaenza/es-charts" />
|
|
4
5
|
export * from './public-api';
|
|
5
|
-
export { BaseAdapter as ɵi } from './lib/adapters';
|
|
6
|
-
export { EsAreaChartComponent as ɵq, EsChartComponent as ɵj, EsLineChartComponent as ɵk, EsPieChartComponent as ɵl, EsVertical2DChartComponent as ɵm, EsVerticalChartComponent as ɵn, EsVerticalStackedChartComponent as ɵo, PageChartSelector as ɵp } from './lib/components';
|
|
7
|
-
export { BaseChartComponent as ɵb } from './lib/components/base/base-chart.component';
|
|
8
|
-
export { ChartDispatcher as ɵd, ChartLoader as ɵc } from './lib/models/core';
|
|
9
|
-
export { BaseInterval as ɵa } from './lib/models/settings';
|
|
10
|
-
export { ESC_ANIMATIONS as ɵf, ESC_LOCALE as ɵe, ESC_LOGS as ɵh, ESC_THEME as ɵg } from './lib/tokens';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtZXMtY2hhcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9lc2ZhZW56YS1lcy1jaGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Adapter Base da reimplementare per trasformare i dati da una libreria di grafici a questa per evitare di riscrivere tutto il codice di
|
|
5
|
+
* generazione delle serie in caso si fossero usati grafici di altre librerie
|
|
6
|
+
*/
|
|
7
|
+
export class BaseAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per gli Area Chart
|
|
10
|
+
*/
|
|
11
|
+
adaptDataForAreaChart(anyData) {
|
|
12
|
+
return anyData;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart
|
|
16
|
+
*/
|
|
17
|
+
adaptDataForLineChart(anyData) {
|
|
18
|
+
return anyData;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart
|
|
22
|
+
*/
|
|
23
|
+
adaptDataForPieChart(anyData) {
|
|
24
|
+
return anyData;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart
|
|
28
|
+
*/
|
|
29
|
+
adaptDataForVerticalChart(anyData) {
|
|
30
|
+
return anyData;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart a due dimensioni
|
|
34
|
+
*/
|
|
35
|
+
adaptDataForVertical2DChart(anyData) {
|
|
36
|
+
return anyData;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart sovrapposti
|
|
40
|
+
*/
|
|
41
|
+
adaptDataForVerticalStackedChart(anyData) {
|
|
42
|
+
return anyData;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
BaseAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
|
+
BaseAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter, decorators: [{
|
|
48
|
+
type: Injectable
|
|
49
|
+
}] });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9hZGFwdGVycy9jbGFzc2VzL0Jhc2VBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRXBCOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsT0FBWTtRQUM5QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxPQUFZO1FBQzlCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE9BQVk7UUFDN0IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCLENBQUMsT0FBWTtRQUNsQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSCwyQkFBMkIsQ0FBQyxPQUFZO1FBQ3BDLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILGdDQUFnQyxDQUFDLE9BQVk7UUFDekMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs7d0dBMUNRLFdBQVc7NEdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTGluZUNoYXJ0RGF0YSwgUGllQ2hhcnREYXRhLCBWZXJ0aWNhbENoYXJ0RGF0YSwgVmVydGljYWwyRENoYXJ0RGF0YSwgVmVydGljYWxTdGFja2VkQ2hhcnREYXRhLCBBcmVhQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGEnO1xyXG5pbXBvcnQgeyBJQmFzZUFkYXB0ZXIgfSBmcm9tICcuL0lCYXNlQWRhcHRlcic7XHJcblxyXG4vKipcclxuICogQWRhcHRlciBCYXNlIGRhIHJlaW1wbGVtZW50YXJlIHBlciB0cmFzZm9ybWFyZSBpIGRhdGkgZGEgdW5hIGxpYnJlcmlhIGRpIGdyYWZpY2kgYSBxdWVzdGEgcGVyIGV2aXRhcmUgZGkgcmlzY3JpdmVyZSB0dXR0byBpbCBjb2RpY2UgZGlcclxuICogZ2VuZXJhemlvbmUgZGVsbGUgc2VyaWUgaW4gY2FzbyBzaSBmb3NzZXJvIHVzYXRpIGdyYWZpY2kgZGkgYWx0cmUgbGlicmVyaWVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJhc2VBZGFwdGVyIHtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgZ2xpIEFyZWEgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgYWRhcHREYXRhRm9yQXJlYUNoYXJ0KGFueURhdGE6IGFueSk6IEFyZWFDaGFydERhdGEge1xyXG4gICAgICAgIHJldHVybiBhbnlEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc2Zvcm1hdG9yZSBkYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSB2ZWNjaGlhIGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgbnVvdmEgcGVyIGkgTGluZSBDaGFydFxyXG4gICAgICovXHJcbiAgICBhZGFwdERhdGFGb3JMaW5lQ2hhcnQoYW55RGF0YTogYW55KTogTGluZUNoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgaSBMaW5lIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFkYXB0RGF0YUZvclBpZUNoYXJ0KGFueURhdGE6IGFueSk6IFBpZUNoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgaSBWZXJ0aWNhbCBDaGFydFxyXG4gICAgICovXHJcbiAgICBhZGFwdERhdGFGb3JWZXJ0aWNhbENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsQ2hhcnREYXRhIHtcclxuICAgICAgICByZXR1cm4gYW55RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYXRvcmUgZGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgdmVjY2hpYSBhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIG51b3ZhIHBlciBpIFZlcnRpY2FsIENoYXJ0IGEgZHVlIGRpbWVuc2lvbmlcclxuICAgICAqL1xyXG4gICAgYWRhcHREYXRhRm9yVmVydGljYWwyRENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsMkRDaGFydERhdGEge1xyXG4gICAgICAgIHJldHVybiBhbnlEYXRhO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYXRvcmUgZGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgdmVjY2hpYSBhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIG51b3ZhIHBlciBpIFZlcnRpY2FsIENoYXJ0IHNvdnJhcHBvc3RpXHJcbiAgICAgKi9cclxuICAgIGFkYXB0RGF0YUZvclZlcnRpY2FsU3RhY2tlZENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcbn0iXX0=
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { Input, Output, EventEmitter, ContentChild, Directive } from '@angular/core';
|
|
3
|
+
import * as am4core from "@amcharts/amcharts4/core";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../models/core";
|
|
6
|
+
/**
|
|
7
|
+
* Componente Grafico Base che gestisce tutte le cose comuni dei vari grafici istanziabili, come la presenza o menu di una legenda,
|
|
8
|
+
* il tema utilizzato, il locale del singolo grafico, ecc ecc...
|
|
9
|
+
*/
|
|
10
|
+
export class BaseChartComponent {
|
|
11
|
+
/**
|
|
12
|
+
* Costruttore
|
|
13
|
+
*
|
|
14
|
+
* @param {ElementRef} el Contenitore all'interno del cui viene creato il grafico. Utilizzato per estrapolarne la **ContainerHeight**
|
|
15
|
+
* @param {Object} platformId piattaforma Angular (browser, ecc...) per essere sicuri che amcharts venga attivato solo lato browser. Non utilizzando SSR nelle applicazioni che consumano questa libreria non è particolarmente significativo, ma non si sa mai
|
|
16
|
+
* @param {NgZone} zone NgZone di default per permettere di inizializzare il grafico all'infuori di Angular per avere qualche prestazione in più
|
|
17
|
+
* @param {ChartLoader} Charter Istanza del Loader che si occuperà di caricare in memoria tutto ciò che serve per il grafico attuale (temi, locale, animazioni, ecc...)
|
|
18
|
+
* @param {ChartDispatcher} Dispatcher Istanza del Dispatcher che si occupa di differire il caricamento dei grafici 1 dopo l'altro in modo che caricamenti pseudo paralleli incasinino tutto
|
|
19
|
+
* @param {boolean} logs Indica se effettuare log a console o meno, iniettato dalle classi specializzate dal token ESC_LOGS
|
|
20
|
+
* @param {boolean} animations Indica se per questo grafico devono essere attive o meno le animazioni. Impostazione generica presa dal token ESC_ANIMATIONS
|
|
21
|
+
* @param {string} locale Indica il locale specifico per questo grafico. Impostazione generica presa dal token ESC_LOCALE
|
|
22
|
+
* @param {string} theme Indica il tema specifico per questo grafico. Impostazione generica presa dal token ESC_THEME
|
|
23
|
+
*/
|
|
24
|
+
constructor(el, platformId, zone, Charter, Dispatcher, logs, animations, locale, theme) {
|
|
25
|
+
this.el = el;
|
|
26
|
+
this.platformId = platformId;
|
|
27
|
+
this.zone = zone;
|
|
28
|
+
this.Charter = Charter;
|
|
29
|
+
this.Dispatcher = Dispatcher;
|
|
30
|
+
this.logs = logs;
|
|
31
|
+
this.animations = animations;
|
|
32
|
+
this.locale = locale;
|
|
33
|
+
this.theme = theme;
|
|
34
|
+
/**
|
|
35
|
+
* Nome del grafico, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione
|
|
36
|
+
*/
|
|
37
|
+
this.name = "";
|
|
38
|
+
/**
|
|
39
|
+
* Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.
|
|
40
|
+
*
|
|
41
|
+
* Questo per evitare che l'utente cliccando velocemente "avanti" generi tonnellate di richieste inutili
|
|
42
|
+
*/
|
|
43
|
+
this.BrowseDelayMs = 500;
|
|
44
|
+
/**
|
|
45
|
+
* Evento lanciato sulla selezione di un range di dati o dalla timeline o dal grafico. Valido per tutti i grafici che supportano serie basate sulle date
|
|
46
|
+
*/
|
|
47
|
+
this.onSelectionChanged = new EventEmitter();
|
|
48
|
+
/**
|
|
49
|
+
* Evento lanciato dal click di una serie dalla Legenda, a patto che l'Input **HideSeriesOnLabelClick** sia impostato a false
|
|
50
|
+
*/
|
|
51
|
+
this.onSeriesClicked = new EventEmitter();
|
|
52
|
+
/**
|
|
53
|
+
* Evento lanciato all'inizio del caricamento di una nuova pagina del grafico
|
|
54
|
+
*/
|
|
55
|
+
this.onLoadStart = new EventEmitter();
|
|
56
|
+
/**
|
|
57
|
+
* Evento lanciato al termine del caricamento di una nuova pagina del grafico
|
|
58
|
+
*/
|
|
59
|
+
this.onLoadEnd = new EventEmitter();
|
|
60
|
+
/**
|
|
61
|
+
* Evento lanciato al termine della creazione del grafico referenziando l'istanza nativa del grafico creato in modo da poter effettuare modifiche
|
|
62
|
+
* post inizializzazione lato applicativo
|
|
63
|
+
*/
|
|
64
|
+
this.chartLoaded = new EventEmitter();
|
|
65
|
+
/**
|
|
66
|
+
* Serve a decidere se sarà presente l'interfaccia di paginazione
|
|
67
|
+
*/
|
|
68
|
+
this.isPaged = false;
|
|
69
|
+
/**
|
|
70
|
+
* @ignore
|
|
71
|
+
*/
|
|
72
|
+
this.initDone = false;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Metodo di inizializzazione post valorizzazione degli input, utilizzato per valorizzare correttamente le proprietà essenziali del grafico (Animazioni, Tema e Locale)
|
|
76
|
+
*
|
|
77
|
+
* Viene data priorità ai Settings (HTML), priorità secondaria agli Input diretti (Lato HTML), priorità ultima alle impostazioni globali,
|
|
78
|
+
* impostate in fase di import del modulo assegnando valori ai token ESC_LOCALE, ESC_ANIMATIONS, ESC_THEME
|
|
79
|
+
*/
|
|
80
|
+
ngOnInit() {
|
|
81
|
+
// Qui servono solo le variabili da conoscere PRE-graficazione per il caricamento dei moduli lazy del grafico
|
|
82
|
+
this.Animations = this.Settings?.Animations != null ? this.Settings?.Animations : (this.Animations != null ? this.Animations : this.animations);
|
|
83
|
+
this.Theme = this.Settings?.Theme != null ? this.Settings?.Theme : (this.Theme != null ? this.Theme : this.theme);
|
|
84
|
+
this.Locale = this.Settings?.Locale != null ? this.Settings?.Locale : (this.Locale != null ? this.Locale : this.locale);
|
|
85
|
+
this.isPaged = (this.DataArray && this.DataArray.length > 0 && !this.Data) || (this.DataDtos && this.DataDtos.length > 0 && !!this.DataRetrieve);
|
|
86
|
+
this.log("Chart " + this.name + ": ngOnInit");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Implementazione utilizzata per controllare eventuali proprietà chiave del grafico e rigraficare tutto qualora si rivelasse necessario
|
|
90
|
+
*
|
|
91
|
+
* @param {SimpleChanges} changes Indicazione dei cambiamenti sulle proprietà del grafico. Vedere documentazione Angular in merito
|
|
92
|
+
*/
|
|
93
|
+
ngOnChanges(changes) {
|
|
94
|
+
if (!this.initDone)
|
|
95
|
+
return;
|
|
96
|
+
this.log("Chart " + this.name + ": ngOnChanges");
|
|
97
|
+
let propsToCheck = ["Timeline", "Legend", "Settings", "Animations", "Theme", "Locale", ...this.getSpecificPropertiesToCheck()];
|
|
98
|
+
this.checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Nel post inizializzazione, a patto che mi trovi in ambiente "browser", proseguo al caricamento del grafico sull'HTML
|
|
102
|
+
*/
|
|
103
|
+
ngAfterViewInit() {
|
|
104
|
+
if (!this.name)
|
|
105
|
+
throw "a Unique name is mandatory to create a chart";
|
|
106
|
+
this.log("Chart " + this.name + ": ngAfterViewInit, graphicating chart outside Angular");
|
|
107
|
+
if (!this.isPaged)
|
|
108
|
+
this.dispatchLoadChart();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* All'onDestroy scarico il grafico per liberare memoria
|
|
112
|
+
*/
|
|
113
|
+
ngOnDestroy() {
|
|
114
|
+
if (this.Chart) {
|
|
115
|
+
this.log("Chart " + this.name + ": Unloading destroyed chart");
|
|
116
|
+
this.browserOnly(() => { this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name); });
|
|
117
|
+
}
|
|
118
|
+
else
|
|
119
|
+
this.log("Chart " + this.name + ": Unloading uncreated chart component. It probably was a duplicated");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Registra il grafico attuale nel Dispatcher in modo che venga caricato appena possibile
|
|
123
|
+
*/
|
|
124
|
+
dispatchLoadChart() {
|
|
125
|
+
this.browserOnly(() => {
|
|
126
|
+
this.Dispatcher.register(this.name, () => { return this.loadChart(); });
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Il caricamento del grafico funziona nel seguente modo:
|
|
131
|
+
*
|
|
132
|
+
* 1) Caricamento del tema e delle animazioni, qualora necessari
|
|
133
|
+
*
|
|
134
|
+
* 2) Caricamento delle impostazioni specifiche e integrazione con le impostazioni generiche
|
|
135
|
+
*
|
|
136
|
+
* 3) Graficazione
|
|
137
|
+
*
|
|
138
|
+
* 4) Caricamento del locale
|
|
139
|
+
*/
|
|
140
|
+
loadChart() {
|
|
141
|
+
this.log("Chart " + this.name + ": Start loading Modules if needed");
|
|
142
|
+
return Promise.all([
|
|
143
|
+
this.setupAmChartsThemes().then(() => {
|
|
144
|
+
this.log("Chart " + this.name + ": Graphicating after modules load");
|
|
145
|
+
var castedSettings = this.getCastedSettings();
|
|
146
|
+
this.fillSettings(castedSettings);
|
|
147
|
+
this.fillSpecificSettings(castedSettings);
|
|
148
|
+
this.ChartService = this.graphicate(castedSettings);
|
|
149
|
+
this.Chart = this.ChartService.ChartInstance;
|
|
150
|
+
if (!this.Chart)
|
|
151
|
+
this.log("Chart " + this.name + ": Could not create graph");
|
|
152
|
+
return this.Charter.applyLocale(this.Chart, this.Locale).then(() => { this.initDone = true; this.chartLoaded.emit(this); });
|
|
153
|
+
})
|
|
154
|
+
]);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Riempimento delle impostazioni nella classe Settings. Si danno priorità ai valori già impostati nei Settings,
|
|
158
|
+
* integrando eventualmente con le proprietà del grafico
|
|
159
|
+
*
|
|
160
|
+
* @param {BaseSettings} settings Impostazioni base ricevute dalla specializzazione del grafico
|
|
161
|
+
*/
|
|
162
|
+
fillSettings(settings) {
|
|
163
|
+
// Merge degli Input con i Settings, dando priorità ai Settings
|
|
164
|
+
settings.Theme = settings.Theme ? settings.Theme : this.Theme;
|
|
165
|
+
settings.Locale = settings.Locale ? settings.Locale : this.Locale;
|
|
166
|
+
settings.Animations = settings.Animations != null ? settings.Animations : this.Animations;
|
|
167
|
+
settings.Legend = settings.Legend != null ? settings.Legend : this.Legend;
|
|
168
|
+
settings.Name = settings.Name ? settings.Name : this.name;
|
|
169
|
+
settings.Timeline = settings.Timeline != null ? settings.Timeline : this.Timeline;
|
|
170
|
+
settings.AdaptLabelSizeAndOrientation = settings.AdaptLabelSizeAndOrientation != null ? settings.AdaptLabelSizeAndOrientation : this.AdaptLabelSizeAndOrientation;
|
|
171
|
+
settings.XAxisTitle = settings.XAxisTitle ? settings.XAxisTitle : this.XTitle;
|
|
172
|
+
settings.YAxisTitle = settings.YAxisTitle ? settings.YAxisTitle : this.YTitle;
|
|
173
|
+
settings.LegendPosition = settings.LegendPosition ? settings.LegendPosition : this.LegendPosition;
|
|
174
|
+
settings.HideSeriesOnLabelClick = settings.HideSeriesOnLabelClick != null ? settings.HideSeriesOnLabelClick : this.HideSeriesOnLabelClick;
|
|
175
|
+
settings.MinGridDistance = settings.MinGridDistance != null ? settings.MinGridDistance : this.MinGridDistance;
|
|
176
|
+
settings.LegendPadding = settings.LegendPadding ? settings.LegendPadding : this.LegendPadding ?? null;
|
|
177
|
+
settings.ContainerHeight = this.el.nativeElement.parentElement.offsetHeight;
|
|
178
|
+
settings.OnSeriesClickCallback = (series) => { this.onSeriesClicked.emit(series); };
|
|
179
|
+
settings.OnSelectionChangedCallback = (event) => { this.onSelectionChanged.emit({ from: event.from, to: event.to, initial: event.initial }); };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Controlla i cambiamenti avvenuti alle proprietà chiave e rieffettua la graficazione qualora necessario
|
|
183
|
+
*
|
|
184
|
+
* @param {SimpleChanges} changes Indicazione della modifiche avvenute nei vari Input
|
|
185
|
+
* @param {string[]} propsToCheck Lista degli Input da controllare per cui una modifica causa una rigraficazione
|
|
186
|
+
*/
|
|
187
|
+
checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck) {
|
|
188
|
+
let toReGraphicate = false;
|
|
189
|
+
for (let i = 0; i < propsToCheck.length; i++)
|
|
190
|
+
toReGraphicate = toReGraphicate || (changes[propsToCheck[i]] && changes[propsToCheck[i]].currentValue);
|
|
191
|
+
if (toReGraphicate)
|
|
192
|
+
this.reloadChart();
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Funzione che effettua un cambio di pagina per i grafici paginati. Qualora **data** fosse nullo significa che è iniziato un caricamento
|
|
196
|
+
* e anche lato applicativo il DataRetrieve dovrà considerare che l'assenza di valori non è altro che un'indicazione di inizio caricamento
|
|
197
|
+
*
|
|
198
|
+
* Il caricamento di qualsiasi pagina genererà comunque una primo evento con **data** nullo in modo da indicare l'inizio caricamento e
|
|
199
|
+
* in seconda istanza un altro evento in cui **data** sarà sempre valorizzato, o con il Dto da usare per recuperare i dati, o con i dati
|
|
200
|
+
* veri e propri già presenti nel **DataArray**
|
|
201
|
+
*
|
|
202
|
+
* I callback **onLoadStart** e **onLoadEnd** vengono sempre chiamati
|
|
203
|
+
*
|
|
204
|
+
* @param {{ data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }} nd Indice del caricamento dati, con eventualmente già i dati se disponibili
|
|
205
|
+
*/
|
|
206
|
+
changePage(nd) {
|
|
207
|
+
if (!nd.data) {
|
|
208
|
+
this.loadingChart = true;
|
|
209
|
+
// Serve per informare l'applicativo in listening sull'indice attualmente in visualizzazione.
|
|
210
|
+
// La mancanza di dati indica che non devono essere effettuate ricerche per ora
|
|
211
|
+
if (this.DataRetrieve)
|
|
212
|
+
this.DataRetrieve(null, nd.index);
|
|
213
|
+
this.onLoadStart.emit();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (this.DataRetrieve)
|
|
217
|
+
this.DataRetrieve(nd.data, nd.index).then(t => { this.changePageDataReceived(t); });
|
|
218
|
+
else
|
|
219
|
+
this.changePageDataReceived(nd.data);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Al termine del caricamento dei dati di una pagina questo metodo viene chiamato per rigraficare la situazione con i nuovi dati
|
|
223
|
+
*
|
|
224
|
+
* @param {LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any} data Dati del grafico
|
|
225
|
+
*/
|
|
226
|
+
changePageDataReceived(data) {
|
|
227
|
+
this.loadingChart = false;
|
|
228
|
+
this.onLoadEnd.emit();
|
|
229
|
+
let firstBind = !this.Data;
|
|
230
|
+
this.Data = data;
|
|
231
|
+
if (!firstBind)
|
|
232
|
+
this.reloadChart();
|
|
233
|
+
else
|
|
234
|
+
this.dispatchLoadChart();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Ricarica il grafico distruggendo il vecchio e ricreando il nuovo
|
|
238
|
+
*
|
|
239
|
+
* Le chiamate a questo metodo possono essere trasformate in chiamate al metodo **graphicate** della Service, se solo quel metodo fosse abbastanza intelligente per capire
|
|
240
|
+
* le differenze fra il grafico com'era prima e come deve diventare, in modo da non ricrearlo ma semplicemente modificare quello che già è disegnato
|
|
241
|
+
*/
|
|
242
|
+
reloadChart() {
|
|
243
|
+
this.browserOnly(() => { if (!this.Chart.isDisposed())
|
|
244
|
+
this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name); });
|
|
245
|
+
this.Dispatcher.register(this.name, () => { return this.loadChart(); });
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Permette di aggiungere un blocco di dati in maniera "live" ad un grafico
|
|
249
|
+
*/
|
|
250
|
+
addData(chartData) {
|
|
251
|
+
this.ChartService.refreshData(chartData);
|
|
252
|
+
}
|
|
253
|
+
;
|
|
254
|
+
/**
|
|
255
|
+
* Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni
|
|
256
|
+
*/
|
|
257
|
+
setupAmChartsThemes() {
|
|
258
|
+
return Promise.all([
|
|
259
|
+
this.Charter.applyTheme(am4core, this.Theme).then(() => {
|
|
260
|
+
return this.Animations ? this.Charter.applyAnimations(am4core) : this.Charter.unapplyAnimations(am4core);
|
|
261
|
+
})
|
|
262
|
+
]);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* @ignore
|
|
266
|
+
*/
|
|
267
|
+
log(log) {
|
|
268
|
+
if (this.logs)
|
|
269
|
+
console.log("@esfaenza/es-charts: " + log);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* @ignore
|
|
273
|
+
*/
|
|
274
|
+
browserOnly(f) {
|
|
275
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
276
|
+
this.zone.runOutsideAngular(() => {
|
|
277
|
+
f();
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
BaseChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
283
|
+
BaseChartComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseChartComponent, inputs: { XTitle: "XTitle", YTitle: "YTitle", Settings: "Settings", Legend: "Legend", LegendPosition: "LegendPosition", Timeline: "Timeline", name: "name", Animations: "Animations", Theme: "Theme", Locale: "Locale", HideSeriesOnLabelClick: "HideSeriesOnLabelClick", MinGridDistance: "MinGridDistance", AdaptLabelSizeAndOrientation: "AdaptLabelSizeAndOrientation", LegendPadding: "LegendPadding", DataDtos: "DataDtos", DataDtoStartIndex: "DataDtoStartIndex", DataRetrieve: "DataRetrieve", BrowseDelayMs: "BrowseDelayMs" }, outputs: { onSelectionChanged: "onSelectionChanged", onSeriesClicked: "onSeriesClicked", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd", chartLoaded: "chartLoaded" }, queries: [{ propertyName: "header_tr", first: true, predicate: ["header"], descendants: true }, { propertyName: "loading_template", first: true, predicate: ["loading"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, decorators: [{
|
|
285
|
+
type: Directive
|
|
286
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Object }, { type: i0.NgZone }, { type: i1.ChartLoader }, { type: i1.ChartDispatcher }, { type: undefined }, { type: undefined }, { type: undefined }, { type: undefined }]; }, propDecorators: { XTitle: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], YTitle: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], Settings: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], Legend: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], LegendPosition: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], Timeline: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], name: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], Animations: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], Theme: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], Locale: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], HideSeriesOnLabelClick: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], MinGridDistance: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], AdaptLabelSizeAndOrientation: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], LegendPadding: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], DataDtos: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], DataDtoStartIndex: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], DataRetrieve: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], BrowseDelayMs: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], header_tr: [{
|
|
323
|
+
type: ContentChild,
|
|
324
|
+
args: ['header', { static: false }]
|
|
325
|
+
}], loading_template: [{
|
|
326
|
+
type: ContentChild,
|
|
327
|
+
args: ['loading', { static: false }]
|
|
328
|
+
}], onSelectionChanged: [{
|
|
329
|
+
type: Output
|
|
330
|
+
}], onSeriesClicked: [{
|
|
331
|
+
type: Output
|
|
332
|
+
}], onLoadStart: [{
|
|
333
|
+
type: Output
|
|
334
|
+
}], onLoadEnd: [{
|
|
335
|
+
type: Output
|
|
336
|
+
}], chartLoaded: [{
|
|
337
|
+
type: Output
|
|
338
|
+
}] } });
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBc0UsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVksU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBTy9LLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7OztBQUdwRDs7O0dBR0c7QUFFSCxNQUFNLE9BQWdCLGtCQUFrQjtJQStMdEM7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsWUFBb0IsRUFBYyxFQUFVLFVBQWtCLEVBQVUsSUFBWSxFQUFVLE9BQW9CLEVBQVUsVUFBMkIsRUFBVSxJQUFhLEVBQ3BLLFVBQW1CLEVBQVUsTUFBYyxFQUFVLEtBQWE7UUFEeEQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNwSyxlQUFVLEdBQVYsVUFBVSxDQUFTO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQVE7UUE3SzVFOztXQUVHO1FBQ00sU0FBSSxHQUFXLEVBQUUsQ0FBQztRQTBEM0I7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQVcsR0FBRyxDQUFDO1FBWXJDOztXQUVHO1FBQ08sdUJBQWtCLEdBQTZELElBQUksWUFBWSxFQUE4QyxDQUFDO1FBRXhKOztXQUVHO1FBQ08sb0JBQWUsR0FBeUIsSUFB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QUFJLENBQUMsVUFBVSxDQUFDO1FBRTFGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUUsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbEYsUUFBUSxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1FBQ2xLLFFBQVEsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5RSxRQUFRLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUUsUUFBUSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2xHLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFD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QUFNO2dCQUtHLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXQsIFNpbXBsZUNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgT3B0aW9uYWwsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBCYXNlU2V0dGluZ3MsIExlZ2VuZFBhZCB9IGZyb20gJy4uLy4uL21vZGVscy9zZXR0aW5ncyc7XHJcbmltcG9ydCB7IENoYXJ0TG9hZGVyLCBDaGFydERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvcmVcIjtcclxuaW1wb3J0IHsgUGFnZWRDaGFydERhdGEsIExpbmVDaGFydERhdGEsIFBpZUNoYXJ0RGF0YSwgVmVydGljYWwyRENoYXJ0RGF0YSwgVmVydGljYWxDaGFydERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YSc7XHJcblxyXG5pbXBvcnQgKiBhcyBhbTRjb3JlIGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM0L2NvcmVcIjtcclxuaW1wb3J0ICogYXMgYW00Y2hhcnRzIGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM0L2NoYXJ0c1wiO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgR3JhZmljbyBCYXNlIGNoZSBnZXN0aXNjZSB0dXR0ZSBsZSBjb3NlIGNvbXVuaSBkZWkgdmFyaSBncmFmaWNpIGlzdGFuemlhYmlsaSwgY29tZSBsYSBwcmVzZW56YSBvIG1lbnUgZGkgdW5hIGxlZ2VuZGEsXHJcbiAqIGlsIHRlbWEgdXRpbGl6emF0bywgaWwgbG9jYWxlIGRlbCBzaW5nb2xvIGdyYWZpY28sIGVjYyBlY2MuLi5cclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdG9sbyBwZXIgbCdhc3NlIFhcclxuICAgKi9cclxuICBASW5wdXQoKSBYVGl0bGU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVGl0b2xvIHBlciBsJ2Fzc2UgWVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFlUaXRsZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhemlvbmkgZGkgYmFzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNldHRpbmdzOiBCYXNlU2V0dGluZ3M7XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXNlbnphIG8gbWVubyBkZWxsYSBsZWdlbmRhXHJcbiAgICovXHJcbiAgQElucHV0KCkgTGVnZW5kOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBQb3NpemlvbmUgZGVsbGEgbGVnZW5kYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExlZ2VuZFBvc2l0aW9uOiBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiO1xyXG5cclxuICAvKipcclxuICAgKiBQcmVzZW56YSBvIG1lbm8gZGVsbGEgdGltZWxpbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBUaW1lbGluZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZ3JhZmljbywgZm9uZGFtZW50YWxlIGFzc2VnbmFybG8gcGVyIHBlcm1ldHRlcmUgYWxsYSBsaWJyZXJpYSBkaSBzY2hlZHVsYXJuZSBsYSBjcmVhemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6byBvIG1lbm8gZGVsbGUgYW5pbWF6aW9uaS4gU2VuemEgYW5pbWF6aW9uaSBpbCBncmFmaWNvIMOoIGxlZ2dlcm1lbnRlIHBpw7kgcGVyZm9ybWFudGUsIHNwZWNpYWxtZW50ZSBhbGwnYXVtZW50YXJlIGRlaSBwdW50aSBuZWxsYSBzZXJpZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEFuaW1hdGlvbnM6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbWEgZGEgdXRpbGl6emFyZSwgdmFsaWRvIHNvbG8gcGVyIGlsIGdyYWZpY28gaW4gcXVlc3Rpb25lLiBHbGkgYWx0cmkgZ3JhZmljaSBkZWxsYSBwYWdpbmEgcG9zc29ubyBhdmVyZSBzdGlsaSBkaXZlcnNpLlxyXG4gICAqIFxyXG4gICAqIEVzc2VuZG8gaSB0ZW1pIGNhcmljYXRpIGluIG1hbmllcmEgYXNpbmNyb25hIGluIGJhc2UgYWxsJ3V0aWxpenpvIHV0aWxpenphcm5lIHRhbnRpIGRpdmVyc2kgaW4gdW4ndW5pY2EgcGFnaW5hIHBvdHJlYmJlIHJhbGxlbnRhcmUgaWwgcHJpbW8gY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBASW5wdXQoKSBUaGVtZTogJ3NwaXJpdGVkYXdheScgfCAnbW9vbnJpc2VraW5nZG9tJyB8ICdmcm96ZW4nIHwgJ2RhcmsnIHwgJ2tlbGx5JyB8ICdtYXRlcmlhbCcgfCAnZGF0YXZpeicgfCAnbm9uZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIExvY2FsZSBkZWwgc2luZ29sbyBncmFmaWNvXHJcbiAgICovXHJcbiAgQElucHV0KCkgTG9jYWxlOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIGNvbXBvcnRhbWVudG8gZGkgZGVmYXVsdCBwZXIgaSBjbGljayBkZWxsZSBzZXJpZSBzdWxsYSBMZWdlbmRhLiBNZXR0ZW5kbyBxdWVzdGEgdmFyaWFiaWxlIGEgKipmYWxzZSoqXHJcbiAgICogZSBjb2xsZWdhbmRvIGwnb3V0cHV0ICoqb25TZXJpZXNDbGlja2VkKiogw6ggcG9zc2liaWxlIGdlbmVyYXJlIHVuIGV2ZW50byBvZ25pIHZvbHRhIGNoZSBsJ3V0ZW50ZSBmYSBjbGljayBzdSB1bmEgc2VyaWUgZGVsbGEgTGVnZW5kYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEhpZGVTZXJpZXNPbkxhYmVsQ2xpY2s6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1pbmltYSBkaXN0YW56YSBuZWxsYSBncmlnbGlhIGZyYSBpIHZhbG9yaSwgbW9kaWZpY2EgbGEgcXVhbnRpdMOgIGRpIHN0ZXAgZnJhIGkgdmFsb3JpIGRlbGwnYXNzZSBYIGUgcXVpbmRpIGxhIGdyYW51bGFyaXTDoCBkZWkgZGF0aS5cclxuICAgKiBcclxuICAgKiBQacO5IHBpY2NvbGEgw6gsIHBpw7kgdmFsb3JpIHZlcnJhbm5vIGluc2VyaXRpIG5lbGwnYXNzZSBYXHJcbiAgICovXHJcbiAgQElucHV0KCkgTWluR3JpZERpc3RhbmNlOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIENlcmNhIGRpIGFnZ2l1c3RhcmUgaSB2YXJpIHN0ZXAgZGVsbCdhc3NlIFggcnVvdGFuZG9saSBlIGRpbWludWVuZG9uZSBsZSBkaW1lbnNpb25pIGFiYmFzdGFuemEgcGVyIG1vc3RyYXJuZSBpbCBwacO5IHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhZGRpbmcgZGEgYXBwbGljYXJlIGFsbGEgTGVnZW5kYSBpbiBjYXNvIHNpIHZvZ2xpYSBzcG9zdGFyZSB1biBwbydcclxuICAgKi9cclxuICBASW5wdXQoKSBMZWdlbmRQYWRkaW5nOiBMZWdlbmRQYWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RhIGRpIGR0byBnZW5lcmljaSBjaGUgdmVycmFubm8gZW1lc3NpIGRhbCBzaXN0ZW1hIGRpIGdyYWZpY2kgdW5vIHBlciB1bm8gYXR0cmF2ZXJzbyBsYSBmdW56aW9uZSAqKkRhdGFSZXRyaWV2ZSoqLCBjaGUgZG92cmFubm8gZXNzZXJlXHJcbiAgICogdXNhdGkgcGVyIHVhbiBzb3J0YSBkaSBjYXJpY2FtZW50byBcInBhZ2luYXRvXCIgZGVpIGdyYWZpY2lcclxuICAgKi9cclxuICBASW5wdXQoKSBEYXRhRHRvczogYW55W107XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljZSBkZWxsJ2FycmF5ICoqRGF0YUR0b3MqKiBvIGRlbGwnYXJyYXkgKipEYXRhQXJyYXkqKiBkYSBjdWkgaW5pemlhcmUgYWQgZW1ldHRlcmUgaSB2YWxvcmksIHV0aWxlIHBlciBzdXBwb3J0YXJlIGlsIFwiYmFja1wiIGRhIHVuIGV2ZW50dWFsZSBwYWdpbmEgZGkgZGV0dGFnbGlvXHJcbiAgICovXHJcbiAgQElucHV0KCkgRGF0YUR0b1N0YXJ0SW5kZXg6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgZGVmaW5pdGEgbGF0byBhcHBsaWNhdGl2byBjaGUgaW4gYmFzZSBhbCAqKkRhdGFEdG8qKiBjb3JyZW50ZSByZXN0aXR1aXNjZSB1bmEgUHJvbWlzZSBkZWwgdGlwbyBkaSBkYXRpIHJpY2hpZXN0byBwZXIgaWwgZ3JhZmljbyBjb3JyZW50ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIERhdGFSZXRyaWV2ZTogKGR0bzogYW55LCBpbmRleDogbnVtYmVyKSA9PiBQcm9taXNlPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIERvcG8gYXZlciBuYXZpZ2F0byBhIHVuIG51b3ZvIGdyYWZpY28gdmVycmFubm8gYXR0ZXNpIHF1ZXN0aSBtaWxsaXNlY29uZGkgcHJpbWEgZGkgcmljaGllZGVyZSBpIGRhdGkgYXR0cmF2ZXJzbyBsYSAqKkRhdGFSZXRyaWV2ZSoqLlxyXG4gICAqIFxyXG4gICAqIFF1ZXN0byBwZXIgZXZpdGFyZSBjaGUgbCd1dGVudGUgY2xpY2NhbmRvIHZlbG9jZW1lbnRlIFwiYXZhbnRpXCIgZ2VuZXJpIHRvbm5lbGxhdGUgZGkgcmljaGllc3RlIGludXRpbGlcclxuICAgKi9cclxuICBASW5wdXQoKSBCcm93c2VEZWxheU1zOiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVzdGF6aW9uZSBkZWkgZ3JhZmljaSBuZWwgY2FzbyBzaSB1dGlsaXp6aSBsYSBtb2RhbGl0w6AgcGFnaW5hdGFcclxuICAgKi9cclxuICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgaGVhZGVyX3RyO1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdnaW8gZGkgY2FyaWNhbWVudG8gZnJhIHVuIGdyYWZpY28gZSBsJ2FsdHJvIFxyXG4gICAqL1xyXG4gIEBDb250ZW50Q2hpbGQoJ2xvYWRpbmcnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9hZGluZ190ZW1wbGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIHN1bGxhIHNlbGV6aW9uZSBkaSB1biByYW5nZSBkaSBkYXRpIG8gZGFsbGEgdGltZWxpbmUgbyBkYWwgZ3JhZmljby4gVmFsaWRvIHBlciB0dXR0aSBpIGdyYWZpY2kgY2hlIHN1cHBvcnRhbm8gc2VyaWUgYmFzYXRlIHN1bGxlIGRhdGVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8eyBmcm9tOiBEYXRlLCB0bzogRGF0ZSwgaW5pdGlhbDogYm9vbGVhbiB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmcm9tOiBEYXRlLCB0bzogRGF0ZSwgaW5pdGlhbDogYm9vbGVhbiB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gZGFsIGNsaWNrIGRpIHVuYSBzZXJpZSBkYWxsYSBMZWdlbmRhLCBhIHBhdHRvIGNoZSBsJ0lucHV0ICoqSGlkZVNlcmllc09uTGFiZWxDbGljayoqIHNpYSBpbXBvc3RhdG8gYSBmYWxzZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvblNlcmllc0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbGwnaW5pemlvIGRlbCBjYXJpY2FtZW50byBkaSB1bmEgbnVvdmEgcGFnaW5hIGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTG9hZFN0YXJ0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCB0ZXJtaW5lIGRlbCBjYXJpY2FtZW50byBkaSB1bmEgbnVvdmEgcGFnaW5hIGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTG9hZEVuZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIHRlcm1pbmUgZGVsbGEgY3JlYXppb25lIGRlbCBncmFmaWNvIHJlZmVyZW56aWFuZG8gbCdpc3RhbnphIG5hdGl2YSBkZWwgZ3JhZmljbyBjcmVhdG8gaW4gbW9kbyBkYSBwb3RlciBlZmZldHR1YXJlIG1vZGlmaWNoZVxyXG4gICAqIHBvc3QgaW5pemlhbGl6emF6aW9uZSBsYXRvIGFwcGxpY2F0aXZvXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNoYXJ0TG9hZGVkOiBFdmVudEVtaXR0ZXI8QmFzZUNoYXJ0Q29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QmFzZUNoYXJ0Q29tcG9uZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2ZSBhIGRlY2lkZXJlIHNlIHNhcsOgIHByZXNlbnRlIGwnaW50ZXJmYWNjaWEgZGkgcGFnaW5hemlvbmVcclxuICAgKi9cclxuICBwdWJsaWMgaXNQYWdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbml0RG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJc3RhbnphIG5hdGl2YSBkZWwgZ3JhZmljbyBhbWNoYXJ0cy4gUXVhbHNpYXNpIGNvc2Egbm9uIGZhIHF1ZXN0YSBsaWJyZXJpYSBzaSBwdcOyIHByZW5kZXJlIHF1ZXN0YSBpc3RhbnphIGUgbW9kaWZpY2FyZSBhIHBpYWNpbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgQ2hhcnQ6IGFtNGNoYXJ0cy5DaGFydDtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Vydml6aW8gZGkgZ3JhZmljYXppb25lIGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgcHVibGljIENoYXJ0U2VydmljZTogSUJhc2VTZXJ2aWNlPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhcmlhYmlsZSBjaGUgaW5kaWNhIHNlIHVuYSBudW92YSBwYWdpbmEgZGVsIGdyYWZpY28gw6ggaW4gZmFzZSBkaSBjYXJpY2FtZW50b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkaW5nQ2hhcnQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgZGVsIGdyYWZpY28uIE9nbmkgaW1wbGVtZW50YXppb25lIGdlc3RpcsOgIHF1ZXN0YSB2YXJpYWJpbGUgaW4gYmFzZSBhbCBwcm9wcmlvIHRpcG8gZGkgRGF0aVxyXG4gICAqL1xyXG4gIGFic3RyYWN0IERhdGE6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGF0aSBkZWwgZ3JhZmljbyBpbiBtb2RhbGl0w6AgcGFnaW5hdGEsIHBlciBxdWFuZG8gdHV0dGUgbGUgcGFnaW5lIHNvbm8gcHJlY2FyaWNhdGUgaW4gbWVtb3JpYSAoaW4gY2FzbyBjb250cmFyaW8gdmVycmViYmVyw7IgdXRpbGl6emF0aSBpICoqRGF0YUR0b3MqKilcclxuICAgKi9cclxuICBhYnN0cmFjdCBEYXRhQXJyYXk6IFBhZ2VkQ2hhcnREYXRhPGFueT5bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGxlIHByb3ByaWV0w6Agc3BlY2lmaWNhIHBlciB1bmEgZGF0YSBpbXBsZW1lbnRhemlvbmUgY2hlIGRldm9ubyBjYXVzYXJlIHVuIHJlcGFpbnQgZGVsIGdyYWZpY29cclxuICAgKi9cclxuICBhYnN0cmFjdCBnZXRTcGVjaWZpY1Byb3BlcnRpZXNUb0NoZWNrKCk6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gZ2VuZXJpY28gZGkgZ3JhZmljYXppb25lLCByZWltcGxlbWVudGF0byBkYWxsZSB2YXJpZSBpbXBsZW1lbnRhemlvbmlcclxuICAgKi9cclxuICBhYnN0cmFjdCBncmFwaGljYXRlKGNhc3RlZFNldHRpbmdzKTogSUJhc2VTZXJ2aWNlPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBnZW5lcmljbyBjaGUgcHJlbmRlIGxlIGltcG9zdGF6aW9uaSBnZW5lcmljaGUgZGVsIGdyYWZpY28gZSBsZSBjYXN0YSBhbGxhIHRpcG9sb2dpYSBnaXVzdGEgcGVyIGlsIGdyYWZpY28gc3BlY2lmaWNvXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZ2V0Q2FzdGVkU2V0dGluZ3MoKTogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIFwiUmllbXBpZVwiIGxhIGNsYXNzZSBkZWxsZSBpbXBvc3RhemlvbmkgY29uIHR1dHRlIGxlIGltcG9zdGF6aW9uaSBzcGVjaWZpY2hlIHBhc3NhdGUgYSB1biBkYXRvIGdyYWZpY28gY29tZSBJbnB1dFxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGZpbGxTcGVjaWZpY1NldHRpbmdzKHNldHRpbmdzQ2FzdGVkKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29zdHJ1dHRvcmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGVsIENvbnRlbml0b3JlIGFsbCdpbnRlcm5vIGRlbCBjdWkgdmllbmUgY3JlYXRvIGlsIGdyYWZpY28uIFV0aWxpenphdG8gcGVyIGVzdHJhcG9sYXJuZSBsYSAqKkNvbnRhaW5lckhlaWdodCoqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBsYXRmb3JtSWQgcGlhdHRhZm9ybWEgQW5ndWxhciAoYnJvd3NlciwgZWNjLi4uKSBwZXIgZXNzZXJlIHNpY3VyaSBjaGUgYW1jaGFydHMgdmVuZ2EgYXR0aXZhdG8gc29sbyBsYXRvIGJyb3dzZXIuIE5vbiB1dGlsaXp6YW5kbyBTU1IgbmVsbGUgYXBwbGljYXppb25pIGNoZSBjb25zdW1hbm8gcXVlc3RhIGxpYnJlcmlhIG5vbiDDqCBwYXJ0aWNvbGFybWVudGUgc2lnbmlmaWNhdGl2bywgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAqIEBwYXJhbSB7Tmdab25lfSB6b25lIE5nWm9uZSBkaSBkZWZhdWx0IHBlciBwZXJtZXR0ZXJlIGRpIGluaXppYWxpenphcmUgaWwgZ3JhZmljbyBhbGwnaW5mdW9yaSBkaSBBbmd1bGFyIHBlciBhdmVyZSBxdWFsY2hlIHByZXN0YXppb25lIGluIHBpw7lcclxuICAgKiBAcGFyYW0ge0NoYXJ0TG9hZGVyfSBDaGFydGVyIElzdGFuemEgZGVsIExvYWRlciBjaGUgc2kgb2NjdXBlcsOgIGRpIGNhcmljYXJlIGluIG1lbW9yaWEgdHV0dG8gY2nDsiBjaGUgc2VydmUgcGVyIGlsIGdyYWZpY28gYXR0dWFsZSAodGVtaSwgbG9jYWxlLCBhbmltYXppb25pLCBlY2MuLi4pXHJcbiAgICogQHBhcmFtIHtDaGFydERpc3BhdGNoZXJ9IERpc3BhdGNoZXIgSXN0YW56YSBkZWwgRGlzcGF0Y2hlciBjaGUgc2kgb2NjdXBhIGRpIGRpZmZlcmlyZSBpbCBjYXJpY2FtZW50byBkZWkgZ3JhZmljaSAxIGRvcG8gbCdhbHRybyBpbiBtb2RvIGNoZSBjYXJpY2FtZW50aSBwc2V1ZG8gcGFyYWxsZWxpIGluY2FzaW5pbm8gdHV0dG9cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ3MgSW5kaWNhIHNlIGVmZmV0dHVhcmUgbG9nIGEgY29uc29sZSBvIG1lbm8sIGluaWV0dGF0byBkYWxsZSBjbGFzc2kgc3BlY2lhbGl6emF0ZSBkYWwgdG9rZW4gRVNDX0xPR1NcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFuaW1hdGlvbnMgSW5kaWNhIHNlIHBlciBxdWVzdG8gZ3JhZmljbyBkZXZvbm8gZXNzZXJlIGF0dGl2ZSBvIG1lbm8gbGUgYW5pbWF6aW9uaS4gSW1wb3N0YXppb25lIGdlbmVyaWNhIHByZXNhIGRhbCB0b2tlbiBFU0NfQU5JTUFUSU9OU1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgSW5kaWNhIGlsIGxvY2FsZSBzcGVjaWZpY28gcGVyIHF1ZXN0byBncmFmaWNvLiBJbXBvc3RhemlvbmUgZ2VuZXJpY2EgcHJlc2EgZGFsIHRva2VuIEVTQ19MT0NBTEVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGhlbWUgSW5kaWNhIGlsIHRlbWEgc3BlY2lmaWNvIHBlciBxdWVzdG8gZ3JhZmljby4gSW1wb3N0YXppb25lIGdlbmVyaWNhIHByZXNhIGRhbCB0b2tlbiBFU0NfVEhFTUVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByaXZhdGUgQ2hhcnRlcjogQ2hhcnRMb2FkZXIsIHByaXZhdGUgRGlzcGF0Y2hlcjogQ2hhcnREaXNwYXRjaGVyLCBwcml2YXRlIGxvZ3M6IGJvb2xlYW4sIFxyXG4gICAgcHJpdmF0ZSBhbmltYXRpb25zOiBib29sZWFuLCBwcml2YXRlIGxvY2FsZTogc3RyaW5nLCBwcml2YXRlIHRoZW1lOiBzdHJpbmcpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gZGkgaW5pemlhbGl6emF6aW9uZSBwb3N0IHZhbG9yaXp6YXppb25lIGRlZ2xpIGlucHV0LCB1dGlsaXp6YXRvIHBlciB2YWxvcml6emFyZSBjb3JyZXR0YW1lbnRlIGxlIHByb3ByaWV0w6AgZXNzZW56aWFsaSBkZWwgZ3JhZmljbyAoQW5pbWF6aW9uaSwgVGVtYSBlIExvY2FsZSlcclxuICAgKiBcclxuICAgKiBWaWVuZSBkYXRhIHByaW9yaXTDoCBhaSBTZXR0aW5ncyAoSFRNTCksIHByaW9yaXTDoCBzZWNvbmRhcmlhIGFnbGkgSW5wdXQgZGlyZXR0aSAoTGF0byBIVE1MKSwgcHJpb3JpdMOgIHVsdGltYSBhbGxlIGltcG9zdGF6aW9uaSBnbG9iYWxpLFxyXG4gICAqIGltcG9zdGF0ZSBpbiBmYXNlIGRpIGltcG9ydCBkZWwgbW9kdWxvIGFzc2VnbmFuZG8gdmFsb3JpIGFpIHRva2VuIEVTQ19MT0NBTEUsIEVTQ19BTklNQVRJT05TLCBFU0NfVEhFTUVcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIFF1aSBzZXJ2b25vIHNvbG8gbGUgdmFyaWFiaWxpIGRhIGNvbm9zY2VyZSBQUkUtZ3JhZmljYXppb25lIHBlciBpbCBjYXJpY2FtZW50byBkZWkgbW9kdWxpIGxhenkgZGVsIGdyYWZpY29cclxuXHJcbiAgICB0aGlzLkFuaW1hdGlvbnMgPSB0aGlzLlNldHRpbmdzPy5BbmltYXRpb25zICE9IG51bGwgPyB0aGlzLlNldHRpbmdzPy5BbmltYXRpb25zIDogKHRoaXMuQW5pbWF0aW9ucyAhPSBudWxsID8gdGhpcy5BbmltYXRpb25zIDogdGhpcy5hbmltYXRpb25zKVxyXG4gICAgdGhpcy5UaGVtZSA9IHRoaXMuU2V0dGluZ3M/LlRoZW1lICE9IG51bGwgPyB0aGlzLlNldHRpbmdzPy5UaGVtZSA6ICh0aGlzLlRoZW1lICE9IG51bGwgPyB0aGlzLlRoZW1lIDogPGFueT50aGlzLnRoZW1lKVxyXG4gICAgdGhpcy5Mb2NhbGUgPSB0aGlzLlNldHRpbmdzPy5Mb2NhbGUgIT0gbnVsbCA/IHRoaXMuU2V0dGluZ3M/LkxvY2FsZSA6ICh0aGlzLkxvY2FsZSAhPSBudWxsID8gdGhpcy5Mb2NhbGUgOiB0aGlzLmxvY2FsZSlcclxuXHJcbiAgICB0aGlzLmlzUGFnZWQgPSAodGhpcy5EYXRhQXJyYXkgJiYgdGhpcy5EYXRhQXJyYXkubGVuZ3RoID4gMCAmJiAhdGhpcy5EYXRhKSB8fCAodGhpcy5EYXRhRHRvcyAmJiB0aGlzLkRhdGFEdG9zLmxlbmd0aCA+IDAgJiYgISF0aGlzLkRhdGFSZXRyaWV2ZSk7XHJcbiAgICB0aGlzLmxvZyhcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IG5nT25Jbml0XCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50YXppb25lIHV0aWxpenphdGEgcGVyIGNvbnRyb2xsYXJlIGV2ZW50dWFsaSBwcm9wcmlldMOgIGNoaWF2ZSBkZWwgZ3JhZmljbyBlIHJpZ3JhZmljYXJlIHR1dHRvIHF1YWxvcmEgc2kgcml2ZWxhc3NlIG5lY2Vzc2FyaW9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXMgSW5kaWNhemlvbmUgZGVpIGNhbWJpYW1lbnRpIHN1bGxlIHByb3ByaWV0w6AgZGVsIGdyYWZpY28uIFZlZGVyZSBkb2N1bWVudGF6aW9uZSBBbmd1bGFyIGluIG1lcml0b1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICghdGhpcy5pbml0RG9uZSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogbmdPbkNoYW5nZXNcIik7XHJcblxyXG4gICAgbGV0IHByb3BzVG9DaGVjayA9IFtcIlRpbWVsaW5lXCIsIFwiTGVnZW5kXCIsIFwiU2V0dGluZ3NcIiwgXCJBbmltYXRpb25zXCIsIFwiVGhlbWVcIiwgXCJMb2NhbGVcIiwgLi4udGhpcy5nZXRTcGVjaWZpY1Byb3BlcnRpZXNUb0NoZWNrKCldO1xyXG4gICAgdGhpcy5jaGVja1Byb3BlcnRpZXNBbmRSZWdyYXBoaWNhdGVBc05lZWRlZChjaGFuZ2VzLCBwcm9wc1RvQ2hlY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmVsIHBvc3QgaW5pemlhbGl6emF6aW9uZSwgYSBwYXR0byBjaGUgbWkgdHJvdmkgaW4gYW1iaWVudGUgXCJicm93c2VyXCIsIHByb3NlZ3VvIGFsIGNhcmljYW1lbnRvIGRlbCBncmFmaWNvIHN1bGwnSFRNTFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5uYW1lKVxyXG4gICAgICB0aHJvdyBcImEgVW5pcXVlIG5hbWUgaXMgbWFuZGF0b3J5IHRvIGNyZWF0ZSBhIGNoYXJ0XCI7XHJcblxyXG4gICAgdGhpcy5sb2coXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBuZ0FmdGVyVmlld0luaXQsIGdyYXBoaWNhdGluZyBjaGFydCBvdXRzaWRlIEFuZ3VsYXJcIik7XHJcblxyXG4gICAgaWYoIXRoaXMuaXNQYWdlZClcclxuICAgICAgdGhpcy5kaXNwYXRjaExvYWRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsJ29uRGVzdHJveSBzY2FyaWNvIGlsIGdyYWZpY28gcGVyIGxpYmVyYXJlIG1lbW9yaWFcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLkNoYXJ0KSB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIGRlc3Ryb3llZCBjaGFydFwiKTtcclxuICAgICAgdGhpcy5icm93c2VyT25seSgoKSA9PiB7IHRoaXMuQ2hhcnQuZGlzcG9zZSgpOyB0aGlzLkRpc3BhdGNoZXIuZGVyZWdpc3RlckdyYXBoKHRoaXMubmFtZSkgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIHVuY3JlYXRlZCBjaGFydCBjb21wb25lbnQuIEl0IHByb2JhYmx5IHdhcyBhIGR1cGxpY2F0ZWRcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBpbCBncmFmaWNvIGF0dHVhbGUgbmVsIERpc3BhdGNoZXIgaW4gbW9kbyBjaGUgdmVuZ2EgY2FyaWNhdG8gYXBwZW5hIHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzcGF0Y2hMb2FkQ2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJyb3dzZXJPbmx5KCgpID0+IHtcclxuICAgICAgdGhpcy5EaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMubmFtZSwgKCkgPT4geyByZXR1cm4gdGhpcy5sb2FkQ2hhcnQoKTsgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWwgY2FyaWNhbWVudG8gZGVsIGdyYWZpY28gZnVuemlvbmEgbmVsIHNlZ3VlbnRlIG1vZG86XHJcbiAgICogXHJcbiAgICogMSkgQ2FyaWNhbWVudG8gZGVsIHRlbWEgZSBkZWxsZSBhbmltYXppb25pLCBxdWFsb3JhIG5lY2Vzc2FyaVxyXG4gICAqIFxyXG4gICAqIDIpIENhcmljYW1lbnRvIGRlbGxlIGltcG9zdGF6aW9uaSBzcGVjaWZpY2hlIGUgaW50ZWdyYXppb25lIGNvbiBsZSBpbXBvc3RhemlvbmkgZ2VuZXJpY2hlXHJcbiAgICogXHJcbiAgICogMykgR3JhZmljYXppb25lXHJcbiAgICogXHJcbiAgICogNCkgQ2FyaWNhbWVudG8gZGVsIGxvY2FsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZENoYXJ0KCkge1xyXG4gICAgdGhpcy5sb2coXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBTdGFydCBsb2FkaW5nIE1vZHVsZXMgaWYgbmVlZGVkXCIpO1xyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcclxuICAgICAgdGhpcy5zZXR1cEFtQ2hhcnRzVGhlbWVzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBHcmFwaGljYXRpbmcgYWZ0ZXIgbW9kdWxlcyBsb2FkXCIpO1xyXG5cclxuICAgICAgICB2YXIgY2FzdGVkU2V0dGluZ3MgPSB0aGlzLmdldENhc3RlZFNldHRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5maWxsU2V0dGluZ3MoY2FzdGVkU2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuZmlsbFNwZWNpZmljU2V0dGluZ3MoY2FzdGVkU2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuQ2hhcnRTZXJ2aWNlID0gdGhpcy5ncmFwaGljYXRlKGNhc3RlZFNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLkNoYXJ0ID0gdGhpcy5DaGFydFNlcnZpY2UuQ2hhcnRJbnN0YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLkNoYXJ0KSB0aGlzLmxvZyhcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IENvdWxkIG5vdCBjcmVhdGUgZ3JhcGhcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLkNoYXJ0ZXIuYXBwbHlMb2NhbGUodGhpcy5DaGFydCwgdGhpcy5Mb2NhbGUpLnRoZW4oKCkgPT4geyB0aGlzLmluaXREb25lID0gdHJ1ZTsgdGhpcy5jaGFydExvYWRlZC5lbWl0KHRoaXMpIH0pO1xyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaWVtcGltZW50byBkZWxsZSBpbXBvc3RhemlvbmkgbmVsbGEgY2xhc3NlIFNldHRpbmdzLiBTaSBkYW5ubyBwcmlvcml0w6AgYWkgdmFsb3JpIGdpw6AgaW1wb3N0YXRpIG5laSBTZXR0aW5ncywgXHJcbiAgICogaW50ZWdyYW5kbyBldmVudHVhbG1lbnRlIGNvbiBsZSAgcHJvcHJpZXTDoCBkZWwgZ3JhZmljb1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7QmFzZVNldHRpbmdzfSBzZXR0aW5ncyBJbXBvc3RhemlvbmkgYmFzZSByaWNldnV0ZSBkYWxsYSBzcGVjaWFsaXp6YXppb25lIGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaWxsU2V0dGluZ3Moc2V0dGluZ3M6IEJhc2VTZXR0aW5ncykge1xyXG5cclxuICAgIC8vIE1lcmdlIGRlZ2xpIElucHV0IGNvbiBpIFNldHRpbmdzLCBkYW5kbyBwcmlvcml0w6AgYWkgU2V0dGluZ3NcclxuXHJcbiAgICBzZXR0aW5ncy5UaGVtZSA9IHNldHRpbmdzLlRoZW1lID8gc2V0dGluZ3MuVGhlbWUgOiB0aGlzLlRoZW1lO1xyXG4gICAgc2V0dGluZ3MuTG9jYWxlID0gc2V0dGluZ3MuTG9jYWxlID8gc2V0dGluZ3MuTG9jYWxlIDogdGhpcy5Mb2NhbGU7XHJcbiAgICBzZXR0aW5ncy5BbmltYXRpb25zID0gc2V0dGluZ3MuQW5pbWF0aW9ucyAhPSBudWxsID8gc2V0dGluZ3MuQW5pbWF0aW9ucyA6IHRoaXMuQW5pbWF0aW9ucztcclxuXHJcbiAgICBzZXR0aW5ncy5MZWdlbmQgPSBzZXR0aW5ncy5MZWdlbmQgIT0gbnVsbCA/IHNldHRpbmdzLkxlZ2VuZCA6IHRoaXMuTGVnZW5kO1xyXG4gICAgc2V0dGluZ3MuTmFtZSA9IHNldHRpbmdzLk5hbWUgPyBzZXR0aW5ncy5OYW1lIDogdGhpcy5uYW1lO1xyXG4gICAgc2V0dGluZ3MuVGltZWxpbmUgPSBzZXR0aW5ncy5UaW1lbGluZSAhPSBudWxsID8gc2V0dGluZ3MuVGltZWxpbmUgOiB0aGlzLlRpbWVsaW5lO1xyXG4gICAgc2V0dGluZ3MuQWRhcHRMYWJlbFNpemVBbmRPcmllbnRhdGlvbiA9IHNldHRpbmdzLkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb24gIT0gbnVsbCA/IHNldHRpbmdzLkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb24gOiB0aGlzLkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb247XHJcbiAgICBzZXR0aW5ncy5YQXhpc1RpdGxlID0gc2V0dGluZ3MuWEF4aXNUaXRsZSA/IHNldHRpbmdzLlhBeGlzVGl0bGUgOiB0aGlzLlhUaXRsZTtcclxuICAgIHNldHRpbmdzLllBeGlzVGl0bGUgPSBzZXR0aW5ncy5ZQXhpc1RpdGxlID8gc2V0dGluZ3MuWUF4aXNUaXRsZSA6IHRoaXMuWVRpdGxlO1xyXG4gICAgc2V0dGluZ3MuTGVnZW5kUG9zaXRpb24gPSBzZXR0aW5ncy5MZWdlbmRQb3NpdGlvbiA/IHNldHRpbmdzLkxlZ2VuZFBvc2l0aW9uIDogdGhpcy5MZWdlbmRQb3NpdGlvbjtcclxuICAgIHNldHRpbmdzLkhpZGVTZXJpZXNPbkxhYmVsQ2xpY2sgPSBzZXR0aW5ncy5IaWRlU2VyaWVzT25MYWJlbENsaWNrICE9IG51bGwgPyBzZXR0aW5ncy5IaWRlU2VyaWVzT25MYWJlbENsaWNrIDogdGhpcy5IaWRlU2VyaWVzT25MYWJlbENsaWNrO1xyXG4gICAgc2V0dGluZ3MuTWluR3JpZERpc3RhbmNlID0gc2V0dGluZ3MuTWluR3JpZERpc3RhbmNlICE9IG51bGwgPyBzZXR0aW5ncy5NaW5HcmlkRGlzdGFuY2UgOiB0aGlzLk1pbkdyaWREaXN0YW5jZTtcclxuICAgIHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nID8gc2V0dGluZ3MuTGVnZW5kUGFkZGluZyA6IHRoaXMuTGVnZW5kUGFkZGluZyA/PyBudWxsO1xyXG5cclxuICAgICg8YW55PnNldHRpbmdzKS5Db250YWluZXJIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAoPGFueT5zZXR0aW5ncykuT25TZXJpZXNDbGlja0NhbGxiYWNrID0gKHNlcmllcykgPT4geyB0aGlzLm9uU2VyaWVzQ2xpY2tlZC5lbWl0KHNlcmllcyk7IH07XHJcbiAgICAoPGFueT5zZXR0aW5ncykuT25TZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2sgPSAoZXZlbnQ6IHsgZnJvbTogRGF0ZSwgdG86IERhdGUsIGluaXRpYWw6IGJvb2xlYW4gfSkgPT4geyB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgZnJvbTogZXZlbnQuZnJvbSwgdG86IGV2ZW50LnRvLCBpbml0aWFsOiBldmVudC5pbml0aWFsIH0pOyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbGxhIGkgY2FtYmlhbWVudGkgYXZ2ZW51dGkgYWxsZSBwcm9wcmlldMOgIGNoaWF2ZSBlIHJpZWZmZXR0dWEgbGEgZ3JhZmljYXppb25lIHF1YWxvcmEgbmVjZXNzYXJpb1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlcyBJbmRpY2F6aW9uZSBkZWxsYSBtb2RpZmljaGUgYXZ2ZW51dGUgbmVpIHZhcmkgSW5wdXRcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1RvQ2hlY2sgTGlzdGEgZGVnbGkgSW5wdXQgZGEgY29udHJvbGxhcmUgcGVyIGN1aSB1bmEgbW9kaWZpY2EgY2F1c2EgdW5hIHJpZ3JhZmljYXppb25lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja1Byb3BlcnRpZXNBbmRSZWdyYXBoaWNhdGVBc05lZWRlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLCBwcm9wc1RvQ2hlY2s6IHN0cmluZ1tdKSB7XHJcbiAgICBsZXQgdG9SZUdyYXBoaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNUb0NoZWNrLmxlbmd0aDsgaSsrKVxyXG4gICAgICB0b1JlR3JhcGhpY2F0ZSA9IHRvUmVHcmFwaGljYXRlIHx8IChjaGFuZ2VzW3Byb3BzVG9DaGVja1tpXV0gJiYgY2hhbmdlc1twcm9wc1RvQ2hlY2tbaV1dLmN1cnJlbnRWYWx1ZSlcclxuXHJcbiAgICBpZiAodG9SZUdyYXBoaWNhdGUpXHJcbiAgICAgIHRoaXMucmVsb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGNoZSBlZmZldHR1YSB1biBjYW1iaW8gZGkgcGFnaW5hIHBlciBpIGdyYWZpY2kgcGFnaW5hdGkuIFF1YWxvcmEgKipkYXRhKiogZm9zc2UgbnVsbG8gc2lnbmlmaWNhIGNoZSDDqCBpbml6aWF0byB1biBjYXJpY2FtZW50byBcclxuICAgKiBlIGFuY2hlIGxhdG8gYXBwbGljYXRpdm8gaWwgRGF0YVJldHJpZXZlIGRvdnLDoCBjb25zaWRlcmFyZSBjaGUgbCdhc3NlbnphIGRpIHZhbG9yaSBub24gw6ggYWx0cm8gY2hlIHVuJ2luZGljYXppb25lIGRpIGluaXppbyBjYXJpY2FtZW50b1xyXG4gICAqIFxyXG4gICAqIElsIGNhcmljYW1lbnRvIGRpIHF1YWxzaWFzaSBwYWdpbmEgZ2VuZXJlcsOgIGNvbXVucXVlIHVuYSBwcmltbyBldmVudG8gY29uICoqZGF0YSoqIG51bGxvIGluIG1vZG8gZGEgaW5kaWNhcmUgbCdpbml6aW8gY2FyaWNhbWVudG8gZVxyXG4gICAqIGluIHNlY29uZGEgaXN0YW56YSB1biBhbHRybyBldmVudG8gaW4gY3VpICoqZGF0YSoqIHNhcsOgIHNlbXByZSB2YWxvcml6emF0bywgbyBjb24gaWwgRHRvIGRhIHVzYXJlIHBlciByZWN1cGVyYXJlIGkgZGF0aSwgbyBjb24gaSBkYXRpXHJcbiAgICogdmVyaSBlIHByb3ByaSBnacOgIHByZXNlbnRpIG5lbCAqKkRhdGFBcnJheSoqXHJcbiAgICogXHJcbiAgICogSSBjYWxsYmFjayAqKm9uTG9hZFN0YXJ0KiogZSAqKm9uTG9hZEVuZCoqIHZlbmdvbm8gc2VtcHJlIGNoaWFtYXRpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHt7IGRhdGE6IExpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBhbnksIGluZGV4OiBudW1iZXIgfX0gbmQgSW5kaWNlIGRlbCBjYXJpY2FtZW50byBkYXRpLCBjb24gZXZlbnR1YWxtZW50ZSBnacOgIGkgZGF0aSBzZSBkaXNwb25pYmlsaVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjaGFuZ2VQYWdlKG5kOiB7IGRhdGE6IExpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBhbnksIGluZGV4OiBudW1iZXIgfSkge1xyXG4gICAgaWYgKCFuZC5kYXRhKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ0NoYXJ0ID0gdHJ1ZTtcclxuICAgICAgLy8gU2VydmUgcGVyIGluZm9ybWFyZSBsJ2FwcGxpY2F0aXZvIGluIGxpc3RlbmluZyBzdWxsJ2luZGljZSBhdHR1YWxtZW50ZSBpbiB2aXN1YWxpenphemlvbmUuIFxyXG4gICAgICAvLyBMYSBtYW5jYW56YSBkaSBkYXRpIGluZGljYSBjaGUgbm9uIGRldm9ubyBlc3NlcmUgZWZmZXR0dWF0ZSByaWNlcmNoZSBwZXIgb3JhXHJcbiAgICAgIGlmICh0aGlzLkRhdGFSZXRyaWV2ZSlcclxuICAgICAgICB0aGlzLkRhdGFSZXRyaWV2ZShudWxsLCBuZC5pbmRleClcclxuICAgICAgdGhpcy5vbkxvYWRTdGFydC5lbWl0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5EYXRhUmV0cmlldmUpXHJcbiAgICAgIHRoaXMuRGF0YVJldHJpZXZlKG5kLmRhdGEsIG5kLmluZGV4KS50aGVuKHQgPT4geyB0aGlzLmNoYW5nZVBhZ2VEYXRhUmVjZWl2ZWQodCk7IH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNoYW5nZVBhZ2VEYXRhUmVjZWl2ZWQobmQuZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbCB0ZXJtaW5lIGRlbCBjYXJpY2FtZW50byBkZWkgZGF0aSBkaSB1bmEgcGFnaW5hIHF1ZXN0byBtZXRvZG8gdmllbmUgY2hpYW1hdG8gcGVyIHJpZ3JhZmljYXJlIGxhIHNpdHVhemlvbmUgY29uIGkgbnVvdmkgZGF0aVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7TGluZUNoYXJ0RGF0YSB8IFBpZUNoYXJ0RGF0YSB8IFZlcnRpY2FsMkRDaGFydERhdGEgfCBWZXJ0aWNhbENoYXJ0RGF0YSB8IGFueX0gZGF0YSBEYXRpIGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGFuZ2VQYWdlRGF0YVJlY2VpdmVkKGRhdGE6IExpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZ0NoYXJ0ID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uTG9hZEVuZC5lbWl0KCk7XHJcbiAgICBsZXQgZmlyc3RCaW5kID0gIXRoaXMuRGF0YTtcclxuICAgIHRoaXMuRGF0YSA9IGRhdGE7XHJcblxyXG4gICAgaWYgKCFmaXJzdEJpbmQpXHJcbiAgICAgIHRoaXMucmVsb2FkQ2hhcnQoKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5kaXNwYXRjaExvYWRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmljYXJpY2EgaWwgZ3JhZmljbyBkaXN0cnVnZ2VuZG8gaWwgdmVjY2hpbyBlIHJpY3JlYW5kbyBpbCBudW92b1xyXG4gICAqIFxyXG4gICAqIExlIGNoaWFtYXRlIGEgcXVlc3RvIG1ldG9kbyBwb3Nzb25vIGVzc2VyZSB0cmFzZm9ybWF0ZSBpbiBjaGlhbWF0ZSBhbCBtZXRvZG8gKipncmFwaGljYXRlKiogZGVsbGEgU2VydmljZSwgc2Ugc29sbyBxdWVsIG1ldG9kbyBmb3NzZSBhYmJhc3RhbnphIGludGVsbGlnZW50ZSBwZXIgY2FwaXJlXHJcbiAgICogbGUgZGlmZmVyZW56ZSBmcmEgaWwgZ3JhZmljbyBjb20nZXJhIHByaW1hIGUgY29tZSBkZXZlIGRpdmVudGFyZSwgaW4gbW9kbyBkYSBub24gcmljcmVhcmxvIG1hIHNlbXBsaWNlbWVudGUgbW9kaWZpY2FyZSBxdWVsbG8gY2hlIGdpw6Agw6ggZGlzZWduYXRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRDaGFydCgpIHtcclxuICAgIHRoaXMuYnJvd3Nlck9ubHkoKCkgPT4geyBpZiAoIXRoaXMuQ2hhcnQuaXNEaXNwb3NlZCgpKSB0aGlzLkNoYXJ0LmRpc3Bvc2UoKTsgdGhpcy5EaXNwYXRjaGVyLmRlcmVnaXN0ZXJHcmFwaCh0aGlzLm5hbWUpIH0pO1xyXG4gICAgdGhpcy5EaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMubmFtZSwgKCkgPT4geyByZXR1cm4gdGhpcy5sb2FkQ2hhcnQoKTsgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBhZ2dpdW5nZXJlIHVuIGJsb2NjbyBkaSBkYXRpIGluIG1hbmllcmEgXCJsaXZlXCIgYWQgdW4gZ3JhZmljb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGREYXRhKGNoYXJ0RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLkNoYXJ0U2VydmljZS5yZWZyZXNoRGF0YShjaGFydERhdGEpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGNoZSBzaSBvY2N1cGEgZGkgY2FyaWNhcmUgaSB0ZW1pIG5lY2Vzc2FyaSBwZXIgaWwgZ3JhZmljbyBpbiBvZ2dldHRvLiBQcmltYSBhcHBsaWNhIGlsIHRlbWEsIHBvaSwgc2Ugc2VydmUsIGFwcGxpY2EgbGUgYW5pbWF6aW9uaVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBBbUNoYXJ0c1RoZW1lcygpIHtcclxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuQ2hhcnRlci5hcHBseVRoZW1lKGFtNGNvcmUsIHRoaXMuVGhlbWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFuaW1hdGlvbnMgPyB0aGlzLkNoYXJ0ZXIuYXBwbHlBbmltYXRpb25zKGFtNGNvcmUpIDogdGhpcy5DaGFydGVyLnVuYXBwbHlBbmltYXRpb25zKGFtNGNvcmUpO1xyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2cobG9nOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmxvZ3MpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQGVzZmFlbnphL2VzLWNoYXJ0czogXCIgKyBsb2cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGJyb3dzZXJPbmx5KGY6ICgpID0+IHZvaWQpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgZigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { EventEmitter, Component, Input, ChangeDetectionStrategy, Output, ContentChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
/**
|
|
5
|
+
* Componente che si occupa della paginazione dei grafici qualora servisse
|
|
6
|
+
*/
|
|
7
|
+
export class PageChartSelector {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Indica un cambio di pagina ed emette un oggetto con i dati attuali e l'indice attuale.
|
|
11
|
+
*
|
|
12
|
+
* Qualora la proprietà **data** fosse null indica un evento di "loading"
|
|
13
|
+
*/
|
|
14
|
+
this.onPageChange = new EventEmitter();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
ngOnChanges() {
|
|
20
|
+
if (!(this.Items || this.Dtos) || (this.Items || this.Dtos).length == 0)
|
|
21
|
+
throw new Error("Chart array cannot be empty!");
|
|
22
|
+
var idx = (this.StartIndex || 0);
|
|
23
|
+
this.currentindex = idx;
|
|
24
|
+
this.currentpage = idx + 1;
|
|
25
|
+
this.handlePageChange();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Gestisce un cambio pagina inviando al callback **onPageChange** i dati attuali (siano essi il Dto per il caricamento dati i
|
|
29
|
+
* o i dati già presenti) e l'indice di visualizzazione
|
|
30
|
+
*/
|
|
31
|
+
handlePageChange() {
|
|
32
|
+
this.finalIndex = this.currentpage - 1;
|
|
33
|
+
this.currentindex = this.currentpage - 1;
|
|
34
|
+
let data = this.Items && this.Items.length > 0 ? this.Items[this.finalIndex].data : this.Dtos[this.finalIndex];
|
|
35
|
+
this.onPageChange.emit({ data: data, index: this.finalIndex });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Visualizza il grafico successivo
|
|
39
|
+
*/
|
|
40
|
+
Next() {
|
|
41
|
+
// Per passare da page a index è sempre un -1
|
|
42
|
+
this.currentpage++;
|
|
43
|
+
this.onPageChange.emit({ data: null, index: this.currentpage - 1 });
|
|
44
|
+
// Delay pseudo-intelligente per click compulsivi.
|
|
45
|
+
// Se dopo questo delay sono andato avanti solo di 1 effettuo il callback altrimenti incremento l'indice
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
if (this.currentindex == this.currentpage - 2)
|
|
48
|
+
this.handlePageChange();
|
|
49
|
+
else
|
|
50
|
+
this.currentindex++;
|
|
51
|
+
}, this.BrowseDelayMs);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Visualizza il grafico precedente
|
|
55
|
+
*/
|
|
56
|
+
Previous() {
|
|
57
|
+
// Per passare da page a index è sempre un -1
|
|
58
|
+
this.currentpage--;
|
|
59
|
+
this.onPageChange.emit({ data: null, index: this.currentpage - 1 });
|
|
60
|
+
// Delay pseudo-intelligente per click compulsivi.
|
|
61
|
+
// Se dopo questo delay sono andato indietro solo di 1 effettuo il callback altrimenti decremento l'indice
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
if (this.currentindex == this.currentpage)
|
|
64
|
+
this.handlePageChange();
|
|
65
|
+
else
|
|
66
|
+
this.currentindex--;
|
|
67
|
+
}, this.BrowseDelayMs);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
PageChartSelector.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PageChartSelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
PageChartSelector.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: PageChartSelector, selector: "chart-pager", inputs: { Items: "Items", Dtos: "Dtos", BrowseDelayMs: "BrowseDelayMs", StartIndex: "StartIndex" }, outputs: { onPageChange: "onPageChange" }, queries: [{ propertyName: "headerInner_tr", first: true, predicate: ["header_inner"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>", styles: [".pcs-button{width:60px}.pcs-forward{float:right;text-align:end}.pcs-backward{float:left}.pcs-svg-header{width:57px;height:40px}.pcs-svg-button-container{outline:currentcolor none medium}.pcs-svg-arrow{pointer-events:none;fill:#555}.pcs-svg-arrow-right{transform:translate(44px,36px) rotate(180deg)}.pcs-svg-arrow-left{transform:translate(13px,4px)}.pcs-svg-button{fill:#d9d9d9;stroke:#fff;fill-opacity:1;stroke-opacity:1}.pcs-svg-button:hover{fill:#a3a3a3;cursor:pointer}.pcs-infos{width:calc(100% - 120px);height:44px;float:left}.pcs-no-selection{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PageChartSelector, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{ selector: "chart-pager", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>", styles: [".pcs-button{width:60px}.pcs-forward{float:right;text-align:end}.pcs-backward{float:left}.pcs-svg-header{width:57px;height:40px}.pcs-svg-button-container{outline:currentcolor none medium}.pcs-svg-arrow{pointer-events:none;fill:#555}.pcs-svg-arrow-right{transform:translate(44px,36px) rotate(180deg)}.pcs-svg-arrow-left{transform:translate(13px,4px)}.pcs-svg-button{fill:#d9d9d9;stroke:#fff;fill-opacity:1;stroke-opacity:1}.pcs-svg-button:hover{fill:#a3a3a3;cursor:pointer}.pcs-infos{width:calc(100% - 120px);height:44px;float:left}.pcs-no-selection{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}\n"] }]
|
|
75
|
+
}], propDecorators: { Items: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], Dtos: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], BrowseDelayMs: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], StartIndex: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], onPageChange: [{
|
|
84
|
+
type: Output
|
|
85
|
+
}], headerInner_tr: [{
|
|
86
|
+
type: ContentChild,
|
|
87
|
+
args: ['header_inner', { static: false }]
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtcGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC1wYWdlci9jaGFydC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LXBhZ2VyL2NoYXJ0LXBhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHOUc7O0dBRUc7QUFPSCxNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBOEJJOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUErQyxJQUFJLFlBQVksRUFBZ0MsQ0FBQztLQStFekg7SUEzREc7O09BRUc7SUFDSCxXQUFXO1FBQ1AsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFcEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5RyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLG1EQUFtRDtRQUNuRCx3R0FBd0c7UUFDeEcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOztnQkFFeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEUsbURBQW1EO1FBQ25ELDBHQUEwRztRQUMxRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7Z0JBRXhCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OzhHQTNHUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtVUNaOUIsaWlFQXlCTTsyRkRiTyxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQU90QyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFPSSxZQUFZO3NCQUFyQixNQUFNO2dCQUswQyxjQUFjO3NCQUE5RCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlZENoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGVsbGEgcGFnaW5hemlvbmUgZGVpIGdyYWZpY2kgcXVhbG9yYSBzZXJ2aXNzZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJjaGFydC1wYWdlclwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiY2hhcnQtcGFnZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogWydjaGFydC1wYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VDaGFydFNlbGVjdG9yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlaSBkYXRpIHByZWNhcmljYXRhIGluIG1lbW9yaWFcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgSXRlbXM6IFBhZ2VkQ2hhcnREYXRhPGFueT5bXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlaSBEdG8gZGEgdXRpbGl6emFyZSBwZXIgY2FyaWNhcmUgaSB2YWxvcmkgZGVpIHZhcmkgZ3JhZmljaVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBEdG9zOiBhbnlbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvcG8gYXZlciBuYXZpZ2F0byBhIHVuIG51b3ZvIGdyYWZpY28gdmVycmFubm8gYXR0ZXNpIHF1ZXN0aSBtaWxsaXNlY29uZGkgcHJpbWEgZGkgcmljaGllZGVyZSBpIGRhdGkgYXR0cmF2ZXJzbyBsYSAqKkRhdGFSZXRyaWV2ZSoqLlxyXG4gICAgICogXHJcbiAgICAgKiBRdWVzdG8gcGVyIGV2aXRhcmUgY2hlIGwndXRlbnRlIGNsaWNjYW5kbyB2ZWxvY2VtZW50ZSBcImF2YW50aVwiIGdlbmVyaSB0b25uZWxsYXRlIGRpIHJpY2hpZXN0ZSBpbnV0aWxpXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEJyb3dzZURlbGF5TXM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2UgZGVsbCdhcnJheSAqKkR0b3MqKiBvIGRlbGwnYXJyYXkgKipJdGVtcyoqIGRhIGN1aSBpbml6aWFyZSBhZCBlbWV0dGVyZSBpIHZhbG9yaSwgdXRpbGUgcGVyIHN1cHBvcnRhcmUgaWwgXCJiYWNrXCIgZGEgdW4gZXZlbnR1YWxlIHBhZ2luYSBkaSBkZXR0YWdsaW9cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgU3RhcnRJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHVuIGNhbWJpbyBkaSBwYWdpbmEgZWQgZW1ldHRlIHVuIG9nZ2V0dG8gY29uIGkgZGF0aSBhdHR1YWxpIGUgbCdpbmRpY2UgYXR0dWFsZS5cclxuICAgICAqIFxyXG4gICAgICogUXVhbG9yYSBsYSBwcm9wcmlldMOgICoqZGF0YSoqIGZvc3NlIG51bGwgaW5kaWNhIHVuIGV2ZW50byBkaSBcImxvYWRpbmdcIlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIGluZGV4OiBudW1iZXIgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkZSBkZWwgdGl0b2xvIGRpIGRlZmF1bHRcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyX2lubmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhlYWRlcklubmVyX3RyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VycmVudHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRpbmRleDogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluYWxJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgICBpZiAoISh0aGlzLkl0ZW1zIHx8IHRoaXMuRHRvcykgfHwgKHRoaXMuSXRlbXMgfHwgdGhpcy5EdG9zKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhcnQgYXJyYXkgY2Fubm90IGJlIGVtcHR5IVwiKTtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9ICh0aGlzLlN0YXJ0SW5kZXggfHwgMCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50aW5kZXggPSBpZHg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IGlkeCArIDE7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aXNjZSB1biBjYW1iaW8gcGFnaW5hIGludmlhbmRvIGFsIGNhbGxiYWNrICoqb25QYWdlQ2hhbmdlKiogaSBkYXRpIGF0dHVhbGkgKHNpYW5vIGVzc2kgaWwgRHRvIHBlciBpbCBjYXJpY2FtZW50byBkYXRpIGkgXHJcbiAgICAgKiBvIGkgZGF0aSBnacOgIHByZXNlbnRpKSBlIGwnaW5kaWNlIGRpIHZpc3VhbGl6emF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5maW5hbEluZGV4ID0gdGhpcy5jdXJyZW50cGFnZSAtIDE7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50aW5kZXggPSB0aGlzLmN1cnJlbnRwYWdlIC0gMTtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuSXRlbXMgJiYgdGhpcy5JdGVtcy5sZW5ndGggPiAwID8gdGhpcy5JdGVtc1t0aGlzLmZpbmFsSW5kZXhdLmRhdGEgOiB0aGlzLkR0b3NbdGhpcy5maW5hbEluZGV4XVxyXG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoeyBkYXRhOiBkYXRhLCBpbmRleDogdGhpcy5maW5hbEluZGV4IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmlzdWFsaXp6YSBpbCBncmFmaWNvIHN1Y2Nlc3Npdm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIE5leHQoKSB7XHJcbiAgICAgICAgLy8gUGVyIHBhc3NhcmUgZGEgcGFnZSBhIGluZGV4IMOoIHNlbXByZSB1biAtMVxyXG4gICAgICAgIHRoaXMuY3VycmVudHBhZ2UrKztcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHsgZGF0YTogbnVsbCwgaW5kZXg6IHRoaXMuY3VycmVudHBhZ2UgLSAxIH0pO1xyXG5cclxuICAgICAgICAvLyBEZWxheSBwc2V1ZG8taW50ZWxsaWdlbnRlIHBlciBjbGljayBjb21wdWxzaXZpLiBcclxuICAgICAgICAvLyBTZSBkb3BvIHF1ZXN0byBkZWxheSBzb25vIGFuZGF0byBhdmFudGkgc29sbyBkaSAxIGVmZmV0dHVvIGlsIGNhbGxiYWNrIGFsdHJpbWVudGkgaW5jcmVtZW50byBsJ2luZGljZVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50aW5kZXggPT0gdGhpcy5jdXJyZW50cGFnZSAtIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2UoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50aW5kZXgrKztcclxuICAgICAgICB9LCB0aGlzLkJyb3dzZURlbGF5TXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmlzdWFsaXp6YSBpbCBncmFmaWNvIHByZWNlZGVudGVcclxuICAgICAqL1xyXG4gICAgUHJldmlvdXMoKSB7XHJcbiAgICAgICAgLy8gUGVyIHBhc3NhcmUgZGEgcGFnZSBhIGluZGV4IMOoIHNlbXByZSB1biAtMVxyXG4gICAgICAgIHRoaXMuY3VycmVudHBhZ2UtLTtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHsgZGF0YTogbnVsbCwgaW5kZXg6IHRoaXMuY3VycmVudHBhZ2UgLSAxIH0pO1xyXG5cclxuICAgICAgICAvLyBEZWxheSBwc2V1ZG8taW50ZWxsaWdlbnRlIHBlciBjbGljayBjb21wdWxzaXZpLiBcclxuICAgICAgICAvLyBTZSBkb3BvIHF1ZXN0byBkZWxheSBzb25vIGFuZGF0byBpbmRpZXRybyBzb2xvIGRpIDEgZWZmZXR0dW8gaWwgY2FsbGJhY2sgYWx0cmltZW50aSBkZWNyZW1lbnRvIGwnaW5kaWNlXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRpbmRleCA9PSB0aGlzLmN1cnJlbnRwYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGluZGV4LS07XHJcbiAgICAgICAgfSwgdGhpcy5Ccm93c2VEZWxheU1zKTtcclxuICAgIH1cclxufSIsIjxkaXYgKm5nSWY9XCIoSXRlbXMgfHwgRHRvcykgJiYgKEl0ZW1zIHx8IER0b3MpLmxlbmd0aCA+IDBcIiBjbGFzcz1cInBjcy1uby1zZWxlY3Rpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtYnV0dG9uIHBjcy1iYWNrd2FyZFwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJwY3Mtc3ZnLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYnV0dG9uLWNvbnRhaW5lclwiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwiY3VycmVudHBhZ2UgIT0gMSAmJiBQcmV2aW91cygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLVB1bHNhbnRlIGUgZnJlY2NldHRpbmEgYWxsJ2ludGVybm8tLT5cclxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwicGNzLXN2Zy1idXR0b25cIiAgW3N0eWxlLmN1cnNvcl09XCJjdXJyZW50cGFnZSA9PSAxID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJ1wiPjxwYXRoIGQ9XCJNMywwIEw1My4wMjcsMCBhMywzIDAgMCAxIDMsMyBMNTYuMDI3LDM2LjgxNyBhMywzIDAgMCAxIC0zLDMgTDMsMzkuODE3IGEzLDMgMCAwIDEgLTMsLTMgTDAsMyBhMywzIDAgMCAxIDMsLTMgWlwiPjwvcGF0aD48L2c+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYXJyb3cgcGNzLXN2Zy1hcnJvdy1sZWZ0XCI+PHBhdGggZD1cIk0yNiwxNEgxMGw1LjE3LTYuNzlBMiwyLDAsMCwwLDEyLDQuNzlsLTcuNjIsMTBhMiwyLDAsMCwwLDAsMi40Mmw3LjYyLDEwYTIsMiwwLDAsMCwzLjE4LTIuNDJMMTAsMThIMjZhMiwyLDAsMCwwLDAtNFpcIj48L3BhdGg+PC9nPlxyXG4gICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtaW5mb3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVySW5uZXJfdHJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlcklubmVyX3RyOyBjb250ZXh0IDogeyRpbXBsaWNpdDogKEl0ZW1zIHx8IER0b3MpW2N1cnJlbnRwYWdlIC0gMV19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtYnV0dG9uIHBjcy1mb3J3YXJkXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cInBjcy1zdmctaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxnIGNsYXNzPVwicGNzLXN2Zy1idXR0b24tY29udGFpbmVyXCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCIoSXRlbXMgfHwgRHRvcykubGVuZ3RoICE9IGN1cnJlbnRwYWdlICYmIE5leHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1QdWxzYW50ZSBlIGZyZWNjZXR0aW5hIGFsbCdpbnRlcm5vLS0+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYnV0dG9uXCIgW3N0eWxlLmN1cnNvcl09XCIoSXRlbXMgfHwgRHRvcykubGVuZ3RoID09IGN1cnJlbnRwYWdlID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJ1wiPjxwYXRoIGQ9XCJNMywwIEw1My4wMjcsMCBhMywzIDAgMCAxIDMsMyBMNTYuMDI3LDM2LjgxNyBhMywzIDAgMCAxIC0zLDMgTDMsMzkuODE3IGEzLDMgMCAwIDEgLTMsLTMgTDAsMyBhMywzIDAgMCAxIDMsLTMgWlwiPjwvcGF0aD48L2c+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYXJyb3cgcGNzLXN2Zy1hcnJvdy1yaWdodFwiPjxwYXRoIGQ9XCJNMjYsMTRIMTBsNS4xNy02Ljc5QTIsMiwwLDAsMCwxMiw0Ljc5bC03LjYyLDEwYTIsMiwwLDAsMCwwLDIuNDJsNy42MiwxMGEyLDIsMCwwLDAsMy4xOC0yLjQyTDEwLDE4SDI2YTIsMiwwLDAsMCwwLTRaXCI+PC9wYXRoPjwvZz5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY2xlYXI6IGJvdGg7XCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
File without changes
|