brainloper-ui 1.0.19 → 1.0.21
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/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +2 -2
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +20 -6
- package/fesm2015/brainloper-ui.mjs +22 -6
- package/fesm2015/brainloper-ui.mjs.map +1 -1
- package/fesm2020/brainloper-ui.mjs +20 -6
- package/fesm2020/brainloper-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +3 -2
package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs
CHANGED
|
@@ -122,7 +122,7 @@ export class DataTableComponent {
|
|
|
122
122
|
console.log(error);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
else {
|
|
125
|
+
else if (!this.url) {
|
|
126
126
|
this.paginatorActive = false;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -425,4 +425,4 @@ var enumRules;
|
|
|
425
425
|
enumRules[enumRules["=="] = 2] = "==";
|
|
426
426
|
enumRules[enumRules["!="] = 3] = "!=";
|
|
427
427
|
})(enumRules || (enumRules = {}));
|
|
428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBRTVCLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxNQUFNLFFBQVEsT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFPRixNQUFNLE9BQU8sa0JBQWtCO0lBK0Q3QixZQUNTLE1BQWlCLEVBQ2hCLElBQWlCLEVBQ2pCLE9BQXVCLEVBQ3ZCLFlBQThCLEVBQzlCLGtCQUFvQyxFQUNwQyxhQUFpQztRQUxsQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBbEVsQyxTQUFJLEdBQVEsRUFBRSxDQUFDO1FBRWYsa0JBQWEsR0FBRztZQUN2QixHQUFHLEVBQUUsS0FBSztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUMsS0FBSztZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBQyxLQUFLO1lBQ2hCLFNBQVMsRUFBQyxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsa0JBQWtCLEVBQUUsS0FBSztTQUMxQixDQUFDO1FBS08saUJBQVksR0FBVyxFQUFFLENBQUE7UUFDekIsbUJBQWMsR0FBVyxFQUFFLENBQUE7UUFDM0IsbUJBQWMsR0FBYyxFQUFFLENBQUE7UUFFN0IsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsUUFBRyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDL0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3hDLGtCQUFhLEdBQWUsRUFBRSxDQUFBO1FBRXZDLFVBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsZ0JBQVcsR0FBYyxFQUFFLENBQUE7UUFHM0IsaUJBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7UUFDMUQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBWSxJQUFJLENBQUE7UUFJdEIsb0JBQWUsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVqRCxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRVQsVUFBSyxHQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBVW5DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDO1FBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7WUFDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JIO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckg7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV0SCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRTtZQUNqRCxJQUFJO2dCQUNGLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFFVDtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7U0FDOUI7SUFHSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDN0U7YUFBSTtZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMxRDtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7YUFDNUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsUUFBUSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7SUFDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLGFBQWE7UUFDakIsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEQsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3RELElBQUksT0FBTyxDQUFDLEtBQUssRUFBQztvQkFDaEIsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUNqQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFHO2dDQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBOzZCQUNwRDt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTTtvQkFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLGNBQWM7b0JBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDO2dCQUMvSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksVUFBVTtvQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEgsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVM7b0JBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDbkc7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNsQyxDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU87UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNO1FBQ1gsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtvQkFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTTt5QkFDUixJQUFJLENBQUMsbUJBQW1CLEVBQUU7d0JBQ3pCLElBQUksRUFBRTs0QkFDSixNQUFNOzRCQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzt5QkFDdEI7d0JBQ0QsS0FBSyxFQUFFLE1BQU07cUJBQ2QsQ0FBQzt5QkFDRCxXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksTUFBTSxFQUFFOzRCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUN2QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDTjtnQkFFRCxNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbkM7cUJBQU07b0JBQ0wsSUFBSSxPQUFZLENBQUM7b0JBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUV2QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDaEQsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtnQ0FDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzZCQUNsRDt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTTt5QkFDUixJQUFJLENBQUMsbUJBQW1CLEVBQUU7d0JBQ3pCLElBQUksRUFBRTs0QkFDSixNQUFNOzRCQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3lCQUM3Qjt3QkFDRCxLQUFLLEVBQUUsTUFBTTtxQkFDZCxDQUFDO3lCQUNELFdBQVcsRUFBRTt5QkFDYixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxNQUFNLEVBQUU7NEJBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDNUQ7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBRUQsTUFBTTtZQUVSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFFUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUNSLEtBQUssZUFBZTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO2dCQUNwQixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNmLElBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ3pCLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFBO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNsSixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3BFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0wsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN4QjtRQUVELElBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0M7WUFDQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNO1FBQ1osS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU07UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM5QixJQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUSxFQUFFO29CQUMxQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBVztRQUNuQyxJQUFHLE1BQU07WUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQTtRQUNwQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLEdBQUcsR0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1lBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUU1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1QyxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7eUJBQ25CLFFBQVEsRUFBRTt5QkFDVixXQUFXLEVBQUU7eUJBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsT0FBTyxJQUFJLENBQUM7cUJBQ2I7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBRUgsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsRUFBRTtnQkFDNUIsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU0sRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQzs7K0dBbFlVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDRpQkF5Q2xCLFlBQVksbUZDcEZ6QixrMklBNkVBOzJGRGxDYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTtxUEFLYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFpQkcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0UsYUFBYTtzQkFBckIsS0FBSztnQkFJcUMsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztBQTZWM0MsSUFBSyxTQUtKO0FBTEQsV0FBSyxTQUFTO0lBQ1osbUNBQUcsQ0FBQTtJQUNILG1DQUFHLENBQUE7SUFDSCxxQ0FBSSxDQUFBO0lBQ0oscUNBQUksQ0FBQTtBQUNOLENBQUMsRUFMSSxTQUFTLEtBQVQsU0FBUyxRQUtiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NyZWVuU2l6ZVV0aWwgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLXV0aWwnO1xyXG5pbXBvcnQgeyBFeHBvcnREYXRhU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVGFibGVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JJbnRsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5jb25zdCBzcGFuaXNoUmFuZ2VMYWJlbCA9IChwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSA9PiB7XHJcbiAgaWYgKGxlbmd0aCA9PSAwIHx8IHBhZ2VTaXplID09IDApIHtcclxuICAgIHJldHVybiBgMCBkZSAke2xlbmd0aH1gO1xyXG4gIH1cclxuXHJcbiAgbGVuZ3RoID0gTWF0aC5tYXgobGVuZ3RoLCAwKTtcclxuXHJcbiAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2UgKiBwYWdlU2l6ZTtcclxuXHJcbiAgY29uc3QgZW5kSW5kZXggPVxyXG4gICAgc3RhcnRJbmRleCA8IGxlbmd0aFxyXG4gICAgICA/IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgbGVuZ3RoKVxyXG4gICAgICA6IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcclxuXHJcbiAgcmV0dXJuIGAke3N0YXJ0SW5kZXggKyAxfSAtICR7ZW5kSW5kZXh9IGRlICR7bGVuZ3RofWA7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RhdGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdGl0bGU7XHJcbiAgQElucHV0KCkgY29sdW1ucztcclxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBjb21ibztcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uID0ge1xyXG4gICAgYWRkOiBmYWxzZSxcclxuICAgIGVkaXQ6IGZhbHNlLFxyXG4gICAgZGVsZXRlOiBmYWxzZSxcclxuICAgIGFjdGl2ZTpmYWxzZSxcclxuICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgcHJpbnQ6IGZhbHNlLFxyXG4gICAgYWRkUGVyOiBmYWxzZSxcclxuICAgIGVkaXRQZXI6IGZhbHNlLFxyXG4gICAgcHJpbWFyeUtleTogJ2lkJyxcclxuICAgIGV4cG9ydFhzbHg6ZmFsc2UsXHJcbiAgICBoaWRlVGl0bGU6dHJ1ZSxcclxuICAgIGhpZGVGaWx0ZXI6IHRydWUsXHJcbiAgICBub3RJbml0aWFsaXplOiBmYWxzZSxcclxuICAgIGJsb2NrRXZlbnRjbGlja1JvdzogZmFsc2VcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSByZWxvYWRUYWJsZTogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFyYW1zOiBBcnJheTxhbnk+IDtcclxuICBASW5wdXQoKSB0aXRsZUxvYWRpbmc6IHN0cmluZyA9IFwiXCJcclxuICBASW5wdXQoKSBtZXNzYWdlTG9hZGluZzogc3RyaW5nID0gXCJcIlxyXG4gIEBJbnB1dCgpIGhlYWRlckZpbGVYbHNtOkFycmF5PGFueT4gPSBbXVxyXG5cclxuICBAT3V0cHV0KCkgY2xpY2tSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYWRkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHByaW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBpbnRlcm5hbERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSBoZWFkZXJGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW11cclxuXHJcbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xyXG4gIGZpbHRlcnNQb3N0OkFycmF5PGFueT4gPSBbXVxyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgc2VsZWN0ZWRSb3dzID0gW107IC8qKiBhbG1hY2VuYSBsYXMgZmlsYXMgc2VsZWNjaW9uYWRhcyAqL1xyXG4gIGNoZWNrYm94cyA9IHt9O1xyXG4gIHNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gIGluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xyXG4gIGZpbHRlcnM7XHJcbiAgb3JpZ2luYWxEYXRhID0gW107XHJcbiAgcGFnaW5hdG9yQWN0aXZlID0gdHJ1ZTtcclxuICBzY3JlZW46IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gIGlkX2NvbXBhbmlhO1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyNSwgNTAsIDEwMF07XHJcblxyXG4gIHBhZ2VTaXplID0gc2NyZWVuLndpZHRoID4gNTAwPzEwOjU7XHJcbiAgbGVuZ3RoID0gMDtcclxuXHJcbiAgcGFnZSA9IDA7XHJcblxyXG4gIGFib3ZlOiBUb29sdGlwUG9zaXRpb25bXSA9IFsnYWJvdmUnXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0b3JUcmFuc2xhdGU6IE1hdFBhZ2luYXRvckludGwsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2UgOiBFeHBvcnREYXRhU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuaXRlbXNQZXJQYWdlTGFiZWwgPSAnRWxlbWVudG9zIHBvciBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLm5leHRQYWdlTGFiZWwgPSAnU2lndWllbnRlIHDDoWdpbmEnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUubGFzdFBhZ2VMYWJlbCA9ICfDmmx0aW1hIHDDoWdpbmEnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUucHJldmlvdXNQYWdlTGFiZWwgPSAnUMOhZ2luYSBhbnRlcmlvcic7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5maXJzdFBhZ2VMYWJlbCA9ICdQcmltZXJhIHDDoWdpbmEnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuZ2V0UmFuZ2VMYWJlbCA9IHNwYW5pc2hSYW5nZUxhYmVsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAod2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDApIHtcclxuICAgICAgdGhpcy5zY3JlZW4gPSB0cnVlXHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHsgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDAgPyB0aGlzLnNjcmVlbiA9IHRydWUgOiB0aGlzLnNjcmVlbiA9IGZhbHNlOyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHsgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDAgPyB0aGlzLnNjcmVlbiA9IHRydWUgOiB0aGlzLnNjcmVlbiA9IGZhbHNlOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZWxvYWRUYWJsZSkge1xyXG4gICAgICB0aGlzLnJlbG9hZFRhYmxlLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZXRlY0FsbEV2ZW50KCcnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUxvYWRpbmcgPT0gXCJcIiA/IHRoaXMudGl0bGVMb2FkaW5nID0gXCJDYXJnYW5kb1wiIDogJyc7XHJcbiAgICB0aGlzLm1lc3NhZ2VMb2FkaW5nID09IFwiXCIgPyB0aGlzLm1lc3NhZ2VMb2FkaW5nID0gXCJPYnRlbmllbmRvIGRhdG9zLi4uXCIgOiAnJztcclxuICAgIHRoaXMudXJsICYmICF0aGlzLmNvbmZpZ3VyYXRpb24ubm90SW5pdGlhbGl6ZSA/IHRoaXMubWVzc2FnZS5vcGVuTG9hZGluZyh0aGlzLnRpdGxlTG9hZGluZywgdGhpcy5tZXNzYWdlTG9hZGluZykgOiAnJztcclxuXHJcbiAgICBpZiAodGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKClcclxuICAgICAgICB0aGlzLmRhdGEgPSBzZXJ2aWNlWydkYXRhJ107XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBzZXJ2aWNlWydjb3VudCddO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHNlcnZpY2UpXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXREYXRlVGFibGVCeVVybCgpe1xyXG4gICAgdGhpcy52YWxpZGFyUGFyYW1zKCk7XHJcbiAgICBpZih0aGlzLmZpbHRlcnNQb3N0Lmxlbmd0aCA+IDApe1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keSh0aGlzLnVybCwgdGhpcy5maWx0ZXJzUG9zdCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cC5nZXREYXRhQm9keSh0aGlzLnVybCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGFyUGFyYW1zKCkge1xyXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZ1bmN0aW9uRXRlci5yZW1vdmVEdXBsaWNhdGVPYmplY3RzKHRoaXMucGFyYW1zKVxyXG4gICAgaWYgKHRoaXMucGFyYW1zKSB7XHJcbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCh4ID0+IHguaWQgPT0gJ3BhZ2UnKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goe2lkOiAncGFnZScsIHZhbHVlOiAnMCd9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoeCA9PiB4LmlkID09ICdwZXJfcGFnZScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7aWQ6ICdwZXJfcGFnZScsIHZhbHVlOiB0aGlzLnBhZ2VTaXplfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoeCA9PiB4LmlkID09ICdmaWx0ZXInKSkge1xyXG4gICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHtpZDogJ2ZpbHRlcicsdmFsdWU6ICcnfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gYXN5bmMgdmFsaWRhdGVSdWxlcygpe1xyXG4gICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1ucyBdIG9mIHRoaXMuY29sdW1ucy5lbnRyaWVzKCkpIHtcclxuICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgIGlmIChjb2x1bW5zLnJ1bGVzKXtcclxuICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSAgPT0gZW51bVJ1bGVzWyc9PSddKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRbY29sdW1ucy5JRF0gJiYgZWxlbWVudFtjb2x1bW5zLklEXS50b1N0cmluZygpID09IHJ1bGUudmFsdWVSdWxlLnRvU3RyaW5nKCkgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHJ1bGUudmFsdWVBY3Rpb25cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBlbGVtZW50W2NvbHVtbnMuSURdO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2ZlY2hhJyB8fCBjb2x1bW5zLnR5cGUgPT0gJ2RhdGUnKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlSXNvKGNvbHVtblZhbHVlKTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdkYXRlV2l0aFRpbWUnKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlV2l0aFRpbWUoY29sdW1uVmFsdWU/LnRvU3RyaW5nKCkgPz8gY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2N1cnJlbmN5JykgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nKS5mb3JtYXQoY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2Jvb2xlYW4nKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBjb2x1bW5WYWx1ZSA9PSAxID8gXCJTaVwiIDogXCJOb1wiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlcy5kYXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tPblJvVyhyb3dEYXRhKSB7XHJcbiAgICB0aGlzLmNsaWNrUm93LmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb24oYWN0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYWRkUGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZC5lbWl0KHRoaXMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dcclxuICAgICAgICAgICAgLm9wZW4oVGFibGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkLmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkaXRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbnM6IGFueTtcclxuICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRSb3dzWzBdKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLklEID09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpbmRleF0udmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1swXVtrZXldO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnNlbGVjdGVkUm93c1swXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgbmV3OiByZXN1bHQsIG9sZDogdGhpcy5zZWxlY3RlZFJvd3NbMF0gfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICB0aGlzLnByaW50LmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhY3RpdmUnOlxyXG4gICAgICAgIHRoaXMuYWN0aXZlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpe1xyXG4gICAgbGV0IHBhcmFtcyA9IFtdXHJcbiAgICBpZih0aGlzLnVybCAmJiB0aGlzLnBhcmFtcyl7XHJcbiAgICAgIHBhcmFtcyA9IFsuLi50aGlzLnBhcmFtc11cclxuICAgICAgbGV0IGkgPSBwYXJhbXMuZmluZEluZGV4KHggPT4geC5pZCA9PSAncGVyX3BhZ2UnKVxyXG4gICAgICBwYXJhbXNbaV0udmFsdWUgPSAxMDAwMDAwXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUb1hsc3g8YW55Pih0aGlzLnRpdGxlLCB0aGlzLmhlYWRlckZpbGVYbHNtLCB0aGlzLnRpdGxlLCB0aGlzLnVybD9udWxsOnRoaXMuZGF0YSwgdGhpcy51cmwsIHBhcmFtcywgdGhpcy5maWx0ZXJzUG9zdClcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbihyb3csICRldmVudCkge1xyXG4gICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSAkZXZlbnQuY2hlY2tlZDtcclxuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tlZCgkZXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZXRlY0FsbEV2ZW50KCRldmVudCkge1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGVja2JveHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKClcclxuICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSlcclxuICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcclxuICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnBhcmFtcylcclxuICAgICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkID09ICdmaWx0ZXInKSB7XHJcbiAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5maWx0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFwcGx5RmlsdGVycygkZXZlbnQ/OmFueSl7XHJcbiAgICBpZigkZXZlbnQpIHRoaXMuZmlsdGVyc1Bvc3QgPSAkZXZlbnRcclxuICAgIGlmICh0aGlzLnVybCkge1xyXG4gICAgICBsZXQgcmVzOmFueSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgICB0aGlzLmRhdGEgPSByZXNbJ2RhdGEnXTtcclxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gcmVzWydjb3VudCddO1xyXG4gICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHJlcylcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhW2tleV1cclxuICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuZmlsdGVycy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKCRldmVudCkge1xyXG4gICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3Blcl9wYWdlJykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3BhZ2UnKSB7XHJcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9ICRldmVudC5wYWdlSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmVudW0gZW51bVJ1bGVzIHtcclxuICBcIj5cIixcclxuICBcIjxcIixcclxuICBcIj09XCIsXHJcbiAgXCIhPVwiXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XHJcbiAgPGFwcC1maWx0ZXJzIFtoZWFkZXJGaWx0ZXJzXT1cImhlYWRlckZpbHRlcnNcIiAoYXBwbHlGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcbiAgPC9hcHAtZmlsdGVycz5cclxuXHJcbiAgPGRpdiBzdHlsZT0nZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyAgYWxpZ24taXRlbXM6IGNlbnRlcjsnPlxyXG4gICAgPGRpdiBzdHlsZT0nZmxleDoxOyBmb250LXNpemU6IDFyZW07Jz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjAgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aDwyJz4ge3tzZWxlY3RlZFJvd3MubGVuZ3RofX0gU2VsZWNjaW9uYWRvIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjEnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG9zIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPDEgJiYgIWNvbmZpZ3VyYXRpb24uaGlkZVRpdGxlJz4ge3t0aXRsZX19IDwvcD48L3N0cm9uZz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhY29uZmlndXJhdGlvbi5oaWRlRmlsdGVyXCIgc3R5bGU9J2ZsZXg6MzsgcGFkZGluZy1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogNXB4Oyc+XHJcbiAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J2ZpbHRlcic+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09J2ZpbHRlcnMnIChrZXl1cCk9J2NoYW5nZUZpbHRlcnMoKScgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRmlsdHJhclwiPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBzdHlsZT0nZmxleDowLjU7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsnPlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJlZGl0XCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MScgbWF0VG9vbHRpcD1cIkVkaXRhclwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTsgbWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmVkaXQnPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IChjbGljayk9J2FjdGlvbihcInByaW50XCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MSAmJiBzY3JlZW4nIG1hdFRvb2x0aXA9XCJJbXByaW1pclwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wcmludCBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7IG1hcmdpbi1yaWdodDogMTVweDtcIiAqbmdJZj0nY29uZmlndXJhdGlvbi5wcmludCc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiZGVsZXRlXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4wJyBtYXRUb29sdGlwPVwiRWxpbWluYXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggYnRuLWFjY2lvblwiIHN0eWxlPVwiZm9udC1zaXplOiAxNzAlOyBtYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uZGVsZXRlJz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJhY3RpdmVcIiknICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjAnIG1hdFRvb2x0aXA9XCJBY3RpdmFyL0Rlc2FjdGl2YXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYWRqdXN0IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTsgbWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmFjdGl2ZSc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiYWRkXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MCcgbWF0VG9vbHRpcD1cIk51ZXZvXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uYWRkJz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJleHBvcnRUb0V4Y2VsXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSAwICYmIGRhdGEubGVuZ3RoID4gMCcgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIGV4Y2VsXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uZXhwb3J0WHNseCc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxyXG4gICAgICAgPHRyID5cclxuICAgICAgICA8dGggKm5nSWY9J2NvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSB8fCBjb25maWd1cmF0aW9uLmRlbGV0ZSB8fCBjb25maWd1cmF0aW9uLmVkaXQnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj0ncHJpbWFyeScgKGNoYW5nZSk9J3NlbGV0ZWNBbGxFdmVudCgkZXZlbnQpJyBbKG5nTW9kZWwpXT0nc2VsZWN0QWxsJyBbaW5kZXRlcm1pbmF0ZV09J2luZGV0ZXJtaW5hdGVTdGF0ZSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cclxuICAgICAgIDx0aFxyXG4gICAgICAgW2NsYXNzXT1cImNvbHVtbi5zdHlsZT8ubW92aWxcIlxyXG4gICAgICAgKm5nRm9yPSdsZXQgY29sdW1uIG9mIGNvbHVtbnMnIHNjb3BlPVwiY29sXCJcclxuICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXHJcbiAgICAgICA+e3tjb2x1bW4ubGFiZWx9fTwvdGg+XHJcbiAgICAgICA8L3RyPlxyXG4gICAgIDwvdGhlYWQ+XHJcbiAgICAgPHRib2R5IGNsYXNzPSdtYXQtZWxldmF0aW9uLXozJz5cclxuXHJcbiAgICAgICA8dHIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgKm5nRm9yPSdsZXQgcm93IG9mIGRhdGEnIChjbGljayk9J2NsaWNrT25Sb1cocm93KScgPlxyXG4gICAgICAgIDx0aCAqbmdJZj0nY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlIHx8IGNvbmZpZ3VyYXRpb24uZGVsZXRlIHx8IGNvbmZpZ3VyYXRpb24uZWRpdCcgc3R5bGU9J2p1c3RpZnktY29udGVudDogY2VudGVyOyc+IDxtYXQtY2hlY2tib3ggY29sb3I9J3ByaW1hcnknIFsobmdNb2RlbCldPSdjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dJyAoY2xpY2spPSdjbGlja2VkKCRldmVudCknIChjaGFuZ2UpPSdzZWxlY3Rpb24ocm93LCAkZXZlbnQpJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxyXG4gICAgICAgIDx0aCBbY2xhc3NdPSdjb2x1bW4uc3R5bGU/Lm1vdmlsJyBbbmdTdHlsZV09J2NvbHVtbi5zdHlsZScgc2NvcGU9XCJyb3dcIiAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucyc+e3sgcm93W2NvbHVtbi5JRF0gfX08L3RoPlxyXG4gICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgIDwvdGJvZHk+XHJcblxyXG4gICA8L3RhYmxlPlxyXG5cclxuICAgPGRpdiAqbmdJZj0nbGVuZ3RoID09IDAgJiYgZGF0YS5sZW5ndGggPT0gMCcgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj4gPHN0cm9uZz5ObyBzZSBlbmNvbnRyw7MgaW5mb3JtYWNpw7NuPC9zdHJvbmc+PC9kaXY+XHJcblxyXG4gICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiXHJcbiAgIFtsZW5ndGhdPVwibGVuZ3RoXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9uc1xyXG4gICAocGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XHJcblxyXG48L2Rpdj5cclxuIl19
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBRTVCLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxNQUFNLFFBQVEsT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFPRixNQUFNLE9BQU8sa0JBQWtCO0lBK0Q3QixZQUNTLE1BQWlCLEVBQ2hCLElBQWlCLEVBQ2pCLE9BQXVCLEVBQ3ZCLFlBQThCLEVBQzlCLGtCQUFvQyxFQUNwQyxhQUFpQztRQUxsQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBbEVsQyxTQUFJLEdBQVEsRUFBRSxDQUFDO1FBRWYsa0JBQWEsR0FBRztZQUN2QixHQUFHLEVBQUUsS0FBSztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUMsS0FBSztZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBQyxLQUFLO1lBQ2hCLFNBQVMsRUFBQyxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsa0JBQWtCLEVBQUUsS0FBSztTQUMxQixDQUFDO1FBS08saUJBQVksR0FBVyxFQUFFLENBQUE7UUFDekIsbUJBQWMsR0FBVyxFQUFFLENBQUE7UUFDM0IsbUJBQWMsR0FBYyxFQUFFLENBQUE7UUFFN0IsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsUUFBRyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDL0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3hDLGtCQUFhLEdBQWUsRUFBRSxDQUFBO1FBRXZDLFVBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsZ0JBQVcsR0FBYyxFQUFFLENBQUE7UUFHM0IsaUJBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7UUFDMUQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBWSxJQUFJLENBQUE7UUFJdEIsb0JBQWUsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVqRCxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRVQsVUFBSyxHQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBVW5DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDO1FBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7WUFDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JIO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckg7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV0SCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRTtZQUNqRCxJQUFJO2dCQUNGLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFFVDtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEI7U0FDRjthQUFNLElBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzlCO0lBR0gsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQzdFO2FBQUk7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDMUQ7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQzthQUN4RDtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQzthQUM3QztTQUNGO0lBQ0gsQ0FBQztJQUVGLEtBQUssQ0FBQyxhQUFhO1FBQ2pCLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUM7b0JBQ2hCLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRztnQ0FDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTs2QkFDcEQ7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU07b0JBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2xJLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjO29CQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQztnQkFDL0ksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVU7b0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2xILElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTO29CQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ25HO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtZQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO3dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFPO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTTtRQUNYLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxLQUFLO2dCQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDNUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE1BQU07eUJBQ1IsSUFBSSxDQUFDLG1CQUFtQixFQUFFO3dCQUN6QixJQUFJLEVBQUU7NEJBQ0osTUFBTTs0QkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87eUJBQ3RCO3dCQUNELEtBQUssRUFBRSxNQUFNO3FCQUNkLENBQUM7eUJBQ0QsV0FBVyxFQUFFO3lCQUNiLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNwQixJQUFJLE1BQU0sRUFBRTs0QkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDdkI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBRUQsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO29CQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ25DO3FCQUFNO29CQUNMLElBQUksT0FBWSxDQUFDO29CQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFFdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7NEJBQ2hELElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUU7Z0NBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs2QkFDbEQ7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLE1BQU07eUJBQ1IsSUFBSSxDQUFDLG1CQUFtQixFQUFFO3dCQUN6QixJQUFJLEVBQUU7NEJBQ0osTUFBTTs0QkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDN0I7d0JBQ0QsS0FBSyxFQUFFLE1BQU07cUJBQ2QsQ0FBQzt5QkFDRCxXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksTUFBTSxFQUFFOzRCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQzVEO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNOO2dCQUVELE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBRVIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFDcEIsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFDZixJQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBQztZQUN6QixNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN6QixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQTtZQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQTtTQUMxQjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbEosQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNwRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7UUFFRCxJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQzNDO1lBQ0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNoQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBTTtRQUNaLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN2QzthQUFNO1lBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLFFBQVEsRUFBRTtvQkFDMUIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUM5QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQVc7UUFDbkMsSUFBRyxNQUFNO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUE7UUFDcEMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxHQUFHLEdBQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtZQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7U0FFNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNqQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO3lCQUNuQixRQUFRLEVBQUU7eUJBQ1YsV0FBVyxFQUFFO3lCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ3hDLElBQUksTUFBTSxFQUFFO3dCQUNWLE9BQU8sSUFBSSxDQUFDO3FCQUNiO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUVILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBTTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JDLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUNqQztZQUNELElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3JCLENBQUM7OytHQWxZVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw0aUJBeUNsQixZQUFZLG1GQ3BGekIsazJJQTZFQTsyRkRsQ2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLFlBQVk7cVBBS2IsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBaUJHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSXFDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7QUE2VjNDLElBQUssU0FLSjtBQUxELFdBQUssU0FBUztJQUNaLG1DQUFHLENBQUE7SUFDSCxtQ0FBRyxDQUFBO0lBQ0gscUNBQUksQ0FBQTtJQUNKLHFDQUFJLENBQUE7QUFDTixDQUFDLEVBTEksU0FBUyxLQUFULFNBQVMsUUFLYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcmVlblNpemVVdGlsIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9zY3JlZW4tc2l6ZS11dGlsJztcclxuaW1wb3J0IHsgRXhwb3J0RGF0YVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL2V4cG9ydC1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFRhYmxlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnVuY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Z1bmN0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9ySW50bCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuY29uc3Qgc3BhbmlzaFJhbmdlTGFiZWwgPSAocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBsZW5ndGg6IG51bWJlcikgPT4ge1xyXG4gIGlmIChsZW5ndGggPT0gMCB8fCBwYWdlU2l6ZSA9PSAwKSB7XHJcbiAgICByZXR1cm4gYDAgZGUgJHtsZW5ndGh9YDtcclxuICB9XHJcblxyXG4gIGxlbmd0aCA9IE1hdGgubWF4KGxlbmd0aCwgMCk7XHJcblxyXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlICogcGFnZVNpemU7XHJcblxyXG4gIGNvbnN0IGVuZEluZGV4ID1cclxuICAgIHN0YXJ0SW5kZXggPCBsZW5ndGhcclxuICAgICAgPyBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIGxlbmd0aClcclxuICAgICAgOiBzdGFydEluZGV4ICsgcGFnZVNpemU7XHJcblxyXG4gIHJldHVybiBgJHtzdGFydEluZGV4ICsgMX0gLSAke2VuZEluZGV4fSBkZSAke2xlbmd0aH1gO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkYXRhLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHRpdGxlO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM7XHJcbiAgQElucHV0KCkgZGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgY29tYm87XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbiA9IHtcclxuICAgIGFkZDogZmFsc2UsXHJcbiAgICBlZGl0OiBmYWxzZSxcclxuICAgIGRlbGV0ZTogZmFsc2UsXHJcbiAgICBhY3RpdmU6ZmFsc2UsXHJcbiAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIHByaW50OiBmYWxzZSxcclxuICAgIGFkZFBlcjogZmFsc2UsXHJcbiAgICBlZGl0UGVyOiBmYWxzZSxcclxuICAgIHByaW1hcnlLZXk6ICdpZCcsXHJcbiAgICBleHBvcnRYc2x4OmZhbHNlLFxyXG4gICAgaGlkZVRpdGxlOnRydWUsXHJcbiAgICBoaWRlRmlsdGVyOiB0cnVlLFxyXG4gICAgbm90SW5pdGlhbGl6ZTogZmFsc2UsXHJcbiAgICBibG9ja0V2ZW50Y2xpY2tSb3c6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgcmVsb2FkVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBJbnB1dCgpIHVybDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhcmFtczogQXJyYXk8YW55PiA7XHJcbiAgQElucHV0KCkgdGl0bGVMb2FkaW5nOiBzdHJpbmcgPSBcIlwiXHJcbiAgQElucHV0KCkgbWVzc2FnZUxvYWRpbmc6IHN0cmluZyA9IFwiXCJcclxuICBASW5wdXQoKSBoZWFkZXJGaWxlWGxzbTpBcnJheTxhbnk+ID0gW11cclxuXHJcbiAgQE91dHB1dCgpIGNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBwcmludCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBhY3RpdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW50ZXJuYWxEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgaGVhZGVyRmlsdGVyczogQXJyYXk8YW55PiA9IFtdXHJcblxyXG4gIG1vdmlsID0gU2NyZWVuU2l6ZVV0aWwuaXNNb2JpbGUoKTtcclxuICBmaWx0ZXJzUG9zdDpBcnJheTxhbnk+ID0gW11cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG4gIHNlbGVjdGVkUm93cyA9IFtdOyAvKiogYWxtYWNlbmEgbGFzIGZpbGFzIHNlbGVjY2lvbmFkYXMgKi9cclxuICBjaGVja2JveHMgPSB7fTtcclxuICBzZWxlY3RBbGwgPSBmYWxzZTtcclxuICBpbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuICBmaWx0ZXJzO1xyXG4gIG9yaWdpbmFsRGF0YSA9IFtdO1xyXG4gIHBhZ2luYXRvckFjdGl2ZSA9IHRydWU7XHJcbiAgc2NyZWVuOiBib29sZWFuID0gdHJ1ZVxyXG5cclxuICBpZF9jb21wYW5pYTtcclxuXHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwLCAxMDBdO1xyXG5cclxuICBwYWdlU2l6ZSA9IHNjcmVlbi53aWR0aCA+IDUwMD8xMDo1O1xyXG4gIGxlbmd0aCA9IDA7XHJcblxyXG4gIHBhZ2UgPSAwO1xyXG5cclxuICBhYm92ZTogVG9vbHRpcFBvc2l0aW9uW10gPSBbJ2Fib3ZlJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZ1bmN0aW9uRXRlcjogRnVuY3Rpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdG9yVHJhbnNsYXRlOiBNYXRQYWdpbmF0b3JJbnRsLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlIDogRXhwb3J0RGF0YVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLml0ZW1zUGVyUGFnZUxhYmVsID0gJ0VsZW1lbnRvcyBwb3IgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5uZXh0UGFnZUxhYmVsID0gJ1NpZ3VpZW50ZSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmxhc3RQYWdlTGFiZWwgPSAnw5psdGltYSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLnByZXZpb3VzUGFnZUxhYmVsID0gJ1DDoWdpbmEgYW50ZXJpb3InO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuZmlyc3RQYWdlTGFiZWwgPSAnUHJpbWVyYSBww6FnaW5hJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmdldFJhbmdlTGFiZWwgPSBzcGFuaXNoUmFuZ2VMYWJlbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwKSB7XHJcbiAgICAgIHRoaXMuc2NyZWVuID0gdHJ1ZVxyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCAoKSA9PiB7IHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwID8gdGhpcy5zY3JlZW4gPSB0cnVlIDogdGhpcy5zY3JlZW4gPSBmYWxzZTsgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCAoKSA9PiB7IHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwID8gdGhpcy5zY3JlZW4gPSB0cnVlIDogdGhpcy5zY3JlZW4gPSBmYWxzZTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVsb2FkVGFibGUpIHtcclxuICAgICAgdGhpcy5yZWxvYWRUYWJsZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGV0ZWNBbGxFdmVudCgnJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGl0bGVMb2FkaW5nID09IFwiXCIgPyB0aGlzLnRpdGxlTG9hZGluZyA9IFwiQ2FyZ2FuZG9cIiA6ICcnO1xyXG4gICAgdGhpcy5tZXNzYWdlTG9hZGluZyA9PSBcIlwiID8gdGhpcy5tZXNzYWdlTG9hZGluZyA9IFwiT2J0ZW5pZW5kbyBkYXRvcy4uLlwiIDogJyc7XHJcbiAgICB0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemUgPyB0aGlzLm1lc3NhZ2Uub3BlbkxvYWRpbmcodGhpcy50aXRsZUxvYWRpbmcsIHRoaXMubWVzc2FnZUxvYWRpbmcpIDogJyc7XHJcblxyXG4gICAgaWYgKHRoaXMudXJsICYmICF0aGlzLmNvbmZpZ3VyYXRpb24ubm90SW5pdGlhbGl6ZSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBzZXJ2aWNlID0gYXdhaXQgdGhpcy5nZXREYXRlVGFibGVCeVVybCgpXHJcbiAgICAgICAgdGhpcy5kYXRhID0gc2VydmljZVsnZGF0YSddO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChzZXJ2aWNlKVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcblxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKCF0aGlzLnVybCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXREYXRlVGFibGVCeVVybCgpe1xyXG4gICAgdGhpcy52YWxpZGFyUGFyYW1zKCk7XHJcbiAgICBpZih0aGlzLmZpbHRlcnNQb3N0Lmxlbmd0aCA+IDApe1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keSh0aGlzLnVybCwgdGhpcy5maWx0ZXJzUG9zdCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cC5nZXREYXRhQm9keSh0aGlzLnVybCwgdGhpcy5wYXJhbXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGFyUGFyYW1zKCkge1xyXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZ1bmN0aW9uRXRlci5yZW1vdmVEdXBsaWNhdGVPYmplY3RzKHRoaXMucGFyYW1zKVxyXG4gICAgaWYgKHRoaXMucGFyYW1zKSB7XHJcbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCh4ID0+IHguaWQgPT0gJ3BhZ2UnKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goe2lkOiAncGFnZScsIHZhbHVlOiAnMCd9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoeCA9PiB4LmlkID09ICdwZXJfcGFnZScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7aWQ6ICdwZXJfcGFnZScsIHZhbHVlOiB0aGlzLnBhZ2VTaXplfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoeCA9PiB4LmlkID09ICdmaWx0ZXInKSkge1xyXG4gICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHtpZDogJ2ZpbHRlcicsdmFsdWU6ICcnfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gYXN5bmMgdmFsaWRhdGVSdWxlcygpe1xyXG4gICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1ucyBdIG9mIHRoaXMuY29sdW1ucy5lbnRyaWVzKCkpIHtcclxuICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgIGlmIChjb2x1bW5zLnJ1bGVzKXtcclxuICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSAgPT0gZW51bVJ1bGVzWyc9PSddKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRbY29sdW1ucy5JRF0gJiYgZWxlbWVudFtjb2x1bW5zLklEXS50b1N0cmluZygpID09IHJ1bGUudmFsdWVSdWxlLnRvU3RyaW5nKCkgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHJ1bGUudmFsdWVBY3Rpb25cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBlbGVtZW50W2NvbHVtbnMuSURdO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2ZlY2hhJyB8fCBjb2x1bW5zLnR5cGUgPT0gJ2RhdGUnKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlSXNvKGNvbHVtblZhbHVlKTtcclxuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdkYXRlV2l0aFRpbWUnKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlV2l0aFRpbWUoY29sdW1uVmFsdWU/LnRvU3RyaW5nKCkgPz8gY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2N1cnJlbmN5JykgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nKS5mb3JtYXQoY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2Jvb2xlYW4nKSAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBjb2x1bW5WYWx1ZSA9PSAxID8gXCJTaVwiIDogXCJOb1wiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlcy5kYXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tPblJvVyhyb3dEYXRhKSB7XHJcbiAgICB0aGlzLmNsaWNrUm93LmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb24oYWN0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYWRkUGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZC5lbWl0KHRoaXMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dcclxuICAgICAgICAgICAgLm9wZW4oVGFibGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkLmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkaXRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbnM6IGFueTtcclxuICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRSb3dzWzBdKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLklEID09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpbmRleF0udmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1swXVtrZXldO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnNlbGVjdGVkUm93c1swXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgbmV3OiByZXN1bHQsIG9sZDogdGhpcy5zZWxlY3RlZFJvd3NbMF0gfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICB0aGlzLnByaW50LmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhY3RpdmUnOlxyXG4gICAgICAgIHRoaXMuYWN0aXZlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpe1xyXG4gICAgbGV0IHBhcmFtcyA9IFtdXHJcbiAgICBpZih0aGlzLnVybCAmJiB0aGlzLnBhcmFtcyl7XHJcbiAgICAgIHBhcmFtcyA9IFsuLi50aGlzLnBhcmFtc11cclxuICAgICAgbGV0IGkgPSBwYXJhbXMuZmluZEluZGV4KHggPT4geC5pZCA9PSAncGVyX3BhZ2UnKVxyXG4gICAgICBwYXJhbXNbaV0udmFsdWUgPSAxMDAwMDAwXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUb1hsc3g8YW55Pih0aGlzLnRpdGxlLCB0aGlzLmhlYWRlckZpbGVYbHNtLCB0aGlzLnRpdGxlLCB0aGlzLnVybD9udWxsOnRoaXMuZGF0YSwgdGhpcy51cmwsIHBhcmFtcywgdGhpcy5maWx0ZXJzUG9zdClcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbihyb3csICRldmVudCkge1xyXG4gICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSAkZXZlbnQuY2hlY2tlZDtcclxuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tlZCgkZXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZXRlY0FsbEV2ZW50KCRldmVudCkge1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGVja2JveHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKClcclxuICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSlcclxuICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcclxuICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnBhcmFtcylcclxuICAgICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkID09ICdmaWx0ZXInKSB7XHJcbiAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5maWx0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFwcGx5RmlsdGVycygkZXZlbnQ/OmFueSl7XHJcbiAgICBpZigkZXZlbnQpIHRoaXMuZmlsdGVyc1Bvc3QgPSAkZXZlbnRcclxuICAgIGlmICh0aGlzLnVybCkge1xyXG4gICAgICBsZXQgcmVzOmFueSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKVxyXG4gICAgICB0aGlzLmRhdGEgPSByZXNbJ2RhdGEnXTtcclxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gcmVzWydjb3VudCddO1xyXG4gICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHJlcylcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhW2tleV1cclxuICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuZmlsdGVycy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKCRldmVudCkge1xyXG4gICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3Blcl9wYWdlJykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3BhZ2UnKSB7XHJcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9ICRldmVudC5wYWdlSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmVudW0gZW51bVJ1bGVzIHtcclxuICBcIj5cIixcclxuICBcIjxcIixcclxuICBcIj09XCIsXHJcbiAgXCIhPVwiXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XHJcbiAgPGFwcC1maWx0ZXJzIFtoZWFkZXJGaWx0ZXJzXT1cImhlYWRlckZpbHRlcnNcIiAoYXBwbHlGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcbiAgPC9hcHAtZmlsdGVycz5cclxuXHJcbiAgPGRpdiBzdHlsZT0nZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyAgYWxpZ24taXRlbXM6IGNlbnRlcjsnPlxyXG4gICAgPGRpdiBzdHlsZT0nZmxleDoxOyBmb250LXNpemU6IDFyZW07Jz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjAgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aDwyJz4ge3tzZWxlY3RlZFJvd3MubGVuZ3RofX0gU2VsZWNjaW9uYWRvIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjEnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG9zIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPDEgJiYgIWNvbmZpZ3VyYXRpb24uaGlkZVRpdGxlJz4ge3t0aXRsZX19IDwvcD48L3N0cm9uZz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhY29uZmlndXJhdGlvbi5oaWRlRmlsdGVyXCIgc3R5bGU9J2ZsZXg6MzsgcGFkZGluZy1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogNXB4Oyc+XHJcbiAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J2ZpbHRlcic+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09J2ZpbHRlcnMnIChrZXl1cCk9J2NoYW5nZUZpbHRlcnMoKScgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRmlsdHJhclwiPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBzdHlsZT0nZmxleDowLjU7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsnPlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJlZGl0XCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MScgbWF0VG9vbHRpcD1cIkVkaXRhclwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTsgbWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmVkaXQnPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IChjbGljayk9J2FjdGlvbihcInByaW50XCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MSAmJiBzY3JlZW4nIG1hdFRvb2x0aXA9XCJJbXByaW1pclwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wcmludCBidG4tYWNjaW9uXCIgc3R5bGU9XCJmb250LXNpemU6IDE3MCU7IG1hcmdpbi1yaWdodDogMTVweDtcIiAqbmdJZj0nY29uZmlndXJhdGlvbi5wcmludCc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiZGVsZXRlXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4wJyBtYXRUb29sdGlwPVwiRWxpbWluYXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggYnRuLWFjY2lvblwiIHN0eWxlPVwiZm9udC1zaXplOiAxNzAlOyBtYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uZGVsZXRlJz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJhY3RpdmVcIiknICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjAnIG1hdFRvb2x0aXA9XCJBY3RpdmFyL0Rlc2FjdGl2YXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYWRqdXN0IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTsgbWFyZ2luLXJpZ2h0OiAxNXB4O1wiICpuZ0lmPSdjb25maWd1cmF0aW9uLmFjdGl2ZSc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKGNsaWNrKT0nYWN0aW9uKFwiYWRkXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD09MCcgbWF0VG9vbHRpcD1cIk51ZXZvXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uYWRkJz48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAoY2xpY2spPSdhY3Rpb24oXCJleHBvcnRUb0V4Y2VsXCIpJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSAwICYmIGRhdGEubGVuZ3RoID4gMCcgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIGV4Y2VsXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkIGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTcwJTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgKm5nSWY9J2NvbmZpZ3VyYXRpb24uZXhwb3J0WHNseCc+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxyXG4gICAgICAgPHRyID5cclxuICAgICAgICA8dGggKm5nSWY9J2NvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSB8fCBjb25maWd1cmF0aW9uLmRlbGV0ZSB8fCBjb25maWd1cmF0aW9uLmVkaXQnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj0ncHJpbWFyeScgKGNoYW5nZSk9J3NlbGV0ZWNBbGxFdmVudCgkZXZlbnQpJyBbKG5nTW9kZWwpXT0nc2VsZWN0QWxsJyBbaW5kZXRlcm1pbmF0ZV09J2luZGV0ZXJtaW5hdGVTdGF0ZSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cclxuICAgICAgIDx0aFxyXG4gICAgICAgW2NsYXNzXT1cImNvbHVtbi5zdHlsZT8ubW92aWxcIlxyXG4gICAgICAgKm5nRm9yPSdsZXQgY29sdW1uIG9mIGNvbHVtbnMnIHNjb3BlPVwiY29sXCJcclxuICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXHJcbiAgICAgICA+e3tjb2x1bW4ubGFiZWx9fTwvdGg+XHJcbiAgICAgICA8L3RyPlxyXG4gICAgIDwvdGhlYWQ+XHJcbiAgICAgPHRib2R5IGNsYXNzPSdtYXQtZWxldmF0aW9uLXozJz5cclxuXHJcbiAgICAgICA8dHIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgKm5nRm9yPSdsZXQgcm93IG9mIGRhdGEnIChjbGljayk9J2NsaWNrT25Sb1cocm93KScgPlxyXG4gICAgICAgIDx0aCAqbmdJZj0nY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlIHx8IGNvbmZpZ3VyYXRpb24uZGVsZXRlIHx8IGNvbmZpZ3VyYXRpb24uZWRpdCcgc3R5bGU9J2p1c3RpZnktY29udGVudDogY2VudGVyOyc+IDxtYXQtY2hlY2tib3ggY29sb3I9J3ByaW1hcnknIFsobmdNb2RlbCldPSdjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dJyAoY2xpY2spPSdjbGlja2VkKCRldmVudCknIChjaGFuZ2UpPSdzZWxlY3Rpb24ocm93LCAkZXZlbnQpJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxyXG4gICAgICAgIDx0aCBbY2xhc3NdPSdjb2x1bW4uc3R5bGU/Lm1vdmlsJyBbbmdTdHlsZV09J2NvbHVtbi5zdHlsZScgc2NvcGU9XCJyb3dcIiAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucyc+e3sgcm93W2NvbHVtbi5JRF0gfX08L3RoPlxyXG4gICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgIDwvdGJvZHk+XHJcblxyXG4gICA8L3RhYmxlPlxyXG5cclxuICAgPGRpdiAqbmdJZj0nbGVuZ3RoID09IDAgJiYgZGF0YS5sZW5ndGggPT0gMCcgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj4gPHN0cm9uZz5ObyBzZSBlbmNvbnRyw7MgaW5mb3JtYWNpw7NuPC9zdHJvbmc+PC9kaXY+XHJcblxyXG4gICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiXHJcbiAgIFtsZW5ndGhdPVwibGVuZ3RoXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9uc1xyXG4gICAocGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XHJcblxyXG48L2Rpdj5cclxuIl19
|
|
@@ -26,9 +26,14 @@ export class FiltersComponent {
|
|
|
26
26
|
this.loadDates();
|
|
27
27
|
this.loadDatesBetween();
|
|
28
28
|
}
|
|
29
|
-
async
|
|
30
|
-
if (
|
|
29
|
+
async ngOnChanges(changes) {
|
|
30
|
+
if (changes) {
|
|
31
31
|
await this.loadFilter();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async ngOnInit() {
|
|
35
|
+
// if(this.headerFilters && this.headerFilters.length > 0)
|
|
36
|
+
// await this.loadFilter()
|
|
32
37
|
}
|
|
33
38
|
handlerFiltersDate(deleteFilter, item, valueDate = null, valueBetween1 = null, valueBetween2 = null) {
|
|
34
39
|
switch (item.type) {
|
|
@@ -165,12 +170,16 @@ export class FiltersComponent {
|
|
|
165
170
|
});
|
|
166
171
|
}
|
|
167
172
|
async loadFilter() {
|
|
173
|
+
// if (this.headerFiltersSelected.length != 0) {
|
|
174
|
+
// return
|
|
175
|
+
// }
|
|
176
|
+
let applyFilter = false;
|
|
168
177
|
for (let element of this.headerFilters) {
|
|
169
178
|
if (element.urlData) {
|
|
170
179
|
let res = await this.http.getDataBody(element.urlData);
|
|
171
180
|
element.body = res;
|
|
172
181
|
}
|
|
173
|
-
else {
|
|
182
|
+
else if (element.type == 'select') {
|
|
174
183
|
element.body = element.data;
|
|
175
184
|
}
|
|
176
185
|
element.filteredList = element.body;
|
|
@@ -190,13 +199,18 @@ export class FiltersComponent {
|
|
|
190
199
|
labelFilter: element.labelFilter
|
|
191
200
|
});
|
|
192
201
|
this.handlerFiltersDate(false, element, element.value, element.value.split(',')[0], element.value.split(',')[1]);
|
|
193
|
-
|
|
202
|
+
if (element.value && element.value != '') {
|
|
203
|
+
applyFilter = true;
|
|
204
|
+
}
|
|
194
205
|
}
|
|
195
206
|
}
|
|
207
|
+
if (applyFilter) {
|
|
208
|
+
this.applyFilters.emit(this.filtersPost);
|
|
209
|
+
}
|
|
196
210
|
}
|
|
197
211
|
}
|
|
198
212
|
FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.FunctionsService }, { token: i2.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
-
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i6.MatSelectFilterComponent, selector: "mat-select-filter", inputs: ["showSpinner", "noResultsMessage", "placeholder", "array", "color", "displayMember", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }, { type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }] });
|
|
213
|
+
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i6.MatSelectFilterComponent, selector: "mat-select-filter", inputs: ["showSpinner", "noResultsMessage", "placeholder", "array", "color", "displayMember", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }, { type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }] });
|
|
200
214
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
201
215
|
type: Component,
|
|
202
216
|
args: [{ selector: 'app-filters', template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"] }]
|
|
@@ -205,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
205
219
|
}], applyFilters: [{
|
|
206
220
|
type: Output
|
|
207
221
|
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXhELE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0IsWUFDVSxZQUE4QixFQUM5QixJQUFpQjtRQURqQixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQWZsQixrQkFBYSxHQUFlLEVBQUUsQ0FBQTtRQUM3QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsdUJBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLDBCQUFxQixHQUFnQixFQUFFLENBQUE7UUFJdkMsVUFBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUdsQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQU1kLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUYsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEs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LENBQUMsQ0FBQTtnQkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLEVBQUUsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDbkIsVUFBVSxFQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxVQUFVO29CQUNuRSxJQUFJLEVBQUMsT0FBTyxDQUFDLElBQUk7b0JBQ2pCLEtBQUssRUFBQyxPQUFPLENBQUMsS0FBSztvQkFDbkIsV0FBVyxFQUFDLE9BQU8sQ0FBQyxXQUFXO2lCQUNoQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNoSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7YUFDekM7U0FDRjtJQUNILENBQUM7OzZHQXBNVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiwwSUNaN0IsZzZGQThEQTsyRkRsRGEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7aUlBTWQsYUFBYTtzQkFBckIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY3JlZW5TaXplVXRpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLXV0aWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmlsdGVycycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGhlYWRlckZpbHRlcnM6IEFycmF5PGFueT4gPSBbXVxyXG4gIEBPdXRwdXQoKSBhcHBseUZpbHRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaGVhZGVyRmlsdGVyc1ZhbHVlID0gXCItMVwiXHJcbiAgaGVhZGVyRmlsdGVyc1NlbGVjdGVkIDogQXJyYXk8YW55PiA9IFtdXHJcbiAgY2FtcGFpZ25PbmU6IEZvcm1Hcm91cDtcclxuICBjYW1wYWlnblR3bzogRm9ybUdyb3VwO1xyXG4gIGZlY2hhOiBGb3JtR3JvdXA7XHJcbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xyXG5cclxuXHJcbiAgZmlsdGVyc1Bvc3QgPSBbXVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMubG9hZERhdGVzKClcclxuICAgIHRoaXMubG9hZERhdGVzQmV0d2VlbigpXHJcbiAgIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZih0aGlzLmhlYWRlckZpbHRlcnMgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmxlbmd0aCA+IDApXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEZpbHRlcigpXHJcbiAgfVxyXG5cclxuICBoYW5kbGVyRmlsdGVyc0RhdGUoZGVsZXRlRmlsdGVyOmJvb2xlYW4sIGl0ZW06YW55LCB2YWx1ZURhdGUgPSBudWxsLCB2YWx1ZUJldHdlZW4xID0gbnVsbCwgdmFsdWVCZXR3ZWVuMiA9IG51bGwpe1xyXG4gICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgaWYoZGVsZXRlRmlsdGVyKXtcclxuICAgICAgICAgIHRoaXMuZGVsdGVGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsYWJlbEZpbHRlcjonRmVjaGEgZW50cmUnLFxyXG4gICAgICAgICAgICB0eXBlOidkYXRlUmFuZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXMobmV3IERhdGUodmFsdWVEYXRlICsgXCJUMDU6MDA6MDAuMDAwWlwiKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcclxuICAgICAgICBpZihkZWxldGVGaWx0ZXIpe1xyXG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XHJcbiAgICAgICAgICAgIGxhYmVsRmlsdGVyOidGZWNoYSBpZ3VhbCBhJyxcclxuICAgICAgICAgICAgdHlwZTonZGF0ZSdcclxuICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXNCZXR3ZWVuKGZhbHNlLCBuZXcgRGF0ZSh2YWx1ZUJldHdlZW4xICsgXCJUMDU6MDA6MDAuMDAwWlwiKSAsIG5ldyBEYXRlKHZhbHVlQmV0d2VlbjIgKyBcIlQwNTowMDowMC4wMDBaXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbHRlcigkZXZlbnQpe1xyXG4gICAgbGV0IHZhbGlkYXRlID0gdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxyXG4gICAgaWYoIXZhbGlkYXRlKXtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5oZWFkZXJGaWx0ZXJzLmZpbmQoeCA9PiB4LmxhYmVsRmlsdGVyID09ICRldmVudC52YWx1ZSlcclxuICAgICAgaWYodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLnB1c2godmFsdWUpXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUodHJ1ZSAsIHt0eXBlOnZhbHVlLnR5cGV9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzVmFsdWUgPSBudWxsXHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pe1xyXG4gICAgbGV0IGkgPSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDAgKSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZFtpXS52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgbGV0IGYgPSB0aGlzLmZpbHRlcnNQb3N0LmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGlmKCRldmVudC52YWx1ZSl7XHJcbiAgICAgIGxldCB2YWx1ZSA9IG51bGxcclxuICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgdmFsdWUgPSAkZXZlbnQudmFsdWVcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIoJGV2ZW50LnZhbHVlKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgdmFsdWUgPSBgJHt0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIodGhpcy5jYW1wYWlnbk9uZS5jb250cm9scy5zdGFydC52YWx1ZSl9LCR7dGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZURCKHRoaXMuY2FtcGFpZ25PbmUuY29udHJvbHMuZW5kLnZhbHVlKX1gXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXZhbHVlKSByZXR1cm5cclxuICAgICAgaWYoZiA+PSAwKXtcclxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0W2ZdLnZhbHVlID0gdmFsdWVcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoaXRlbS50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5Oml0ZW0uZmlsZU5hbWVEYj9pdGVtLmZpbGVOYW1lRGI6aXRlbS5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTppdGVtLnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTp2YWx1ZSxcclxuICAgICAgICAgIGxhYmVsRmlsdGVyOml0ZW0ubGFiZWxGaWx0ZXJcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsdGVGaWx0ZXIoaXRlbSl7XHJcbiAgICBsZXQgaSA9IHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGxldCBmID0gdGhpcy5maWx0ZXJzUG9zdC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDApIHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWRbaV0udmFsdWUgPSBcIi0xXCJcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuc3BsaWNlKGksIDEpXHJcbiAgICB9XHJcbiAgICBpZihmID49IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJzUG9zdC5zcGxpY2UoZiwxKVxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycy5lbWl0KHRoaXMuZmlsdGVyc1Bvc3QpXHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZXJGaWx0ZXJzRGF0ZShmYWxzZSwgaXRlbSlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNWYWx1ZSA9IG51bGxcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0ZXModmFsdWUgOiBEYXRlID0gbnVsbCl7XHJcbiAgICB0aGlzLmZlY2hhID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgIGZlY2hhOiBuZXcgRm9ybUNvbnRyb2wodmFsdWUpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWREYXRlc0JldHdlZW4oaW5pdDpib29sZWFuID0gdHJ1ZSwgdmFsdWUxIDogRGF0ZSA9IG51bGwsIHZhbHVlMiA6IERhdGUgPSBudWxsKXtcclxuICAgIGlmKGluaXQpe1xyXG4gICAgICB0aGlzLmNhbXBhaWduT25lID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhbXBhaWduVHdvID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdmFyIGRheTEgPSAxXHJcbiAgICB2YXIgZGF5MiA9IDE1XHJcbiAgICBpZighdmFsdWUxKXtcclxuICAgICAgdmFsdWUxID0gbmV3IERhdGUoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGRheTEgPSB2YWx1ZTEuZ2V0RGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXZhbHVlMil7XHJcbiAgICAgIHZhbHVlMiA9IG5ldyBEYXRlKClcclxuICAgIH1lbHNle1xyXG4gICAgICBkYXkyID0gdmFsdWUyLmdldERhdGUoKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FtcGFpZ25PbmUgPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChuZXcgRGF0ZSh2YWx1ZTEuZ2V0RnVsbFllYXIoKSwgdmFsdWUxLmdldE1vbnRoKCksIGRheTEpKSxcclxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUyLmdldEZ1bGxZZWFyKCksIHZhbHVlMi5nZXRNb250aCgpLCBkYXkyKSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbXBhaWduVHdvID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKG5ldyBEYXRlKHZhbHVlMS5nZXRGdWxsWWVhcigpLCB2YWx1ZTEuZ2V0TW9udGgoKSwgZGF5MSkpLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZEZpbHRlcigpe1xyXG4gICAgZm9yKGxldCBlbGVtZW50IG9mIHRoaXMuaGVhZGVyRmlsdGVycyl7XHJcbiAgICAgXHJcbiAgICAgIGlmKGVsZW1lbnQudXJsRGF0YSl7XHJcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuaHR0cC5nZXREYXRhQm9keTxhbnk+KGVsZW1lbnQudXJsRGF0YSlcclxuICAgICAgICBlbGVtZW50LmJvZHkgPSByZXM7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGVsZW1lbnQuYm9keSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuZmlsdGVyZWRMaXN0ID0gZWxlbWVudC5ib2R5O1xyXG4gICAgICBpZighZWxlbWVudC5wcmltYXJ5S2V5KSBlbGVtZW50LnByaW1hcnlLZXkgPSBlbGVtZW50LnZpc2libGVGaWVsZFxyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT0gXCJkYXRlXCIpIGVsZW1lbnQubGFiZWxGaWx0ZXIgPSBlbGVtZW50LmxhYmVsRmlsdGVyID8/IFwiRmVjaGEgaWd1YWwgYVwiXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVSYW5nZVwiKSBlbGVtZW50LmxhYmVsRmlsdGVyID0gZWxlbWVudC5sYWJlbEZpbHRlciA/PyBcIkZlY2hhIGVudHJlXCJcclxuICAgICAgaWYoZWxlbWVudC5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5wdXNoKGVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoZWxlbWVudC50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5OmVsZW1lbnQuZmlsZU5hbWVEYj9lbGVtZW50LmZpbGVOYW1lRGI6ZWxlbWVudC5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTplbGVtZW50LnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTplbGVtZW50LnZhbHVlLFxyXG4gICAgICAgICAgbGFiZWxGaWx0ZXI6ZWxlbWVudC5sYWJlbEZpbHRlclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUoZmFsc2UsIGVsZW1lbnQsIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQudmFsdWUuc3BsaXQoJywnKVswXSwgZWxlbWVudC52YWx1ZS5zcGxpdCgnLCcpWzFdKVxyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiaGVhZGVyRmlsdGVycyAmJiBoZWFkZXJGaWx0ZXJzLmxlbmd0aCA+IDBcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IHdpZHRoOiAxMDAlOyBmbGV4LXdyYXA6IHdyYXA7XCIgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgIDxtYXQtbGFiZWw+RmlsdHJvczwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdEZpbHRlcigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJoZWFkZXJGaWx0ZXJzVmFsdWVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGYgb2YgaGVhZGVyRmlsdGVyc1wiXHJcbiAgICAgICAgICB2YWx1ZT1cInt7IGYubGFiZWxGaWx0ZXIgfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGYubGFiZWxGaWx0ZXIgfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhZGVyRmlsdGVyc1NlbGVjdGVkXCIgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3NlbGVjdCdcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPkZpbHRyYXIgcG9yIHt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSlcIiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QtZmlsdGVyXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRmlsdGVyJ1wiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5TWVtYmVyXT1cIml0ZW0udmlzaWJsZUZpZWxkXCJcclxuICAgICAgICAgICAgW2FycmF5XT1cIml0ZW0uYm9keVwiXHJcbiAgICAgICAgICAgIChmaWx0ZXJlZFJldHVybik9XCJpdGVtLmZpbHRlcmVkTGlzdCA9ICRldmVudFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3QtZmlsdGVyPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgaXRlbS5maWx0ZXJlZExpc3RcIlxyXG4gICAgICAgICAgICB2YWx1ZT1cInt7IGRhdGFbaXRlbS5wcmltYXJ5S2V5XSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGRhdGFbaXRlbS52aXNpYmxlRmllbGRdIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2RhdGUnXCIgW2Zvcm1Hcm91cF09XCJmZWNoYVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IChkYXRlSW5wdXQpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiRmVjaGFcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0nZmVjaGEnIHJlcXVpcmVkPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJGZWNoYVwiPlxyXG4gICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgZGF0ZUlucHV0ICNGZWNoYSBbdG91Y2hVaV09J21vdmlsP3RydWU6ZmFsc2UnPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2RhdGVSYW5nZSdcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0XHJcbiAgICAgICAgICBbZm9ybUdyb3VwXT1cImNhbXBhaWduT25lXCJcclxuICAgICAgICAgIFtyYW5nZVBpY2tlcl09XCJjYW1wYWlnbk9uZVBpY2tlclwiXHJcbiAgICAgICAgICBbY29tcGFyaXNvblN0YXJ0XT1cImNhbXBhaWduVHdvLnZhbHVlLnN0YXJ0XCJcclxuICAgICAgICAgIFtjb21wYXJpc29uRW5kXT1cImNhbXBhaWduVHdvLnZhbHVlLmVuZFwiPlxyXG4gICAgICAgICAgPGlucHV0ICBtYXRTdGFydERhdGUgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIj5cclxuICAgICAgICAgIDxpbnB1dCAoZGF0ZUlucHV0KT1cInNlbGVjdEZpbHRlckRhdGEoJGV2ZW50LCBpdGVtKVwiIG1hdEVuZERhdGUgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImVuZFwiPlxyXG4gICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJjYW1wYWlnbk9uZVBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI2NhbXBhaWduT25lUGlja2VyPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKGNsaWNrKT1cImRlbHRlRmlsdGVyKGl0ZW0pXCI+PG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+PC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBVyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQWUzQixZQUNVLFlBQThCLEVBQzlCLElBQWlCO1FBRGpCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFhO1FBZmxCLGtCQUFhLEdBQWUsRUFBRSxDQUFBO1FBQzdCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVqRCx1QkFBa0IsR0FBRyxJQUFJLENBQUE7UUFDekIsMEJBQXFCLEdBQWdCLEVBQUUsQ0FBQTtRQUl2QyxVQUFLLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBR2xDLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBTWQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUssT0FBTyxFQUFFO1lBQ1osTUFBTSxJ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YUFBYTtpSUFNZCxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mdW5jdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcmVlblNpemVVdGlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2NyZWVuLXNpemUtdXRpbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRG9DaGVjaywgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBlbGVtZW50IH0gZnJvbSAncHJvdHJhY3Rvcic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmlsdGVycycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgaGVhZGVyRmlsdGVyczogQXJyYXk8YW55PiA9IFtdXHJcbiAgQE91dHB1dCgpIGFwcGx5RmlsdGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBoZWFkZXJGaWx0ZXJzVmFsdWUgPSBcIi0xXCJcclxuICBoZWFkZXJGaWx0ZXJzU2VsZWN0ZWQgOiBBcnJheTxhbnk+ID0gW11cclxuICBjYW1wYWlnbk9uZTogRm9ybUdyb3VwO1xyXG4gIGNhbXBhaWduVHdvOiBGb3JtR3JvdXA7XHJcbiAgZmVjaGE6IEZvcm1Hcm91cDtcclxuICBtb3ZpbCA9IFNjcmVlblNpemVVdGlsLmlzTW9iaWxlKCk7XHJcblxyXG5cclxuICBmaWx0ZXJzUG9zdCA9IFtdXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmdW5jdGlvbkV0ZXI6IEZ1bmN0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5sb2FkRGF0ZXMoKVxyXG4gICAgdGhpcy5sb2FkRGF0ZXNCZXR3ZWVuKClcclxuICAgfVxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICggY2hhbmdlcykge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRGaWx0ZXIoKVxyXG4gICAgfVxyXG4gIH0gIFxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIC8vIGlmKHRoaXMuaGVhZGVyRmlsdGVycyAmJiB0aGlzLmhlYWRlckZpbHRlcnMubGVuZ3RoID4gMClcclxuICAgIC8vICAgYXdhaXQgdGhpcy5sb2FkRmlsdGVyKClcclxuICB9XHJcblxyXG4gIGhhbmRsZXJGaWx0ZXJzRGF0ZShkZWxldGVGaWx0ZXI6Ym9vbGVhbiwgaXRlbTphbnksIHZhbHVlRGF0ZSA9IG51bGwsIHZhbHVlQmV0d2VlbjEgPSBudWxsLCB2YWx1ZUJldHdlZW4yID0gbnVsbCl7XHJcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xyXG4gICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICBpZihkZWxldGVGaWx0ZXIpe1xyXG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XHJcbiAgICAgICAgICAgIGxhYmVsRmlsdGVyOidGZWNoYSBlbnRyZScsXHJcbiAgICAgICAgICAgIHR5cGU6J2RhdGVSYW5nZSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRlcyhuZXcgRGF0ZSh2YWx1ZURhdGUgKyBcIlQwNTowMDowMC4wMDBaXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgIGlmKGRlbGV0ZUZpbHRlcil7XHJcbiAgICAgICAgICB0aGlzLmRlbHRlRmlsdGVyKHtcclxuICAgICAgICAgICAgbGFiZWxGaWx0ZXI6J0ZlY2hhIGlndWFsIGEnLFxyXG4gICAgICAgICAgICB0eXBlOidkYXRlJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRlc0JldHdlZW4oZmFsc2UsIG5ldyBEYXRlKHZhbHVlQmV0d2VlbjEgKyBcIlQwNTowMDowMC4wMDBaXCIpICwgbmV3IERhdGUodmFsdWVCZXR3ZWVuMiArIFwiVDA1OjAwOjAwLjAwMFpcIikpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0RmlsdGVyKCRldmVudCl7XHJcbiAgICBsZXQgdmFsaWRhdGUgPSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5maW5kKHggPT4geC5sYWJlbEZpbHRlciA9PSAkZXZlbnQudmFsdWUpXHJcbiAgICBpZighdmFsaWRhdGUpe1xyXG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmhlYWRlckZpbHRlcnMuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxyXG4gICAgICBpZih2YWx1ZSl7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQucHVzaCh2YWx1ZSlcclxuICAgICAgICB0aGlzLmhhbmRsZXJGaWx0ZXJzRGF0ZSh0cnVlICwge3R5cGU6dmFsdWUudHlwZX0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNWYWx1ZSA9IG51bGxcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSl7XHJcbiAgICBsZXQgaSA9IHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGlmKGkgPj0gMCApIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkW2ldLnZhbHVlID0gJGV2ZW50LnZhbHVlXHJcbiAgICBsZXQgZiA9IHRoaXMuZmlsdGVyc1Bvc3QuZmluZEluZGV4KHggPT4geC5sYWJlbEZpbHRlciA9PSBpdGVtLmxhYmVsRmlsdGVyKVxyXG4gICAgaWYoJGV2ZW50LnZhbHVlKXtcclxuICAgICAgbGV0IHZhbHVlID0gbnVsbFxyXG4gICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XHJcbiAgICAgICAgICB2YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVEQigkZXZlbnQudmFsdWUpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XHJcbiAgICAgICAgICB2YWx1ZSA9IGAke3RoaXMuZnVuY3Rpb25FdGVyLmRhdGVEQih0aGlzLmNhbXBhaWduT25lLmNvbnRyb2xzLnN0YXJ0LnZhbHVlKX0sJHt0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIodGhpcy5jYW1wYWlnbk9uZS5jb250cm9scy5lbmQudmFsdWUpfWBcclxuICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZighdmFsdWUpIHJldHVyblxyXG4gICAgICBpZihmID49IDApe1xyXG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3RbZl0udmFsdWUgPSB2YWx1ZVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0LnB1c2goe1xyXG4gICAgICAgICAgdE46YnRvYShpdGVtLnROKSxcclxuICAgICAgICAgIHByaW1hcnlLZXk6aXRlbS5maWxlTmFtZURiP2l0ZW0uZmlsZU5hbWVEYjppdGVtLnByaW1hcnlLZXksXHJcbiAgICAgICAgICB0eXBlOml0ZW0udHlwZSxcclxuICAgICAgICAgIHZhbHVlOnZhbHVlLFxyXG4gICAgICAgICAgbGFiZWxGaWx0ZXI6aXRlbS5sYWJlbEZpbHRlclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMuZW1pdCh0aGlzLmZpbHRlcnNQb3N0KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBkZWx0ZUZpbHRlcihpdGVtKXtcclxuICAgIGxldCBpID0gdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5sYWJlbEZpbHRlciA9PSBpdGVtLmxhYmVsRmlsdGVyKVxyXG4gICAgbGV0IGYgPSB0aGlzLmZpbHRlcnNQb3N0LmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGlmKGkgPj0gMCkge1xyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZFtpXS52YWx1ZSA9IFwiLTFcIlxyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5zcGxpY2UoaSwgMSlcclxuICAgIH1cclxuICAgIGlmKGYgPj0gMCkge1xyXG4gICAgICB0aGlzLmZpbHRlcnNQb3N0LnNwbGljZShmLDEpXHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlckZpbHRlcnNEYXRlKGZhbHNlLCBpdGVtKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1ZhbHVlID0gbnVsbFxyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIGxvYWREYXRlcyh2YWx1ZSA6IERhdGUgPSBudWxsKXtcclxuICAgIHRoaXMuZmVjaGEgPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgZmVjaGE6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZERhdGVzQmV0d2Vlbihpbml0OmJvb2xlYW4gPSB0cnVlLCB2YWx1ZTEgOiBEYXRlID0gbnVsbCwgdmFsdWUyIDogRGF0ZSA9IG51bGwpe1xyXG4gICAgaWYoaW5pdCl7XHJcbiAgICAgIHRoaXMuY2FtcGFpZ25PbmUgPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB2YXIgZGF5MSA9IDFcclxuICAgIHZhciBkYXkyID0gMTVcclxuICAgIGlmKCF2YWx1ZTEpe1xyXG4gICAgICB2YWx1ZTEgPSBuZXcgRGF0ZSgpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgZGF5MSA9IHZhbHVlMS5nZXREYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBpZighdmFsdWUyKXtcclxuICAgICAgdmFsdWUyID0gbmV3IERhdGUoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGRheTIgPSB2YWx1ZTIuZ2V0RGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW1wYWlnbk9uZSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKG5ldyBEYXRlKHZhbHVlMS5nZXRGdWxsWWVhcigpLCB2YWx1ZTEuZ2V0TW9udGgoKSwgZGF5MSkpLFxyXG4gICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChuZXcgRGF0ZSh2YWx1ZTIuZ2V0RnVsbFllYXIoKSwgdmFsdWUyLmdldE1vbnRoKCksIGRheTIpKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChuZXcgRGF0ZSh2YWx1ZTEuZ2V0RnVsbFllYXIoKSwgdmFsdWUxLmdldE1vbnRoKCksIGRheTEpKSxcclxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkRmlsdGVyKCl7XHJcbiAgICAvLyBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQubGVuZ3RoICE9IDApIHtcclxuICAgIC8vICAgcmV0dXJuXHJcbiAgICAvLyB9XHJcbiAgICBsZXQgYXBwbHlGaWx0ZXIgPSBmYWxzZSBcclxuICAgIGZvcihsZXQgZWxlbWVudCBvZiB0aGlzLmhlYWRlckZpbHRlcnMpe1xyXG4gICAgIFxyXG4gICAgICBpZihlbGVtZW50LnVybERhdGEpe1xyXG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLmh0dHAuZ2V0RGF0YUJvZHk8YW55PihlbGVtZW50LnVybERhdGEpXHJcbiAgICAgICAgZWxlbWVudC5ib2R5ID0gcmVzO1xyXG4gICAgICB9ZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdzZWxlY3QnKSB7ICAgICAgIFxyXG4gICAgICAgIGVsZW1lbnQuYm9keSA9IGVsZW1lbnQuZGF0YSAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuZmlsdGVyZWRMaXN0ID0gZWxlbWVudC5ib2R5O1xyXG4gICAgICBpZighZWxlbWVudC5wcmltYXJ5S2V5KSBlbGVtZW50LnByaW1hcnlLZXkgPSBlbGVtZW50LnZpc2libGVGaWVsZFxyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT0gXCJkYXRlXCIpIGVsZW1lbnQubGFiZWxGaWx0ZXIgPSBlbGVtZW50LmxhYmVsRmlsdGVyID8/IFwiRmVjaGEgaWd1YWwgYVwiXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVSYW5nZVwiKSBlbGVtZW50LmxhYmVsRmlsdGVyID0gZWxlbWVudC5sYWJlbEZpbHRlciA/PyBcIkZlY2hhIGVudHJlXCJcclxuICAgICAgaWYoZWxlbWVudC5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5wdXNoKGVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoZWxlbWVudC50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5OmVsZW1lbnQuZmlsZU5hbWVEYj9lbGVtZW50LmZpbGVOYW1lRGI6ZWxlbWVudC5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTplbGVtZW50LnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTplbGVtZW50LnZhbHVlLFxyXG4gICAgICAgICAgbGFiZWxGaWx0ZXI6ZWxlbWVudC5sYWJlbEZpbHRlclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUoZmFsc2UsIGVsZW1lbnQsIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQudmFsdWUuc3BsaXQoJywnKVswXSwgZWxlbWVudC52YWx1ZS5zcGxpdCgnLCcpWzFdKVxyXG4gICAgICAgIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgIGFwcGx5RmlsdGVyID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdCkgICAgICBcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnMgJiYgaGVhZGVyRmlsdGVycy5sZW5ndGggPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgZmxleC13cmFwOiB3cmFwO1wiIGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLTEyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICA8bWF0LWxhYmVsPkZpbHRyb3M8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiaGVhZGVyRmlsdGVyc1ZhbHVlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIGhlYWRlckZpbHRlcnNcIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7eyBmLmxhYmVsRmlsdGVyIH19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBmLmxhYmVsRmlsdGVyIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYWRlckZpbHRlcnNTZWxlY3RlZFwiIGNsYXNzPVwiY29sLW1kLTQgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaXRlbS50eXBlID09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5GaWx0cmFyIHBvciB7e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LWZpbHRlclxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0ZpbHRlcidcIlxyXG4gICAgICAgICAgICBbZGlzcGxheU1lbWJlcl09XCJpdGVtLnZpc2libGVGaWVsZFwiXHJcbiAgICAgICAgICAgIFthcnJheV09XCJpdGVtLmJvZHlcIlxyXG4gICAgICAgICAgICAoZmlsdGVyZWRSZXR1cm4pPVwiaXRlbS5maWx0ZXJlZExpc3QgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LWZpbHRlcj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGl0ZW0uZmlsdGVyZWRMaXN0XCJcclxuICAgICAgICAgICAgdmFsdWU9XCJ7eyBkYXRhW2l0ZW0ucHJpbWFyeUtleV0gfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBkYXRhW2l0ZW0udmlzaWJsZUZpZWxkXSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaXRlbS50eXBlID09ICdkYXRlJ1wiIFtmb3JtR3JvdXBdPVwiZmVjaGFcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tpdGVtLmxhYmVsRmlsdGVyfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCAoZGF0ZUlucHV0KT1cInNlbGVjdEZpbHRlckRhdGEoJGV2ZW50LCBpdGVtKVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIkZlY2hhXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9J2ZlY2hhJyByZXF1aXJlZD5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiRmVjaGFcIj5cclxuICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyIGRhdGVJbnB1dCAjRmVjaGEgW3RvdWNoVWldPSdtb3ZpbD90cnVlOmZhbHNlJz48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaXRlbS50eXBlID09ICdkYXRlUmFuZ2UnXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxyXG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCJjYW1wYWlnbk9uZVwiXHJcbiAgICAgICAgICBbcmFuZ2VQaWNrZXJdPVwiY2FtcGFpZ25PbmVQaWNrZXJcIlxyXG4gICAgICAgICAgW2NvbXBhcmlzb25TdGFydF09XCJjYW1wYWlnblR3by52YWx1ZS5zdGFydFwiXHJcbiAgICAgICAgICBbY29tcGFyaXNvbkVuZF09XCJjYW1wYWlnblR3by52YWx1ZS5lbmRcIj5cclxuICAgICAgICAgIDxpbnB1dCAgbWF0U3RhcnREYXRlIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgKGRhdGVJbnB1dCk9XCJzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSlcIiBtYXRFbmREYXRlIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIj5cclxuICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiY2FtcGFpZ25PbmVQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNjYW1wYWlnbk9uZVBpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChjbGljayk9XCJkZWx0ZUZpbHRlcihpdGVtKVwiPjxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPjwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -967,10 +967,17 @@ class FiltersComponent {
|
|
|
967
967
|
this.loadDates();
|
|
968
968
|
this.loadDatesBetween();
|
|
969
969
|
}
|
|
970
|
-
|
|
970
|
+
ngOnChanges(changes) {
|
|
971
971
|
return __awaiter(this, void 0, void 0, function* () {
|
|
972
|
-
if (
|
|
972
|
+
if (changes) {
|
|
973
973
|
yield this.loadFilter();
|
|
974
|
+
}
|
|
975
|
+
});
|
|
976
|
+
}
|
|
977
|
+
ngOnInit() {
|
|
978
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
979
|
+
// if(this.headerFilters && this.headerFilters.length > 0)
|
|
980
|
+
// await this.loadFilter()
|
|
974
981
|
});
|
|
975
982
|
}
|
|
976
983
|
handlerFiltersDate(deleteFilter, item, valueDate = null, valueBetween1 = null, valueBetween2 = null) {
|
|
@@ -1112,12 +1119,16 @@ class FiltersComponent {
|
|
|
1112
1119
|
loadFilter() {
|
|
1113
1120
|
var _a, _b;
|
|
1114
1121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1122
|
+
// if (this.headerFiltersSelected.length != 0) {
|
|
1123
|
+
// return
|
|
1124
|
+
// }
|
|
1125
|
+
let applyFilter = false;
|
|
1115
1126
|
for (let element of this.headerFilters) {
|
|
1116
1127
|
if (element.urlData) {
|
|
1117
1128
|
let res = yield this.http.getDataBody(element.urlData);
|
|
1118
1129
|
element.body = res;
|
|
1119
1130
|
}
|
|
1120
|
-
else {
|
|
1131
|
+
else if (element.type == 'select') {
|
|
1121
1132
|
element.body = element.data;
|
|
1122
1133
|
}
|
|
1123
1134
|
element.filteredList = element.body;
|
|
@@ -1137,14 +1148,19 @@ class FiltersComponent {
|
|
|
1137
1148
|
labelFilter: element.labelFilter
|
|
1138
1149
|
});
|
|
1139
1150
|
this.handlerFiltersDate(false, element, element.value, element.value.split(',')[0], element.value.split(',')[1]);
|
|
1140
|
-
|
|
1151
|
+
if (element.value && element.value != '') {
|
|
1152
|
+
applyFilter = true;
|
|
1153
|
+
}
|
|
1141
1154
|
}
|
|
1142
1155
|
}
|
|
1156
|
+
if (applyFilter) {
|
|
1157
|
+
this.applyFilters.emit(this.filtersPost);
|
|
1158
|
+
}
|
|
1143
1159
|
});
|
|
1144
1160
|
}
|
|
1145
1161
|
}
|
|
1146
1162
|
FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FiltersComponent, deps: [{ token: FunctionsService }, { token: HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1147
|
-
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatSelectFilterComponent, selector: "mat-select-filter", inputs: ["showSpinner", "noResultsMessage", "placeholder", "array", "color", "displayMember", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }, { type: i7$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i7$1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { type: i7$1.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i7$1.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { type: i7$1.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }] });
|
|
1163
|
+
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatSelectFilterComponent, selector: "mat-select-filter", inputs: ["showSpinner", "noResultsMessage", "placeholder", "array", "color", "displayMember", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }, { type: i7$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i7$1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { type: i7$1.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i7$1.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { type: i7$1.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }] });
|
|
1148
1164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
1149
1165
|
type: Component,
|
|
1150
1166
|
args: [{ selector: 'app-filters', template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <mat-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n >\r\n </mat-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"] }]
|
|
@@ -1399,7 +1415,7 @@ class DataTableComponent {
|
|
|
1399
1415
|
console.log(error);
|
|
1400
1416
|
}
|
|
1401
1417
|
}
|
|
1402
|
-
else {
|
|
1418
|
+
else if (!this.url) {
|
|
1403
1419
|
this.paginatorActive = false;
|
|
1404
1420
|
}
|
|
1405
1421
|
});
|