@tiba-spark/client-shared-lib 25.1.0-871 → 25.1.0-881
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/constants/analytics-constants.mjs +2 -1
- package/esm2022/libraries/modules/smartparks/smartpark.state.mjs +4 -1
- package/esm2022/libraries/services/export-file.service.mjs +26 -100
- package/esm2022/libraries/services/file-sanitizer.service.mjs +68 -0
- package/esm2022/libraries/services/index.mjs +2 -1
- package/esm2022/libraries/services/smartpark.service.mjs +8 -31
- package/fesm2022/tiba-spark-client-shared-lib.mjs +3559 -3585
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/constants/analytics-constants.d.ts +2 -1
- package/libraries/constants/analytics-constants.d.ts.map +1 -1
- package/libraries/modules/smartparks/smartpark.state.d.ts.map +1 -1
- package/libraries/services/export-file.service.d.ts +14 -11
- package/libraries/services/export-file.service.d.ts.map +1 -1
- package/libraries/services/file-sanitizer.service.d.ts +21 -0
- package/libraries/services/file-sanitizer.service.d.ts.map +1 -0
- package/libraries/services/index.d.ts +1 -0
- package/libraries/services/index.d.ts.map +1 -1
- package/libraries/services/smartpark.service.d.ts +1 -8
- package/libraries/services/smartpark.service.d.ts.map +1 -1
- package/package.json +2 -4
|
@@ -16,10 +16,11 @@ export var AnalyticsEventsText;
|
|
|
16
16
|
AnalyticsEventsText["CouponsFilterByAccount"] = "Coupons filter by account";
|
|
17
17
|
AnalyticsEventsText["CouponsFilterBySubAccount"] = "Coupons filter by sub account";
|
|
18
18
|
AnalyticsEventsText["couponBatchDateValidityChange"] = "Coupon filter by date validity";
|
|
19
|
+
AnalyticsEventsText["importingMonthlies"] = "Importing monthlies";
|
|
19
20
|
})(AnalyticsEventsText || (AnalyticsEventsText = {}));
|
|
20
21
|
export const ReportMethodDictionary = {
|
|
21
22
|
[FileGenerateMethod.viewPDF]: `View report PDF`,
|
|
22
23
|
[FileGenerateMethod.downloadExcel]: `Download report Excel`,
|
|
23
24
|
[FileGenerateMethod.downloadPDF]: `Download report PDF`,
|
|
24
25
|
};
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLWNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvY29uc3RhbnRzL2FuYWx5dGljcy1jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsTUFBTSxDQUFOLElBQVksbUJBaUJYO0FBakJELFdBQVksbUJBQW1CO0lBQzdCLDhEQUF1QyxDQUFBO0lBQ3ZDLDJEQUFvQyxDQUFBO0lBQ3BDLDBDQUFtQixDQUFBO0lBQ25CLG1FQUE0QyxDQUFBO0lBQzVDLGtEQUEyQixDQUFBO0lBQzNCLHFEQUE4QixDQUFBO0lBQzlCLG1EQUE0QixDQUFBO0lBQzVCLHFEQUE4QixDQUFBO0lBQzlCLHFEQUE4QixDQUFBO0lBQzlCLHFEQUE4QixDQUFBO0lBQzlCLGdFQUF5QyxDQUFBO0lBQ3pDLDhFQUF1RCxDQUFBO0lBQ3ZELDJFQUFvRCxDQUFBO0lBQ3BELGtGQUEyRCxDQUFBO0lBQzNELHVGQUFnRSxDQUFBO0lBQ2hFLGlFQUEwQyxDQUFBO0FBQzVDLENBQUMsRUFqQlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQWlCOUI7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxFQUFFLHVCQUF1QjtJQUMzRCxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLHFCQUFxQjtDQUN4RCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUdlbmVyYXRlTWV0aG9kIH0gZnJvbSBcIi4uL3V0aWxzL2ZpbGUudXRpbFwiO1xuXG5leHBvcnQgZW51bSBBbmFseXRpY3NFdmVudHNUZXh0IHtcbiAgUmVwb3J0VHlwZSA9ICdFdmVudCBjaG9vc2UgcmVwb3J0IHR5cGUnLFxuICBTZWxlY3RSZXBvcnQgPSAnRXZlbnQgc2VsZWN0IHJlcG9ydCcsXG4gIENvdXBvbnMgPSBcIkNvdXBvbnNcIixcbiAgU2VuZENvdXBvbnNUb0VtYWlsID0gXCJTZW5kIENvdXBvbnMgdG8gRW1haWxcIixcbiAgTWFya0FzVXNlZCA9IFwiTWFyayBhcyB1c2VkXCIsXG4gIEdlbmVyYWxFcnJvciA9IFwiR2VuZXJhbCBFcnJvclwiLFxuICBQcmludENvdXBvbiA9IFwiUHJpbnQgQ291cG9uXCIsXG4gIERlbGV0ZUNvdXBvbiA9IFwiRGVsZXRlIENvdXBvblwiLFxuICBVcGRhdGVDb3Vwb24gPSBcIlVwZGF0ZSBDb3Vwb25cIixcbiAgQ3JlYXRlQ291cG9uID0gXCJDcmVhdGUgQ291cG9uXCIsXG4gIENyZWF0ZUNvdXBvbkNsaWNrID0gXCJDcmVhdGUgQ291cG9uIGNsaWNrXCIsXG4gIFNlbmRDb3Vwb25zVG9FbWFpbENsaWNrID0gXCJTZW5kIENvdXBvbnMgdG8gRW1haWwgY2xpY2tcIixcbiAgQ291cG9uc0ZpbHRlckJ5QWNjb3VudCA9IFwiQ291cG9ucyBmaWx0ZXIgYnkgYWNjb3VudFwiLFxuICBDb3Vwb25zRmlsdGVyQnlTdWJBY2NvdW50ID0gXCJDb3Vwb25zIGZpbHRlciBieSBzdWIgYWNjb3VudFwiLFxuICBjb3Vwb25CYXRjaERhdGVWYWxpZGl0eUNoYW5nZSA9IFwiQ291cG9uIGZpbHRlciBieSBkYXRlIHZhbGlkaXR5XCIsXG4gIGltcG9ydGluZ01vbnRobGllcyA9IFwiSW1wb3J0aW5nIG1vbnRobGllc1wiLFxufVxuXG5leHBvcnQgY29uc3QgUmVwb3J0TWV0aG9kRGljdGlvbmFyeSA9IHtcbiAgW0ZpbGVHZW5lcmF0ZU1ldGhvZC52aWV3UERGXTogYFZpZXcgcmVwb3J0IFBERmAsXG4gIFtGaWxlR2VuZXJhdGVNZXRob2QuZG93bmxvYWRFeGNlbF06IGBEb3dubG9hZCByZXBvcnQgRXhjZWxgLFxuICBbRmlsZUdlbmVyYXRlTWV0aG9kLmRvd25sb2FkUERGXTogYERvd25sb2FkIHJlcG9ydCBQREZgLFxufVxuIl19
|
|
@@ -295,6 +295,9 @@ let SmartparkState = class SmartparkState {
|
|
|
295
295
|
}));
|
|
296
296
|
}
|
|
297
297
|
onExportPdfSmartparksTableAction(ctx, { filter }) {
|
|
298
|
+
ctx.patchState({
|
|
299
|
+
exportPdfSmartparks: null,
|
|
300
|
+
});
|
|
298
301
|
const smartparks$ = this.smartparkServiceProxy.getSmartparks(filter);
|
|
299
302
|
return smartparks$.pipe(tap(smartparks => {
|
|
300
303
|
ctx.patchState({
|
|
@@ -451,4 +454,4 @@ export { SmartparkState };
|
|
|
451
454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartparkState, decorators: [{
|
|
452
455
|
type: Injectable
|
|
453
456
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.RevenueService }, { type: i3.CloudManagementServiceProxy }, { type: i3.SmartparkServiceProxy }, { type: i4.FacilityServiceProxy }, { type: i4.DeviceServiceProxy }, { type: i5.MessageBarService }, { type: i6.RouteService }, { type: i7.TranslateService }, { type: i8.ExportFileService }]; }, propDecorators: { onLoadSmartparksAction: [], onLoadSmartparksBasicAction: [], onClearSmartparksBasicAction: [], onLoadSmartparksTableAction: [], onSetSmartParkTableAction: [], onSetSmartParksAction: [], onSelectSmartParkAction: [], onLoadParksAction: [], onLoadParkDevices: [], onSelectParkAction: [], onClearSelectedParkAction: [], onClearSelectedsmartparkAction: [], onSmartParkDeviceStatusChangedAction: [], onDisconnectSmartparkAction: [], onSetSmartParkVersionsAction: [], onLoadSpAndSparkVersionsAction: [], onClearSpAndSparkVersionsAction: [], onLoadVarsAction: [], onSyncUsersAndRolesBySmartparkIdAction: [], onExportSmartparksAction: [], onExportPdfSmartparksTableAction: [] } });
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRwYXJrLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL3NtYXJ0cGFya3Mvc21hcnRwYXJrLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXVCLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBOEcsZUFBZSxFQUFFLGFBQWEsRUFBaUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUlqUCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QiwwQkFBMEIsRUFBRSw2QkFBNkIsRUFDekQseUJBQXlC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dUJBQXVCLE1BYXZCLGlCQUFpQixNQTJCakIsaUJBQWlCLE1Bc0JqQixrQkFBa0IsTUFNbEIseUJBQXlCLE1BUXpCLDhCQUE4QixNQU85QixvQ0FBb0MsTUFnQnBDLDJCQUEyQixNQXNCM0IsNEJBQTRCLE1BTzVCLDhCQUE4QixNQVU5QiwrQkFBK0IsTUFPL0IsZ0JBQWdCLE1BV2hCLHNDQUFzQyxNQVF0Qyx3QkFBd0IsTUE0QnhCLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7IElQYXJrRGV0YWlscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFyay1kZXRhaWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIENsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eSwgRmFjaWxpdHlCYXNpY0R0bywgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSwgU21hcnRwYXJrRHRvLCBTbWFydHBhcmtTZXJ2aWNlUHJveHksIFNtYXJ0UGFya1N0YXR1cywgU21hcnRQYXJrVHlwZSwgU3BBbmRTcGFya1ZlcnNpb25zRHRvLCBWYXJEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlUHJveHksIEZhY2lsaXR5U2VydmljZVByb3h5LCBJRGV2aWNlRHRvLCBTbWFydHBhcmtCYXNpY0R0bywgU21hcnRQYXJrV3JhcHBlckR0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgUmV2ZW51ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXZlbnVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGUuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBnZXREZWZhdWx0RGV2aWNlU3RhdHVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGV2aWNlLnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IE1lbnVTdWJNb2R1bGVMb2FkQWN0aW9uIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24sXG4gIENsZWFyU2VsZWN0ZWRTbWFydHBhcmtBY3Rpb24sXG4gIENsZWFyU21hcnRwYXJrc0Jhc2ljQWN0aW9uLCBDbGVhclNwQW5kU3BhcmtWZXJzaW9uc0FjdGlvbixcbiAgRGlzY29ubmVjdFNtYXJ0UGFya0FjdGlvbiwgRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uLCBFeHBvcnRTbWFydHBhcmtBY3Rpb24sIExvYWRQYXJrRGV2aWNlc0FjdGlvbiwgTG9hZFBhcmtzQWN0aW9uLCBMb2FkU21hcnRwYXJrc0FjdGlvbixcbiAgTG9hZFNtYXJ0cGFya3NCYXNpY0FjdGlvbiwgTG9hZFNtYXJ0cGFya3NUYWJsZUFjdGlvbiwgTG9hZFNwQW5kU3BhcmtWZXJzaW9uc0FjdGlvbiwgTG9hZFZhcnNBY3Rpb24sXG4gIFNlbGVjdFBhcmtBY3Rpb24sXG4gIFNlbGVjdFNtYXJ0UGFya0FjdGlvbiwgU2V0U21hcnRQYXJrQWN0aW9uLCBTZXRTbWFydFBhcmtUYWJsZUFjdGlvbiwgU2V0U21hcnRQYXJrVmVyc2lvbnNBY3Rpb24sXG4gIFNtYXJ0UGFya0RldmljZVN0YXR1c0NoYW5nZWRBY3Rpb24sXG4gIFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvblxufSBmcm9tICcuL3NtYXJ0cGFyay5hY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNtYXJ0UGFya1N0YXR1c1RleHQgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBFeHBvcnRGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC1maWxlLnNlcnZpY2UnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRwYXJrc1N0YXRlTW9kZWwge1xuICBzbWFydHBhcmtzOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW107XG4gIGxhdGVzdFNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXTtcbiAgU3BBbmRTcGFya1ZlcnNpb25zOiBTcEFuZFNwYXJrVmVyc2lvbnNEdG87XG4gIGNvdW50U21hcnRQYXJrczogbnVtYmVyO1xuICBjb3VudFBhcmtpbmdMb3RzOiBudW1iZXI7XG4gIHNlbGVjdGVkU21hcnRQYXJrSWQ6IG51bWJlcjtcbiAgc2VsZWN0ZWRTbWFydFBhcms6IFNtYXJ0cGFya0R0bztcbiAgcGFya3M6IEZhY2lsaXR5QmFzaWNEdG9bXTtcbiAgc2VsZWN0ZWRQYXJrSWQ6IG51bWJlcjtcbiAgc2VsZWN0ZWRQYXJrRGV0YWlsczogSVBhcmtEZXRhaWxzO1xuICBzbWFydHBhcmtHdWlkOiBzdHJpbmc7XG4gIHZlcnNpb25zOiBTdHJpbmdNYXA8c3RyaW5nPjtcbiAgc21hcnRQYXJrV3JhcHBlcjogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgdmFyczogVmFyRHRvW107XG4gIGV4cG9ydFBkZlNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXTtcbn1cblxuQEluamVjdGFibGUoKVxuQFN0YXRlPFNtYXJ0cGFya3NTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdzbWFydHBhcmsnLFxuICBkZWZhdWx0czoge1xuICAgIHNtYXJ0cGFya3M6IG51bGwsXG4gICAgbGF0ZXN0U21hcnRwYXJrczogbnVsbCxcbiAgICBjb3VudFNtYXJ0UGFya3M6IDAsXG4gICAgY291bnRQYXJraW5nTG90czogMCxcbiAgICBzZWxlY3RlZFNtYXJ0UGFya0lkOiBudWxsLFxuICAgIHNlbGVjdGVkU21hcnRQYXJrOiBudWxsLFxuICAgIHBhcmtzOiBudWxsLFxuICAgIHNlbGVjdGVkUGFya0lkOiBudWxsLFxuICAgIHNlbGVjdGVkUGFya0RldGFpbHM6IG51bGwsXG4gICAgc21hcnRwYXJrR3VpZDogbnVsbCxcbiAgICB2ZXJzaW9uczoge30sXG4gICAgU3BBbmRTcGFya1ZlcnNpb25zOiBudWxsLFxuICAgIHNtYXJ0UGFya1dyYXBwZXI6IG51bGwsXG4gICAgdmFyczogW10sXG4gICAgZXhwb3J0UGRmU21hcnRwYXJrczogbnVsbFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSByZXZlbnVlU2VydmljZTogUmV2ZW51ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbG91ZE1hbmFnZW1lbnRTZXJ2aWNlUHJveHk6IENsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHNtYXJ0cGFya1NlcnZpY2VQcm94eTogU21hcnRwYXJrU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZVByb3h5OiBEZXZpY2VTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBtZXNzYWdlQmFyU2VydmljZTogTWVzc2FnZUJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHBvcnRGaWxlU2VydmljZTogRXhwb3J0RmlsZVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHBhcmtzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IEZhY2lsaXR5QmFzaWNEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZFBhcmtJZChzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWRQYXJrRGV0YWlscyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBJUGFya0RldGFpbHMge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtEZXRhaWxzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrRGV2aWNlcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBJRGV2aWNlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUuc21hcnRwYXJrR3VpZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRwYXJrcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW10ge1xuICAgIHJldHVybiBzdGF0ZS5zbWFydHBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBsYXRlc3RQYWdlKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXSB7XG4gICAgcmV0dXJuIHN0YXRlLmxhdGVzdFNtYXJ0cGFya3M7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkU21hcnRQYXJrSWQoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRTbWFydFBhcmtJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWRTbWFydFBhcmtEZXRhaWxzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFNtYXJ0cGFya0R0byB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkU21hcnRQYXJrO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBjb3VudFNtYXJ0UGFya3Moc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuY291bnRTbWFydFBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBjb3VudFBhcmtpbmdMb3RzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLmNvdW50UGFya2luZ0xvdHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHZlcnNpb25zKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFN0cmluZ01hcDxzdHJpbmc+IHtcbiAgICByZXR1cm4gc3RhdGUudmVyc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNtYXJ0cGFya1NlYXJjaE9wdGlvbnMoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogU3BBbmRTcGFya1ZlcnNpb25zRHRvIHtcbiAgICByZXR1cm4gc3RhdGUuU3BBbmRTcGFya1ZlcnNpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzbWFydFBhcmtXcmFwcGVyKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHJldHVybiBzdGF0ZS5zbWFydFBhcmtXcmFwcGVyO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB2YXJzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFZhckR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUudmFycztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgZXhwb3J0UGRmU21hcnRwYXJrcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW10ge1xuICAgIHJldHVybiBzdGF0ZS5leHBvcnRQZGZTbWFydHBhcmtzO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkU21hcnRwYXJrc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRTbWFydHBhcmtzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkU21hcnRwYXJrc0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHNtYXJ0cGFya3M6IFtdLFxuICAgICAgY291bnRTbWFydFBhcmtzOiAwLFxuICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoW10pXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbWFydHBhcmtzJCA9IHRoaXMuc21hcnRwYXJrU2VydmljZVByb3h5LmdldEFsbFNtYXJ0UGFya3MoKTtcbiAgICByZXR1cm4gc21hcnRwYXJrcyQucGlwZSh0YXAoc21hcnRwYXJrcyA9PiB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFNtYXJ0UGFya0FjdGlvbihzbWFydHBhcmtzLmRhdGEsIGFjdGlvbi5yZWxvYWQpKTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRTbWFydHBhcmtzQmFzaWNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkU21hcnRwYXJrc0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkU21hcnRwYXJrc0Jhc2ljQWN0aW9uKSB7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBNZW51U3ViTW9kdWxlTG9hZEFjdGlvbihhY3Rpb24uc3ViTW9kdWxlKSk7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldFNtYXJ0cGFya0Jhc2ljQWxsKGFjdGlvbi5hcHBNb2R1bGUpO1xuICAgIHJldHVybiBzbWFydHBhcmtzJC5waXBlKHN3aXRjaE1hcChzbWFydHBhcmtCYXNpYyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNtYXJ0UGFya1dyYXBwZXI6IHNtYXJ0cGFya0Jhc2ljLmRhdGEsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihzbWFydHBhcmtCYXNpYykpO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTbWFydHBhcmtzQmFzaWNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25DbGVhclNtYXJ0cGFya3NCYXNpY0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIF86IENsZWFyU21hcnRwYXJrc0Jhc2ljQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc21hcnRQYXJrV3JhcHBlcjogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFNtYXJ0cGFya3NUYWJsZUFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRTbWFydHBhcmtzVGFibGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCB7IGZpbHRlciB9OiBMb2FkU21hcnRwYXJrc1RhYmxlQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTbWFydHBhcmtzKGZpbHRlcik7XG4gICAgcmV0dXJuIHNtYXJ0cGFya3MkLnBpcGUodGFwKHNtYXJ0cGFya3MgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBsYXRlc3RTbWFydHBhcmtzOiBzbWFydHBhcmtzLmRhdGEuZW50aXRpZXMsXG4gICAgICAgIGNvdW50U21hcnRQYXJrczogc21hcnRwYXJrcy5kYXRhLmNvdW50ZXIsXG4gICAgICAgIGNvdW50UGFya2luZ0xvdHM6IHNtYXJ0cGFya3MuZGF0YS5zdWJDb3VudGVyXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKVxuICBvblNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBzbWFydHBhcmtzIH06IFNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc21hcnRwYXJrc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydFBhcmtBY3Rpb24pXG4gIG9uU2V0U21hcnRQYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIHsgc21hcnRwYXJrcywgcmVsb2FkIH06IFNldFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHNtYXJ0cGFya3M6IHNtYXJ0cGFya3MgfHwgW10sXG4gICAgICBjb3VudFNtYXJ0UGFya3M6IHNtYXJ0cGFya3M/Lmxlbmd0aCB8fCAwLFxuICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoc21hcnRwYXJrcylcbiAgICB9KTtcblxuICAgIGlmIChjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZFNtYXJ0UGFya0lkKSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IFNlbGVjdFNtYXJ0UGFya0FjdGlvbihjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZFNtYXJ0UGFya0lkLCByZWxvYWQpKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKFNlbGVjdFNtYXJ0UGFya0FjdGlvbilcbiAgb25TZWxlY3RTbWFydFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IFNlbGVjdFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGxldCBzZWxlY3RlZFNtYXJ0UGFyaztcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyTWVzc2FnZWJhcigpO1xuICAgIGlmIChjdHguZ2V0U3RhdGUoKS5zbWFydHBhcmtzKSB7XG4gICAgICBzZWxlY3RlZFNtYXJ0UGFyayA9IGN0eC5nZXRTdGF0ZSgpLnNtYXJ0cGFya3MuZmluZCgoc21hcnRwYXJrKSA9PiAoc21hcnRwYXJrIGFzIFNtYXJ0cGFya0R0bykuaWQgPT09IGFjdGlvbi5zbWFydFBhcmtJZCk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlbGVjdGVkU21hcnRQYXJrSWQ6IGFjdGlvbi5zbWFydFBhcmtJZCwgc2VsZWN0ZWRTbWFydFBhcmsgfSk7XG4gICAgICBpZiAoYWN0aW9uLnJlbG9hZCkge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IExvYWRQYXJrc0FjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJrc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRQYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlbGVjdGVkUGFya0RldGFpbHM6IG51bGwsIHNlbGVjdGVkUGFya0lkOiBudWxsIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0U21hcnRwYXJrQmFzaWNBbGwoQXBwTW9kdWxlLk1hbmFnZW1lbnQpLnBpcGUodGFwKHNtYXJ0cGFya01hcCA9PiB7XG4gICAgICBjb25zdCB7IGd1aWQsIHR5cGUgfSA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkU21hcnRQYXJrO1xuICAgICAgaWYgKHNtYXJ0cGFya01hcCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRQYXJrSWQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFya3MgPSBzbWFydHBhcmtNYXAuZGF0YS5zbWFydFBhcmtzW2d1aWRdLmZhY2lsaXRpZXM7XG4gICAgICAgIGlmICh0eXBlID09PSBTbWFydFBhcmtUeXBlLlN1cGVyUGFyaykge1xuICAgICAgICAgIGNvbnN0IG11bHRpUGFyayA9IHBhcmtzLmZpbmQocGFyayA9PiBwYXJrLmlzTXVsdGlQYXJrKTtcbiAgICAgICAgICBzZWxlY3RlZFBhcmtJZCA9IG11bHRpUGFyayA/IG11bHRpUGFyay5pZCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgcGFya3M6IHBhcmtzIHx8IFtdLFxuICAgICAgICAgIHNlbGVjdGVkUGFya0lkOiBzZWxlY3RlZFBhcmtJZCA/PyAocGFya3M/Lmxlbmd0aCAmJiBwYXJrc1swXS5pZCB8fCBudWxsKSxcbiAgICAgICAgICBzbWFydHBhcmtHdWlkOiBndWlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGFya3M/Lmxlbmd0aCkge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChMb2FkUGFya0RldmljZXNBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUGFya0RldmljZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUGFya0RldmljZXMoY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY29uc3QgcGFya0RldGFpbCA9IGN0eC5nZXRTdGF0ZSgpLnBhcmtzLmZpbmQoKHBhcmspID0+IHBhcmsuaWQgPT09IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkUGFya0lkKTtcbiAgICBjb25zdCBndWlkID0gY3R4LmdldFN0YXRlKCkuc21hcnRwYXJrR3VpZDtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0RldGFpbC5pZCwgZ3VpZCksXG4gICAgICB0aGlzLnJldmVudWVTZXJ2aWNlLmdldFJldmVudWUocGFya0RldGFpbC5pZCwgZ3VpZCkucGlwZShmaWx0ZXIocmV2ZW51ZSA9PiAhIXJldmVudWUpKSxcbiAgICAgIHRoaXMuZGV2aWNlU2VydmljZVByb3h5LmdldERldmljZXMocGFya0RldGFpbC5pZCwgbnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGd1aWQpLFxuICAgIF0pLnBpcGUodGFwKChbZmFjaWxpdHksIHJldmVudWVzLCBkZXZpY2VzXSkgPT4ge1xuICAgICAgY29uc3QgcmV2ZW51ZSA9IHBhcmtEZXRhaWwuaXNNdWx0aVBhcmsgPT0gMSA/IHRoaXMucmV2ZW51ZVNlcnZpY2UuY2FsY3VsYXRlUmV2ZW51ZUZvck11bHRpUGFyayhyZXZlbnVlcykgOiByZXZlbnVlc1twYXJrRGV0YWlsLmlkXTtcbiAgICAgIGRldmljZXM/LmRhdGEuZm9yRWFjaChkZXZpY2UgPT4gZGV2aWNlLmRldmljZVN0YXR1cyA9IGRldmljZS5kZXZpY2VTdGF0dXMgPz8gZ2V0RGVmYXVsdERldmljZVN0YXR1cyhkZXZpY2UpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczoge1xuICAgICAgICAgIGZhY2lsaXR5OiBmYWNpbGl0eS5kYXRhLFxuICAgICAgICAgIGRldmljZXM6IGRldmljZXMuZGF0YSxcbiAgICAgICAgICByZXZlbnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oU2VsZWN0UGFya0FjdGlvbilcbiAgb25TZWxlY3RQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZWxlY3RQYXJrQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZWxlY3RlZFBhcmtJZDogYWN0aW9uLnBhcmtJZCB9KTtcbiAgICBjdHguZGlzcGF0Y2goTG9hZFBhcmtEZXZpY2VzQWN0aW9uKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczogbnVsbCxcbiAgICAgIHNlbGVjdGVkUGFya0lkOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkU21hcnRwYXJrQWN0aW9uKVxuICBvbkNsZWFyU2VsZWN0ZWRzbWFydHBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc2VsZWN0ZWRTbWFydFBhcmtJZDogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU21hcnRQYXJrRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbilcbiAgb25TbWFydFBhcmtEZXZpY2VTdGF0dXNDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTbWFydFBhcmtEZXZpY2VTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQYXJrRGV0YWlscyA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkUGFya0RldGFpbHM7XG4gICAgaWYgKHNlbGVjdGVkUGFya0RldGFpbHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRQYXJrRGV0YWlscz8uZGV2aWNlcz8uZmluZEluZGV4KGRldmljZSA9PiBkZXZpY2UuaWQgPT09IGFjdGlvbi5kZXZpY2VTdGF0dXMuZGV2aWNlSUQpO1xuICAgICAgY29uc3QgY29tbXVuaWNhdGlvblBlcmNlbnRhZ2UgPSBzZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXNbaW5kZXhdLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZTtcbiAgICAgIGNvbnN0IG5ld0NvbW1QZXJjZW50YWdlID0gYWN0aW9uLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZTtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGNvbW11bmljYXRpb25QZXJjZW50YWdlICE9PSBuZXdDb21tUGVyY2VudGFnZSkge1xuICAgICAgICBzZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXNbaW5kZXhdLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZSA9IG5ld0NvbW1QZXJjZW50YWdlO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczogY2xvbmVEZWVwKHNlbGVjdGVkUGFya0RldGFpbHMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKERpc2Nvbm5lY3RTbWFydFBhcmtBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25EaXNjb25uZWN0U21hcnRwYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBzbWFydFBhcmtHdWlkLCBzbWFydFBhcmtJZCwgcGFzc3dvcmQgfTogRGlzY29ubmVjdFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNtYXJ0cGFyayQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5kaXNjb25uZWN0KHBhc3N3b3JkLCBzbWFydFBhcmtJZCwgU21hcnRQYXJrU3RhdHVzLk5vbmFjdGl2ZSk7XG4gICAgcmV0dXJuIHNtYXJ0cGFyayQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHYpID0+IHtcbiAgICAgICAgY29uc3Qgc21hcnRwYXJrcyA9IChjdHguZ2V0U3RhdGUoKS5zbWFydHBhcmtzIHx8IFtdKS5maWx0ZXIoc3AgPT4gc3AuZ3VpZCAhPT0gc21hcnRQYXJrR3VpZCk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFNtYXJ0UGFyazogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZFBhcmtJZDogbnVsbCxcbiAgICAgICAgICBzbWFydHBhcmtzLFxuICAgICAgICAgIGNvdW50U21hcnRQYXJrczogc21hcnRwYXJrcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoc21hcnRwYXJrcylcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKCkpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHRoaXMucm91dGVTZXJ2aWNlLmdldE5hdmlnYXRpb25Sb3V0ZShbJ21hbmFnZW1lbnQnLCAnc21hcnRwYXJrcyddKSkpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBpZDogJ21vZGFsJyB9KTtcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydFBhcmtWZXJzaW9uc0FjdGlvbilcbiAgb25TZXRTbWFydFBhcmtWZXJzaW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRQYXJrVmVyc2lvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB2ZXJzaW9uczogYWN0aW9uLnZlcnNpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkU3BBbmRTcGFya1ZlcnNpb25zQWN0aW9uKVxuICBvbkxvYWRTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgaWYgKGN0eC5nZXRTdGF0ZSgpLlNwQW5kU3BhcmtWZXJzaW9ucyA9PSBudWxsKSB7XG4gICAgICBjb25zdCB2ZXJzaW9ucyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTcEFuZFNwYXJrVmVyc2lvbnMoKTtcbiAgICAgIHJldHVybiB2ZXJzaW9ucyQucGlwZSh0YXAodmVyc2lvbnMgPT4ge1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7IFNwQW5kU3BhcmtWZXJzaW9uczogdmVyc2lvbnMuZGF0YSB9KVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24pXG4gIG9uQ2xlYXJTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgU3BBbmRTcGFya1ZlcnNpb25zOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRWYXJzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFZhcnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRWYXJzQWN0aW9uKSB7XG4gICAgY29uc3QgdmFycyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS52YXJzKGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8ubWF4UmVzdWx0cywgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5zZWFyY2hUZXJtLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5vcmRlckJ5LmNvbHVtbiwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICByZXR1cm4gdmFycyQucGlwZSh0YXAodmFycyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHZhcnM6IHZhcnMuZGF0YVxuICAgICAgfSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvbilcbiAgb25TeW5jVXNlcnNBbmRSb2xlc0J5U21hcnRwYXJrSWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvbik6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eS5zeW5jVXNlcnNBbmRSb2xlc0J5U21hcnRwYXJrSWQoYWN0aW9uLnNtYXJ0cGFyay50ZW5hbnRJRCwgYWN0aW9uLnNtYXJ0cGFyay5pZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogXyA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnN1Y2Nlc3NmdWxfc3luY191c2Vyc19hbmRfcm9sZXNfZm9yX3NtYXJ0cGFyaywgeyBtZXNzYWdlUGFyYW1zOiB7IHNtYXJ0cGFya05hbWU6IGFjdGlvbi5zbWFydHBhcmsubmFtZSB9IH0pLFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLkZsb2F0IH0pLFxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRXhwb3J0U21hcnRwYXJrQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uRXhwb3J0U21hcnRwYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIGFjdGlvbjogRXhwb3J0U21hcnRwYXJrQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTbWFydHBhcmtzKGFjdGlvbi5zbWFydHBhcmtGaWx0ZXIpO1xuICAgIHJldHVybiBzbWFydHBhcmtzJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBzbWFydHBhcmtzID0+IHtcbiAgICAgICAgY29uc3QgdGFibGVSb3dzOiBhbnlbXVtdID0gW107XG4gICAgICAgIGNvbnN0IHNtYXJ0cGFya3NMaXN0OiBTbWFydHBhcmtEdG9bXSA9IHNtYXJ0cGFya3MuZGF0YS5lbnRpdGllcztcbiAgICAgICAgc21hcnRwYXJrc0xpc3QuZm9yRWFjaCgoc21hcnRwYXJrKSA9PiB7XG4gICAgICAgICAgdGFibGVSb3dzLnB1c2goW1xuICAgICAgICAgICAgc21hcnRwYXJrLm5hbWUsXG4gICAgICAgICAgICBTbWFydFBhcmtUeXBlW3NtYXJ0cGFyay50eXBlXS5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKS50cmltKCksXG4gICAgICAgICAgICBzbWFydHBhcmsudGVuYW50TmFtZSxcbiAgICAgICAgICAgIHNtYXJ0cGFyay52ZXJzaW9uLFxuICAgICAgICAgICAgc21hcnRwYXJrLnNwYXJrVmVyc2lvbixcbiAgICAgICAgICAgIHNtYXJ0cGFyay5jcmVhdGVkQXQsXG4gICAgICAgICAgICBzbWFydHBhcmsuZ3VpZCxcbiAgICAgICAgICAgIHNtYXJ0cGFyay52YXJOYW1lIHx8ICctJyxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFNtYXJ0UGFya1N0YXR1c1RleHRbU21hcnRQYXJrU3RhdHVzW3NtYXJ0cGFyay5zdGF0dXNdXSlcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhwb3J0RmlsZVNlcnZpY2UuZXhwb3J0KGFjdGlvbi5maWxlVHlwZSwgdGFibGVSb3dzLCBhY3Rpb24uY29sdW1uc0hlYWRlciwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNtYXJ0cGFyaykpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhaWxlZF9leHBvcnRfZmlsZSkpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBmaWx0ZXIgfTogRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTbWFydHBhcmtzKGZpbHRlcik7XG4gICAgcmV0dXJuIHNtYXJ0cGFya3MkLnBpcGUodGFwKHNtYXJ0cGFya3MgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBleHBvcnRQZGZTbWFydHBhcmtzOiBzbWFydHBhcmtzLmRhdGEuZW50aXRpZXMsXG5cbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY291bnRTbWFydHBhcmtGYWNpbGl0aWVzKHNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXSk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50UGFya2luZ0xvdHMgPSAwO1xuICAgIHNtYXJ0cGFya3MuZm9yRWFjaChzbWFydFBhcmsgPT4ge1xuICAgICAgaWYgKHNtYXJ0UGFyay5mYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvdW50UGFya2luZ0xvdHMgKz0gc21hcnRQYXJrLmZhY2lsaXRpZXMuZmlsdGVyKGYgPT4gIWYuaXNNdWx0aVBhcmspLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY291bnRQYXJraW5nTG90cztcbiAgfVxufVxuIl19
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRwYXJrLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL3NtYXJ0cGFya3Mvc21hcnRwYXJrLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXVCLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBOEcsZUFBZSxFQUFFLGFBQWEsRUFBaUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUlqUCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QiwwQkFBMEIsRUFBRSw2QkFBNkIsRUFDekQseUJBQXlC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QUEyQixNQVkzQiw0QkFBNEIsTUFPNUIsMkJBQTJCLE1BWTNCLHlCQUF5QixNQU96QixxQkFBcUIsTUFhckIsdUJBQXVCLE1BYXZCLGlCQUFpQixNQTJCakIsaUJBQWlCLE1Bc0JqQixrQkFBa0IsTUFNbEIseUJBQXlCLE1BUXpCLDhCQUE4QixNQU85QixvQ0FBb0MsTUFnQnBDLDJCQUEyQixNQXNCM0IsNEJBQTRCLE1BTzVCLDhCQUE4QixNQVU5QiwrQkFBK0IsTUFPL0IsZ0JBQWdCLE1BV2hCLHNDQUFzQyxNQVF0Qyx3QkFBd0IsTUE0QnhCLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7IElQYXJrRGV0YWlscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFyay1kZXRhaWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIENsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eSwgRmFjaWxpdHlCYXNpY0R0bywgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSwgU21hcnRwYXJrRHRvLCBTbWFydHBhcmtTZXJ2aWNlUHJveHksIFNtYXJ0UGFya1N0YXR1cywgU21hcnRQYXJrVHlwZSwgU3BBbmRTcGFya1ZlcnNpb25zRHRvLCBWYXJEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlUHJveHksIEZhY2lsaXR5U2VydmljZVByb3h5LCBJRGV2aWNlRHRvLCBTbWFydHBhcmtCYXNpY0R0bywgU21hcnRQYXJrV3JhcHBlckR0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgUmV2ZW51ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXZlbnVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGUuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBnZXREZWZhdWx0RGV2aWNlU3RhdHVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGV2aWNlLnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IE1lbnVTdWJNb2R1bGVMb2FkQWN0aW9uIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24sXG4gIENsZWFyU2VsZWN0ZWRTbWFydHBhcmtBY3Rpb24sXG4gIENsZWFyU21hcnRwYXJrc0Jhc2ljQWN0aW9uLCBDbGVhclNwQW5kU3BhcmtWZXJzaW9uc0FjdGlvbixcbiAgRGlzY29ubmVjdFNtYXJ0UGFya0FjdGlvbiwgRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uLCBFeHBvcnRTbWFydHBhcmtBY3Rpb24sIExvYWRQYXJrRGV2aWNlc0FjdGlvbiwgTG9hZFBhcmtzQWN0aW9uLCBMb2FkU21hcnRwYXJrc0FjdGlvbixcbiAgTG9hZFNtYXJ0cGFya3NCYXNpY0FjdGlvbiwgTG9hZFNtYXJ0cGFya3NUYWJsZUFjdGlvbiwgTG9hZFNwQW5kU3BhcmtWZXJzaW9uc0FjdGlvbiwgTG9hZFZhcnNBY3Rpb24sXG4gIFNlbGVjdFBhcmtBY3Rpb24sXG4gIFNlbGVjdFNtYXJ0UGFya0FjdGlvbiwgU2V0U21hcnRQYXJrQWN0aW9uLCBTZXRTbWFydFBhcmtUYWJsZUFjdGlvbiwgU2V0U21hcnRQYXJrVmVyc2lvbnNBY3Rpb24sXG4gIFNtYXJ0UGFya0RldmljZVN0YXR1c0NoYW5nZWRBY3Rpb24sXG4gIFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvblxufSBmcm9tICcuL3NtYXJ0cGFyay5hY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNtYXJ0UGFya1N0YXR1c1RleHQgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBFeHBvcnRGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC1maWxlLnNlcnZpY2UnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRwYXJrc1N0YXRlTW9kZWwge1xuICBzbWFydHBhcmtzOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW107XG4gIGxhdGVzdFNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXTtcbiAgU3BBbmRTcGFya1ZlcnNpb25zOiBTcEFuZFNwYXJrVmVyc2lvbnNEdG87XG4gIGNvdW50U21hcnRQYXJrczogbnVtYmVyO1xuICBjb3VudFBhcmtpbmdMb3RzOiBudW1iZXI7XG4gIHNlbGVjdGVkU21hcnRQYXJrSWQ6IG51bWJlcjtcbiAgc2VsZWN0ZWRTbWFydFBhcms6IFNtYXJ0cGFya0R0bztcbiAgcGFya3M6IEZhY2lsaXR5QmFzaWNEdG9bXTtcbiAgc2VsZWN0ZWRQYXJrSWQ6IG51bWJlcjtcbiAgc2VsZWN0ZWRQYXJrRGV0YWlsczogSVBhcmtEZXRhaWxzO1xuICBzbWFydHBhcmtHdWlkOiBzdHJpbmc7XG4gIHZlcnNpb25zOiBTdHJpbmdNYXA8c3RyaW5nPjtcbiAgc21hcnRQYXJrV3JhcHBlcjogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgdmFyczogVmFyRHRvW107XG4gIGV4cG9ydFBkZlNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXTtcbn1cblxuQEluamVjdGFibGUoKVxuQFN0YXRlPFNtYXJ0cGFya3NTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdzbWFydHBhcmsnLFxuICBkZWZhdWx0czoge1xuICAgIHNtYXJ0cGFya3M6IG51bGwsXG4gICAgbGF0ZXN0U21hcnRwYXJrczogbnVsbCxcbiAgICBjb3VudFNtYXJ0UGFya3M6IDAsXG4gICAgY291bnRQYXJraW5nTG90czogMCxcbiAgICBzZWxlY3RlZFNtYXJ0UGFya0lkOiBudWxsLFxuICAgIHNlbGVjdGVkU21hcnRQYXJrOiBudWxsLFxuICAgIHBhcmtzOiBudWxsLFxuICAgIHNlbGVjdGVkUGFya0lkOiBudWxsLFxuICAgIHNlbGVjdGVkUGFya0RldGFpbHM6IG51bGwsXG4gICAgc21hcnRwYXJrR3VpZDogbnVsbCxcbiAgICB2ZXJzaW9uczoge30sXG4gICAgU3BBbmRTcGFya1ZlcnNpb25zOiBudWxsLFxuICAgIHNtYXJ0UGFya1dyYXBwZXI6IG51bGwsXG4gICAgdmFyczogW10sXG4gICAgZXhwb3J0UGRmU21hcnRwYXJrczogbnVsbFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSByZXZlbnVlU2VydmljZTogUmV2ZW51ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbG91ZE1hbmFnZW1lbnRTZXJ2aWNlUHJveHk6IENsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHNtYXJ0cGFya1NlcnZpY2VQcm94eTogU21hcnRwYXJrU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZVByb3h5OiBEZXZpY2VTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBtZXNzYWdlQmFyU2VydmljZTogTWVzc2FnZUJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHBvcnRGaWxlU2VydmljZTogRXhwb3J0RmlsZVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHBhcmtzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IEZhY2lsaXR5QmFzaWNEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZFBhcmtJZChzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWRQYXJrRGV0YWlscyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBJUGFya0RldGFpbHMge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtEZXRhaWxzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrRGV2aWNlcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiBJRGV2aWNlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUuc21hcnRwYXJrR3VpZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRwYXJrcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW10ge1xuICAgIHJldHVybiBzdGF0ZS5zbWFydHBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBsYXRlc3RQYWdlKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXSB7XG4gICAgcmV0dXJuIHN0YXRlLmxhdGVzdFNtYXJ0cGFya3M7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkU21hcnRQYXJrSWQoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRTbWFydFBhcmtJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWRTbWFydFBhcmtEZXRhaWxzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFNtYXJ0cGFya0R0byB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkU21hcnRQYXJrO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBjb3VudFNtYXJ0UGFya3Moc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuY291bnRTbWFydFBhcmtzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBjb3VudFBhcmtpbmdMb3RzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLmNvdW50UGFya2luZ0xvdHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHZlcnNpb25zKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFN0cmluZ01hcDxzdHJpbmc+IHtcbiAgICByZXR1cm4gc3RhdGUudmVyc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNtYXJ0cGFya1NlYXJjaE9wdGlvbnMoc3RhdGU6IFNtYXJ0cGFya3NTdGF0ZU1vZGVsKTogU3BBbmRTcGFya1ZlcnNpb25zRHRvIHtcbiAgICByZXR1cm4gc3RhdGUuU3BBbmRTcGFya1ZlcnNpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzbWFydFBhcmtXcmFwcGVyKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHJldHVybiBzdGF0ZS5zbWFydFBhcmtXcmFwcGVyO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB2YXJzKHN0YXRlOiBTbWFydHBhcmtzU3RhdGVNb2RlbCk6IFZhckR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUudmFycztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgZXhwb3J0UGRmU21hcnRwYXJrcyhzdGF0ZTogU21hcnRwYXJrc1N0YXRlTW9kZWwpOiAoU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8pW10ge1xuICAgIHJldHVybiBzdGF0ZS5leHBvcnRQZGZTbWFydHBhcmtzO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkU21hcnRwYXJrc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRTbWFydHBhcmtzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkU21hcnRwYXJrc0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHNtYXJ0cGFya3M6IFtdLFxuICAgICAgY291bnRTbWFydFBhcmtzOiAwLFxuICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoW10pXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbWFydHBhcmtzJCA9IHRoaXMuc21hcnRwYXJrU2VydmljZVByb3h5LmdldEFsbFNtYXJ0UGFya3MoKTtcbiAgICByZXR1cm4gc21hcnRwYXJrcyQucGlwZSh0YXAoc21hcnRwYXJrcyA9PiB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFNtYXJ0UGFya0FjdGlvbihzbWFydHBhcmtzLmRhdGEsIGFjdGlvbi5yZWxvYWQpKTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRTbWFydHBhcmtzQmFzaWNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkU21hcnRwYXJrc0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkU21hcnRwYXJrc0Jhc2ljQWN0aW9uKSB7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBNZW51U3ViTW9kdWxlTG9hZEFjdGlvbihhY3Rpb24uc3ViTW9kdWxlKSk7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldFNtYXJ0cGFya0Jhc2ljQWxsKGFjdGlvbi5hcHBNb2R1bGUpO1xuICAgIHJldHVybiBzbWFydHBhcmtzJC5waXBlKHN3aXRjaE1hcChzbWFydHBhcmtCYXNpYyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNtYXJ0UGFya1dyYXBwZXI6IHNtYXJ0cGFya0Jhc2ljLmRhdGEsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihzbWFydHBhcmtCYXNpYykpO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTbWFydHBhcmtzQmFzaWNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25DbGVhclNtYXJ0cGFya3NCYXNpY0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIF86IENsZWFyU21hcnRwYXJrc0Jhc2ljQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc21hcnRQYXJrV3JhcHBlcjogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFNtYXJ0cGFya3NUYWJsZUFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRTbWFydHBhcmtzVGFibGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCB7IGZpbHRlciB9OiBMb2FkU21hcnRwYXJrc1RhYmxlQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTbWFydHBhcmtzKGZpbHRlcik7XG4gICAgcmV0dXJuIHNtYXJ0cGFya3MkLnBpcGUodGFwKHNtYXJ0cGFya3MgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBsYXRlc3RTbWFydHBhcmtzOiBzbWFydHBhcmtzLmRhdGEuZW50aXRpZXMsXG4gICAgICAgIGNvdW50U21hcnRQYXJrczogc21hcnRwYXJrcy5kYXRhLmNvdW50ZXIsXG4gICAgICAgIGNvdW50UGFya2luZ0xvdHM6IHNtYXJ0cGFya3MuZGF0YS5zdWJDb3VudGVyXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKVxuICBvblNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBzbWFydHBhcmtzIH06IFNldFNtYXJ0UGFya1RhYmxlQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc21hcnRwYXJrc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydFBhcmtBY3Rpb24pXG4gIG9uU2V0U21hcnRQYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIHsgc21hcnRwYXJrcywgcmVsb2FkIH06IFNldFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHNtYXJ0cGFya3M6IHNtYXJ0cGFya3MgfHwgW10sXG4gICAgICBjb3VudFNtYXJ0UGFya3M6IHNtYXJ0cGFya3M/Lmxlbmd0aCB8fCAwLFxuICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoc21hcnRwYXJrcylcbiAgICB9KTtcblxuICAgIGlmIChjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZFNtYXJ0UGFya0lkKSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IFNlbGVjdFNtYXJ0UGFya0FjdGlvbihjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZFNtYXJ0UGFya0lkLCByZWxvYWQpKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKFNlbGVjdFNtYXJ0UGFya0FjdGlvbilcbiAgb25TZWxlY3RTbWFydFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IFNlbGVjdFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGxldCBzZWxlY3RlZFNtYXJ0UGFyaztcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyTWVzc2FnZWJhcigpO1xuICAgIGlmIChjdHguZ2V0U3RhdGUoKS5zbWFydHBhcmtzKSB7XG4gICAgICBzZWxlY3RlZFNtYXJ0UGFyayA9IGN0eC5nZXRTdGF0ZSgpLnNtYXJ0cGFya3MuZmluZCgoc21hcnRwYXJrKSA9PiAoc21hcnRwYXJrIGFzIFNtYXJ0cGFya0R0bykuaWQgPT09IGFjdGlvbi5zbWFydFBhcmtJZCk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlbGVjdGVkU21hcnRQYXJrSWQ6IGFjdGlvbi5zbWFydFBhcmtJZCwgc2VsZWN0ZWRTbWFydFBhcmsgfSk7XG4gICAgICBpZiAoYWN0aW9uLnJlbG9hZCkge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IExvYWRQYXJrc0FjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJrc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRQYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlbGVjdGVkUGFya0RldGFpbHM6IG51bGwsIHNlbGVjdGVkUGFya0lkOiBudWxsIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0U21hcnRwYXJrQmFzaWNBbGwoQXBwTW9kdWxlLk1hbmFnZW1lbnQpLnBpcGUodGFwKHNtYXJ0cGFya01hcCA9PiB7XG4gICAgICBjb25zdCB7IGd1aWQsIHR5cGUgfSA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkU21hcnRQYXJrO1xuICAgICAgaWYgKHNtYXJ0cGFya01hcCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRQYXJrSWQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFya3MgPSBzbWFydHBhcmtNYXAuZGF0YS5zbWFydFBhcmtzW2d1aWRdLmZhY2lsaXRpZXM7XG4gICAgICAgIGlmICh0eXBlID09PSBTbWFydFBhcmtUeXBlLlN1cGVyUGFyaykge1xuICAgICAgICAgIGNvbnN0IG11bHRpUGFyayA9IHBhcmtzLmZpbmQocGFyayA9PiBwYXJrLmlzTXVsdGlQYXJrKTtcbiAgICAgICAgICBzZWxlY3RlZFBhcmtJZCA9IG11bHRpUGFyayA/IG11bHRpUGFyay5pZCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgcGFya3M6IHBhcmtzIHx8IFtdLFxuICAgICAgICAgIHNlbGVjdGVkUGFya0lkOiBzZWxlY3RlZFBhcmtJZCA/PyAocGFya3M/Lmxlbmd0aCAmJiBwYXJrc1swXS5pZCB8fCBudWxsKSxcbiAgICAgICAgICBzbWFydHBhcmtHdWlkOiBndWlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGFya3M/Lmxlbmd0aCkge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChMb2FkUGFya0RldmljZXNBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUGFya0RldmljZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUGFya0RldmljZXMoY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY29uc3QgcGFya0RldGFpbCA9IGN0eC5nZXRTdGF0ZSgpLnBhcmtzLmZpbmQoKHBhcmspID0+IHBhcmsuaWQgPT09IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkUGFya0lkKTtcbiAgICBjb25zdCBndWlkID0gY3R4LmdldFN0YXRlKCkuc21hcnRwYXJrR3VpZDtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0RldGFpbC5pZCwgZ3VpZCksXG4gICAgICB0aGlzLnJldmVudWVTZXJ2aWNlLmdldFJldmVudWUocGFya0RldGFpbC5pZCwgZ3VpZCkucGlwZShmaWx0ZXIocmV2ZW51ZSA9PiAhIXJldmVudWUpKSxcbiAgICAgIHRoaXMuZGV2aWNlU2VydmljZVByb3h5LmdldERldmljZXMocGFya0RldGFpbC5pZCwgbnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGd1aWQpLFxuICAgIF0pLnBpcGUodGFwKChbZmFjaWxpdHksIHJldmVudWVzLCBkZXZpY2VzXSkgPT4ge1xuICAgICAgY29uc3QgcmV2ZW51ZSA9IHBhcmtEZXRhaWwuaXNNdWx0aVBhcmsgPT0gMSA/IHRoaXMucmV2ZW51ZVNlcnZpY2UuY2FsY3VsYXRlUmV2ZW51ZUZvck11bHRpUGFyayhyZXZlbnVlcykgOiByZXZlbnVlc1twYXJrRGV0YWlsLmlkXTtcbiAgICAgIGRldmljZXM/LmRhdGEuZm9yRWFjaChkZXZpY2UgPT4gZGV2aWNlLmRldmljZVN0YXR1cyA9IGRldmljZS5kZXZpY2VTdGF0dXMgPz8gZ2V0RGVmYXVsdERldmljZVN0YXR1cyhkZXZpY2UpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczoge1xuICAgICAgICAgIGZhY2lsaXR5OiBmYWNpbGl0eS5kYXRhLFxuICAgICAgICAgIGRldmljZXM6IGRldmljZXMuZGF0YSxcbiAgICAgICAgICByZXZlbnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oU2VsZWN0UGFya0FjdGlvbilcbiAgb25TZWxlY3RQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZWxlY3RQYXJrQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZWxlY3RlZFBhcmtJZDogYWN0aW9uLnBhcmtJZCB9KTtcbiAgICBjdHguZGlzcGF0Y2goTG9hZFBhcmtEZXZpY2VzQWN0aW9uKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczogbnVsbCxcbiAgICAgIHNlbGVjdGVkUGFya0lkOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkU21hcnRwYXJrQWN0aW9uKVxuICBvbkNsZWFyU2VsZWN0ZWRzbWFydHBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgc2VsZWN0ZWRTbWFydFBhcmtJZDogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU21hcnRQYXJrRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbilcbiAgb25TbWFydFBhcmtEZXZpY2VTdGF0dXNDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTbWFydFBhcmtEZXZpY2VTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQYXJrRGV0YWlscyA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkUGFya0RldGFpbHM7XG4gICAgaWYgKHNlbGVjdGVkUGFya0RldGFpbHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRQYXJrRGV0YWlscz8uZGV2aWNlcz8uZmluZEluZGV4KGRldmljZSA9PiBkZXZpY2UuaWQgPT09IGFjdGlvbi5kZXZpY2VTdGF0dXMuZGV2aWNlSUQpO1xuICAgICAgY29uc3QgY29tbXVuaWNhdGlvblBlcmNlbnRhZ2UgPSBzZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXNbaW5kZXhdLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZTtcbiAgICAgIGNvbnN0IG5ld0NvbW1QZXJjZW50YWdlID0gYWN0aW9uLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZTtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGNvbW11bmljYXRpb25QZXJjZW50YWdlICE9PSBuZXdDb21tUGVyY2VudGFnZSkge1xuICAgICAgICBzZWxlY3RlZFBhcmtEZXRhaWxzLmRldmljZXNbaW5kZXhdLmRldmljZVN0YXR1cy5jb21tdW5pY2F0aW9uUGVyY2VudGFnZSA9IG5ld0NvbW1QZXJjZW50YWdlO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRQYXJrRGV0YWlsczogY2xvbmVEZWVwKHNlbGVjdGVkUGFya0RldGFpbHMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKERpc2Nvbm5lY3RTbWFydFBhcmtBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25EaXNjb25uZWN0U21hcnRwYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBzbWFydFBhcmtHdWlkLCBzbWFydFBhcmtJZCwgcGFzc3dvcmQgfTogRGlzY29ubmVjdFNtYXJ0UGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNtYXJ0cGFyayQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5kaXNjb25uZWN0KHBhc3N3b3JkLCBzbWFydFBhcmtJZCwgU21hcnRQYXJrU3RhdHVzLk5vbmFjdGl2ZSk7XG4gICAgcmV0dXJuIHNtYXJ0cGFyayQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHYpID0+IHtcbiAgICAgICAgY29uc3Qgc21hcnRwYXJrcyA9IChjdHguZ2V0U3RhdGUoKS5zbWFydHBhcmtzIHx8IFtdKS5maWx0ZXIoc3AgPT4gc3AuZ3VpZCAhPT0gc21hcnRQYXJrR3VpZCk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFNtYXJ0UGFyazogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZFBhcmtJZDogbnVsbCxcbiAgICAgICAgICBzbWFydHBhcmtzLFxuICAgICAgICAgIGNvdW50U21hcnRQYXJrczogc21hcnRwYXJrcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgY291bnRQYXJraW5nTG90czogdGhpcy5jb3VudFNtYXJ0cGFya0ZhY2lsaXRpZXMoc21hcnRwYXJrcylcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKCkpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHRoaXMucm91dGVTZXJ2aWNlLmdldE5hdmlnYXRpb25Sb3V0ZShbJ21hbmFnZW1lbnQnLCAnc21hcnRwYXJrcyddKSkpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBpZDogJ21vZGFsJyB9KTtcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydFBhcmtWZXJzaW9uc0FjdGlvbilcbiAgb25TZXRTbWFydFBhcmtWZXJzaW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRQYXJrVmVyc2lvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB2ZXJzaW9uczogYWN0aW9uLnZlcnNpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkU3BBbmRTcGFya1ZlcnNpb25zQWN0aW9uKVxuICBvbkxvYWRTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgaWYgKGN0eC5nZXRTdGF0ZSgpLlNwQW5kU3BhcmtWZXJzaW9ucyA9PSBudWxsKSB7XG4gICAgICBjb25zdCB2ZXJzaW9ucyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTcEFuZFNwYXJrVmVyc2lvbnMoKTtcbiAgICAgIHJldHVybiB2ZXJzaW9ucyQucGlwZSh0YXAodmVyc2lvbnMgPT4ge1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7IFNwQW5kU3BhcmtWZXJzaW9uczogdmVyc2lvbnMuZGF0YSB9KVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24pXG4gIG9uQ2xlYXJTcEFuZFNwYXJrVmVyc2lvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgU3BBbmRTcGFya1ZlcnNpb25zOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRWYXJzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFZhcnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRWYXJzQWN0aW9uKSB7XG4gICAgY29uc3QgdmFycyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS52YXJzKGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8ubWF4UmVzdWx0cywgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5zZWFyY2hUZXJtLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5vcmRlckJ5LmNvbHVtbiwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0by5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICByZXR1cm4gdmFycyQucGlwZSh0YXAodmFycyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHZhcnM6IHZhcnMuZGF0YVxuICAgICAgfSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvbilcbiAgb25TeW5jVXNlcnNBbmRSb2xlc0J5U21hcnRwYXJrSWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U21hcnRwYXJrc1N0YXRlTW9kZWw+LCBhY3Rpb246IFN5bmNVc2Vyc0FuZFJvbGVzQnlTbWFydHBhcmtJZEFjdGlvbik6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3VkTWFuYWdlbWVudFNlcnZpY2VQcm94eS5zeW5jVXNlcnNBbmRSb2xlc0J5U21hcnRwYXJrSWQoYWN0aW9uLnNtYXJ0cGFyay50ZW5hbnRJRCwgYWN0aW9uLnNtYXJ0cGFyay5pZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogXyA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnN1Y2Nlc3NmdWxfc3luY191c2Vyc19hbmRfcm9sZXNfZm9yX3NtYXJ0cGFyaywgeyBtZXNzYWdlUGFyYW1zOiB7IHNtYXJ0cGFya05hbWU6IGFjdGlvbi5zbWFydHBhcmsubmFtZSB9IH0pLFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLkZsb2F0IH0pLFxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRXhwb3J0U21hcnRwYXJrQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uRXhwb3J0U21hcnRwYXJrc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTbWFydHBhcmtzU3RhdGVNb2RlbD4sIGFjdGlvbjogRXhwb3J0U21hcnRwYXJrQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrcyQgPSB0aGlzLnNtYXJ0cGFya1NlcnZpY2VQcm94eS5nZXRTbWFydHBhcmtzKGFjdGlvbi5zbWFydHBhcmtGaWx0ZXIpO1xuICAgIHJldHVybiBzbWFydHBhcmtzJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBzbWFydHBhcmtzID0+IHtcbiAgICAgICAgY29uc3QgdGFibGVSb3dzOiBhbnlbXVtdID0gW107XG4gICAgICAgIGNvbnN0IHNtYXJ0cGFya3NMaXN0OiBTbWFydHBhcmtEdG9bXSA9IHNtYXJ0cGFya3MuZGF0YS5lbnRpdGllcztcbiAgICAgICAgc21hcnRwYXJrc0xpc3QuZm9yRWFjaCgoc21hcnRwYXJrKSA9PiB7XG4gICAgICAgICAgdGFibGVSb3dzLnB1c2goW1xuICAgICAgICAgICAgc21hcnRwYXJrLm5hbWUsXG4gICAgICAgICAgICBTbWFydFBhcmtUeXBlW3NtYXJ0cGFyay50eXBlXS5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKS50cmltKCksXG4gICAgICAgICAgICBzbWFydHBhcmsudGVuYW50TmFtZSxcbiAgICAgICAgICAgIHNtYXJ0cGFyay52ZXJzaW9uLFxuICAgICAgICAgICAgc21hcnRwYXJrLnNwYXJrVmVyc2lvbixcbiAgICAgICAgICAgIHNtYXJ0cGFyay5jcmVhdGVkQXQsXG4gICAgICAgICAgICBzbWFydHBhcmsuZ3VpZCxcbiAgICAgICAgICAgIHNtYXJ0cGFyay52YXJOYW1lIHx8ICctJyxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFNtYXJ0UGFya1N0YXR1c1RleHRbU21hcnRQYXJrU3RhdHVzW3NtYXJ0cGFyay5zdGF0dXNdXSlcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhwb3J0RmlsZVNlcnZpY2UuZXhwb3J0KGFjdGlvbi5maWxlVHlwZSwgdGFibGVSb3dzLCBhY3Rpb24uY29sdW1uc0hlYWRlciwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNtYXJ0cGFyaykpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhaWxlZF9leHBvcnRfZmlsZSkpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNtYXJ0cGFya3NTdGF0ZU1vZGVsPiwgeyBmaWx0ZXIgfTogRXhwb3J0UGRmU21hcnRwYXJrc1RhYmxlQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZXhwb3J0UGRmU21hcnRwYXJrczogbnVsbCxcbiAgICB9KTtcbiAgICBjb25zdCBzbWFydHBhcmtzJCA9IHRoaXMuc21hcnRwYXJrU2VydmljZVByb3h5LmdldFNtYXJ0cGFya3MoZmlsdGVyKTtcbiAgICByZXR1cm4gc21hcnRwYXJrcyQucGlwZSh0YXAoc21hcnRwYXJrcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGV4cG9ydFBkZlNtYXJ0cGFya3M6IHNtYXJ0cGFya3MuZGF0YS5lbnRpdGllcyxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY291bnRTbWFydHBhcmtGYWNpbGl0aWVzKHNtYXJ0cGFya3M6IChTbWFydHBhcmtEdG8gfCBTbWFydHBhcmtCYXNpY0R0bylbXSk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50UGFya2luZ0xvdHMgPSAwO1xuICAgIHNtYXJ0cGFya3MuZm9yRWFjaChzbWFydFBhcmsgPT4ge1xuICAgICAgaWYgKHNtYXJ0UGFyay5mYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvdW50UGFya2luZ0xvdHMgKz0gc21hcnRQYXJrLmZhY2lsaXRpZXMuZmlsdGVyKGYgPT4gIWYuaXNNdWx0aVBhcmspLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY291bnRQYXJraW5nTG90cztcbiAgfVxufVxuIl19
|
|
@@ -1,96 +1,24 @@
|
|
|
1
1
|
import { Injectable } from "@angular/core";
|
|
2
|
+
import { TranslateService } from "@ngx-translate/core";
|
|
2
3
|
import { Workbook } from 'exceljs';
|
|
3
4
|
import { saveAs } from 'file-saver';
|
|
4
|
-
import
|
|
5
|
-
import autoTable from 'jspdf-autotable';
|
|
6
|
-
import { FONT_BASE64 } from "../static-files";
|
|
5
|
+
import { MessageBarService } from "../components";
|
|
7
6
|
import { BOM_UNICODE } from "../constants";
|
|
8
7
|
import { Localization } from "../enums";
|
|
9
|
-
import { getMomenWithTime } from "../utils";
|
|
10
8
|
import { FileType } from "../service-proxy/cloud-service-proxies";
|
|
9
|
+
import { getMomenWithTime } from "../utils";
|
|
10
|
+
import { FileSanitizerService } from "./file-sanitizer.service";
|
|
11
|
+
import { TenantService } from "./tenant.service";
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../components";
|
|
13
|
-
import * as i2 from "@ngx-translate/core";
|
|
14
|
-
import * as i3 from "./tenant.service";
|
|
15
13
|
export class ExportFileService {
|
|
16
|
-
constructor(
|
|
17
|
-
this.messageBarService = messageBarService;
|
|
18
|
-
this.translateService = translateService;
|
|
19
|
-
this.tenantService = tenantService;
|
|
14
|
+
constructor(injector) {
|
|
20
15
|
this.fontFamily = 'arial';
|
|
21
16
|
this.maxCellLentgh = 20;
|
|
22
17
|
this.infoMessageBarDuration = 6000;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// Check if it's the top border of the table
|
|
28
|
-
if (cellHookData.section === 'body') {
|
|
29
|
-
// Remove the top border from the cell
|
|
30
|
-
let cell;
|
|
31
|
-
let i = 0;
|
|
32
|
-
if (cellHookData.row.index === tableRows.length - 1) {
|
|
33
|
-
for (cell in cellHookData.row.cells) {
|
|
34
|
-
if (++i === 1) {
|
|
35
|
-
cellHookData.row.cells[cell].styles.lineWidth = { top: 0, left: 0.1, right: 0, bottom: 0.1 };
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
cellHookData.row.cells[cell].styles.lineWidth = { top: 0, left: 0, right: 0, bottom: 0.1 };
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
cellHookData.row.cells[cell].styles.lineWidth = { top: 0, left: 0, right: 0.1, bottom: 0.1 };
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
// modifiy style for last row
|
|
45
|
-
for (cell in cellHookData.row.cells) {
|
|
46
|
-
if (++i === 1) {
|
|
47
|
-
cellHookData.row.cells[cell].styles.lineWidth = { top: 0, left: 0.1, right: 0, bottom: 0 };
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
cellHookData.row.cells[cell].styles.lineWidth = 0;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
cellHookData.row.cells[cell].styles.lineWidth = { top: 0, left: 0, right: 0.1, bottom: 0 };
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const colorRowsInRed = (data) => {
|
|
58
|
-
if (redColorRows?.length > 0) {
|
|
59
|
-
let rowNumber = data.row?.index;
|
|
60
|
-
if (rowNumber > 0 && redColorRows[rowNumber] === true) {
|
|
61
|
-
data.cell.styles.textColor = [255, 14, 77];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const callAddFont = function () {
|
|
66
|
-
this.addFileToVFS('arial-normal.ttf', FONT_BASE64);
|
|
67
|
-
this.addFont('arial-normal.ttf', 'arial', 'normal');
|
|
68
|
-
};
|
|
69
|
-
jsPDF.API.events.push(['addFonts', callAddFont]);
|
|
70
|
-
const doc = new jsPDF();
|
|
71
|
-
doc.setFont('arial', 'normal');
|
|
72
|
-
autoTable(doc, {
|
|
73
|
-
headStyles: {
|
|
74
|
-
halign: 'center', font: this.fontFamily, fontStyle: 'bold', cellWidth: 'wrap',
|
|
75
|
-
fontSize: 10, fillColor: [220, 220, 220], textColor: [0, 0, 0],
|
|
76
|
-
lineWidth: { top: 0.2, left: 0.2, right: 0.2, bottom: 0.6 }, lineColor: [0, 0, 0],
|
|
77
|
-
minCellWidth: 5
|
|
78
|
-
},
|
|
79
|
-
bodyStyles: {
|
|
80
|
-
font: this.fontFamily,
|
|
81
|
-
lineWidth: { top: 0.1, left: 0.1, right: 0.1, bottom: 0.1 }, lineColor: [0, 0, 0],
|
|
82
|
-
fontSize: 8
|
|
83
|
-
},
|
|
84
|
-
margin: { top: 5, left: 5, right: 5, bottom: 5 },
|
|
85
|
-
head: [header],
|
|
86
|
-
body: tableRows,
|
|
87
|
-
theme: 'striped',
|
|
88
|
-
willDrawCell: handleCellDraw,
|
|
89
|
-
didParseCell: colorRowsInRed
|
|
90
|
-
});
|
|
91
|
-
doc.save(`${entityName}.pdf`);
|
|
92
|
-
resolve(null);
|
|
93
|
-
});
|
|
18
|
+
this.messageBarService = injector.get(MessageBarService);
|
|
19
|
+
this.translateService = injector.get(TranslateService);
|
|
20
|
+
this.tenantService = injector.get(TenantService);
|
|
21
|
+
this.fileSanitizerService = injector.get(FileSanitizerService);
|
|
94
22
|
}
|
|
95
23
|
toExcel(tableRows, header, entityName, redColorRows = null) {
|
|
96
24
|
return new Promise(resolve => {
|
|
@@ -98,7 +26,8 @@ export class ExportFileService {
|
|
|
98
26
|
let worksheet = workbook.addWorksheet(entityName);
|
|
99
27
|
let headerRow = worksheet.addRow(header);
|
|
100
28
|
this.setExcelHeaderStyle(headerRow);
|
|
101
|
-
|
|
29
|
+
const sanitizeTableRows = tableRows.map(row => row.map(value => this.fileSanitizerService.sanitizeExcel(value)));
|
|
30
|
+
worksheet.addRows(sanitizeTableRows);
|
|
102
31
|
this.setExcelColumnsWitdh(worksheet);
|
|
103
32
|
this.colorRowsInRed(worksheet, redColorRows);
|
|
104
33
|
workbook.xlsx.writeBuffer().then((data) => {
|
|
@@ -130,7 +59,6 @@ export class ExportFileService {
|
|
|
130
59
|
saveAs(csvBlob, `${entityName}.csv`);
|
|
131
60
|
}
|
|
132
61
|
export(fileType, tableRows, header, entityName, redColorRows = null) {
|
|
133
|
-
this.infoMessageBar(entityName);
|
|
134
62
|
const succesMessage = {
|
|
135
63
|
messageParams: { fileType: FileType[fileType] }
|
|
136
64
|
};
|
|
@@ -197,6 +125,15 @@ export class ExportFileService {
|
|
|
197
125
|
}
|
|
198
126
|
return result;
|
|
199
127
|
}
|
|
128
|
+
infoMessageBar(entityName) {
|
|
129
|
+
const messageInfo = {
|
|
130
|
+
duration: this.infoMessageBarDuration,
|
|
131
|
+
messageParams: {
|
|
132
|
+
entityName
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
this.messageBarService.info(Localization.export_is_being_proccessed, messageInfo);
|
|
136
|
+
}
|
|
200
137
|
setExcelColumnsWitdh(worksheet) {
|
|
201
138
|
worksheet.columns.forEach((column) => {
|
|
202
139
|
column.eachCell({ includeEmpty: true }, (cell) => {
|
|
@@ -233,31 +170,20 @@ export class ExportFileService {
|
|
|
233
170
|
csvRows.push(headerRow);
|
|
234
171
|
array.forEach(item => {
|
|
235
172
|
const values = Object.values(item);
|
|
236
|
-
const csvRow = values.map(value =>
|
|
173
|
+
const csvRow = values.map(value => this.fileSanitizerService.sanitizeCSV(value)).join(',');
|
|
237
174
|
csvRows.push(csvRow);
|
|
238
175
|
});
|
|
239
176
|
return csvRows.join('\n');
|
|
240
177
|
}
|
|
241
|
-
infoMessageBar(entityName) {
|
|
242
|
-
const messageInfo = {
|
|
243
|
-
duration: this.infoMessageBarDuration,
|
|
244
|
-
messageParams: {
|
|
245
|
-
entity: this.translateService.instant(Localization.monthlies)
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
this.messageBarService.info(this.translateService.instant(Localization.export_is_being_proccessed, { entityName }), messageInfo);
|
|
249
|
-
}
|
|
250
178
|
reverseHebrewLetters(str) {
|
|
251
179
|
let isHebrew = (/[\u0590-\u05FF]/).test(str);
|
|
252
180
|
return isHebrew ? str.split('').reverse().join('') : str;
|
|
253
181
|
}
|
|
254
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExportFileService, deps: [{ token:
|
|
182
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExportFileService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
255
183
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExportFileService, providedIn: 'root' }); }
|
|
256
184
|
}
|
|
257
185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExportFileService, decorators: [{
|
|
258
186
|
type: Injectable,
|
|
259
|
-
args: [{
|
|
260
|
-
|
|
261
|
-
}]
|
|
262
|
-
}], ctorParameters: function () { return [{ type: i1.MessageBarService }, { type: i2.TranslateService }, { type: i3.TenantService }]; } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWZpbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvc2VydmljZXMvZXhwb3J0LWZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBTyxRQUFRLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxTQUEyQixNQUFNLGlCQUFpQixDQUFDO0FBRzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFJL0QsTUFBTSxPQUFPLGlCQUFpQjtJQU0vQixZQUFvQixpQkFBb0MsRUFDOUMsZ0JBQWtDLEVBQ2xDLGFBQTRCO1FBRmxCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDOUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQU45QixlQUFVLEdBQVcsT0FBTyxDQUFDO1FBQzdCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLDJCQUFzQixHQUFHLElBQUksQ0FBQztJQUtsQyxDQUFDO0lBRUwsS0FBSyxDQUFDLFNBQXFCLEVBQUUsTUFBZ0IsRUFBRSxVQUFrQixFQUFFLGVBQTBCLElBQUk7UUFDL0YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixNQUFNLGNBQWMsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtnQkFDcEQsNENBQTRDO2dCQUM1QyxJQUFJLFlBQVksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO29CQUNuQyxzQ0FBc0M7b0JBQ3RDLElBQUksSUFBWSxDQUFDO29CQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ1YsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbkQsS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7NEJBQ25DLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7NkJBQzlGO2lDQUFNO2dDQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7NkJBQzVGO3lCQUNGO3dCQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7cUJBQzlGO3lCQUFNO3dCQUNMLDZCQUE2Qjt3QkFDN0IsS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7NEJBQ25DLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7NkJBQzVGO2lDQUFNO2dDQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDOzZCQUNuRDt5QkFDRjt3QkFFRCxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO3FCQUM1RjtpQkFDRjtZQUNILENBQUMsQ0FBQTtZQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUM1QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQzVDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFBO1lBRUQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQztZQUVGLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1lBRWhELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixVQUFVLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNO29CQUM3RSxRQUFRLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzlELFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakYsWUFBWSxFQUFFLENBQUM7aUJBQ2hCO2dCQUNELFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3JCLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakYsUUFBUSxFQUFFLENBQUM7aUJBQ1o7Z0JBQ0QsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNkLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxTQUFTO2dCQUNoQixZQUFZLEVBQUUsY0FBYztnQkFDNUIsWUFBWSxFQUFFLGNBQWM7YUFDN0IsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUM7WUFFOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFxQixFQUFFLE1BQWdCLEVBQUUsVUFBa0IsRUFBRSxlQUEwQixJQUFJO1FBQ2pHLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUVBQW1FLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsVUFBVSxPQUFPLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBb0IsRUFBRSxZQUF1QixJQUFJO1FBQzlELElBQUksU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUN0RCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUc7NEJBQ1YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU07eUJBQ3BDLENBQUE7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFxQixFQUFFLE1BQWdCLEVBQUUsVUFBa0I7UUFDL0QsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUseUNBQXlDO1FBQ3pDLE1BQU0sT0FBTyxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLENBQUMsQ0FBQztRQUM3RixtQ0FBbUM7UUFDbkMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFrQixFQUFFLFNBQXFCLEVBQUUsTUFBZ0IsRUFBRSxVQUFrQixFQUFFLGVBQTBCLElBQUk7UUFDcEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxNQUFNLGFBQWEsR0FBZ0I7WUFDakMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtTQUNoRCxDQUFDO1FBQ0YsaUNBQWlDO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJO2dCQUNGLFFBQVEsUUFBUSxFQUFFO29CQUNoQixLQUFLLFFBQVEsQ0FBQyxHQUFHO3dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDbEYsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsTUFBTTtvQkFFUixLQUFLLFFBQVEsQ0FBQyxHQUFHO3dCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNoRixNQUFNO29CQUVSLEtBQUssUUFBUSxDQUFDLElBQUk7d0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNsRixDQUFDLENBQUMsQ0FBQzt3QkFDSCxNQUFNO29CQUVSO3dCQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBQzdELE1BQU07aUJBQ1Q7YUFDRjtZQUNELE9BQU8sRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzFEO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFnQjtRQUMxQixJQUFJLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDN0IsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBcUI7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFrQixFQUFFLE1BQVcsRUFBRSxLQUFhO1FBQzlELElBQUksTUFBTSxDQUFDO1FBQ1gsUUFBUSxRQUFRLEVBQUU7WUFDaEIsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRDQUE0QztnQkFDNUcsTUFBTTtZQUVSLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNsQixLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDbEI7Z0JBQ0UsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEcsTUFBTTtTQUNUO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFNBQW9CO1FBQy9DLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxtQkFBbUI7b0JBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUN2QztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLGNBQWMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLEtBQUssR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFNBQWM7UUFDeEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHO2dCQUNWLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTztnQkFDdEMsK0JBQStCO2FBQ2hDLENBQUE7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUE7WUFDdEgsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDVixJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDdEIsQ0FBQTtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBWSxFQUFFLE1BQWdCO1FBQ3RELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUU3Qix3QkFBd0I7UUFDeEIsTUFBTSxTQUFTLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQWtCO1FBQ3ZDLE1BQU0sV0FBVyxHQUFnQjtZQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUNyQyxhQUFhLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQzthQUM5RDtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUMvRixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQUc7UUFDdEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMzRCxDQUFDOytHQTFRYSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURuQixNQUFNOzs0RkFDSixpQkFBaUI7a0JBRmhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFJvdywgV29ya2Jvb2ssIFdvcmtzaGVldCB9IGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IGF1dG9UYWJsZSwgeyBDZWxsSG9va0RhdGEgfSBmcm9tICdqc3BkZi1hdXRvdGFibGUnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UsIE1lc3NhZ2VJbmZvIH0gZnJvbSBcIi4uL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IFRlbmFudFNlcnZpY2UgfSBmcm9tIFwiLi90ZW5hbnQuc2VydmljZVwiO1xuaW1wb3J0IHsgRk9OVF9CQVNFNjQgfSBmcm9tIFwiLi4vc3RhdGljLWZpbGVzXCI7XG5pbXBvcnQgeyBCT01fVU5JQ09ERSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lbnVtc1wiO1xuaW1wb3J0IHsgZ2V0TW9tZW5XaXRoVGltZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgRmlsZVR5cGUgfSBmcm9tIFwiLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXNcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pIGV4cG9ydCBjbGFzcyBFeHBvcnRGaWxlU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBmb250RmFtaWx5OiBzdHJpbmcgPSAnYXJpYWwnO1xuICBwcml2YXRlIG1heENlbGxMZW50Z2g6IG51bWJlciA9IDIwO1xuICBwcml2YXRlIGluZm9NZXNzYWdlQmFyRHVyYXRpb24gPSA2MDAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgdG9QZGYodGFibGVSb3dzOiBzdHJpbmdbXVtdLCBoZWFkZXI6IHN0cmluZ1tdLCBlbnRpdHlOYW1lOiBzdHJpbmcsIHJlZENvbG9yUm93czogYm9vbGVhbltdID0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNlbGxEcmF3ID0gKGNlbGxIb29rRGF0YTogQ2VsbEhvb2tEYXRhKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgdGhlIHRvcCBib3JkZXIgb2YgdGhlIHRhYmxlXG4gICAgICAgIGlmIChjZWxsSG9va0RhdGEuc2VjdGlvbiA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0b3AgYm9yZGVyIGZyb20gdGhlIGNlbGxcbiAgICAgICAgICBsZXQgY2VsbDogc3RyaW5nO1xuICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICBpZiAoY2VsbEhvb2tEYXRhLnJvdy5pbmRleCA9PT0gdGFibGVSb3dzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGZvciAoY2VsbCBpbiBjZWxsSG9va0RhdGEucm93LmNlbGxzKSB7XG4gICAgICAgICAgICAgIGlmICgrK2kgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjZWxsSG9va0RhdGEucm93LmNlbGxzW2NlbGxdLnN0eWxlcy5saW5lV2lkdGggPSB7IHRvcDogMCwgbGVmdDogMC4xLCByaWdodDogMCwgYm90dG9tOiAwLjEgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjZWxsSG9va0RhdGEucm93LmNlbGxzW2NlbGxdLnN0eWxlcy5saW5lV2lkdGggPSB7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMC4xIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2VsbEhvb2tEYXRhLnJvdy5jZWxsc1tjZWxsXS5zdHlsZXMubGluZVdpZHRoID0geyB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLjEsIGJvdHRvbTogMC4xIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1vZGlmaXkgc3R5bGUgZm9yIGxhc3Qgcm93XG4gICAgICAgICAgICBmb3IgKGNlbGwgaW4gY2VsbEhvb2tEYXRhLnJvdy5jZWxscykge1xuICAgICAgICAgICAgICBpZiAoKytpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY2VsbEhvb2tEYXRhLnJvdy5jZWxsc1tjZWxsXS5zdHlsZXMubGluZVdpZHRoID0geyB0b3A6IDAsIGxlZnQ6IDAuMSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNlbGxIb29rRGF0YS5yb3cuY2VsbHNbY2VsbF0uc3R5bGVzLmxpbmVXaWR0aCA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2VsbEhvb2tEYXRhLnJvdy5jZWxsc1tjZWxsXS5zdHlsZXMubGluZVdpZHRoID0geyB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLjEsIGJvdHRvbTogMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xvclJvd3NJblJlZCA9IChkYXRhOiBDZWxsSG9va0RhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlZENvbG9yUm93cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCByb3dOdW1iZXIgPSBkYXRhLnJvdz8uaW5kZXg7XG4gICAgICAgICAgaWYgKHJvd051bWJlciA+IDAgJiYgcmVkQ29sb3JSb3dzW3Jvd051bWJlcl0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIGRhdGEuY2VsbC5zdHlsZXMudGV4dENvbG9yID0gWzI1NSwgMTQsIDc3XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbEFkZEZvbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWRkRmlsZVRvVkZTKCdhcmlhbC1ub3JtYWwudHRmJywgRk9OVF9CQVNFNjQpO1xuICAgICAgICB0aGlzLmFkZEZvbnQoJ2FyaWFsLW5vcm1hbC50dGYnLCAnYXJpYWwnLCAnbm9ybWFsJyk7XG4gICAgICB9O1xuXG4gICAgICBqc1BERi5BUEkuZXZlbnRzLnB1c2goWydhZGRGb250cycsIGNhbGxBZGRGb250XSlcblxuICAgICAgY29uc3QgZG9jID0gbmV3IGpzUERGKCk7XG4gICAgICBkb2Muc2V0Rm9udCgnYXJpYWwnLCAnbm9ybWFsJyk7XG5cbiAgICAgIGF1dG9UYWJsZShkb2MsIHtcbiAgICAgICAgaGVhZFN0eWxlczoge1xuICAgICAgICAgIGhhbGlnbjogJ2NlbnRlcicsIGZvbnQ6IHRoaXMuZm9udEZhbWlseSwgZm9udFN0eWxlOiAnYm9sZCcsIGNlbGxXaWR0aDogJ3dyYXAnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMCwgZmlsbENvbG9yOiBbMjIwLCAyMjAsIDIyMF0sIHRleHRDb2xvcjogWzAsIDAsIDBdLFxuICAgICAgICAgIGxpbmVXaWR0aDogeyB0b3A6IDAuMiwgbGVmdDogMC4yLCByaWdodDogMC4yLCBib3R0b206IDAuNiB9LCBsaW5lQ29sb3I6IFswLCAwLCAwXSxcbiAgICAgICAgICBtaW5DZWxsV2lkdGg6IDVcbiAgICAgICAgfSxcbiAgICAgICAgYm9keVN0eWxlczoge1xuICAgICAgICAgIGZvbnQ6IHRoaXMuZm9udEZhbWlseSxcbiAgICAgICAgICBsaW5lV2lkdGg6IHsgdG9wOiAwLjEsIGxlZnQ6IDAuMSwgcmlnaHQ6IDAuMSwgYm90dG9tOiAwLjEgfSwgbGluZUNvbG9yOiBbMCwgMCwgMF0sXG4gICAgICAgICAgZm9udFNpemU6IDhcbiAgICAgICAgfSxcbiAgICAgICAgbWFyZ2luOiB7IHRvcDogNSwgbGVmdDogNSwgcmlnaHQ6IDUsIGJvdHRvbTogNSB9LFxuICAgICAgICBoZWFkOiBbaGVhZGVyXSxcbiAgICAgICAgYm9keTogdGFibGVSb3dzLFxuICAgICAgICB0aGVtZTogJ3N0cmlwZWQnLCAgIC8vICdncmlkJyxcbiAgICAgICAgd2lsbERyYXdDZWxsOiBoYW5kbGVDZWxsRHJhdyxcbiAgICAgICAgZGlkUGFyc2VDZWxsOiBjb2xvclJvd3NJblJlZFxuICAgICAgfSlcbiAgICAgIGRvYy5zYXZlKGAke2VudGl0eU5hbWV9LnBkZmApO1xuXG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9FeGNlbCh0YWJsZVJvd3M6IHN0cmluZ1tdW10sIGhlYWRlcjogc3RyaW5nW10sIGVudGl0eU5hbWU6IHN0cmluZywgcmVkQ29sb3JSb3dzOiBib29sZWFuW10gPSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbGV0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7XG4gICAgICBsZXQgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KGVudGl0eU5hbWUpO1xuICAgICAgbGV0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5hZGRSb3coaGVhZGVyKTtcblxuICAgICAgdGhpcy5zZXRFeGNlbEhlYWRlclN0eWxlKGhlYWRlclJvdyk7XG4gICAgICB3b3Jrc2hlZXQuYWRkUm93cyh0YWJsZVJvd3MpO1xuICAgICAgdGhpcy5zZXRFeGNlbENvbHVtbnNXaXRkaCh3b3Jrc2hlZXQpO1xuICAgICAgdGhpcy5jb2xvclJvd3NJblJlZCh3b3Jrc2hlZXQsIHJlZENvbG9yUm93cyk7XG4gICAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pO1xuICAgICAgICBzYXZlQXMoYmxvYiwgYCR7ZW50aXR5TmFtZX0ueGxzeGApO1xuICAgICAgfSk7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgY29sb3JSb3dzSW5SZWQod29ya3NoZWV0OiBXb3Jrc2hlZXQsIGNvbG9yUm93czogYm9vbGVhbltdID0gbnVsbCkge1xuICAgIGlmIChjb2xvclJvd3M/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHdvcmtzaGVldC5lYWNoUm93KChyb3csIHJvd051bWJlcikgPT4ge1xuICAgICAgICBpZiAocm93TnVtYmVyID4gMSAmJiBjb2xvclJvd3Nbcm93TnVtYmVyIC0gMl0gPT09IHRydWUpIHtcbiAgICAgICAgICByb3cuZWFjaENlbGwoKGNlbGwpID0+IHtcbiAgICAgICAgICAgIGNlbGwuZm9udCA9IHtcbiAgICAgICAgICAgICAgY29sb3I6IHsgYXJnYjogJ0ZGRkYwMDAwJyB9LCAvLyByZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9Dc3YodGFibGVSb3dzOiBzdHJpbmdbXVtdLCBoZWFkZXI6IHN0cmluZ1tdLCBlbnRpdHlOYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBkYXRhIGFycmF5IHRvIENTViBmb3JtYXRcbiAgICBjb25zdCBjc3ZEYXRhOiBzdHJpbmcgPSB0aGlzLmNvbnZlcnRBcnJheVRvQ1NWKHRhYmxlUm93cywgaGVhZGVyKTtcbiAgICAvLyBDcmVhdGUgYSBCbG9iIG9iamVjdCB3aXRoIHRoZSBDU1YgZGF0YVxuICAgIGNvbnN0IGNzdkJsb2I6IEJsb2IgPSBuZXcgQmxvYihbQk9NX1VOSUNPREUgKyBjc3ZEYXRhXSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIC8vIFNhdmUgdGhlIGZpbGUgdXNpbmcgRmlsZVNhdmVyLmpzXG4gICAgc2F2ZUFzKGNzdkJsb2IsIGAke2VudGl0eU5hbWV9LmNzdmApO1xuICB9XG5cbiAgZXhwb3J0KGZpbGVUeXBlOiBGaWxlVHlwZSwgdGFibGVSb3dzOiBzdHJpbmdbXVtdLCBoZWFkZXI6IHN0cmluZ1tdLCBlbnRpdHlOYW1lOiBzdHJpbmcsIHJlZENvbG9yUm93czogYm9vbGVhbltdID0gbnVsbCkge1xuICAgIHRoaXMuaW5mb01lc3NhZ2VCYXIoZW50aXR5TmFtZSk7XG4gICAgY29uc3Qgc3VjY2VzTWVzc2FnZTogTWVzc2FnZUluZm8gPSB7XG4gICAgICBtZXNzYWdlUGFyYW1zOiB7IGZpbGVUeXBlOiBGaWxlVHlwZVtmaWxlVHlwZV0gfVxuICAgIH07XG4gICAgLy8gc2V0dGltZW91dCB0byBydW4gbWV0aG9kIGFzeW5jXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzd2l0Y2ggKGZpbGVUeXBlKSB7XG4gICAgICAgICAgY2FzZSBGaWxlVHlwZS5QREY6XG4gICAgICAgICAgICB0aGlzLmluaXRCb2R5KHRhYmxlUm93cyk7XG4gICAgICAgICAgICB0aGlzLnRvUGRmKHRhYmxlUm93cywgdGhpcy5pbml0SGVhZGVycyhoZWFkZXIpLCBlbnRpdHlOYW1lLCByZWRDb2xvclJvd3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyTWVzc2FnZWJhcigpO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyU25hY2tiYXIoKTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5zdWNjZXNzX2V4cG9ydF9maWxlLCBzdWNjZXNNZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIEZpbGVUeXBlLkNTVjpcbiAgICAgICAgICAgIHRoaXMudG9Dc3YodGFibGVSb3dzLCBoZWFkZXIsIGVudGl0eU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5jbGVhck1lc3NhZ2ViYXIoKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuY2xlYXJTbmFja2JhcigpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5zdWNjZXNzX2V4cG9ydF9maWxlLCBzdWNjZXNNZXNzYWdlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBGaWxlVHlwZS5YTFNYOlxuICAgICAgICAgICAgdGhpcy50b0V4Y2VsKHRhYmxlUm93cywgaGVhZGVyLCBlbnRpdHlOYW1lLCByZWRDb2xvclJvd3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyTWVzc2FnZWJhcigpO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmNsZWFyU25hY2tiYXIoKTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5zdWNjZXNzX2V4cG9ydF9maWxlLCBzdWNjZXNNZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihMb2NhbGl6YXRpb24udW5rbm93bl9maWxlX3R5cGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhdGNoIChleCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKExvY2FsaXphdGlvbi5nZW5lcmFsX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIGluaXRIZWFkZXJzKGhlYWRlcjogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgbGV0IG5ld0hlYWRlcjogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGVhZGVyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbmV3SGVhZGVyLnB1c2godGhpcy5yZXZlcnNlSGVicmV3TGV0dGVycyhoZWFkZXJbaW5kZXhdKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdIZWFkZXI7XG4gIH1cblxuICBpbml0Qm9keSh0YWJsZVJvd3M6IHN0cmluZ1tdW10pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0YWJsZVJvd3NbaV0ubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgdGFibGVSb3dzW2ldW3RdID0gdGhpcy5yZXZlcnNlSGVicmV3TGV0dGVycyh0YWJsZVJvd3NbaV1bdF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldERhdGVGaWVsZFZhbHVlKGZpbGVUeXBlOiBGaWxlVHlwZSwgZW50aXR5OiBhbnksIGZpZWxkOiBzdHJpbmcpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHN3aXRjaCAoZmlsZVR5cGUpIHtcbiAgICAgIGNhc2UgRmlsZVR5cGUuWExTWDpcbiAgICAgICAgcmVzdWx0ID0gZW50aXR5W2ZpZWxkXSA/IGdldE1vbWVuV2l0aFRpbWUoZW50aXR5W2ZpZWxkXSkgOiAnLSc7IC8vIHJldHVuIGRhdGUgb2JqZWN0IGZvciBleGNlbCBzb3J0IHB1cnBvc2VzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZpbGVUeXBlLlBERjpcbiAgICAgIGNhc2UgRmlsZVR5cGUuQ1NWOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ID0gZW50aXR5W2ZpZWxkXSA/IGVudGl0eVtmaWVsZF0uZm9ybWF0KHRoaXMudGVuYW50U2VydmljZS5wcmltYXJ5RGF0ZVRpbWVGb3JtYXRUcykgOiAnLSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFeGNlbENvbHVtbnNXaXRkaCh3b3Jrc2hlZXQ6IFdvcmtzaGVldCkge1xuICAgIHdvcmtzaGVldC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uLmVhY2hDZWxsKHsgaW5jbHVkZUVtcHR5OiB0cnVlIH0sIChjZWxsKSA9PiB7XG4gICAgICAgIGlmICghY2VsbD8uZm9udD8uYm9sZCkgeyAvL2hlYWRlciByb3cgLCBza2lwXG4gICAgICAgICAgY2VsbC5mb250ID0geyBuYW1lOiB0aGlzLmZvbnRGYW1pbHkgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjZWxsVGV4dExlbmd0aCA9IGNvbHVtbi52YWx1ZXM/Lmxlbmd0aCA+IDEgPyBjb2x1bW4udmFsdWVzWzFdLnRvU3RyaW5nKCkubGVuZ3RoIDogMDtcbiAgICAgIGNlbGxUZXh0TGVuZ3RoID0gY2VsbFRleHRMZW5ndGggKyAoY2VsbFRleHRMZW5ndGggKiAwLjUpO1xuICAgICAgY29sdW1uLndpZHRoID0gY2VsbFRleHRMZW5ndGggPCB0aGlzLm1heENlbGxMZW50Z2ggPyB0aGlzLm1heENlbGxMZW50Z2ggOiBjZWxsVGV4dExlbmd0aDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RXhjZWxIZWFkZXJTdHlsZShoZWFkZXJSb3c6IFJvdykge1xuICAgIGhlYWRlclJvdy5lYWNoQ2VsbCgoY2VsbCwgbnVtYmVyKSA9PiB7XG4gICAgICBjZWxsLmZpbGwgPSB7XG4gICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcbiAgICAgICAgcGF0dGVybjogJ3NvbGlkJyxcbiAgICAgICAgZmdDb2xvcjogeyBhcmdiOiAnREREREREREQnIH0sIC8vIGdyZXlcbiAgICAgICAgLy9iZ0NvbG9yOiB7IGFyZ2I6ICdGRjAwMDBGRicgfVxuICAgICAgfVxuICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfVxuICAgICAgY2VsbC5mb250ID0ge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBzaXplOiAxMixcbiAgICAgICAgbmFtZTogdGhpcy5mb250RmFtaWx5XG4gICAgICB9XG4gICAgICBjZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFycmF5VG9DU1YoYXJyYXk6IGFueVtdLCBoZWFkZXI6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBjc3ZSb3dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gR2VuZXJhdGUgdGhlIENTViByb3dzXG4gICAgY29uc3QgaGVhZGVyUm93OiBzdHJpbmcgPSBPYmplY3QudmFsdWVzKGhlYWRlcikuam9pbignLCcpO1xuICAgIGNzdlJvd3MucHVzaChoZWFkZXJSb3cpO1xuXG4gICAgYXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoaXRlbSk7XG4gICAgICBjb25zdCBjc3ZSb3cgPSB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuam9pbignLCcpO1xuICAgICAgY3N2Um93cy5wdXNoKGNzdlJvdyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzdlJvd3Muam9pbignXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGluZm9NZXNzYWdlQmFyKGVudGl0eU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBNZXNzYWdlSW5mbyA9IHtcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmluZm9NZXNzYWdlQmFyRHVyYXRpb24sXG4gICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgIGVudGl0eTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm1vbnRobGllcylcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZXhwb3J0X2lzX2JlaW5nX3Byb2NjZXNzZWQsXG4gICAgICB7IGVudGl0eU5hbWUgfSksIG1lc3NhZ2VJbmZvKTtcbiAgfVxuXG4gIHJldmVyc2VIZWJyZXdMZXR0ZXJzKHN0cikge1xuICAgIGxldCBpc0hlYnJldyA9ICgvW1xcdTA1OTAtXFx1MDVGRl0vKS50ZXN0KHN0cik7XG4gICAgcmV0dXJuIGlzSGVicmV3ID8gc3RyLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykgOiBzdHI7XG4gIH1cbn1cbiJdfQ==
|
|
187
|
+
args: [{ providedIn: 'root' }]
|
|
188
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWZpbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvc2VydmljZXMvZXhwb3J0LWZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBTyxRQUFRLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUcvQyxNQUFNLE9BQWdCLGlCQUFpQjtJQVVyQyxZQUFZLFFBQWtCO1FBSnBCLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFDN0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBR3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBSUYsT0FBTyxDQUFDLFNBQXFCLEVBQUUsTUFBZ0IsRUFBRSxVQUFrQixFQUFFLGVBQTBCLElBQUk7UUFDakcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pILFNBQVMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxtRUFBbUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFvQixFQUFFLFlBQXVCLElBQUk7UUFDOUQsSUFBSSxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ3RELEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLElBQUksR0FBRzs0QkFDVixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsTUFBTTt5QkFDcEMsQ0FBQTtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQXFCLEVBQUUsTUFBZ0IsRUFBRSxVQUFrQjtRQUMvRCx1Q0FBdUM7UUFDdkMsTUFBTSxPQUFPLEdBQVcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSx5Q0FBeUM7UUFDekMsTUFBTSxPQUFPLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLG1DQUFtQztRQUNuQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsVUFBVSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWtCLEVBQUUsU0FBcUIsRUFBRSxNQUFnQixFQUFFLFVBQWtCLEVBQUUsZUFBMEIsSUFBSTtRQUNwSCxNQUFNLGFBQWEsR0FBZ0I7WUFDakMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtTQUNoRCxDQUFDO1FBQ0YsaUNBQWlDO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJO2dCQUNGLFFBQVEsUUFBUSxFQUFFO29CQUNoQixLQUFLLFFBQVEsQ0FBQyxHQUFHO3dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDbEYsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsTUFBTTtvQkFFUixLQUFLLFFBQVEsQ0FBQyxHQUFHO3dCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNoRixNQUFNO29CQUVSLEtBQUssUUFBUSxDQUFDLElBQUk7d0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNsRixDQUFDLENBQUMsQ0FBQzt3QkFDSCxNQUFNO29CQUVSO3dCQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBQzdELE1BQU07aUJBQ1Q7YUFDRjtZQUNELE9BQU8sRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzFEO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFnQjtRQUMxQixJQUFJLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDN0IsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBcUI7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFrQixFQUFFLE1BQVcsRUFBRSxLQUFhO1FBQzlELElBQUksTUFBTSxDQUFDO1FBQ1gsUUFBUSxRQUFRLEVBQUU7WUFDaEIsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRDQUE0QztnQkFDNUcsTUFBTTtZQUVSLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNsQixLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDbEI7Z0JBQ0UsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEcsTUFBTTtTQUNUO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFrQjtRQUMvQixNQUFNLFdBQVcsR0FBZ0I7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDckMsYUFBYSxFQUFFO2dCQUNiLFVBQVU7YUFDWDtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sb0JBQW9CLENBQUMsU0FBb0I7UUFDL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLG1CQUFtQjtvQkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsY0FBYyxHQUFHLGNBQWMsR0FBRyxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsU0FBYztRQUN4QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQ1YsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPO2dCQUN0QywrQkFBK0I7YUFDaEMsQ0FBQTtZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQTtZQUN0SCxJQUFJLENBQUMsSUFBSSxHQUFHO2dCQUNWLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxFQUFFO2dCQUNSLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTthQUN0QixDQUFBO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsTUFBZ0I7UUFDdEQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixNQUFNLFNBQVMsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksUUFBUSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDM0QsQ0FBQzsrR0FwTW1CLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRGhCLE1BQU07OzRGQUNQLGlCQUFpQjtrQkFEeEMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFJvdywgV29ya2Jvb2ssIFdvcmtzaGVldCB9IGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSwgTWVzc2FnZUluZm8gfSBmcm9tIFwiLi4vY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgQk9NX1VOSUNPREUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZW51bXNcIjtcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIi4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzXCI7XG5pbXBvcnQgeyBnZXRNb21lbldpdGhUaW1lIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBGaWxlU2FuaXRpemVyU2VydmljZSB9IGZyb20gXCIuL2ZpbGUtc2FuaXRpemVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRlbmFudFNlcnZpY2UgfSBmcm9tIFwiLi90ZW5hbnQuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV4cG9ydEZpbGVTZXJ2aWNlIHtcbiAgICBcbiAgICBwcm90ZWN0ZWQgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBmaWxlU2FuaXRpemVyU2VydmljZTogRmlsZVNhbml0aXplclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIGZvbnRGYW1pbHk6IHN0cmluZyA9ICdhcmlhbCc7XG4gICAgcHJvdGVjdGVkIG1heENlbGxMZW50Z2g6IG51bWJlciA9IDIwO1xuICAgIHByb3RlY3RlZCBpbmZvTWVzc2FnZUJhckR1cmF0aW9uID0gNjAwMDtcblxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZSA9IGluamVjdG9yLmdldChNZXNzYWdlQmFyU2VydmljZSk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICB0aGlzLnRlbmFudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVGVuYW50U2VydmljZSk7XG4gICAgICB0aGlzLmZpbGVTYW5pdGl6ZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEZpbGVTYW5pdGl6ZXJTZXJ2aWNlKTtcbiAgICAgfVxuICBcbiAgICBhYnN0cmFjdCB0b1BkZih0YWJsZVJvd3M6IHN0cmluZ1tdW10sIGhlYWRlcjogc3RyaW5nW10sIGVudGl0eU5hbWU6IHN0cmluZywgcmVkQ29sb3JSb3dzOiBib29sZWFuW10pOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgdG9FeGNlbCh0YWJsZVJvd3M6IHN0cmluZ1tdW10sIGhlYWRlcjogc3RyaW5nW10sIGVudGl0eU5hbWU6IHN0cmluZywgcmVkQ29sb3JSb3dzOiBib29sZWFuW10gPSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGxldCB3b3JrYm9vayA9IG5ldyBXb3JrYm9vaygpO1xuICAgICAgICBsZXQgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KGVudGl0eU5hbWUpO1xuICAgICAgICBsZXQgaGVhZGVyUm93ID0gd29ya3NoZWV0LmFkZFJvdyhoZWFkZXIpO1xuICBcbiAgICAgICAgdGhpcy5zZXRFeGNlbEhlYWRlclN0eWxlKGhlYWRlclJvdyk7XG4gICAgICAgIGNvbnN0IHNhbml0aXplVGFibGVSb3dzID0gdGFibGVSb3dzLm1hcChyb3cgPT4gcm93Lm1hcCh2YWx1ZSA9PiB0aGlzLmZpbGVTYW5pdGl6ZXJTZXJ2aWNlLnNhbml0aXplRXhjZWwodmFsdWUpKSk7XG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3dzKHNhbml0aXplVGFibGVSb3dzKTtcbiAgICAgICAgdGhpcy5zZXRFeGNlbENvbHVtbnNXaXRkaCh3b3Jrc2hlZXQpO1xuICAgICAgICB0aGlzLmNvbG9yUm93c0luUmVkKHdvcmtzaGVldCwgcmVkQ29sb3JSb3dzKTtcbiAgICAgICAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pO1xuICAgICAgICAgIHNhdmVBcyhibG9iLCBgJHtlbnRpdHlOYW1lfS54bHN4YCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSk7XG4gICAgfVxuICBcbiAgICBjb2xvclJvd3NJblJlZCh3b3Jrc2hlZXQ6IFdvcmtzaGVldCwgY29sb3JSb3dzOiBib29sZWFuW10gPSBudWxsKSB7XG4gICAgICBpZiAoY29sb3JSb3dzPy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHdvcmtzaGVldC5lYWNoUm93KChyb3csIHJvd051bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChyb3dOdW1iZXIgPiAxICYmIGNvbG9yUm93c1tyb3dOdW1iZXIgLSAyXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93LmVhY2hDZWxsKChjZWxsKSA9PiB7XG4gICAgICAgICAgICAgIGNlbGwuZm9udCA9IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogeyBhcmdiOiAnRkZGRjAwMDAnIH0sIC8vIHJlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgdG9Dc3YodGFibGVSb3dzOiBzdHJpbmdbXVtdLCBoZWFkZXI6IHN0cmluZ1tdLCBlbnRpdHlOYW1lOiBzdHJpbmcpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIGRhdGEgYXJyYXkgdG8gQ1NWIGZvcm1hdFxuICAgICAgY29uc3QgY3N2RGF0YTogc3RyaW5nID0gdGhpcy5jb252ZXJ0QXJyYXlUb0NTVih0YWJsZVJvd3MsIGhlYWRlcik7XG4gICAgICAvLyBDcmVhdGUgYSBCbG9iIG9iamVjdCB3aXRoIHRoZSBDU1YgZGF0YVxuICAgICAgY29uc3QgY3N2QmxvYjogQmxvYiA9IG5ldyBCbG9iKFtCT01fVU5JQ09ERSArIGNzdkRhdGFdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgICAvLyBTYXZlIHRoZSBmaWxlIHVzaW5nIEZpbGVTYXZlci5qc1xuICAgICAgc2F2ZUFzKGNzdkJsb2IsIGAke2VudGl0eU5hbWV9LmNzdmApO1xuICAgIH1cbiAgXG4gICAgZXhwb3J0KGZpbGVUeXBlOiBGaWxlVHlwZSwgdGFibGVSb3dzOiBzdHJpbmdbXVtdLCBoZWFkZXI6IHN0cmluZ1tdLCBlbnRpdHlOYW1lOiBzdHJpbmcsIHJlZENvbG9yUm93czogYm9vbGVhbltdID0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VjY2VzTWVzc2FnZTogTWVzc2FnZUluZm8gPSB7XG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgZmlsZVR5cGU6IEZpbGVUeXBlW2ZpbGVUeXBlXSB9XG4gICAgICB9O1xuICAgICAgLy8gc2V0dGltZW91dCB0byBydW4gbWV0aG9kIGFzeW5jXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzd2l0Y2ggKGZpbGVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLlBERjpcbiAgICAgICAgICAgICAgdGhpcy5pbml0Qm9keSh0YWJsZVJvd3MpO1xuICAgICAgICAgICAgICB0aGlzLnRvUGRmKHRhYmxlUm93cywgdGhpcy5pbml0SGVhZGVycyhoZWFkZXIpLCBlbnRpdHlOYW1lLCByZWRDb2xvclJvd3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuY2xlYXJNZXNzYWdlYmFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5jbGVhclNuYWNrYmFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5zdWNjZXNzX2V4cG9ydF9maWxlLCBzdWNjZXNNZXNzYWdlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICBcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuQ1NWOlxuICAgICAgICAgICAgICB0aGlzLnRvQ3N2KHRhYmxlUm93cywgaGVhZGVyLCBlbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5jbGVhck1lc3NhZ2ViYXIoKTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5jbGVhclNuYWNrYmFyKCk7XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24uc3VjY2Vzc19leHBvcnRfZmlsZSwgc3VjY2VzTWVzc2FnZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICBcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuWExTWDpcbiAgICAgICAgICAgICAgdGhpcy50b0V4Y2VsKHRhYmxlUm93cywgaGVhZGVyLCBlbnRpdHlOYW1lLCByZWRDb2xvclJvd3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuY2xlYXJNZXNzYWdlYmFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5jbGVhclNuYWNrYmFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5zdWNjZXNzX2V4cG9ydF9maWxlLCBzdWNjZXNNZXNzYWdlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICBcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLnVua25vd25fZmlsZV90eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLmdlbmVyYWxfZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIFxuICAgIGluaXRIZWFkZXJzKGhlYWRlcjogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICBsZXQgbmV3SGVhZGVyOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbmV3SGVhZGVyLnB1c2godGhpcy5yZXZlcnNlSGVicmV3TGV0dGVycyhoZWFkZXJbaW5kZXhdKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3SGVhZGVyO1xuICAgIH1cbiAgXG4gICAgaW5pdEJvZHkodGFibGVSb3dzOiBzdHJpbmdbXVtdKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRhYmxlUm93c1tpXS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgIHRhYmxlUm93c1tpXVt0XSA9IHRoaXMucmV2ZXJzZUhlYnJld0xldHRlcnModGFibGVSb3dzW2ldW3RdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXG4gICAgZ2V0RGF0ZUZpZWxkVmFsdWUoZmlsZVR5cGU6IEZpbGVUeXBlLCBlbnRpdHk6IGFueSwgZmllbGQ6IHN0cmluZyk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHN3aXRjaCAoZmlsZVR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWxlVHlwZS5YTFNYOlxuICAgICAgICAgIHJlc3VsdCA9IGVudGl0eVtmaWVsZF0gPyBnZXRNb21lbldpdGhUaW1lKGVudGl0eVtmaWVsZF0pIDogJy0nOyAvLyByZXR1biBkYXRlIG9iamVjdCBmb3IgZXhjZWwgc29ydCBwdXJwb3Nlc1xuICAgICAgICAgIGJyZWFrO1xuICBcbiAgICAgICAgY2FzZSBGaWxlVHlwZS5QREY6XG4gICAgICAgIGNhc2UgRmlsZVR5cGUuQ1NWOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlc3VsdCA9IGVudGl0eVtmaWVsZF0gPyBlbnRpdHlbZmllbGRdLmZvcm1hdCh0aGlzLnRlbmFudFNlcnZpY2UucHJpbWFyeURhdGVUaW1lRm9ybWF0VHMpIDogJy0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgICBcbiAgICBpbmZvTWVzc2FnZUJhcihlbnRpdHlOYW1lOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBNZXNzYWdlSW5mbyA9IHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMuaW5mb01lc3NhZ2VCYXJEdXJhdGlvbixcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIGVudGl0eU5hbWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyhMb2NhbGl6YXRpb24uZXhwb3J0X2lzX2JlaW5nX3Byb2NjZXNzZWQsIG1lc3NhZ2VJbmZvKTtcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgc2V0RXhjZWxDb2x1bW5zV2l0ZGgod29ya3NoZWV0OiBXb3Jrc2hlZXQpIHtcbiAgICAgIHdvcmtzaGVldC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBjb2x1bW4uZWFjaENlbGwoeyBpbmNsdWRlRW1wdHk6IHRydWUgfSwgKGNlbGwpID0+IHtcbiAgICAgICAgICBpZiAoIWNlbGw/LmZvbnQ/LmJvbGQpIHsgLy9oZWFkZXIgcm93ICwgc2tpcFxuICAgICAgICAgICAgY2VsbC5mb250ID0geyBuYW1lOiB0aGlzLmZvbnRGYW1pbHkgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICBcbiAgICAgICAgbGV0IGNlbGxUZXh0TGVuZ3RoID0gY29sdW1uLnZhbHVlcz8ubGVuZ3RoID4gMSA/IGNvbHVtbi52YWx1ZXNbMV0udG9TdHJpbmcoKS5sZW5ndGggOiAwO1xuICAgICAgICBjZWxsVGV4dExlbmd0aCA9IGNlbGxUZXh0TGVuZ3RoICsgKGNlbGxUZXh0TGVuZ3RoICogMC41KTtcbiAgICAgICAgY29sdW1uLndpZHRoID0gY2VsbFRleHRMZW5ndGggPCB0aGlzLm1heENlbGxMZW50Z2ggPyB0aGlzLm1heENlbGxMZW50Z2ggOiBjZWxsVGV4dExlbmd0aDtcbiAgICAgIH0pO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBzZXRFeGNlbEhlYWRlclN0eWxlKGhlYWRlclJvdzogUm93KSB7XG4gICAgICBoZWFkZXJSb3cuZWFjaENlbGwoKGNlbGwsIG51bWJlcikgPT4ge1xuICAgICAgICBjZWxsLmZpbGwgPSB7XG4gICAgICAgICAgdHlwZTogJ3BhdHRlcm4nLFxuICAgICAgICAgIHBhdHRlcm46ICdzb2xpZCcsXG4gICAgICAgICAgZmdDb2xvcjogeyBhcmdiOiAnREREREREREQnIH0sIC8vIGdyZXlcbiAgICAgICAgICAvL2JnQ29sb3I6IHsgYXJnYjogJ0ZGMDAwMEZGJyB9XG4gICAgICAgIH1cbiAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfVxuICAgICAgICBjZWxsLmZvbnQgPSB7XG4gICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICBzaXplOiAxMixcbiAgICAgICAgICBuYW1lOiB0aGlzLmZvbnRGYW1pbHlcbiAgICAgICAgfVxuICAgICAgICBjZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBjb252ZXJ0QXJyYXlUb0NTVihhcnJheTogYW55W10sIGhlYWRlcjogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgY29uc3QgY3N2Um93czogc3RyaW5nW10gPSBbXTtcbiAgXG4gICAgICAvLyBHZW5lcmF0ZSB0aGUgQ1NWIHJvd3NcbiAgICAgIGNvbnN0IGhlYWRlclJvdzogc3RyaW5nID0gT2JqZWN0LnZhbHVlcyhoZWFkZXIpLmpvaW4oJywnKTtcbiAgICAgIGNzdlJvd3MucHVzaChoZWFkZXJSb3cpO1xuICBcbiAgICAgIGFycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoaXRlbSk7XG4gICAgICAgIGNvbnN0IGNzdlJvdyA9IHZhbHVlcy5tYXAodmFsdWUgPT4gdGhpcy5maWxlU2FuaXRpemVyU2VydmljZS5zYW5pdGl6ZUNTVih2YWx1ZSkpLmpvaW4oJywnKTtcbiAgICAgICAgY3N2Um93cy5wdXNoKGNzdlJvdyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjc3ZSb3dzLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgXG4gICAgcmV2ZXJzZUhlYnJld0xldHRlcnMoc3RyKSB7XG4gICAgICBsZXQgaXNIZWJyZXcgPSAoL1tcXHUwNTkwLVxcdTA1RkZdLykudGVzdChzdHIpO1xuICAgICAgcmV0dXJuIGlzSGVicmV3ID8gc3RyLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykgOiBzdHI7XG4gICAgfVxuICB9XG4gIFxuICBcbiAgXG4gICJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FileSanitizerService {
|
|
4
|
+
constructor() {
|
|
5
|
+
// Characters that can initiate a formula in CSV
|
|
6
|
+
this.dangerousChars = ['=', '+', '-', '@', '\t', '\r'];
|
|
7
|
+
}
|
|
8
|
+
checkMelliciousChars(value) {
|
|
9
|
+
const typesToExclude = ['number', 'boolean'];
|
|
10
|
+
if (!value || value === '-' || value instanceof Date || typesToExclude.includes(typeof value)) {
|
|
11
|
+
return false; // No sanitization needed
|
|
12
|
+
}
|
|
13
|
+
let originalValue = value;
|
|
14
|
+
// Convert non-string values to string
|
|
15
|
+
if (typeof value !== 'string') {
|
|
16
|
+
originalValue = JSON.stringify(value);
|
|
17
|
+
}
|
|
18
|
+
let sanitizedValue = originalValue.trim();
|
|
19
|
+
// Check for dangerous characters
|
|
20
|
+
if (this.dangerousChars.includes(sanitizedValue.charAt(0))) {
|
|
21
|
+
sanitizedValue = `'${sanitizedValue}`;
|
|
22
|
+
}
|
|
23
|
+
// Escape double quotes
|
|
24
|
+
sanitizedValue = sanitizedValue.replace(/"/g, '""');
|
|
25
|
+
// Return whether the value has changed
|
|
26
|
+
return originalValue !== sanitizedValue;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sanitizes a value for Excel export to prevent Excel injection.
|
|
30
|
+
* @param value - The value to be sanitized.
|
|
31
|
+
* @returns - The sanitized value as a string.
|
|
32
|
+
*/
|
|
33
|
+
sanitizeExcel(value) {
|
|
34
|
+
const typesToExclude = ['number', 'boolean'];
|
|
35
|
+
if (!value || value === '-' || value instanceof Date || typesToExclude.includes(typeof value)) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
// Convert non-string values to string
|
|
39
|
+
if (typeof value !== 'string') {
|
|
40
|
+
value = JSON.stringify(value);
|
|
41
|
+
}
|
|
42
|
+
// Trim the value to handle any extraneous spaces
|
|
43
|
+
value = value.trim();
|
|
44
|
+
// Check for dangerous characters
|
|
45
|
+
if (this.dangerousChars.includes(value.charAt(0))) {
|
|
46
|
+
value = `'${value}`;
|
|
47
|
+
}
|
|
48
|
+
// Escape double quotes
|
|
49
|
+
value = value.replace(/"/g, '""');
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sanitizes a value for CSV export to prevent CSV injection.
|
|
54
|
+
* @param value - The value to be sanitized.
|
|
55
|
+
* @returns - The sanitized value as a string.
|
|
56
|
+
*/
|
|
57
|
+
sanitizeCSV(value) {
|
|
58
|
+
// Wrap the value in double quotes
|
|
59
|
+
return `"${this.sanitizeExcel(value)}"`;
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileSanitizerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
62
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileSanitizerService, providedIn: 'root' }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileSanitizerService, decorators: [{
|
|
65
|
+
type: Injectable,
|
|
66
|
+
args: [{ providedIn: 'root' }]
|
|
67
|
+
}], ctorParameters: function () { return []; } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zYW5pdGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvc2VydmljZXMvZmlsZS1zYW5pdGl6ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sb0JBQW9CO0lBSy9CO1FBSEEsZ0RBQWdEO1FBQy9CLG1CQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRW5ELENBQUM7SUFHVixvQkFBb0IsQ0FBQyxLQUFVO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtZQUM3RixPQUFPLEtBQUssQ0FBQyxDQUFDLHlCQUF5QjtTQUN4QztRQUVELElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUxQixzQ0FBc0M7UUFDdEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUMsaUNBQWlDO1FBQ2pDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFELGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1NBQ3ZDO1FBRUQsdUJBQXVCO1FBQ3ZCLGNBQWMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCx1Q0FBdUM7UUFDdkMsT0FBTyxhQUFhLEtBQUssY0FBYyxDQUFDO0lBRTFDLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLEtBQVU7UUFDN0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQzdGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFFRCxpREFBaUQ7UUFDakQsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyQixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7U0FDckI7UUFFRCx1QkFBdUI7UUFDdkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O1NBSUs7SUFDRSxXQUFXLENBQUMsS0FBVTtRQUMzQixrQ0FBa0M7UUFDbEMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUMxQyxDQUFDOytHQTVFVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQURSLE1BQU07OzRGQUNsQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEZpbGVTYW5pdGl6ZXJTZXJ2aWNlIHtcblxuICAvLyBDaGFyYWN0ZXJzIHRoYXQgY2FuIGluaXRpYXRlIGEgZm9ybXVsYSBpbiBDU1ZcbiAgcHJpdmF0ZSByZWFkb25seSBkYW5nZXJvdXNDaGFycyA9IFsnPScsICcrJywgJy0nLCAnQCcsICdcXHQnLCAnXFxyJ107XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuXG4gIHB1YmxpYyBjaGVja01lbGxpY2lvdXNDaGFycyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZXNUb0V4Y2x1ZGUgPSBbJ251bWJlcicsICdib29sZWFuJ107XG5cbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnLScgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVzVG9FeGNsdWRlLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gc2FuaXRpemF0aW9uIG5lZWRlZFxuICAgIH1cblxuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAvLyBDb252ZXJ0IG5vbi1zdHJpbmcgdmFsdWVzIHRvIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBvcmlnaW5hbFZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRWYWx1ZSA9IG9yaWdpbmFsVmFsdWUudHJpbSgpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGRhbmdlcm91cyBjaGFyYWN0ZXJzXG4gICAgaWYgKHRoaXMuZGFuZ2Vyb3VzQ2hhcnMuaW5jbHVkZXMoc2FuaXRpemVkVmFsdWUuY2hhckF0KDApKSkge1xuICAgICAgc2FuaXRpemVkVmFsdWUgPSBgJyR7c2FuaXRpemVkVmFsdWV9YDtcbiAgICB9XG5cbiAgICAvLyBFc2NhcGUgZG91YmxlIHF1b3Rlc1xuICAgIHNhbml0aXplZFZhbHVlID0gc2FuaXRpemVkVmFsdWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAvLyBSZXR1cm4gd2hldGhlciB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICByZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPT0gc2FuaXRpemVkVmFsdWU7XG5cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBhIHZhbHVlIGZvciBFeGNlbCBleHBvcnQgdG8gcHJldmVudCBFeGNlbCBpbmplY3Rpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzYW5pdGl6ZWQuXG4gICAqIEByZXR1cm5zIC0gVGhlIHNhbml0aXplZCB2YWx1ZSBhcyBhIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBzYW5pdGl6ZUV4Y2VsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVzVG9FeGNsdWRlID0gWydudW1iZXInLCAnYm9vbGVhbiddO1xuXG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlc1RvRXhjbHVkZS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBub24tc3RyaW5nIHZhbHVlcyB0byBzdHJpbmdcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gVHJpbSB0aGUgdmFsdWUgdG8gaGFuZGxlIGFueSBleHRyYW5lb3VzIHNwYWNlc1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGRhbmdlcm91cyBjaGFyYWN0ZXJzXG4gICAgaWYgKHRoaXMuZGFuZ2Vyb3VzQ2hhcnMuaW5jbHVkZXModmFsdWUuY2hhckF0KDApKSkge1xuICAgICAgdmFsdWUgPSBgJyR7dmFsdWV9YDtcbiAgICB9XG5cbiAgICAvLyBFc2NhcGUgZG91YmxlIHF1b3Rlc1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgICAqIFNhbml0aXplcyBhIHZhbHVlIGZvciBDU1YgZXhwb3J0IHRvIHByZXZlbnQgQ1NWIGluamVjdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc2FuaXRpemVkLlxuICAgICAqIEByZXR1cm5zIC0gVGhlIHNhbml0aXplZCB2YWx1ZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgcHVibGljIHNhbml0aXplQ1NWKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIC8vIFdyYXAgdGhlIHZhbHVlIGluIGRvdWJsZSBxdW90ZXNcbiAgICByZXR1cm4gYFwiJHt0aGlzLnNhbml0aXplRXhjZWwodmFsdWUpfVwiYDtcbiAgfVxufVxuXG5cblxuIl19
|