@mis-wis/common 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/create-non-shift-modal/create-non-shift-modal.component.mjs +12 -8
- package/esm2020/lib/models/session.model.mjs +1 -1
- package/esm2020/lib/modules/logger/logger.functions.mjs +14 -11
- package/esm2020/lib/modules/logger/logger.model.mjs +1 -1
- package/esm2020/lib/services/session.errors.mjs +18 -1
- package/esm2020/lib/services/session.service.mjs +61 -11
- package/fesm2015/mis-wis-common.mjs +102 -28
- package/fesm2015/mis-wis-common.mjs.map +1 -1
- package/fesm2020/mis-wis-common.mjs +101 -27
- package/fesm2020/mis-wis-common.mjs.map +1 -1
- package/lib/components/create-non-shift-modal/create-non-shift-modal.component.d.ts +1 -1
- package/lib/models/session.model.d.ts +1 -0
- package/lib/modules/logger/logger.model.d.ts +1 -1
- package/lib/services/session.errors.d.ts +16 -0
- package/lib/services/session.service.d.ts +31 -1
- package/package.json +7 -2
- package/mis-wis-common-0.2.0.tgz +0 -0
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { Component, Inject } from "@angular/core";
|
|
2
2
|
import { Validators } from "@angular/forms";
|
|
3
|
-
import
|
|
3
|
+
import dayjs from "dayjs";
|
|
4
|
+
import customParseFormat from "dayjs/plugin/customParseFormat";
|
|
4
5
|
import { CONSTANTS_ASSETS_WIS_COMMON } from "../../constants/assets.constants";
|
|
5
6
|
import { forkJoin } from "rxjs";
|
|
6
7
|
import { finalize } from "rxjs/operators";
|
|
7
|
-
import { MODAL_DATA_VAR } from "mis-design-system/
|
|
8
|
+
import { MODAL_DATA_VAR } from "mis-crystal-design-system/modal";
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "mis-design-system/
|
|
10
|
+
import * as i1 from "mis-crystal-design-system/modal";
|
|
10
11
|
import * as i2 from "@angular/forms";
|
|
11
12
|
import * as i3 from "../../services/http.service";
|
|
12
13
|
import * as i4 from "mis-crystal-design-system/toast";
|
|
13
14
|
import * as i5 from "@angular/common";
|
|
14
15
|
import * as i6 from "mis-crystal-design-system/dropdown";
|
|
15
16
|
import * as i7 from "mis-crystal-design-system/datepicker_v2";
|
|
17
|
+
dayjs.extend(customParseFormat);
|
|
16
18
|
const PROPERTIES = ["NON_SHIFT_TRIPS_CATEGORIES", "USE_VALID_OFFICE_FOR_IRREGULAR_TRIPS"];
|
|
19
|
+
const DATE_FORMAT = "DD/MM/YYYY";
|
|
20
|
+
const PICKUP_TIME_FORMAT = "DD/MM/YYYY HH/mm/ss";
|
|
17
21
|
export class CreateNonShiftModalComponent {
|
|
18
22
|
constructor(modalData, modalRef, fb, http, toast) {
|
|
19
23
|
this.modalData = modalData;
|
|
@@ -23,8 +27,8 @@ export class CreateNonShiftModalComponent {
|
|
|
23
27
|
this.toast = toast;
|
|
24
28
|
this.CONSTANTS_ASSETS_WIS_COMMON = CONSTANTS_ASSETS_WIS_COMMON;
|
|
25
29
|
this.dateConfig = {
|
|
26
|
-
minDate:
|
|
27
|
-
format:
|
|
30
|
+
minDate: dayjs().format(DATE_FORMAT),
|
|
31
|
+
format: DATE_FORMAT
|
|
28
32
|
};
|
|
29
33
|
this.offices = [];
|
|
30
34
|
this.locationDropdownData = [];
|
|
@@ -59,7 +63,7 @@ export class CreateNonShiftModalComponent {
|
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
65
|
initializeForm() {
|
|
62
|
-
const currentTime = this.modalData?.date ??
|
|
66
|
+
const currentTime = this.modalData?.date ?? dayjs().format(DATE_FORMAT);
|
|
63
67
|
this.createTripsheetForm = this.fb.group({
|
|
64
68
|
direction: [this.modalData?.shiftType === "logout" ? "OUT" : "IN", Validators.required],
|
|
65
69
|
location: [{ label: "", value: "" }],
|
|
@@ -130,7 +134,7 @@ export class CreateNonShiftModalComponent {
|
|
|
130
134
|
}
|
|
131
135
|
const formValue = this.createTripsheetForm.value;
|
|
132
136
|
const pickupTime = `${formValue.date} ${formValue.hours.value}/${formValue.mins.value}/00`;
|
|
133
|
-
const pickupTimeDate =
|
|
137
|
+
const pickupTimeDate = dayjs(pickupTime, PICKUP_TIME_FORMAT).toDate();
|
|
134
138
|
if (this.isDateAndTimeFromPast(pickupTimeDate)) {
|
|
135
139
|
this.toast.displayMsg("Please select a future date and time.");
|
|
136
140
|
return;
|
|
@@ -230,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
230
234
|
type: Inject,
|
|
231
235
|
args: [MODAL_DATA_VAR]
|
|
232
236
|
}] }, { type: i1.ModalRef }, { type: i2.FormBuilder }, { type: i3.HttpService }, { type: i4.ToastService }]; } });
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7O0FBR3ZFLE1BQU0sVUFBVSxHQUFHLENBQUMsNEJBQTRCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztBQWlCMUYsTUFBTSxPQUFPLDRCQUE0QjtJQTRCdkMsWUFBMkMsU0FBYyxFQUFVLFFBQWtCLEVBQVUsRUFBZSxFQUFVLElBQWlCLEVBQVMsS0FBbUI7UUFBMUgsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsU0FBSSxHQUFKLElBQUks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QUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVU7UUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFjO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUU5QixRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssSUFBSSxDQUFDLFdBQVc7Z0JBQ25CLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUV6QixLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUN0QixPQUFPO29CQUNMLEVBQUUsRUFBRSxJQUFJO29CQUNSLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDekIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7WUFFSixLQUFLLElBQUksQ0FBQyxVQUFVO2dCQUNsQixPQUFPO29CQUNMLEdBQUcsUUFBUSxDQUFDLE1BQU07b0JBQ2xCLE9BQU8sRUFBRSxTQUFTLENBQUMsWUFBWSxJQUFJLEVBQUU7aUJBQ3RDLENBQUM7U0FDTDtJQUNILENBQUM7O3lIQXBQVSw0QkFBNEIsa0JBNEJuQixjQUFjOzZHQTVCdkIsNEJBQTRCLGtFQzlCekMsNmpKQTBIQTsyRkQ1RmEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDRCQUE0Qjs7MEJBZ0N6QixNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCAqIGFzIGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9kYXRlcGlja2VyX3YyXCI7XG5pbXBvcnQgeyBwYXJzZVpvbmUgfSBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHNcIjtcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZHJvcGRvd25cIjtcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBNT0RBTF9EQVRBX1ZBUiwgTW9kYWxSZWYgfSBmcm9tIFwibWlzLWRlc2lnbi1zeXN0ZW0vbWlzLW1vZGFsXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b2FzdFwiO1xuXG5jb25zdCBQUk9QRVJUSUVTID0gW1wiTk9OX1NISUZUX1RSSVBTX0NBVEVHT1JJRVNcIiwgXCJVU0VfVkFMSURfT0ZGSUNFX0ZPUl9JUlJFR1VMQVJfVFJJUFNcIl07XG5cbmludGVyZmFjZSBMb2NhdGlvblZhbHVlIHtcbiAgdHlwZTogbnVtYmVyO1xuICBvZmZpY2U6IGFueSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkRyb3Bkb3duSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBMb2NhdGlvblZhbHVlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWNyZWF0ZS1ub24tc2hpZnQtbW9kYWxcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZU5vblNoaWZ0TW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04gPSBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT047XG5cbiAgZGF0ZUNvbmZpZzogUGFydGlhbDxJRGF0ZVBpY2tlckNvbmZpZz4gPSB7XG4gICAgbWluRGF0ZTogcGFyc2Vab25lKCkuZm9ybWF0KFwiREQvTU0vWVlZWVwiKSxcbiAgICBmb3JtYXQ6IFwiREQvTU0vWVlZWVwiXG4gIH07XG4gIGNyZWF0ZVRyaXBzaGVldEZvcm0hOiBGb3JtR3JvdXA7XG4gIG9mZmljZXM6IERyb3Bkb3duSXRlbVtdID0gW107XG5cbiAgbG9jYXRpb25Ecm9wZG93bkRhdGE6IExvY2F0aW9uRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBjYXRlZ29yeURyb3Bkb3duRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBob3Vyc0Ryb3Bkb3duRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBtaW51dGVzRHJvcGRvd25EYXRhOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuXG4gIHNob3dPdGhlckFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IFRZUEVfT0ZGSUNFID0gNjtcbiAgcmVhZG9ubHkgVFlQRV9UUkFOU1BPUlQgPSAzO1xuICByZWFkb25seSBUWVBFX09USEVSID0gNDtcbiAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTU9EQUxfREFUQV9WQVIpIHB1YmxpYyBtb2RhbERhdGE6IGFueSwgcHJpdmF0ZSBtb2RhbFJlZjogTW9kYWxSZWYsIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgJG9mZmljZSA9IHRoaXMuaHR0cC5nZXRPZmZpY2VzKHRoaXMubW9kYWxEYXRhLm5vbmNlKTtcbiAgICBjb25zdCAkcHJvcGVydGllcyA9IHRoaXMuaHR0cC5nZXRQcm9wZXJ0aWVzKFBST1BFUlRJRVMpO1xuXG4gICAgZm9ya0pvaW4oWyRvZmZpY2UsICRwcm9wZXJ0aWVzXSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChbb2ZmaWNlcywgcHJvcGVydGllc10pID0+IHtcbiAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVEcm9wZG93bkRhdGEob2ZmaWNlcyk7XG4gICAgICAgICAgdGhpcy5zZXR1cEZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBmb3JtIGRhdGE6XCIsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMubW9kYWxEYXRhPy5kYXRlID8/IHBhcnNlWm9uZSgpLmZvcm1hdChcIkREL01NL1lZWVlcIik7XG5cbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRpcmVjdGlvbjogW3RoaXMubW9kYWxEYXRhPy5zaGlmdFR5cGUgPT09IFwibG9nb3V0XCIgPyBcIk9VVFwiIDogXCJJTlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxvY2F0aW9uOiBbeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfV0sXG4gICAgICBvdGhlckFkZHJlc3M6IFwiXCIsXG4gICAgICB0cmlwQ2F0ZWdvcnk6IFt7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9XSxcbiAgICAgIGRhdGU6IFtjdXJyZW50VGltZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBob3VyczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dLFxuICAgICAgbWluczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVEcm9wZG93bkRhdGEob2ZmaWNlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YSA9IG9mZmljZXMubWFwKFxuICAgICAgKG9mZmljZTogYW55KTogTG9jYXRpb25Ecm9wZG93bkl0ZW0gPT4gKHtcbiAgICAgICAgbGFiZWw6IG9mZmljZS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT0ZGSUNFLCBvZmZpY2U6IG9mZmljZSB8fCBudWxsIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwibG9jYXRpb25cIik/LnNldFZhbHVlKHRoaXMubG9jYXRpb25Ecm9wZG93bkRhdGFbMF0pO1xuXG4gICAgaWYgKCF0aGlzLnByb3BlcnRpZXM/LltcIlVTRV9WQUxJRF9PRkZJQ0VfRk9SX0lSUkVHVUxBUl9UUklQU1wiXSkge1xuICAgICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YS5wdXNoKFxuICAgICAgICB7IGxhYmVsOiBcIkFpcnBvcnRcIiwgdmFsdWU6IHsgdHlwZTogdGhpcy5UWVBFX1RSQU5TUE9SVCwgb2ZmaWNlOiBudWxsIH0gfSBhcyBMb2NhdGlvbkRyb3Bkb3duSXRlbSxcbiAgICAgICAgeyBsYWJlbDogXCJPdGhlclwiLCB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT1RIRVIsIG9mZmljZTogbnVsbCB9IH0gYXMgTG9jYXRpb25Ecm9wZG93bkl0ZW1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjYXRlZ29yeSBkcm9wZG93blxuICAgIGNvbnN0IGNhdGVnb3JpZXNTdHJpbmcgPSB0aGlzLnByb3BlcnRpZXM/LltcIk5PTl9TSElGVF9UUklQU19DQVRFR09SSUVTXCJdO1xuICAgIGlmIChjYXRlZ29yaWVzU3RyaW5nICYmIHR5cGVvZiBjYXRlZ29yaWVzU3RyaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gY2F0ZWdvcmllc1N0cmluZy5zcGxpdChcIixcIikuZmlsdGVyKGNhdCA9PiBjYXQgJiYgY2F0LnRyaW0oKSk7XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEcm9wZG93bkRhdGEgPSBjYXRlZ29yaWVzLm1hcChjYXRlZ29yeSA9PiAoe1xuICAgICAgICAgIGxhYmVsOiBjYXRlZ29yeS50cmltKCksXG4gICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnRyaW0oKVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMucGFkWmVybyhpKSxcbiAgICAgIHZhbHVlOiB0aGlzLnBhZFplcm8oaSlcbiAgICB9KSk7XG4gICAgdGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLnBhdGNoVmFsdWUoeyBob3VyczogdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YVtjdXJyZW50SG91cl0gfSk7XG5cbiAgICBjb25zdCBjdXJyZW50TWludXRlID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgdGhpcy5taW51dGVzRHJvcGRvd25EYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+ICh7XG4gICAgICBsYWJlbDogdGhpcy5wYWRaZXJvKGkpLFxuICAgICAgdmFsdWU6IHRoaXMucGFkWmVybyhpKVxuICAgIH0pKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0ucGF0Y2hWYWx1ZSh7IG1pbnM6IHRoaXMubWludXRlc0Ryb3Bkb3duRGF0YVtjdXJyZW50TWludXRlXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGb3JtTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0/LnZhbHVlO1xuICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcyAhPT0gKGxvY2F0aW9uPy52YWx1ZT8udHlwZSA9PT0gdGhpcy5UWVBFX09USEVSKSkge1xuICAgICAgICB0aGlzLnNob3dPdGhlckFkZHJlc3MgPSBsb2NhdGlvbj8udmFsdWU/LnR5cGUgPT09IHRoaXMuVFlQRV9PVEhFUjtcbiAgICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoXCJvdGhlckFkZHJlc3NcIik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhZFplcm8obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCk7XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0udmFsdWU7XG5cbiAgICBjb25zdCBwaWNrdXBUaW1lID0gYCR7Zm9ybVZhbHVlLmRhdGV9ICR7Zm9ybVZhbHVlLmhvdXJzLnZhbHVlfS8ke2Zvcm1WYWx1ZS5taW5zLnZhbHVlfS8wMGA7XG4gICAgY29uc3QgcGlja3VwVGltZURhdGUgPSBwYXJzZVpvbmUocGlja3VwVGltZSkudG9EYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNEYXRlQW5kVGltZUZyb21QYXN0KHBpY2t1cFRpbWVEYXRlKSkge1xuICAgICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiUGxlYXNlIHNlbGVjdCBhIGZ1dHVyZSBkYXRlIGFuZCB0aW1lLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYXRlZ29yeURyb3Bkb3duRGF0YS5sZW5ndGggPiAwICYmICghZm9ybVZhbHVlLnRyaXBDYXRlZ29yeSB8fCAhZm9ybVZhbHVlLnRyaXBDYXRlZ29yeS52YWx1ZSkpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlBsZWFzZSBwcm92aWRlIGEgdHJpcCBjYXRlZ29yeS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1WYWx1ZS5sb2NhdGlvbj8udmFsdWU/LnR5cGUgPT09IHRoaXMuVFlQRV9PVEhFUikge1xuICAgICAgaWYgKCFmb3JtVmFsdWUub3RoZXJBZGRyZXNzIHx8IGZvcm1WYWx1ZS5vdGhlckFkZHJlc3MudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlBsZWFzZSBwcm92aWRlIHRoZSBhZGRyZXNzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5vdGhlckFkZHJlc3MuaW5jbHVkZXMoXCIsXCIpKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlNwZWNpYWwgY2hhcmFjdGVyICgsKSBub3QgYWxsb3dlZCBpbiBhZGRyZXNzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuaHR0cC5jcmVhdGVFbXB0eUlycmVndWxhclRyaXBTaGVldCh0aGlzLm1vZGFsRGF0YS5ub25jZSwgZm9ybVZhbHVlLmRpcmVjdGlvbikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvdXRlVHJpcFNoZWV0ID0+IHtcbiAgICAgICAgY29uc3QgcGlja3VwTG9jID0gcm91dGVUcmlwU2hlZXQuZGlyID09PSBcIklOXCIgPyB0aGlzLm1vZGFsRGF0YS5lbXBsb3llZS5ob21lIDogdGhpcy5nZXRMb2NhdGlvbihmb3JtVmFsdWUpO1xuICAgICAgICBjb25zdCBkcm9wTG9jID0gcm91dGVUcmlwU2hlZXQuZGlyID09PSBcIk9VVFwiID8gdGhpcy5tb2RhbERhdGEuZW1wbG95ZWUuaG9tZSA6IHRoaXMuZ2V0TG9jYXRpb24oZm9ybVZhbHVlKTtcbiAgICAgICAgY29uc3QgcGlja3VwVGltZUZvcm1hdHRlZCA9IHBpY2t1cFRpbWU7XG4gICAgICAgIGNvbnN0IGRyb3BUaW1lRm9ybWF0dGVkID0gcGlja3VwVGltZTtcblxuICAgICAgICBjb25zdCBlbXBsb3llZSA9IHsgLi4udGhpcy5tb2RhbERhdGEuZW1wbG95ZWUsIGVtcGxveWVlX3N0YXR1czogMSB9O1xuXG4gICAgICAgIGNvbnN0IGFkZEVtcGxveWVlUGFyYW1zID0ge1xuICAgICAgICAgIHRyaXBzaGVldDogcm91dGVUcmlwU2hlZXQsXG4gICAgICAgICAgZW1wbG95ZWU6IGVtcGxveWVlLFxuICAgICAgICAgIHBpY2t1cExvYzogcGlja3VwTG9jLFxuICAgICAgICAgIGRyb3BMb2M6IGRyb3BMb2MsXG4gICAgICAgICAgcGlja1VwVGltZTogcGlja3VwVGltZUZvcm1hdHRlZCxcbiAgICAgICAgICBkcm9wVGltZTogZHJvcFRpbWVGb3JtYXR0ZWQsXG4gICAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgICAgcm91dGVTb3VyY2U6IHRoaXMubW9kYWxEYXRhLnJvdXRlU291cmNlLFxuICAgICAgICAgIGFzc2V0TGlzdDogdGhpcy5tb2RhbERhdGEuYXNzZXRMaXN0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5odHRwLmFkZEVtcGxveWVlVG9UcmlwU2hlZXQodGhpcy5tb2RhbERhdGEubm9uY2UsIGFkZEVtcGxveWVlUGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IHVwZGF0ZWRUcmlwU2hlZXQgPT4ge1xuICAgICAgICAgICAgaWYgKCF1cGRhdGVkVHJpcFNoZWV0LmN1c3RvbU1hcCkge1xuICAgICAgICAgICAgICB1cGRhdGVkVHJpcFNoZWV0LmN1c3RvbU1hcCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlZFRyaXBTaGVldC5jdXN0b21NYXAudHJpcENhdGVnb3J5ID0gZm9ybVZhbHVlLnRyaXBDYXRlZ29yeT8udmFsdWUgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZSh7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgIHRyaXBzaGVldDogdXBkYXRlZFRyaXBTaGVldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGFkZGluZyBlbXBsb3llZSB0byB0cmlwc2hlZXQ6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIkZhaWxlZCB0byBhZGQgZW1wbG95ZWUgdG8gdHJpcHNoZWV0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY3JlYXRpbmcgdHJpcHNoZWV0OlwiLCBlcnJvcik7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIkZhaWxlZCB0byBjcmVhdGUgdHJpcHNoZWV0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlQW5kVGltZUZyb21QYXN0KGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBkYXRlIDwgbm93O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbihmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBmb3JtVmFsdWUubG9jYXRpb24/LnZhbHVlO1xuXG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jVHlwZSA9IGxvY2F0aW9uLnR5cGU7XG5cbiAgICBzd2l0Y2ggKGxvY1R5cGUpIHtcbiAgICAgIGNhc2UgdGhpcy5UWVBFX09GRklDRTpcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLm9mZmljZTtcblxuICAgICAgY2FzZSB0aGlzLlRZUEVfVFJBTlNQT1JUOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgIHR5cGU6IHRoaXMuVFlQRV9UUkFOU1BPUlQsXG4gICAgICAgICAgYWRkcmVzczogXCJBaXJwb3J0XCIsXG4gICAgICAgICAgZ2VvQ29yZDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIHRoaXMuVFlQRV9PVEhFUjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5sb2NhdGlvbi5vZmZpY2UsXG4gICAgICAgICAgYWRkcmVzczogZm9ybVZhbHVlLm90aGVyQWRkcmVzcyB8fCBcIlwiXG4gICAgICAgIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3JlYXRlVHJpcHNoZWV0XCI+XG4gIDxoMiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPkNyZWF0ZSBOb24tU2hpZnQgVHJpcHNoZWV0PC9oMj5cblxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgIDxwPkxvYWRpbmcuLi48L3A+XG4gIDwvZGl2PlxuXG4gIDxmb3JtXG4gICAgKm5nSWY9XCIhbG9hZGluZyAmJiBjcmVhdGVUcmlwc2hlZXRGb3JtXCJcbiAgICBbZm9ybUdyb3VwXT1cImNyZWF0ZVRyaXBzaGVldEZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbiAgICBjbGFzcz1cImNyZWF0ZVRyaXBzaGVldEZvcm1cIlxuICAgIGlkPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCI+XG4gICAgICA8IS0tIFJhZGlvIGJ1dHRvbnMgcm93IC0tPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdyYWRpby1yb3cnOiB0cnVlLCBkaXNhYmxlZDogbW9kYWxEYXRhPy5zaGlmdFNlbGVjdGlvbkRpc2FibGVkIH1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtb2Rlcm4tY2hlY2tib3hcIiB0eXBlPVwicmFkaW9cIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3Rpb25cIiB2YWx1ZT1cIk9VVFwiIGlkPVwic3RhcnRMb2NcIiAvPlxuICAgICAgICAgIDxzcGFuPlN0YXJ0IExvY2F0aW9uIEZpeGVkIChMb2dvdXQpPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIm1vZGVybi1jaGVja2JveFwiIHR5cGU9XCJyYWRpb1wiIGZvcm1Db250cm9sTmFtZT1cImRpcmVjdGlvblwiIHZhbHVlPVwiSU5cIiBpZD1cImVuZExvY1wiIC8+XG4gICAgICAgICAgPHNwYW4+RW5kIExvY2F0aW9uIEZpeGVkIChMb2dpbik8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBMb2NhdGlvbiBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibG9jVGV4dFwiPkxvY2F0aW9uPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jZWxsXCI+XG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImxvY2F0aW9uRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2xvY2F0aW9uJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IGxvY2F0aW9uLi4uJ1wiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2xvY2F0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBPdGhlciBhZGRyZXNzIGZpZWxkIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgb3RoZXJBZGRyZXNzXCIgKm5nSWY9XCJzaG93T3RoZXJBZGRyZXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsPlBpY2svRHJvcCBwb2ludCA8c3VwPio8L3N1cD48L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNlbGxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJvdGhlckFkZHJlc3NcIiBjbGFzcz1cIm1vZGVybi1pbnB1dFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVHJpcCBjYXRlZ29yeSBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nSWY9XCJjYXRlZ29yeURyb3Bkb3duRGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsPlRyaXAgQ2F0ZWdvcnk8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNlbGxcIj5cbiAgICAgICAgICA8bWlzLWRyb3Bkb3duXG4gICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzI1MHB4J1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJjYXRlZ29yeURyb3Bkb3duRGF0YVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCd0cmlwQ2F0ZWdvcnknKT8udmFsdWVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgY2F0ZWdvcnkuLi4nXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgndHJpcENhdGVnb3J5Jyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUaW1lIGZpZWxkIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNlbGxcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaXhlZFRpbWVUZXh0XCI+VGltZTwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY2VsbCBtb2Rlcm4tZGF0ZS1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1zZWxlY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtaXNUekRwXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgIFtkcENvbmZpZ109XCJkYXRlQ29uZmlnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogNDRweCAhaW1wb3J0YW50OyBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsgY3Vyc29yOiBwb2ludGVyOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04uSU1BR0VTLkNBTEVOREFSX0lDT05cIiBhbHQ9XCJDYWxlbmRhciBJY29uXCIgY2xhc3M9XCJkYXRlLWljb24gZGF0YS1waWNrZXItaWNvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bWlzLWRyb3Bkb3duXG4gICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzVyZW0nXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImhvdXJzRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2hvdXJzJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInSEgnXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgnaG91cnMnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuXG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic1cmVtJ1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJtaW51dGVzRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ21pbnMnKT8udmFsdWVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidNTSdcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdtaW5zJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWFjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwib3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZyB8fCBjcmVhdGVUcmlwc2hlZXRGb3JtPy5pbnZhbGlkXCI+XG4gICAgICAgIHt7IGlzU3VibWl0dGluZyA/IFwiQ3JlYXRpbmcuLi5cIiA6IFwiQ3JlYXRlXCIgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUcvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQUczRSxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFaEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDO0FBaUJqRCxNQUFNLE9BQU8sNEJBQTRCO0lBNEJ2QyxZQUEyQyxTQUFjLEVBQVUs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QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsNEJBQTRCOzswQkFnQ3pCLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gXCJkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXRcIjtcbmltcG9ydCB7IElEYXRlUGlja2VyQ29uZmlnIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZGF0ZXBpY2tlcl92MlwiO1xuaW1wb3J0IHsgQ09OU1RBTlRTX0FTU0VUU19XSVNfQ09NTU9OIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcbmltcG9ydCB7IERyb3Bkb3duSXRlbSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTU9EQUxfREFUQV9WQVIsIE1vZGFsUmVmIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vbW9kYWxcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5cbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG5cbmNvbnN0IFBST1BFUlRJRVMgPSBbXCJOT05fU0hJRlRfVFJJUFNfQ0FURUdPUklFU1wiLCBcIlVTRV9WQUxJRF9PRkZJQ0VfRk9SX0lSUkVHVUxBUl9UUklQU1wiXTtcbmNvbnN0IERBVEVfRk9STUFUID0gXCJERC9NTS9ZWVlZXCI7XG5jb25zdCBQSUNLVVBfVElNRV9GT1JNQVQgPSBcIkREL01NL1lZWVkgSEgvbW0vc3NcIjtcblxuaW50ZXJmYWNlIExvY2F0aW9uVmFsdWUge1xuICB0eXBlOiBudW1iZXI7XG4gIG9mZmljZTogYW55IHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uRHJvcGRvd25JdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IExvY2F0aW9uVmFsdWU7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtY3JlYXRlLW5vbi1zaGlmdC1tb2RhbFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlTm9uU2hpZnRNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENPTlNUQU5UU19BU1NFVFNfV0lTX0NPTU1PTiA9IENPTlNUQU5UU19BU1NFVFNfV0lTX0NPTU1PTjtcblxuICBkYXRlQ29uZmlnOiBQYXJ0aWFsPElEYXRlUGlja2VyQ29uZmlnPiA9IHtcbiAgICBtaW5EYXRlOiBkYXlqcygpLmZvcm1hdChEQVRFX0ZPUk1BVCksXG4gICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICB9O1xuICBjcmVhdGVUcmlwc2hlZXRGb3JtITogRm9ybUdyb3VwO1xuICBvZmZpY2VzOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuXG4gIGxvY2F0aW9uRHJvcGRvd25EYXRhOiBMb2NhdGlvbkRyb3Bkb3duSXRlbVtdID0gW107XG5cbiAgY2F0ZWdvcnlEcm9wZG93bkRhdGE6IERyb3Bkb3duSXRlbVtdID0gW107XG5cbiAgaG91cnNEcm9wZG93bkRhdGE6IERyb3Bkb3duSXRlbVtdID0gW107XG5cbiAgbWludXRlc0Ryb3Bkb3duRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBzaG93T3RoZXJBZGRyZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByZWFkb25seSBUWVBFX09GRklDRSA9IDY7XG4gIHJlYWRvbmx5IFRZUEVfVFJBTlNQT1JUID0gMztcbiAgcmVhZG9ubHkgVFlQRV9PVEhFUiA9IDQ7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1PREFMX0RBVEFfVkFSKSBwdWJsaWMgbW9kYWxEYXRhOiBhbnksIHByaXZhdGUgbW9kYWxSZWY6IE1vZGFsUmVmLCBwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0ICRvZmZpY2UgPSB0aGlzLmh0dHAuZ2V0T2ZmaWNlcyh0aGlzLm1vZGFsRGF0YS5ub25jZSk7XG4gICAgY29uc3QgJHByb3BlcnRpZXMgPSB0aGlzLmh0dHAuZ2V0UHJvcGVydGllcyhQUk9QRVJUSUVTKTtcblxuICAgIGZvcmtKb2luKFskb2ZmaWNlLCAkcHJvcGVydGllc10pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoW29mZmljZXMsIHByb3BlcnRpZXNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplRHJvcGRvd25EYXRhKG9mZmljZXMpO1xuICAgICAgICAgIHRoaXMuc2V0dXBGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgZm9ybSBkYXRhOlwiLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLm1vZGFsRGF0YT8uZGF0ZSA/PyBkYXlqcygpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG5cbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRpcmVjdGlvbjogW3RoaXMubW9kYWxEYXRhPy5zaGlmdFR5cGUgPT09IFwibG9nb3V0XCIgPyBcIk9VVFwiIDogXCJJTlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxvY2F0aW9uOiBbeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfV0sXG4gICAgICBvdGhlckFkZHJlc3M6IFwiXCIsXG4gICAgICB0cmlwQ2F0ZWdvcnk6IFt7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9XSxcbiAgICAgIGRhdGU6IFtjdXJyZW50VGltZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBob3VyczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dLFxuICAgICAgbWluczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVEcm9wZG93bkRhdGEob2ZmaWNlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YSA9IG9mZmljZXMubWFwKFxuICAgICAgKG9mZmljZTogYW55KTogTG9jYXRpb25Ecm9wZG93bkl0ZW0gPT4gKHtcbiAgICAgICAgbGFiZWw6IG9mZmljZS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT0ZGSUNFLCBvZmZpY2U6IG9mZmljZSB8fCBudWxsIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwibG9jYXRpb25cIik/LnNldFZhbHVlKHRoaXMubG9jYXRpb25Ecm9wZG93bkRhdGFbMF0pO1xuXG4gICAgaWYgKCF0aGlzLnByb3BlcnRpZXM/LltcIlVTRV9WQUxJRF9PRkZJQ0VfRk9SX0lSUkVHVUxBUl9UUklQU1wiXSkge1xuICAgICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YS5wdXNoKFxuICAgICAgICB7IGxhYmVsOiBcIkFpcnBvcnRcIiwgdmFsdWU6IHsgdHlwZTogdGhpcy5UWVBFX1RSQU5TUE9SVCwgb2ZmaWNlOiBudWxsIH0gfSBhcyBMb2NhdGlvbkRyb3Bkb3duSXRlbSxcbiAgICAgICAgeyBsYWJlbDogXCJPdGhlclwiLCB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT1RIRVIsIG9mZmljZTogbnVsbCB9IH0gYXMgTG9jYXRpb25Ecm9wZG93bkl0ZW1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjYXRlZ29yeSBkcm9wZG93blxuICAgIGNvbnN0IGNhdGVnb3JpZXNTdHJpbmcgPSB0aGlzLnByb3BlcnRpZXM/LltcIk5PTl9TSElGVF9UUklQU19DQVRFR09SSUVTXCJdO1xuICAgIGlmIChjYXRlZ29yaWVzU3RyaW5nICYmIHR5cGVvZiBjYXRlZ29yaWVzU3RyaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gY2F0ZWdvcmllc1N0cmluZy5zcGxpdChcIixcIikuZmlsdGVyKGNhdCA9PiBjYXQgJiYgY2F0LnRyaW0oKSk7XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEcm9wZG93bkRhdGEgPSBjYXRlZ29yaWVzLm1hcChjYXRlZ29yeSA9PiAoe1xuICAgICAgICAgIGxhYmVsOiBjYXRlZ29yeS50cmltKCksXG4gICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnRyaW0oKVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMucGFkWmVybyhpKSxcbiAgICAgIHZhbHVlOiB0aGlzLnBhZFplcm8oaSlcbiAgICB9KSk7XG4gICAgdGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLnBhdGNoVmFsdWUoeyBob3VyczogdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YVtjdXJyZW50SG91cl0gfSk7XG5cbiAgICBjb25zdCBjdXJyZW50TWludXRlID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgdGhpcy5taW51dGVzRHJvcGRvd25EYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+ICh7XG4gICAgICBsYWJlbDogdGhpcy5wYWRaZXJvKGkpLFxuICAgICAgdmFsdWU6IHRoaXMucGFkWmVybyhpKVxuICAgIH0pKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0ucGF0Y2hWYWx1ZSh7IG1pbnM6IHRoaXMubWludXRlc0Ryb3Bkb3duRGF0YVtjdXJyZW50TWludXRlXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGb3JtTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0/LnZhbHVlO1xuICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcyAhPT0gKGxvY2F0aW9uPy52YWx1ZT8udHlwZSA9PT0gdGhpcy5UWVBFX09USEVSKSkge1xuICAgICAgICB0aGlzLnNob3dPdGhlckFkZHJlc3MgPSBsb2NhdGlvbj8udmFsdWU/LnR5cGUgPT09IHRoaXMuVFlQRV9PVEhFUjtcbiAgICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoXCJvdGhlckFkZHJlc3NcIik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhZFplcm8obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCk7XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0udmFsdWU7XG5cbiAgICBjb25zdCBwaWNrdXBUaW1lID0gYCR7Zm9ybVZhbHVlLmRhdGV9ICR7Zm9ybVZhbHVlLmhvdXJzLnZhbHVlfS8ke2Zvcm1WYWx1ZS5taW5zLnZhbHVlfS8wMGA7XG4gICAgY29uc3QgcGlja3VwVGltZURhdGUgPSBkYXlqcyhwaWNrdXBUaW1lLCBQSUNLVVBfVElNRV9GT1JNQVQpLnRvRGF0ZSgpO1xuICAgIGlmICh0aGlzLmlzRGF0ZUFuZFRpbWVGcm9tUGFzdChwaWNrdXBUaW1lRGF0ZSkpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlBsZWFzZSBzZWxlY3QgYSBmdXR1cmUgZGF0ZSBhbmQgdGltZS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlEcm9wZG93bkRhdGEubGVuZ3RoID4gMCAmJiAoIWZvcm1WYWx1ZS50cmlwQ2F0ZWdvcnkgfHwgIWZvcm1WYWx1ZS50cmlwQ2F0ZWdvcnkudmFsdWUpKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coXCJQbGVhc2UgcHJvdmlkZSBhIHRyaXAgY2F0ZWdvcnkuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmb3JtVmFsdWUubG9jYXRpb24/LnZhbHVlPy50eXBlID09PSB0aGlzLlRZUEVfT1RIRVIpIHtcbiAgICAgIGlmICghZm9ybVZhbHVlLm90aGVyQWRkcmVzcyB8fCBmb3JtVmFsdWUub3RoZXJBZGRyZXNzLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coXCJQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtVmFsdWUub3RoZXJBZGRyZXNzLmluY2x1ZGVzKFwiLFwiKSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coXCJTcGVjaWFsIGNoYXJhY3RlciAoLCkgbm90IGFsbG93ZWQgaW4gYWRkcmVzcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmh0dHAuY3JlYXRlRW1wdHlJcnJlZ3VsYXJUcmlwU2hlZXQodGhpcy5tb2RhbERhdGEubm9uY2UsIGZvcm1WYWx1ZS5kaXJlY3Rpb24pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByb3V0ZVRyaXBTaGVldCA9PiB7XG4gICAgICAgIGNvbnN0IHBpY2t1cExvYyA9IHJvdXRlVHJpcFNoZWV0LmRpciA9PT0gXCJJTlwiID8gdGhpcy5tb2RhbERhdGEuZW1wbG95ZWUuaG9tZSA6IHRoaXMuZ2V0TG9jYXRpb24oZm9ybVZhbHVlKTtcbiAgICAgICAgY29uc3QgZHJvcExvYyA9IHJvdXRlVHJpcFNoZWV0LmRpciA9PT0gXCJPVVRcIiA/IHRoaXMubW9kYWxEYXRhLmVtcGxveWVlLmhvbWUgOiB0aGlzLmdldExvY2F0aW9uKGZvcm1WYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBpY2t1cFRpbWVGb3JtYXR0ZWQgPSBwaWNrdXBUaW1lO1xuICAgICAgICBjb25zdCBkcm9wVGltZUZvcm1hdHRlZCA9IHBpY2t1cFRpbWU7XG5cbiAgICAgICAgY29uc3QgZW1wbG95ZWUgPSB7IC4uLnRoaXMubW9kYWxEYXRhLmVtcGxveWVlLCBlbXBsb3llZV9zdGF0dXM6IDEgfTtcblxuICAgICAgICBjb25zdCBhZGRFbXBsb3llZVBhcmFtcyA9IHtcbiAgICAgICAgICB0cmlwc2hlZXQ6IHJvdXRlVHJpcFNoZWV0LFxuICAgICAgICAgIGVtcGxveWVlOiBlbXBsb3llZSxcbiAgICAgICAgICBwaWNrdXBMb2M6IHBpY2t1cExvYyxcbiAgICAgICAgICBkcm9wTG9jOiBkcm9wTG9jLFxuICAgICAgICAgIHBpY2tVcFRpbWU6IHBpY2t1cFRpbWVGb3JtYXR0ZWQsXG4gICAgICAgICAgZHJvcFRpbWU6IGRyb3BUaW1lRm9ybWF0dGVkLFxuICAgICAgICAgIHBvc2l0aW9uOiAwLFxuICAgICAgICAgIHJvdXRlU291cmNlOiB0aGlzLm1vZGFsRGF0YS5yb3V0ZVNvdXJjZSxcbiAgICAgICAgICBhc3NldExpc3Q6IHRoaXMubW9kYWxEYXRhLmFzc2V0TGlzdFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaHR0cC5hZGRFbXBsb3llZVRvVHJpcFNoZWV0KHRoaXMubW9kYWxEYXRhLm5vbmNlLCBhZGRFbXBsb3llZVBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB1cGRhdGVkVHJpcFNoZWV0ID0+IHtcbiAgICAgICAgICAgIGlmICghdXBkYXRlZFRyaXBTaGVldC5jdXN0b21NYXApIHtcbiAgICAgICAgICAgICAgdXBkYXRlZFRyaXBTaGVldC5jdXN0b21NYXAgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZWRUcmlwU2hlZXQuY3VzdG9tTWFwLnRyaXBDYXRlZ29yeSA9IGZvcm1WYWx1ZS50cmlwQ2F0ZWdvcnk/LnZhbHVlIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHRoaXMubW9kYWxSZWYuY2xvc2Uoe1xuICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICB0cmlwc2hlZXQ6IHVwZGF0ZWRUcmlwU2hlZXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBhZGRpbmcgZW1wbG95ZWUgdG8gdHJpcHNoZWV0OlwiLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coXCJGYWlsZWQgdG8gYWRkIGVtcGxveWVlIHRvIHRyaXBzaGVldC4gUGxlYXNlIHRyeSBhZ2Fpbi5cIik7XG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNyZWF0aW5nIHRyaXBzaGVldDpcIiwgZXJyb3IpO1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coXCJGYWlsZWQgdG8gY3JlYXRlIHRyaXBzaGVldC4gUGxlYXNlIHRyeSBhZ2Fpbi5cIik7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZUFuZFRpbWVGcm9tUGFzdChkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gZGF0ZSA8IG5vdztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb24oZm9ybVZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZm9ybVZhbHVlLmxvY2F0aW9uPy52YWx1ZTtcblxuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY1R5cGUgPSBsb2NhdGlvbi50eXBlO1xuXG4gICAgc3dpdGNoIChsb2NUeXBlKSB7XG4gICAgICBjYXNlIHRoaXMuVFlQRV9PRkZJQ0U6XG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5vZmZpY2U7XG5cbiAgICAgIGNhc2UgdGhpcy5UWVBFX1RSQU5TUE9SVDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICB0eXBlOiB0aGlzLlRZUEVfVFJBTlNQT1JULFxuICAgICAgICAgIGFkZHJlc3M6IFwiQWlycG9ydFwiLFxuICAgICAgICAgIGdlb0NvcmQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSB0aGlzLlRZUEVfT1RIRVI6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ubG9jYXRpb24ub2ZmaWNlLFxuICAgICAgICAgIGFkZHJlc3M6IGZvcm1WYWx1ZS5vdGhlckFkZHJlc3MgfHwgXCJcIlxuICAgICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNyZWF0ZVRyaXBzaGVldFwiPlxuICA8aDIgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5DcmVhdGUgTm9uLVNoaWZ0IFRyaXBzaGVldDwvaDI+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICA8cD5Mb2FkaW5nLi4uPC9wPlxuICA8L2Rpdj5cblxuICA8Zm9ybVxuICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgY3JlYXRlVHJpcHNoZWV0Rm9ybVwiXG4gICAgW2Zvcm1Hcm91cF09XCJjcmVhdGVUcmlwc2hlZXRGb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4gICAgY2xhc3M9XCJjcmVhdGVUcmlwc2hlZXRGb3JtXCJcbiAgICBpZD1cImNyZWF0ZVRyaXBzaGVldEZvcm1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGVudFwiPlxuICAgICAgPCEtLSBSYWRpbyBidXR0b25zIHJvdyAtLT5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncmFkaW8tcm93JzogdHJ1ZSwgZGlzYWJsZWQ6IG1vZGFsRGF0YT8uc2hpZnRTZWxlY3Rpb25EaXNhYmxlZCB9XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwibW9kZXJuLWNoZWNrYm94XCIgdHlwZT1cInJhZGlvXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlyZWN0aW9uXCIgdmFsdWU9XCJPVVRcIiBpZD1cInN0YXJ0TG9jXCIgLz5cbiAgICAgICAgICA8c3Bhbj5TdGFydCBMb2NhdGlvbiBGaXhlZCAoTG9nb3V0KTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtb2Rlcm4tY2hlY2tib3hcIiB0eXBlPVwicmFkaW9cIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3Rpb25cIiB2YWx1ZT1cIklOXCIgaWQ9XCJlbmRMb2NcIiAvPlxuICAgICAgICAgIDxzcGFuPkVuZCBMb2NhdGlvbiBGaXhlZCAoTG9naW4pPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9jYXRpb24gZmllbGQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY2VsbFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxvY1RleHRcIj5Mb2NhdGlvbjwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY2VsbFwiPlxuICAgICAgICAgIDxtaXMtZHJvcGRvd25cbiAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIicxMDAlJ1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJsb2NhdGlvbkRyb3Bkb3duRGF0YVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdsb2NhdGlvbicpPy52YWx1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ1NlbGVjdCBsb2NhdGlvbi4uLidcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdsb2NhdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9taXMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gT3RoZXIgYWRkcmVzcyBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIG90aGVyQWRkcmVzc1wiICpuZ0lmPVwic2hvd090aGVyQWRkcmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY2VsbFwiPlxuICAgICAgICAgIDxsYWJlbD5QaWNrL0Ryb3AgcG9pbnQgPHN1cD4qPC9zdXA+PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jZWxsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJBZGRyZXNzXCIgY2xhc3M9XCJtb2Rlcm4taW5wdXRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFRyaXAgY2F0ZWdvcnkgZmllbGQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ0lmPVwiY2F0ZWdvcnlEcm9wZG93bkRhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY2VsbFwiPlxuICAgICAgICAgIDxsYWJlbD5UcmlwIENhdGVnb3J5PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jZWxsXCI+XG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIicyNTBweCdcIlxuICAgICAgICAgICAgW2hlaWdodF09XCInNDBweCdcIlxuICAgICAgICAgICAgW2RhdGFdPVwiY2F0ZWdvcnlEcm9wZG93bkRhdGFcIlxuICAgICAgICAgICAgW3NlbGVjdGVkSXRlbV09XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgndHJpcENhdGVnb3J5Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IGNhdGVnb3J5Li4uJ1wiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ3RyaXBDYXRlZ29yeScpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9taXMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVGltZSBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZml4ZWRUaW1lVGV4dFwiPlRpbWU8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNlbGwgbW9kZXJuLWRhdGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtc2VsZWN0XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbWlzVHpEcFxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICBbZHBDb25maWddPVwiZGF0ZUNvbmZpZ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgnZGF0ZScpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDQ0cHggIWltcG9ydGFudDsgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGN1cnNvcjogcG9pbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiQ09OU1RBTlRTX0FTU0VUU19XSVNfQ09NTU9OLklNQUdFUy5DQUxFTkRBUl9JQ09OXCIgYWx0PVwiQ2FsZW5kYXIgSWNvblwiIGNsYXNzPVwiZGF0ZS1pY29uIGRhdGEtcGlja2VyLWljb25cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic1cmVtJ1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJob3Vyc0Ryb3Bkb3duRGF0YVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdob3VycycpPy52YWx1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ0hIJ1wiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2hvdXJzJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cblxuICAgICAgICAgIDxtaXMtZHJvcGRvd25cbiAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInNXJlbSdcIlxuICAgICAgICAgICAgW2hlaWdodF09XCInNDBweCdcIlxuICAgICAgICAgICAgW2RhdGFdPVwibWludXRlc0Ryb3Bkb3duRGF0YVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdtaW5zJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInTU0nXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgnbWlucycpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9taXMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIG1pcy1idXR0b24gdHlwZT1cIm91dGxpbmVcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgY3JlYXRlVHJpcHNoZWV0Rm9ybT8uaW52YWxpZFwiPlxuICAgICAgICB7eyBpc1N1Ym1pdHRpbmcgPyBcIkNyZWF0aW5nLi4uXCIgOiBcIkNyZWF0ZVwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvbW9kZWxzL3Nlc3Npb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgTnNTZXNzaW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJQ2xhaW1zIHtcbiAgICBzdWI/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvbW9kZWxzL3Nlc3Npb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgTnNTZXNzaW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJQ2xhaW1zIHtcbiAgICBzdWI/OiBzdHJpbmc7XG4gICAgZW1wbG95ZWVHVUlEPzogc3RyaW5nO1xuICAgIGVtcGxveWVlSWQ/OiBzdHJpbmc7XG4gICAgaW50ZXJuYWxfc3NvX3JvbGU/OiBzdHJpbmc7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICAgIGxvZ2dlZEluVXNlcj86IHN0cmluZztcbiAgICB2ZXRVc2VyRW1haWxJZD86IHN0cmluZztcbiAgICB2ZXRVc2VySWQ/OiBudW1iZXI7XG4gICAgc291cmNlPzogc3RyaW5nO1xuICAgIHJvbGVzPzogc3RyaW5nW107XG4gICAgZXhwPzogbnVtYmVyOyAvLyBpbiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaFxuICAgIGlhdD86IG51bWJlcjtcbiAgICBidXNpbmVzc1VuaXRJZD86IHN0cmluZztcbiAgICBBTExPV0VEX0JVSURTPzogc3RyaW5nW107XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIElJbml0Q29uZmlnIHtcbiAgICBzZXNzaW9uVG9rZW5Db29raWVLZXk/OiBzdHJpbmc7XG4gICAgdmV0VG9rZW5Db29raWVLZXk/OiBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
const envMap = {
|
|
2
|
-
dev: "https://
|
|
3
|
-
qa: "https://
|
|
4
|
-
production: "https://
|
|
5
|
-
uat: "https://
|
|
6
|
-
"production-green": "https://
|
|
7
|
-
"production-beta": "https://
|
|
8
|
-
"production-eu": "https://
|
|
9
|
-
"production-eu-green": "https://
|
|
10
|
-
"production-
|
|
2
|
+
dev: "https://ui-logger.stage.moveinsync.com",
|
|
3
|
+
qa: "https://ui-logger.stage.moveinsync.com",
|
|
4
|
+
production: "https://ui-logger.moveinsync.com",
|
|
5
|
+
uat: "https://ui-logger-uat.moveinsync.com",
|
|
6
|
+
"production-green": "https://ui-logger-green.moveinsync.com",
|
|
7
|
+
"production-beta": "https://ui-logger-beta.moveinsync.com",
|
|
8
|
+
"production-eu": "https://ui-logger.eu.moveinsync.com",
|
|
9
|
+
"production-eu-green": "https://ui-logger-green.eu.moveinsync.com",
|
|
10
|
+
"production-eu-beta": "https://ui-logger-beta.eu.moveinsync.com",
|
|
11
|
+
"production-mu": "https://ui-logger.moveinsync.in",
|
|
12
|
+
"production-mu-green": "https://ui-logger-green.moveinsync.in",
|
|
13
|
+
"production-mu-beta": "https://ui-logger-beta.moveinsync.in",
|
|
11
14
|
};
|
|
12
15
|
export function environmentHandler(env) {
|
|
13
16
|
if (!env) {
|
|
14
|
-
return "/
|
|
17
|
+
return "/logger";
|
|
15
18
|
}
|
|
16
19
|
return envMap[env];
|
|
17
20
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvbW9kdWxlcy9sb2dnZXIvbG9nZ2VyLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLE1BQU0sR0FBRztJQUNiLEdBQUcsRUFBRSx3Q0FBd0M7SUFDN0MsRUFBRSxFQUFFLHdDQUF3QztJQUM1QyxVQUFVLEVBQUUsa0NBQWtDO0lBQzlDLEdBQUcsRUFBRSxzQ0FBc0M7SUFDM0Msa0JBQWtCLEVBQUUsd0NBQXdDO0lBQzVELGlCQUFpQixFQUFFLHVDQUF1QztJQUMxRCxlQUFlLEVBQUUscUNBQXFDO0lBQ3RELHFCQUFxQixFQUFFLDJDQUEyQztJQUNsRSxvQkFBb0IsRUFBRSwwQ0FBMEM7SUFDaEUsZUFBZSxFQUFFLGlDQUFpQztJQUNsRCxxQkFBcUIsRUFBRSx1Q0FBdUM7SUFDOUQsb0JBQW9CLEVBQUUsc0NBQXNDO0NBQzdELENBQUM7QUFDRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBYTtJQUM5QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVEVudk5hbWUgfSBmcm9tIFwiLi9sb2dnZXIubW9kZWxcIjtcbmNvbnN0IGVudk1hcCA9IHtcbiAgZGV2OiBcImh0dHBzOi8vdWktbG9nZ2VyLnN0YWdlLm1vdmVpbnN5bmMuY29tXCIsXG4gIHFhOiBcImh0dHBzOi8vdWktbG9nZ2VyLnN0YWdlLm1vdmVpbnN5bmMuY29tXCIsXG4gIHByb2R1Y3Rpb246IFwiaHR0cHM6Ly91aS1sb2dnZXIubW92ZWluc3luYy5jb21cIixcbiAgdWF0OiBcImh0dHBzOi8vdWktbG9nZ2VyLXVhdC5tb3ZlaW5zeW5jLmNvbVwiLFxuICBcInByb2R1Y3Rpb24tZ3JlZW5cIjogXCJodHRwczovL3VpLWxvZ2dlci1ncmVlbi5tb3ZlaW5zeW5jLmNvbVwiLFxuICBcInByb2R1Y3Rpb24tYmV0YVwiOiBcImh0dHBzOi8vdWktbG9nZ2VyLWJldGEubW92ZWluc3luYy5jb21cIixcbiAgXCJwcm9kdWN0aW9uLWV1XCI6IFwiaHR0cHM6Ly91aS1sb2dnZXIuZXUubW92ZWluc3luYy5jb21cIixcbiAgXCJwcm9kdWN0aW9uLWV1LWdyZWVuXCI6IFwiaHR0cHM6Ly91aS1sb2dnZXItZ3JlZW4uZXUubW92ZWluc3luYy5jb21cIixcbiAgXCJwcm9kdWN0aW9uLWV1LWJldGFcIjogXCJodHRwczovL3VpLWxvZ2dlci1iZXRhLmV1Lm1vdmVpbnN5bmMuY29tXCIsXG4gIFwicHJvZHVjdGlvbi1tdVwiOiBcImh0dHBzOi8vdWktbG9nZ2VyLm1vdmVpbnN5bmMuaW5cIixcbiAgXCJwcm9kdWN0aW9uLW11LWdyZWVuXCI6IFwiaHR0cHM6Ly91aS1sb2dnZXItZ3JlZW4ubW92ZWluc3luYy5pblwiLFxuICBcInByb2R1Y3Rpb24tbXUtYmV0YVwiOiBcImh0dHBzOi8vdWktbG9nZ2VyLWJldGEubW92ZWluc3luYy5pblwiLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBlbnZpcm9ubWVudEhhbmRsZXIoZW52OiBURW52TmFtZSkge1xuICBpZiAoIWVudikge1xuICAgIHJldHVybiBcIi9sb2dnZXJcIjtcbiAgfVxuICByZXR1cm4gZW52TWFwW2Vudl07XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9tb2R1bGVzL2xvZ2dlci9sb2dnZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFRFbnZOYW1lID0gXCJkZXZcIiB8IFwicWFcIiB8IFwidWF0XCIgfCBcInByb2R1Y3Rpb25cIiB8IFwicHJvZHVjdGlvbi1iZXRhXCIgfCBcInByb2R1Y3Rpb24tZ3JlZW5cIiB8IFwicHJvZHVjdGlvbi1ldVwiIHwgXCJwcm9kdWN0aW9uLWV1LWdyZWVuXCIgfCBcInByb2R1Y3Rpb24tZXUtYmV0YVwiIHwgXCJwcm9kdWN0aW9uLW11XCIgfCBcInByb2R1Y3Rpb24tbXUtZ3JlZW5cIiB8IFwicHJvZHVjdGlvbi1tdS1iZXRhXCIgfCB1bmRlZmluZWQgfCBzdHJpbmc7XG4iXX0=
|
|
@@ -25,4 +25,21 @@ export class SessionClaimNotFoundError extends SessionError {
|
|
|
25
25
|
this.name = 'SessionClaimNotFoundError';
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
/** Renders failures as `claim (reason), claim (reason)` for error messages. */
|
|
29
|
+
export function describeClaimFailures(failures) {
|
|
30
|
+
return failures.map(f => `${f.claim} (${f.reason})`).join(', ');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Every claim `run`'s `next` failed to read, reported once after the block has finished.
|
|
34
|
+
* Extends `SessionClaimNotFoundError` — and reports the first failure as `claim` — so handlers
|
|
35
|
+
* written against the single-claim error keep working.
|
|
36
|
+
*/
|
|
37
|
+
export class SessionClaimsMissingError extends SessionClaimNotFoundError {
|
|
38
|
+
constructor(failures) {
|
|
39
|
+
super(failures[0].claim);
|
|
40
|
+
this.failures = failures;
|
|
41
|
+
this.name = 'SessionClaimsMissingError';
|
|
42
|
+
this.message = `Session claims not found: ${describeClaimFailures(failures)}.`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24uZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsWUFBYSxTQUFRLEtBQUs7Q0FBRztBQUVuRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQUN6RDtRQUNFLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQVk7SUFDeEQ7UUFDRSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxZQUFZO0lBQ3hEO1FBQ0UsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQUN6RCxZQUE0QixLQUFhO1FBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSywrQkFBK0IsQ0FBQyxDQUFDO1FBRHBDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFFdkMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFTRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQWdDO0lBQ3BFLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEseUJBQXlCO0lBQ3RFLFlBQTRCLFFBQWdDO1FBQzFELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFEQyxhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUUxRCxJQUFJLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsNkJBQTZCLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDakYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlc3Npb25FcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uVG9rZW5Ob3RGb3VuZEVycm9yIGV4dGVuZHMgU2Vzc2lvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1Nlc3Npb24gdG9rZW4gd2FzIG5vdCBmb3VuZC4nKTtcbiAgICB0aGlzLm5hbWUgPSAnU2Vzc2lvblRva2VuTm90Rm91bmRFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ub2tlbkV4cGlyZWRFcnJvciBleHRlbmRzIFNlc3Npb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdTZXNzaW9uIHRva2VuIGhhcyBleHBpcmVkLicpO1xuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uVG9rZW5FeHBpcmVkRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uVG9rZW5JbnZhbGlkRXJyb3IgZXh0ZW5kcyBTZXNzaW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2Vzc2lvbiB0b2tlbiBjb3VsZCBub3QgYmUgZGVjb2RlZC4nKTtcbiAgICB0aGlzLm5hbWUgPSAnU2Vzc2lvblRva2VuSW52YWxpZEVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkNsYWltTm90Rm91bmRFcnJvciBleHRlbmRzIFNlc3Npb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjbGFpbTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFNlc3Npb24gY2xhaW0gXCIke2NsYWltfVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIHRva2VuLmApO1xuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uQ2xhaW1Ob3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uQ2xhaW1GYWlsdXJlUmVhc29uID0gJ2Fic2VudCcgfCAnYmxhbmsnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZXNzaW9uQ2xhaW1GYWlsdXJlIHtcbiAgY2xhaW06IHN0cmluZztcbiAgcmVhc29uOiBTZXNzaW9uQ2xhaW1GYWlsdXJlUmVhc29uO1xufVxuXG4vKiogUmVuZGVycyBmYWlsdXJlcyBhcyBgY2xhaW0gKHJlYXNvbiksIGNsYWltIChyZWFzb24pYCBmb3IgZXJyb3IgbWVzc2FnZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVDbGFpbUZhaWx1cmVzKGZhaWx1cmVzOiBJU2Vzc2lvbkNsYWltRmFpbHVyZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZhaWx1cmVzLm1hcChmID0+IGAke2YuY2xhaW19ICgke2YucmVhc29ufSlgKS5qb2luKCcsICcpO1xufVxuXG4vKipcbiAqIEV2ZXJ5IGNsYWltIGBydW5gJ3MgYG5leHRgIGZhaWxlZCB0byByZWFkLCByZXBvcnRlZCBvbmNlIGFmdGVyIHRoZSBibG9jayBoYXMgZmluaXNoZWQuXG4gKiBFeHRlbmRzIGBTZXNzaW9uQ2xhaW1Ob3RGb3VuZEVycm9yYCDigJQgYW5kIHJlcG9ydHMgdGhlIGZpcnN0IGZhaWx1cmUgYXMgYGNsYWltYCDigJQgc28gaGFuZGxlcnNcbiAqIHdyaXR0ZW4gYWdhaW5zdCB0aGUgc2luZ2xlLWNsYWltIGVycm9yIGtlZXAgd29ya2luZy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25DbGFpbXNNaXNzaW5nRXJyb3IgZXh0ZW5kcyBTZXNzaW9uQ2xhaW1Ob3RGb3VuZEVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGZhaWx1cmVzOiBJU2Vzc2lvbkNsYWltRmFpbHVyZVtdKSB7XG4gICAgc3VwZXIoZmFpbHVyZXNbMF0uY2xhaW0pO1xuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uQ2xhaW1zTWlzc2luZ0Vycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSBgU2Vzc2lvbiBjbGFpbXMgbm90IGZvdW5kOiAke2Rlc2NyaWJlQ2xhaW1GYWlsdXJlcyhmYWlsdXJlcyl9LmA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import jwtDecode from 'jwt-decode';
|
|
3
3
|
import { getCookie } from '../functions/cookie.function';
|
|
4
4
|
import { getQueryParam } from '../functions/url.functions';
|
|
5
|
-
import { SessionClaimNotFoundError, SessionError, SessionTokenExpiredError, SessionTokenInvalidError, SessionTokenNotFoundError, } from './session.errors';
|
|
5
|
+
import { describeClaimFailures, SessionClaimNotFoundError, SessionClaimsMissingError, SessionError, SessionTokenExpiredError, SessionTokenInvalidError, SessionTokenNotFoundError, } from './session.errors';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
const DEFAULT_SESSION_TOKEN_PREFIX = 'sso-wis-token';
|
|
8
8
|
const DEFAULT_SESSION_TOKEN_FALLBACK_KEY = 'x-wis-token';
|
|
@@ -13,6 +13,7 @@ export class SessionService {
|
|
|
13
13
|
this.config = {};
|
|
14
14
|
this.cachedToken = null;
|
|
15
15
|
this.cachedState = null;
|
|
16
|
+
this.collecting = null;
|
|
16
17
|
}
|
|
17
18
|
init(config) {
|
|
18
19
|
this.config = { ...config };
|
|
@@ -36,18 +37,50 @@ export class SessionService {
|
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
39
|
* Statement-style variant of `read` for blocks of assignments/side effects with no return value.
|
|
40
|
+
*
|
|
41
|
+
* `next` always runs to completion: a claim that is absent or blank yields `undefined` instead of
|
|
42
|
+
* throwing, and every such failure is reported once afterwards via `handlers.error`, as a
|
|
43
|
+
* `SessionClaimsMissingError` listing all of them. An unusable token (missing, expired,
|
|
44
|
+
* undecodable) still aborts `next` immediately with the matching `SessionError`.
|
|
45
|
+
*
|
|
46
|
+
* Collecting covers the synchronous body of `next` only — claim reads deferred into a subscription,
|
|
47
|
+
* timeout or promise run after it has returned and throw as usual.
|
|
48
|
+
*
|
|
49
|
+
* An error `next` throws for any other reason propagates untouched, except that any claims missing
|
|
50
|
+
* at the time are appended to its message and attached as `sessionClaimFailures` — a collected
|
|
51
|
+
* `undefined` reaching the block is the usual cause, and that is the part worth knowing.
|
|
39
52
|
*/
|
|
40
53
|
run(handlers) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
const failures = [];
|
|
55
|
+
const previous = this.collecting;
|
|
56
|
+
this.collecting = failures;
|
|
57
|
+
try {
|
|
58
|
+
handlers.next(this);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
if (e instanceof SessionError) {
|
|
62
|
+
handlers.error(e);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (failures.length && e instanceof Error) {
|
|
66
|
+
e.sessionClaimFailures = failures;
|
|
67
|
+
e.message = `${e.message} — session claims missing during run(): ${describeClaimFailures(failures)}`;
|
|
68
|
+
}
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
this.collecting = previous;
|
|
73
|
+
}
|
|
74
|
+
if (failures.length) {
|
|
75
|
+
handlers.error(new SessionClaimsMissingError(failures));
|
|
76
|
+
}
|
|
45
77
|
}
|
|
46
78
|
get isVET() {
|
|
47
79
|
return this.state.isVET;
|
|
48
80
|
}
|
|
49
81
|
get sub() { return this.getClaim('sub'); }
|
|
50
82
|
get empGuid() { return this.getClaim('employeeGUID'); }
|
|
83
|
+
get employeeId() { return this.getClaim('employeeId'); }
|
|
51
84
|
get internalSsoRole() { return this.getClaim('internal_sso_role'); }
|
|
52
85
|
get roles() { return this.getClaim('roles'); }
|
|
53
86
|
get sessionId() { return this.getClaim('sessionId'); }
|
|
@@ -60,13 +93,22 @@ export class SessionService {
|
|
|
60
93
|
get vetUserId() { return this.getClaim('vetUserId'); }
|
|
61
94
|
get source() { return this.getClaim('source'); }
|
|
62
95
|
get roleId() {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
throw new SessionClaimNotFoundError('roleId');
|
|
96
|
+
const raw = this.resolveRole(this.getClaims());
|
|
97
|
+
if (!raw) {
|
|
98
|
+
return this.missingClaim('roleId', 'absent');
|
|
67
99
|
}
|
|
68
100
|
return Number(raw);
|
|
69
101
|
}
|
|
102
|
+
/** First numeric role in `internal_sso_role` then `roles`, or `''` when the token carries none. */
|
|
103
|
+
resolveRole(claims) {
|
|
104
|
+
const candidates = [claims.internal_sso_role, ...(claims.roles ?? [])];
|
|
105
|
+
return candidates
|
|
106
|
+
.map(value => value?.trim())
|
|
107
|
+
.find(value => this.isDigitsOnly(value)) ?? '';
|
|
108
|
+
}
|
|
109
|
+
isDigitsOnly(value) {
|
|
110
|
+
return !!value && /^\d+$/.test(value);
|
|
111
|
+
}
|
|
70
112
|
getClaims() {
|
|
71
113
|
const state = this.state;
|
|
72
114
|
if (state.status === 'ok') {
|
|
@@ -85,10 +127,18 @@ export class SessionService {
|
|
|
85
127
|
const value = claims[key];
|
|
86
128
|
const isEmptyString = typeof value === 'string' && value.trim() === '';
|
|
87
129
|
if (value === undefined || value === null || isEmptyString) {
|
|
88
|
-
|
|
130
|
+
return this.missingClaim(key, isEmptyString ? 'blank' : 'absent');
|
|
89
131
|
}
|
|
90
132
|
return (typeof value === 'string' ? value.trim() : value);
|
|
91
133
|
}
|
|
134
|
+
/** Records the failure and yields `undefined` while `run` is collecting; throws otherwise. */
|
|
135
|
+
missingClaim(claim, reason) {
|
|
136
|
+
if (this.collecting) {
|
|
137
|
+
this.collecting.push({ claim, reason });
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
throw new SessionClaimNotFoundError(claim);
|
|
141
|
+
}
|
|
92
142
|
get state() {
|
|
93
143
|
const { token, isVET } = this.findToken();
|
|
94
144
|
if (!this.cachedState || token !== this.cachedToken) {
|
|
@@ -145,4 +195,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
145
195
|
providedIn: 'root'
|
|
146
196
|
}]
|
|
147
197
|
}] });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixHQUMxQixNQUFNLGtCQUFrQixDQUFDOztBQUUxQixNQUFNLDRCQUE0QixHQUFHLGVBQWUsQ0FBQztBQUNyRCxNQUFNLGtDQUFrQyxHQUFHLGFBQWEsQ0FBQztBQUN6RCxNQUFNLHdCQUF3QixHQUFHLGFBQWEsQ0FBQztBQUMvQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQVdoQyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUlVLFdBQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUF3QixJQUFJLENBQUM7S0E2SWpEO0lBM0lDLElBQUksQ0FBQyxNQUE2QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFJLFFBQXFGO1FBQzNGLElBQUk7WUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFB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SUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyx3QkFBd0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pELElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN6QztTQUNGO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUI7WUFDcEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsNEJBQTRCLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFFeEgsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzsyR0EvSVUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy9jb29raWUuZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy91cmwuZnVuY3Rpb25zJztcbmltcG9ydCB7IE5zU2Vzc2lvbiB9IGZyb20gJy4uL21vZGVscy9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIFNlc3Npb25DbGFpbU5vdEZvdW5kRXJyb3IsXG4gIFNlc3Npb25FcnJvcixcbiAgU2Vzc2lvblRva2VuRXhwaXJlZEVycm9yLFxuICBTZXNzaW9uVG9rZW5JbnZhbGlkRXJyb3IsXG4gIFNlc3Npb25Ub2tlbk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJy4vc2Vzc2lvbi5lcnJvcnMnO1xuXG5jb25zdCBERUZBVUxUX1NFU1NJT05fVE9LRU5fUFJFRklYID0gJ3Nzby13aXMtdG9rZW4nO1xuY29uc3QgREVGQVVMVF9TRVNTSU9OX1RPS0VOX0ZBTExCQUNLX0tFWSA9ICd4LXdpcy10b2tlbic7XG5jb25zdCBERUZBVUxUX1ZFVF9UT0tFTl9QUkVGSVggPSAneC12ZXQtdG9rZW4nO1xuY29uc3QgTEFVTkNIX1NPVVJDRV9WRVQgPSAnVkVUJztcblxudHlwZSBTZXNzaW9uU3RhdGUgPVxuICB8IHsgc3RhdHVzOiAnb2snOyBjbGFpbXM6IE5zU2Vzc2lvbi5JQ2xhaW1zOyBpc1ZFVDogYm9vbGVhbiB9XG4gIHwgeyBzdGF0dXM6ICdub3QtZm91bmQnOyBpc1ZFVDogYm9vbGVhbiB9XG4gIHwgeyBzdGF0dXM6ICdleHBpcmVkJzsgaXNWRVQ6IGJvb2xlYW4gfVxuICB8IHsgc3RhdHVzOiAnaW52YWxpZCc7IGlzVkVUOiBib29sZWFuIH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IE5zU2Vzc2lvbi5JSW5pdENvbmZpZyA9IHt9O1xuICBwcml2YXRlIGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWRTdGF0ZTogU2Vzc2lvblN0YXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgaW5pdChjb25maWc6IE5zU2Vzc2lvbi5JSW5pdENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICB0aGlzLmNhY2hlZFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlZFN0YXRlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGBoYW5kbGVycy5uZXh0YCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LCBvciBgaGFuZGxlcnMuZXJyb3IoZXJyb3IpYCBpZiBpdCB0aHJvd3MgYSBgU2Vzc2lvbkVycm9yYC5cbiAgICogQ2VudHJhbGl6ZXMgdGhlIHRyeS9jYXRjaCBtZWNoYW5pY3M7IHRoZSBjYWxsZXIgc3RpbGwgc3VwcGxpZXMgdGhlIGFjdHVhbCBoYW5kbGluZyBsb2dpYy5cbiAgICovXG4gIHJlYWQ8VD4oaGFuZGxlcnM6IHsgbmV4dDogKHNlc3Npb246IFNlc3Npb25TZXJ2aWNlKSA9PiBUOyBlcnJvcjogKGVycm9yOiBTZXNzaW9uRXJyb3IpID0+IFQgfSk6IFQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gaGFuZGxlcnMubmV4dCh0aGlzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlc3Npb25FcnJvcikge1xuICAgICAgICByZXR1cm4gaGFuZGxlcnMuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQtc3R5bGUgdmFyaWFudCBvZiBgcmVhZGAgZm9yIGJsb2NrcyBvZiBhc3NpZ25tZW50cy9zaWRlIGVmZmVjdHMgd2l0aCBubyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBydW4oaGFuZGxlcnM6IHsgbmV4dDogKHNlc3Npb246IFNlc3Npb25TZXJ2aWNlKSA9PiB2b2lkOyBlcnJvcjogKGVycm9yOiBTZXNzaW9uRXJyb3IpID0+IHZvaWQgfSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh7XG4gICAgICBuZXh0OiBzID0+IHsgaGFuZGxlcnMubmV4dChzKTsgcmV0dXJuIHVuZGVmaW5lZDsgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4geyBoYW5kbGVycy5lcnJvcihlcnIpOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNWRVQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNWRVQ7XG4gIH1cblxuICBnZXQgc3ViKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdzdWInKTsgfVxuICBnZXQgZW1wR3VpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnZW1wbG95ZWVHVUlEJyk7IH1cbiAgZ2V0IGludGVybmFsU3NvUm9sZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnaW50ZXJuYWxfc3NvX3JvbGUnKTsgfVxuICBnZXQgcm9sZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRDbGFpbSgncm9sZXMnKTsgfVxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdzZXNzaW9uSWQnKTsgfVxuICBnZXQgbG9nZ2VkSW5Vc2VyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdsb2dnZWRJblVzZXInKTsgfVxuICBnZXQgZXhwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdleHAnKTsgfVxuICBnZXQgaWF0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdpYXQnKTsgfVxuICBnZXQgYnVzaW5lc3NVbml0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ2J1c2luZXNzVW5pdElkJyk7IH1cbiAgZ2V0IGFsbG93ZWRCdWlkcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldENsYWltKCdBTExPV0VEX0JVSURTJyk7IH1cbiAgZ2V0IHZldFVzZXJFbWFpbElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCd2ZXRVc2VyRW1haWxJZCcpOyB9XG4gIGdldCB2ZXRVc2VySWQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3ZldFVzZXJJZCcpOyB9XG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3NvdXJjZScpOyB9XG5cbiAgZ2V0IHJvbGVJZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsYWltcyA9IHRoaXMuZ2V0Q2xhaW1zKCk7XG4gICAgY29uc3QgcmF3ID0gY2xhaW1zLmludGVybmFsX3Nzb19yb2xlPy50cmltKCkgfHwgY2xhaW1zLnJvbGVzPy5bMF0/LnRyaW0oKTtcbiAgICBpZiAoIXJhdyB8fCAhL15cXGQrJC8udGVzdChyYXcpKSB7XG4gICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNsYWltTm90Rm91bmRFcnJvcigncm9sZUlkJyk7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIocmF3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xhaW1zKCk6IE5zU2Vzc2lvbi5JQ2xhaW1zIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgcmV0dXJuIHN0YXRlLmNsYWltcztcbiAgICB9XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ25vdC1mb3VuZCcpIHtcbiAgICAgIHRocm93IG5ldyBTZXNzaW9uVG9rZW5Ob3RGb3VuZEVycm9yKCk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdleHBpcmVkJykge1xuICAgICAgdGhyb3cgbmV3IFNlc3Npb25Ub2tlbkV4cGlyZWRFcnJvcigpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgU2Vzc2lvblRva2VuSW52YWxpZEVycm9yKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsYWltPEsgZXh0ZW5kcyBrZXlvZiBOc1Nlc3Npb24uSUNsYWltcz4oa2V5OiBLKTogTm9uTnVsbGFibGU8TnNTZXNzaW9uLklDbGFpbXNbS10+IHtcbiAgICBjb25zdCBjbGFpbXMgPSB0aGlzLmdldENsYWltcygpO1xuICAgIGNvbnN0IHZhbHVlID0gY2xhaW1zW2tleV07XG4gICAgY29uc3QgaXNFbXB0eVN0cmluZyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJztcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBpc0VtcHR5U3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNsYWltTm90Rm91bmRFcnJvcihrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWUpIGFzIE5vbk51bGxhYmxlPE5zU2Vzc2lvbi5JQ2xhaW1zW0tdPjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN0YXRlKCk6IFNlc3Npb25TdGF0ZSB7XG4gICAgY29uc3QgeyB0b2tlbiwgaXNWRVQgfSA9IHRoaXMuZmluZFRva2VuKCk7XG4gICAgaWYgKCF0aGlzLmNhY2hlZFN0YXRlIHx8IHRva2VuICE9PSB0aGlzLmNhY2hlZFRva2VuKSB7XG4gICAgICB0aGlzLmNhY2hlZFRva2VuID0gdG9rZW47XG4gICAgICB0aGlzLmNhY2hlZFN0YXRlID0gdGhpcy5idWlsZCh0b2tlbiwgaXNWRVQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRTdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGQodG9rZW46IHN0cmluZywgaXNWRVQ6IGJvb2xlYW4pOiBTZXNzaW9uU3RhdGUge1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ25vdC1mb3VuZCcsIGlzVkVUIH07XG4gICAgfVxuXG4gICAgbGV0IGNsYWltczogTnNTZXNzaW9uLklDbGFpbXM7XG4gICAgdHJ5IHtcbiAgICAgIGNsYWltcyA9IGp3dERlY29kZTxOc1Nlc3Npb24uSUNsYWltcz4odG9rZW4pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnaW52YWxpZCcsIGlzVkVUIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFeHBpcmVkKGNsYWltcykpIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2V4cGlyZWQnLCBpc1ZFVCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXR1czogJ29rJywgY2xhaW1zLCBpc1ZFVCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cGlyZWQoY2xhaW1zOiBOc1Nlc3Npb24uSUNsYWltcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgY2xhaW1zLmV4cCA9PT0gJ251bWJlcicgJiYgY2xhaW1zLmV4cCAqIDEwMDAgPD0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWRVRTb3VyY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldFF1ZXJ5UGFyYW0oJ3NvdXJjZScpID09PSBMQVVOQ0hfU09VUkNFX1ZFVDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUJ1aWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldFF1ZXJ5UGFyYW0oJ2J1aWQnKSB8fCBnZXRDb29raWUoJ2J1aWQnKSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVG9rZW4oKTogeyB0b2tlbjogc3RyaW5nOyBpc1ZFVDogYm9vbGVhbiB9IHtcbiAgICBjb25zdCBidWlkID0gdGhpcy5yZXNvbHZlQnVpZCgpO1xuXG4gICAgaWYgKHRoaXMuaXNWRVRTb3VyY2UoKSkge1xuICAgICAgY29uc3QgdmV0S2V5ID0gdGhpcy5jb25maWcudmV0VG9rZW5Db29raWVLZXkgPz8gKGJ1aWQgPyBgJHtERUZBVUxUX1ZFVF9UT0tFTl9QUkVGSVh9LSR7YnVpZH1gIDogbnVsbCk7XG4gICAgICBjb25zdCB2ZXRUb2tlbiA9ICh2ZXRLZXkgPyBnZXRDb29raWUodmV0S2V5KSA6ICcnKSB8fCAnJztcbiAgICAgIGlmICh2ZXRUb2tlbikge1xuICAgICAgICByZXR1cm4geyB0b2tlbjogdmV0VG9rZW4sIGlzVkVUOiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gdGhpcy5jb25maWcuc2Vzc2lvblRva2VuQ29va2llS2V5XG4gICAgICA/IGdldENvb2tpZSh0aGlzLmNvbmZpZy5zZXNzaW9uVG9rZW5Db29raWVLZXkpXG4gICAgICA6IChidWlkID8gZ2V0Q29va2llKGAke0RFRkFVTFRfU0VTU0lPTl9UT0tFTl9QUkVGSVh9LSR7YnVpZH1gKSA6ICcnKSB8fCBnZXRDb29raWUoREVGQVVMVF9TRVNTSU9OX1RPS0VOX0ZBTExCQUNLX0tFWSk7XG5cbiAgICByZXR1cm4geyB0b2tlbjogc2Vzc2lvblRva2VuIHx8ICcnLCBpc1ZFVDogZmFsc2UgfTtcbiAgfVxufVxuIl19
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wscUJBQXFCLEVBR3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIseUJBQXlCLEdBQzFCLE1BQU0sa0JBQWtCLENBQUM7O0FBRTFCLE1BQU0sNEJBQTRCLEdBQUcsZUFBZSxDQUFDO0FBQ3JELE1BQU0sa0NBQWtDLEdBQUcsYUFBYSxDQUFDO0FBQ3pELE1BQU0sd0JBQXdCLEdBQUcsYUFBYSxDQUFDO0FBQy9DLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBc0NoQyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUlVLFdBQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUF3QixJQUFJLENBQUM7UUFDeEMsZUFBVSxHQUFrQyxJQUFJLENBQUM7S0ErTDFEO0lBN0xDLElBQUksQ0FBQyxNQUE2QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxD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QUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy9jb29raWUuZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy91cmwuZnVuY3Rpb25zJztcbmltcG9ydCB7IE5zU2Vzc2lvbiB9IGZyb20gJy4uL21vZGVscy9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIGRlc2NyaWJlQ2xhaW1GYWlsdXJlcyxcbiAgSVNlc3Npb25DbGFpbUZhaWx1cmUsXG4gIFNlc3Npb25DbGFpbUZhaWx1cmVSZWFzb24sXG4gIFNlc3Npb25DbGFpbU5vdEZvdW5kRXJyb3IsXG4gIFNlc3Npb25DbGFpbXNNaXNzaW5nRXJyb3IsXG4gIFNlc3Npb25FcnJvcixcbiAgU2Vzc2lvblRva2VuRXhwaXJlZEVycm9yLFxuICBTZXNzaW9uVG9rZW5JbnZhbGlkRXJyb3IsXG4gIFNlc3Npb25Ub2tlbk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJy4vc2Vzc2lvbi5lcnJvcnMnO1xuXG5jb25zdCBERUZBVUxUX1NFU1NJT05fVE9LRU5fUFJFRklYID0gJ3Nzby13aXMtdG9rZW4nO1xuY29uc3QgREVGQVVMVF9TRVNTSU9OX1RPS0VOX0ZBTExCQUNLX0tFWSA9ICd4LXdpcy10b2tlbic7XG5jb25zdCBERUZBVUxUX1ZFVF9UT0tFTl9QUkVGSVggPSAneC12ZXQtdG9rZW4nO1xuY29uc3QgTEFVTkNIX1NPVVJDRV9WRVQgPSAnVkVUJztcblxuLyoqIFRoZSBhY2Nlc3NvcnMgdGhhdCByZWFkIGEgc2luZ2xlIGNsYWltLCBhbmQgc28gY2FuIGNvbWUgYmFjayBgdW5kZWZpbmVkYCBpbnNpZGUgYHJ1bmAuICovXG50eXBlIENsYWltQWNjZXNzb3IgPVxuICB8ICdzdWInXG4gIHwgJ2VtcEd1aWQnXG4gIHwgJ2VtcGxveWVlSWQnXG4gIHwgJ2ludGVybmFsU3NvUm9sZSdcbiAgfCAncm9sZXMnXG4gIHwgJ3Nlc3Npb25JZCdcbiAgfCAnbG9nZ2VkSW5Vc2VyJ1xuICB8ICdleHAnXG4gIHwgJ2lhdCdcbiAgfCAnYnVzaW5lc3NVbml0SWQnXG4gIHwgJ2FsbG93ZWRCdWlkcydcbiAgfCAndmV0VXNlckVtYWlsSWQnXG4gIHwgJ3ZldFVzZXJJZCdcbiAgfCAnc291cmNlJ1xuICB8ICdyb2xlSWQnO1xuXG4vKipcbiAqIFRoZSBzZXNzaW9uIGFzIHNlZW4gaW5zaWRlIGBydW5gJ3MgYG5leHRgLiBgcnVuYCBjb2xsZWN0cyBtaXNzaW5nIGNsYWltcyBpbnN0ZWFkIG9mIHRocm93aW5nXG4gKiBzbyB0aGUgYmxvY2sgYWx3YXlzIGNvbXBsZXRlcywgd2hpY2ggbWVhbnMgYW55IGNsYWltIGFjY2Vzc29yIG1heSB5aWVsZCBgdW5kZWZpbmVkYC5cbiAqIE91dHNpZGUgYHJ1bmAg4oCUIGRpcmVjdCBhY2Nlc3MsIG9yIGByZWFkYCDigJQgdGhlIGFjY2Vzc29ycyBzdGlsbCB0aHJvdyBhbmQgc3RheSBub24tb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRpYWxTZXNzaW9uID0gT21pdDxTZXNzaW9uU2VydmljZSwgQ2xhaW1BY2Nlc3Nvcj4gJiB7XG4gIHJlYWRvbmx5IFtLIGluIENsYWltQWNjZXNzb3JdOiBTZXNzaW9uU2VydmljZVtLXSB8IHVuZGVmaW5lZDtcbn07XG5cbnR5cGUgU2Vzc2lvblN0YXRlID1cbiAgfCB7IHN0YXR1czogJ29rJzsgY2xhaW1zOiBOc1Nlc3Npb24uSUNsYWltczsgaXNWRVQ6IGJvb2xlYW4gfVxuICB8IHsgc3RhdHVzOiAnbm90LWZvdW5kJzsgaXNWRVQ6IGJvb2xlYW4gfVxuICB8IHsgc3RhdHVzOiAnZXhwaXJlZCc7IGlzVkVUOiBib29sZWFuIH1cbiAgfCB7IHN0YXR1czogJ2ludmFsaWQnOyBpc1ZFVDogYm9vbGVhbiB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU2VydmljZSB7XG4gIHByaXZhdGUgY29uZmlnOiBOc1Nlc3Npb24uSUluaXRDb25maWcgPSB7fTtcbiAgcHJpdmF0ZSBjYWNoZWRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FjaGVkU3RhdGU6IFNlc3Npb25TdGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbGxlY3Rpbmc6IElTZXNzaW9uQ2xhaW1GYWlsdXJlW10gfCBudWxsID0gbnVsbDtcblxuICBpbml0KGNvbmZpZzogTnNTZXNzaW9uLklJbml0Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuICAgIHRoaXMuY2FjaGVkVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuY2FjaGVkU3RhdGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGhhbmRsZXJzLm5leHRgIGFuZCByZXR1cm5zIGl0cyByZXN1bHQsIG9yIGBoYW5kbGVycy5lcnJvcihlcnJvcilgIGlmIGl0IHRocm93cyBhIGBTZXNzaW9uRXJyb3JgLlxuICAgKiBDZW50cmFsaXplcyB0aGUgdHJ5L2NhdGNoIG1lY2hhbmljczsgdGhlIGNhbGxlciBzdGlsbCBzdXBwbGllcyB0aGUgYWN0dWFsIGhhbmRsaW5nIGxvZ2ljLlxuICAgKi9cbiAgcmVhZDxUPihoYW5kbGVyczogeyBuZXh0OiAoc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UpID0+IFQ7IGVycm9yOiAoZXJyb3I6IFNlc3Npb25FcnJvcikgPT4gVCB9KTogVCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5uZXh0KHRoaXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgU2Vzc2lvbkVycm9yKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVycy5lcnJvcihlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudC1zdHlsZSB2YXJpYW50IG9mIGByZWFkYCBmb3IgYmxvY2tzIG9mIGFzc2lnbm1lbnRzL3NpZGUgZWZmZWN0cyB3aXRoIG5vIHJldHVybiB2YWx1ZS5cbiAgICpcbiAgICogYG5leHRgIGFsd2F5cyBydW5zIHRvIGNvbXBsZXRpb246IGEgY2xhaW0gdGhhdCBpcyBhYnNlbnQgb3IgYmxhbmsgeWllbGRzIGB1bmRlZmluZWRgIGluc3RlYWQgb2ZcbiAgICogdGhyb3dpbmcsIGFuZCBldmVyeSBzdWNoIGZhaWx1cmUgaXMgcmVwb3J0ZWQgb25jZSBhZnRlcndhcmRzIHZpYSBgaGFuZGxlcnMuZXJyb3JgLCBhcyBhXG4gICAqIGBTZXNzaW9uQ2xhaW1zTWlzc2luZ0Vycm9yYCBsaXN0aW5nIGFsbCBvZiB0aGVtLiBBbiB1bnVzYWJsZSB0b2tlbiAobWlzc2luZywgZXhwaXJlZCxcbiAgICogdW5kZWNvZGFibGUpIHN0aWxsIGFib3J0cyBgbmV4dGAgaW1tZWRpYXRlbHkgd2l0aCB0aGUgbWF0Y2hpbmcgYFNlc3Npb25FcnJvcmAuXG4gICAqXG4gICAqIENvbGxlY3RpbmcgY292ZXJzIHRoZSBzeW5jaHJvbm91cyBib2R5IG9mIGBuZXh0YCBvbmx5IOKAlCBjbGFpbSByZWFkcyBkZWZlcnJlZCBpbnRvIGEgc3Vic2NyaXB0aW9uLFxuICAgKiB0aW1lb3V0IG9yIHByb21pc2UgcnVuIGFmdGVyIGl0IGhhcyByZXR1cm5lZCBhbmQgdGhyb3cgYXMgdXN1YWwuXG4gICAqXG4gICAqIEFuIGVycm9yIGBuZXh0YCB0aHJvd3MgZm9yIGFueSBvdGhlciByZWFzb24gcHJvcGFnYXRlcyB1bnRvdWNoZWQsIGV4Y2VwdCB0aGF0IGFueSBjbGFpbXMgbWlzc2luZ1xuICAgKiBhdCB0aGUgdGltZSBhcmUgYXBwZW5kZWQgdG8gaXRzIG1lc3NhZ2UgYW5kIGF0dGFjaGVkIGFzIGBzZXNzaW9uQ2xhaW1GYWlsdXJlc2Ag4oCUIGEgY29sbGVjdGVkXG4gICAqIGB1bmRlZmluZWRgIHJlYWNoaW5nIHRoZSBibG9jayBpcyB0aGUgdXN1YWwgY2F1c2UsIGFuZCB0aGF0IGlzIHRoZSBwYXJ0IHdvcnRoIGtub3dpbmcuXG4gICAqL1xuICBydW4oaGFuZGxlcnM6IHsgbmV4dDogKHNlc3Npb246IFBhcnRpYWxTZXNzaW9uKSA9PiB2b2lkOyBlcnJvcjogKGVycm9yOiBTZXNzaW9uRXJyb3IpID0+IHZvaWQgfSk6IHZvaWQge1xuICAgIGNvbnN0IGZhaWx1cmVzOiBJU2Vzc2lvbkNsYWltRmFpbHVyZVtdID0gW107XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmNvbGxlY3Rpbmc7XG4gICAgdGhpcy5jb2xsZWN0aW5nID0gZmFpbHVyZXM7XG4gICAgdHJ5IHtcbiAgICAgIGhhbmRsZXJzLm5leHQodGhpcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgaGFuZGxlcnMuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGggJiYgZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIChlIGFzIEVycm9yICYgeyBzZXNzaW9uQ2xhaW1GYWlsdXJlcz86IElTZXNzaW9uQ2xhaW1GYWlsdXJlW10gfSkuc2Vzc2lvbkNsYWltRmFpbHVyZXMgPSBmYWlsdXJlcztcbiAgICAgICAgZS5tZXNzYWdlID0gYCR7ZS5tZXNzYWdlfSDigJQgc2Vzc2lvbiBjbGFpbXMgbWlzc2luZyBkdXJpbmcgcnVuKCk6ICR7ZGVzY3JpYmVDbGFpbUZhaWx1cmVzKGZhaWx1cmVzKX1gO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jb2xsZWN0aW5nID0gcHJldmlvdXM7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzLmVycm9yKG5ldyBTZXNzaW9uQ2xhaW1zTWlzc2luZ0Vycm9yKGZhaWx1cmVzKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVkVUKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzVkVUO1xuICB9XG5cbiAgZ2V0IHN1YigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnc3ViJyk7IH1cbiAgZ2V0IGVtcEd1aWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ2VtcGxveWVlR1VJRCcpOyB9XG4gIGdldCBlbXBsb3llZUlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdlbXBsb3llZUlkJyk7IH1cbiAgZ2V0IGludGVybmFsU3NvUm9sZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnaW50ZXJuYWxfc3NvX3JvbGUnKTsgfVxuICBnZXQgcm9sZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRDbGFpbSgncm9sZXMnKTsgfVxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdzZXNzaW9uSWQnKTsgfVxuICBnZXQgbG9nZ2VkSW5Vc2VyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdsb2dnZWRJblVzZXInKTsgfVxuICBnZXQgZXhwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdleHAnKTsgfVxuICBnZXQgaWF0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdpYXQnKTsgfVxuICBnZXQgYnVzaW5lc3NVbml0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ2J1c2luZXNzVW5pdElkJyk7IH1cbiAgZ2V0IGFsbG93ZWRCdWlkcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldENsYWltKCdBTExPV0VEX0JVSURTJyk7IH1cbiAgZ2V0IHZldFVzZXJFbWFpbElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCd2ZXRVc2VyRW1haWxJZCcpOyB9XG4gIGdldCB2ZXRVc2VySWQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3ZldFVzZXJJZCcpOyB9XG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3NvdXJjZScpOyB9XG5cbiAgZ2V0IHJvbGVJZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHJhdyA9IHRoaXMucmVzb2x2ZVJvbGUodGhpcy5nZXRDbGFpbXMoKSk7XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHJldHVybiB0aGlzLm1pc3NpbmdDbGFpbSgncm9sZUlkJywgJ2Fic2VudCcpO1xuICAgIH1cbiAgICByZXR1cm4gTnVtYmVyKHJhdyk7XG4gIH1cblxuICAvKiogRmlyc3QgbnVtZXJpYyByb2xlIGluIGBpbnRlcm5hbF9zc29fcm9sZWAgdGhlbiBgcm9sZXNgLCBvciBgJydgIHdoZW4gdGhlIHRva2VuIGNhcnJpZXMgbm9uZS4gKi9cbiAgcHJpdmF0ZSByZXNvbHZlUm9sZShjbGFpbXM6IE5zU2Vzc2lvbi5JQ2xhaW1zKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW2NsYWltcy5pbnRlcm5hbF9zc29fcm9sZSwgLi4uKGNsYWltcy5yb2xlcyA/PyBbXSldO1xuICAgIHJldHVybiBjYW5kaWRhdGVzXG4gICAgICAubWFwKHZhbHVlID0+IHZhbHVlPy50cmltKCkpXG4gICAgICAuZmluZCh2YWx1ZSA9PiB0aGlzLmlzRGlnaXRzT25seSh2YWx1ZSkpID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RpZ2l0c09ubHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZhbHVlIGlzIHN0cmluZyB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsYWltcygpOiBOc1Nlc3Npb24uSUNsYWltcyB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdvaycpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5jbGFpbXM7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdub3QtZm91bmQnKSB7XG4gICAgICB0aHJvdyBuZXcgU2Vzc2lvblRva2VuTm90Rm91bmRFcnJvcigpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAnZXhwaXJlZCcpIHtcbiAgICAgIHRocm93IG5ldyBTZXNzaW9uVG9rZW5FeHBpcmVkRXJyb3IoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNlc3Npb25Ub2tlbkludmFsaWRFcnJvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFpbTxLIGV4dGVuZHMga2V5b2YgTnNTZXNzaW9uLklDbGFpbXM+KGtleTogSyk6IE5vbk51bGxhYmxlPE5zU2Vzc2lvbi5JQ2xhaW1zW0tdPiB7XG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5nZXRDbGFpbXMoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGNsYWltc1trZXldO1xuICAgIGNvbnN0IGlzRW1wdHlTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJyc7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgaXNFbXB0eVN0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMubWlzc2luZ0NsYWltKGtleSBhcyBzdHJpbmcsIGlzRW1wdHlTdHJpbmcgPyAnYmxhbmsnIDogJ2Fic2VudCcpO1xuICAgIH1cbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZSkgYXMgTm9uTnVsbGFibGU8TnNTZXNzaW9uLklDbGFpbXNbS10+O1xuICB9XG5cbiAgLyoqIFJlY29yZHMgdGhlIGZhaWx1cmUgYW5kIHlpZWxkcyBgdW5kZWZpbmVkYCB3aGlsZSBgcnVuYCBpcyBjb2xsZWN0aW5nOyB0aHJvd3Mgb3RoZXJ3aXNlLiAqL1xuICBwcml2YXRlIG1pc3NpbmdDbGFpbShjbGFpbTogc3RyaW5nLCByZWFzb246IFNlc3Npb25DbGFpbUZhaWx1cmVSZWFzb24pOiBuZXZlciB7XG4gICAgaWYgKHRoaXMuY29sbGVjdGluZykge1xuICAgICAgdGhpcy5jb2xsZWN0aW5nLnB1c2goeyBjbGFpbSwgcmVhc29uIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBuZXZlcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNlc3Npb25DbGFpbU5vdEZvdW5kRXJyb3IoY2xhaW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3RhdGUoKTogU2Vzc2lvblN0YXRlIHtcbiAgICBjb25zdCB7IHRva2VuLCBpc1ZFVCB9ID0gdGhpcy5maW5kVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuY2FjaGVkU3RhdGUgfHwgdG9rZW4gIT09IHRoaXMuY2FjaGVkVG9rZW4pIHtcbiAgICAgIHRoaXMuY2FjaGVkVG9rZW4gPSB0b2tlbjtcbiAgICAgIHRoaXMuY2FjaGVkU3RhdGUgPSB0aGlzLmJ1aWxkKHRva2VuLCBpc1ZFVCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlZFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZCh0b2tlbjogc3RyaW5nLCBpc1ZFVDogYm9vbGVhbik6IFNlc3Npb25TdGF0ZSB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnbm90LWZvdW5kJywgaXNWRVQgfTtcbiAgICB9XG5cbiAgICBsZXQgY2xhaW1zOiBOc1Nlc3Npb24uSUNsYWltcztcbiAgICB0cnkge1xuICAgICAgY2xhaW1zID0gand0RGVjb2RlPE5zU2Vzc2lvbi5JQ2xhaW1zPih0b2tlbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6ICdpbnZhbGlkJywgaXNWRVQgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0V4cGlyZWQoY2xhaW1zKSkge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnZXhwaXJlZCcsIGlzVkVUIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzOiAnb2snLCBjbGFpbXMsIGlzVkVUIH07XG4gIH1cblxuICBwcml2YXRlIGlzRXhwaXJlZChjbGFpbXM6IE5zU2Vzc2lvbi5JQ2xhaW1zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuZXhwID09PSAnbnVtYmVyJyAmJiBjbGFpbXMuZXhwICogMTAwMCA8PSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZFVFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ2V0UXVlcnlQYXJhbSgnc291cmNlJykgPT09IExBVU5DSF9TT1VSQ0VfVkVUO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQnVpZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0UXVlcnlQYXJhbSgnYnVpZCcpIHx8IGdldENvb2tpZSgnYnVpZCcpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbmRUb2tlbigpOiB7IHRva2VuOiBzdHJpbmc7IGlzVkVUOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IGJ1aWQgPSB0aGlzLnJlc29sdmVCdWlkKCk7XG5cbiAgICBpZiAodGhpcy5pc1ZFVFNvdXJjZSgpKSB7XG4gICAgICBjb25zdCB2ZXRLZXkgPSB0aGlzLmNvbmZpZy52ZXRUb2tlbkNvb2tpZUtleSA/PyAoYnVpZCA/IGAke0RFRkFVTFRfVkVUX1RPS0VOX1BSRUZJWH0tJHtidWlkfWAgOiBudWxsKTtcbiAgICAgIGNvbnN0IHZldFRva2VuID0gKHZldEtleSA/IGdldENvb2tpZSh2ZXRLZXkpIDogJycpIHx8ICcnO1xuICAgICAgaWYgKHZldFRva2VuKSB7XG4gICAgICAgIHJldHVybiB7IHRva2VuOiB2ZXRUb2tlbiwgaXNWRVQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSB0aGlzLmNvbmZpZy5zZXNzaW9uVG9rZW5Db29raWVLZXlcbiAgICAgID8gZ2V0Q29va2llKHRoaXMuY29uZmlnLnNlc3Npb25Ub2tlbkNvb2tpZUtleSlcbiAgICAgIDogKGJ1aWQgPyBnZXRDb29raWUoYCR7REVGQVVMVF9TRVNTSU9OX1RPS0VOX1BSRUZJWH0tJHtidWlkfWApIDogJycpIHx8IGdldENvb2tpZShERUZBVUxUX1NFU1NJT05fVE9LRU5fRkFMTEJBQ0tfS0VZKTtcblxuICAgIHJldHVybiB7IHRva2VuOiBzZXNzaW9uVG9rZW4gfHwgJycsIGlzVkVUOiBmYWxzZSB9O1xuICB9XG59XG4iXX0=
|