@smarterplan/ngx-smarterplan-core 1.4.19 → 1.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/helpers.service.mjs +28 -2
- package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +28 -7
- package/esm2022/lib/services/filter.service.mjs +8 -3
- package/esm2022/lib/services/matterport-object3d.service.mjs +657 -133
- package/esm2022/lib/services/matterport.service.mjs +330 -9
- package/esm2022/lib/services/models/base-object.service.mjs +10 -9
- package/esm2022/lib/services/models/equipment.service.mjs +27 -2
- package/esm2022/lib/services/models/feature.service.mjs +14 -1
- package/esm2022/lib/services/models/measurement.service.mjs +17 -1
- package/esm2022/lib/services/sweep-locator.service.mjs +114 -0
- package/esm2022/lib/services/threejs.service.mjs +840 -35
- package/esm2022/lib/services/utils/matterport-framing.util.mjs +63 -0
- package/esm2022/lib/services/viewer.service.mjs +193 -10
- package/esm2022/lib/types.service.mjs +3 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +2886 -776
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/helpers.service.d.ts +17 -0
- package/lib/services/matterport-object3d.service.d.ts +125 -5
- package/lib/services/matterport.service.d.ts +106 -7
- package/lib/services/models/base-object.service.d.ts +3 -4
- package/lib/services/models/measurement.service.d.ts +1 -0
- package/lib/services/sweep-locator.service.d.ts +54 -0
- package/lib/services/threejs.service.d.ts +304 -10
- package/lib/services/utils/matterport-framing.util.d.ts +40 -0
- package/lib/services/viewer.service.d.ts +87 -2
- package/lib/types.service.d.ts +42 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import { ModalSwitchVisitComponent } from "./components/modal-switch-visit/modal-switch-visit.component";
|
|
2
2
|
import { downloadFileAsObject } from "./services/s3.service";
|
|
3
3
|
import { LevelStatus, Locale, PoiType, RoleStatus } from "./types.service";
|
|
4
|
+
/**
|
|
5
|
+
* Where a POI placed in a Three.js model says it was placed, or null for any other POI.
|
|
6
|
+
*
|
|
7
|
+
* `frame` is 'model' when its coordinates are in that model's own space - it was placed before the
|
|
8
|
+
* model was calibrated - rather than in the space tags share with the other visits.
|
|
9
|
+
*/
|
|
10
|
+
export function getThreeJsPoiOrigin(poi) {
|
|
11
|
+
if (!poi?.metadata) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(poi.metadata);
|
|
16
|
+
return typeof parsed?.captureID === "string"
|
|
17
|
+
? { captureID: parsed.captureID, frame: parsed.frame === "model" ? "model" : null }
|
|
18
|
+
: null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export const THREEJS_MODEL_UP_OPTIONS = ["y", "z", "x", "-y", "-z", "-x"];
|
|
4
25
|
/**
|
|
5
26
|
* Parses the placement stored in a Three.js capture's metadata, or null when there is none.
|
|
6
27
|
*
|
|
@@ -39,7 +60,12 @@ export function parseThreeJsPlacement(metadata) {
|
|
|
39
60
|
placement.alignment = alignment;
|
|
40
61
|
}
|
|
41
62
|
}
|
|
42
|
-
|
|
63
|
+
if (THREEJS_MODEL_UP_OPTIONS.includes(parsed.up)) {
|
|
64
|
+
placement.up = parsed.up;
|
|
65
|
+
}
|
|
66
|
+
return placement.cameraPosition || placement.rotation || placement.alignment || placement.up
|
|
67
|
+
? placement
|
|
68
|
+
: null;
|
|
43
69
|
}
|
|
44
70
|
catch {
|
|
45
71
|
console.warn("Ignoring unparseable Three.js placement metadata:", metadata);
|
|
@@ -519,4 +545,4 @@ export function pointToString(point) {
|
|
|
519
545
|
const z = point.z.toFixed(3);
|
|
520
546
|
return `{ x: ${x}, y: ${y}, z: ${z} }`;
|
|
521
547
|
}
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXVCdkc7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQWdCO0lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUM5RSxNQUFNLFNBQVMsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFF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Q0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUEwQztJQUNwRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsU3dpdGNoVmlzaXRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGFsLXN3aXRjaC12aXNpdC9tb2RhbC1zd2l0Y2gtdmlzaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRvd25sb2FkRmlsZUFzT2JqZWN0IH0gZnJvbSBcIi4vc2VydmljZXMvczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXVpcG1lbnREb2N1bWVudCwgTGV2ZWxTdGF0dXMsIExvY2FsZSwgTWlzc2lvbiwgUG9pVHlwZSwgUm9sZVN0YXR1cyB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBNYXBzIHRoZSBjb29yZGluYXRlIHNwYWNlIFBPSSBwb3NpdGlvbnMgd2VyZSBjYXB0dXJlZCBpbiBvbnRvIHRoZSBsb2FkZWQgbW9kZWwncyBvd24gc3BhY2UuXHJcbiAqXHJcbiAqIFRhZyBjb29yZGluYXRlcyBjb21lIGZyb20gd2hpY2hldmVyIHZpZXdlciBjcmVhdGVkIHRoZW0gLSB0eXBpY2FsbHkgTWF0dGVycG9ydCAtIGFuZCB0aGUgLmdsYiBpc1xyXG4gKiBhIHNlcGFyYXRlIGNhcHR1cmUgd2l0aCBpdHMgb3duIG9yaWdpbiwgYXhlcyBhbmQgdW5pdHMuIFdpdGhvdXQgdGhpcywgYSB0YWcgY3JlYXRlZCBpbiBvbmUgdmlld2VyXHJcbiAqIGxhbmRzIGluIHRoZSB3cm9uZyBwbGFjZSBpbiB0aGUgb3RoZXIgZXZlbiB0aG91Z2ggYm90aCByZWFkIHRoZSBzYW1lIHJlY29yZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWVKc0FsaWdubWVudCB7XHJcbiAgICB0cmFuc2xhdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgLyoqIEV1bGVyIGFuZ2xlcyBpbiByYWRpYW5zLCBhcHBsaWVkIFhZWi4gKi9cclxuICAgIHJvdGF0aW9uPzogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH07XHJcbiAgICBzY2FsZT86IG51bWJlcjtcclxufVxyXG5cclxuLyoqIFdoZXJlIHRoZSBjYW1lcmEgc3RhcnRzIHdoZW4gYSBUaHJlZS5qcyB2aXNpdCBpcyBvcGVuZWQuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWVKc1BsYWNlbWVudCB7XHJcbiAgICBjYW1lcmFQb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgcm90YXRpb24/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTtcclxuICAgIGFsaWdubWVudD86IFRocmVlSnNBbGlnbm1lbnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgdGhlIHBsYWNlbWVudCBzdG9yZWQgaW4gYSBUaHJlZS5qcyBjYXB0dXJlJ3MgbWV0YWRhdGEsIG9yIG51bGwgd2hlbiB0aGVyZSBpcyBub25lLlxyXG4gKlxyXG4gKiBCb3RoIHRoZSBpbXBvcnQgKHdyaXRpbmcgdGhlIG5hdmlnYXRpb24gZW50cnkpIGFuZCB0aGUgdmlld2VyIChmcmFtaW5nIHRoZSBjYW1lcmEpIG5lZWQgdGhpcywgc29cclxuICogaXQgbGl2ZXMgaGVyZSByYXRoZXIgdGhhbiBvbiBlaXRoZXIgc2VydmljZS4gUGxhY2VtZW50IGlzIG9wdGlvbmFsIC0gdGhlIHZpZXdlciBmcmFtZXMgdGhlIG1vZGVsXHJcbiAqIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBpdCAtIHNvIHVudXNhYmxlIG1ldGFkYXRhIGlzIHdhcm5lZCBhYm91dCBhbmQgZHJvcHBlZCwgbmV2ZXIgdGhyb3duLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGhyZWVKc1BsYWNlbWVudChtZXRhZGF0YTogc3RyaW5nKTogVGhyZWVKc1BsYWNlbWVudCB8IG51bGwge1xyXG4gICAgaWYgKCFtZXRhZGF0YSB8fCAhbWV0YWRhdGEudHJpbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UobWV0YWRhdGEpO1xyXG4gICAgICAgIGNvbnN0IGlzVmVjdG9yID0gKHZhbHVlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHZhbHVlICYmIFtcInhcIiwgXCJ5XCIsIFwielwiXS5ldmVyeSgoYXhpcykgPT4gdHlwZW9mIHZhbHVlW2F4aXNdID09PSBcIm51bWJlclwiKTtcclxuICAgICAgICBjb25zdCBwbGFjZW1lbnQ6IFRocmVlSnNQbGFjZW1lbnQgPSB7fTtcclxuICAgICAgICBpZiAoaXNWZWN0b3IocGFyc2VkLmNhbWVyYVBvc2l0aW9uKSkge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnQuY2FtZXJhUG9zaXRpb24gPSBwYXJzZWQuY2FtZXJhUG9zaXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZlY3RvcihwYXJzZWQucm90YXRpb24pKSB7XHJcbiAgICAgICAgICAgIHBsYWNlbWVudC5yb3RhdGlvbiA9IHBhcnNlZC5yb3RhdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHBhcnNlZC5hbGlnbm1lbnQ7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGlnbm1lbnQ6IFRocmVlSnNBbGlnbm1lbnQgPSB7fTtcclxuICAgICAgICAgICAgaWYgKGlzVmVjdG9yKHNvdXJjZS50cmFuc2xhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIGFsaWdubWVudC50cmFuc2xhdGlvbiA9IHNvdXJjZS50cmFuc2xhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNWZWN0b3Ioc291cmNlLnJvdGF0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50LnJvdGF0aW9uID0gc291cmNlLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNjYWxlIDAgd291bGQgY29sbGFwc2UgZXZlcnkgdGFnIG9udG8gYSBwb2ludCwgc28gdHJlYXQgaXQgYXMgdW5zZXQgcmF0aGVyIHRoYW4gaG9ub3VyIGl0LlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZS5zY2FsZSA9PT0gXCJudW1iZXJcIiAmJiBzb3VyY2Uuc2NhbGUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQuc2NhbGUgPSBzb3VyY2Uuc2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGFsaWdubWVudCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50LmFsaWdubWVudCA9IGFsaWdubWVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBsYWNlbWVudC5jYW1lcmFQb3NpdGlvbiB8fCBwbGFjZW1lbnQucm90YXRpb24gfHwgcGxhY2VtZW50LmFsaWdubWVudCA/IHBsYWNlbWVudCA6IG51bGw7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJJZ25vcmluZyB1bnBhcnNlYWJsZSBUaHJlZS5qcyBwbGFjZW1lbnQgbWV0YWRhdGE6XCIsIG1ldGFkYXRhKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhzdGFydFBvaW50LCBlbmRQb2ludCkge1xyXG4gICAgY29uc3QgZHggPSBlbmRQb2ludC54IC0gc3RhcnRQb2ludC54O1xyXG4gICAgY29uc3QgZHkgPSBlbmRQb2ludC55IC0gc3RhcnRQb2ludC55O1xyXG4gICAgY29uc3QgZHogPSBlbmRQb2ludC56IC0gc3RhcnRQb2ludC56O1xyXG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6KTtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKGRpc3RhbmNlICogMTAwKSAvIDEwMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaVR5cGVUb1N0cmluZyh0eXBlOiBQb2lUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcImVxdWlwbWVudFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcInRpY2tldFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJkYXRhXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgIHJldHVybiBcImRhdGFcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgICAgIHJldHVybiBcImluZm9ybWF0aW9uXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgIHJldHVybiBcIm1lYXN1cmVcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuUEVPUExFOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJwZW9wbGVcIjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gXCJ0aWNrZXRcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdhaXQodGltZW91dDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aW1lb3V0ID0gdGltZW91dCB8fCAyMDAwO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHdhaXRVbnRpbCA9IChjb25kaXRpb246ICgpID0+IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMzApO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW51bVRvQXJyYXkoZW51bWVyYWJsZTogYW55KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bWVyYWJsZSlcclxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPT09IHRydWUpXHJcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBlbnVtZXJhYmxlW2tleV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxzQmVsb3cobGV2ZWw6IExldmVsU3RhdHVzKTogTGV2ZWxTdGF0dXNbXSB7XHJcbiAgICBjb25zdCBhbGwgPSBbXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUlOSU1VTSxcclxuICAgICAgICBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUVESVVNLFxyXG4gICAgICAgIExldmVsU3RhdHVzLkhJR0gsXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUFYSU1VTSxcclxuICAgIF07XHJcbiAgICBzd2l0Y2ggKGxldmVsKSB7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NQVhJTVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuSElHSDpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1FRElVTTpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSgzLCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLkxPVzpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNLCBMZXZlbFN0YXR1cy5MT1ddO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUlOSU1VTTpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IExldmVsU3RhdHVzIHtcclxuICAgIGxldCBsYXRlc3RWaXNpYmxlTGV2ZWxzID0gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3Npb25zKSB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZUxldmVscyA9IGdldExldmVsc0JlbG93KG0ubGV2ZWwpO1xyXG4gICAgICAgIGlmICh2aXNpYmxlTGV2ZWxzLmxlbmd0aCA+IGxhdGVzdFZpc2libGVMZXZlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxhdGVzdFZpc2libGVMZXZlbHMgPSB2aXNpYmxlTGV2ZWxzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAobGF0ZXN0VmlzaWJsZUxldmVscy5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLkxPVztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NRURJVU07XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuSElHSDtcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NQVhJTVVNO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhtaXNzaW9uczogTWlzc2lvbltdKTogUm9sZVN0YXR1cyB7XHJcbiAgICBsZXQgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1I7XHJcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2lvbnMpIHtcclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSb2xlU3RhdHVzLkFETUlOO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk9XTkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLk1BTkFHRVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk1BTkFHRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0UgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgIT09IFJvbGVTdGF0dXMuTUFOQUdFUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuU0VSVklDRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuT0NDVVBBTlQgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuT0NDVVBBTlQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0pIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaWdoZXN0Um9sZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVzQmVsb3dGb3JNYW5hZ2VyKHJvbGU6IFJvbGVTdGF0dXMpOiBSb2xlU3RhdHVzW10ge1xyXG4gICAgY29uc3QgYWxsID0gW1xyXG4gICAgICAgIFJvbGVTdGF0dXMuVklTSVRPUixcclxuICAgICAgICBSb2xlU3RhdHVzLk9DQ1VQQU5ULFxyXG4gICAgICAgIFJvbGVTdGF0dXMuU0VSVklDRSxcclxuICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IG11c2V1bSA9IFtSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNLCBSb2xlU3RhdHVzLkdVSURFX01VU0VVTV07XHJcbiAgICBzd2l0Y2ggKHJvbGUpIHtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuQURNSU46XHJcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5tdXNldW1dO1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PV05FUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg1LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuTUFOQUdFUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gbXVzZXVtO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBhbGwuc3BsaWNlKDQsIDIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFycmF5T2ZPYmplY3RzOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBhcnJheU9mT2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgKHYsIGluZGV4LCBhKSA9PiBhLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gdi5pZCkgPT09IGluZGV4LFxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChvYmplY3Q6IE9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xyXG4gICAgICAgIGlmIChvYmplY3Rba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgb2JqZWN0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGVzdCBpZiBhIGRhdGUgaGFzIGV4cGlyZWRcclxuICogQHBhcmFtIGRhdGVcclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBoYXMgZXhwaXJlZCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUhhc0V4cGlyZWQoXHJcbiAgICBkYXRlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKSA8PSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTG9jYWxlVG9FbnVtKGxvY2FsZTogc3RyaW5nKTogTG9jYWxlIHtcclxuICAgIHN3aXRjaCAobG9jYWxlKSB7XHJcbiAgICAgICAgY2FzZSBcImVuXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRU47XHJcbiAgICAgICAgY2FzZSBcImZyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRlI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsZS5FTjtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhRm9ySW1hZ2UodXJsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsICgpID0+IHJlamVjdCgpKTtcclxuICAgICAgICBpbWcuc3JjID0gdXJsO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzb3J0QWxwaGFiZXRpY2FsbHlPbk5hbWUoYXJyYXk6IHsgbmFtZTogc3RyaW5nOyB9W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJlID1cclxuICAgICAgICAvXigoW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSsoXFwuW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSspKil8KFwiLitcIikpQCgoXFxbKD86XFxkezEsM31cXC4pezN9XFxkezEsM31dKXwoKFtcXGRBLVphLXpcXC1dK1xcLikrW0EtWmEtel17Mix9KSkkLztcclxuICAgIHJldHVybiByZS50ZXN0KGVtYWlsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQmxvYihibG9iLCBmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZSB8fCBcImRvd25sb2FkXCI7XHJcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tIYW5kbGVyKTtcclxuICAgICAgICB9LCAxNTApO1xyXG4gICAgfTtcclxuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgYS5jbGljaygpO1xyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuXHJcbi8qXHJcbiAgICBPcGVuIG1vZGFsIGlmIG9uZSBoYXMgdG8gc3dpdGNoIHZpcnR1YWwgdmlzaXRcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoKFxyXG4gICAgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIG1vZGVsM0Q6IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRhdGFUb01vdmU6IHsgc3dlZXBUb01vdmU6IHN0cmluZywgcm90YXRpb246IGFueTsgfSB8IG51bGwgPSBudWxsXHJcbikge1xyXG4gICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSBtb2RhbFNlcnZpY2Uub3BlbihNb2RhbFN3aXRjaFZpc2l0Q29tcG9uZW50KTtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmNvbnRlbnQgPVxyXG4gICAgICAgIFwiVGhpcyBvYmplY3QgYmVsb25ncyB0byBhbm90aGVyIDNEIHZpc2l0LiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3dpdGNoIHRoZSB2aXNpdD9cIjtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLm1vZGVsM0QgPSBtb2RlbDNEO1xyXG4gICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2Uuc3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBpZiAoZGF0YVRvTW92ZSkge1xyXG4gICAgICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmRhdGFUb01vdmUgPSBkYXRhVG9Nb3ZlO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IHRyYW5zbGF0ZS5nZXRDdXJyZW50TGFuZygpIHx8IHRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKSB8fCBcImZyXCI7XHJcblxyXG4gICAgLy8gQ2xlYW4gdXAgbGVhZGluZyBtZXNzXHJcbiAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9eW18tXSsvLCAnJyk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGZyX0ZSIG9yIGZyLUZSICh0YWtlIHByaW1hcnkgbGFuZ3VhZ2UpXHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIl9cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIl9cIilbMF07XHJcbiAgICB9XHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIi1cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIi1cIilbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5zdXJlIDItbGV0dGVyIGNvZGUgKElTTyA2MzktMSlcclxuICAgIGlmIChsYW5nLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzdHJpbmcgb2YgYSBnaXZlbiBkYXRlIHRpbWUgaW4gbG9jYWwgZm9ybWF0LlxyXG4gKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcclxuICAgIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBtb2RlPyxcclxuKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgIGxhbmcgPSBnZXRDdXJyZW50TGFuZyh0cmFuc2xhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcHRpb25zOiB7XHJcbiAgICAgICAgbW9udGg/O1xyXG4gICAgICAgIHllYXI/O1xyXG4gICAgICAgIGRheT87XHJcbiAgICAgICAgaG91cj87XHJcbiAgICAgICAgbWludXRlPztcclxuICAgICAgICBzZWNvbmQ/O1xyXG4gICAgICAgIGRhdGVTdHlsZT87XHJcbiAgICAgICAgdGltZVN0eWxlPztcclxuICAgICAgICB3ZWVrZGF5PztcclxuICAgICAgICB0aW1lWm9uZT87XHJcbiAgICAgICAgdGltZVpvbmVOYW1lPztcclxuICAgIH07XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICBjYXNlIFwiZGF5X251bWVyaWNcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHdlZWtkYXk6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGVTdHlsZTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNob3J0X2RhdGVfdGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgeWVhcjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5X3RpbWVfem9uZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lU3R5bGU6IFwic2hvcnRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsYW5nLCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHR3byBzdHJpbmcgYXJyYXlzXHJcbiAqIEBwYXJhbSBhcnJheTFcclxuICogQHBhcmFtIGFycmF5MlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0NvbnRhaW5TYW1lRWxlbWVudHMoXHJcbiAgICBhcnJheTE6IHN0cmluZ1tdLFxyXG4gICAgYXJyYXkyOiBzdHJpbmdbXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBhcnJheTEuc29ydCgpO1xyXG4gICAgYXJyYXkyLnNvcnQoKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnJheTEpID09PSBKU09OLnN0cmluZ2lmeShhcnJheTIpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2l0VXJsKGN1cnJlbnRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXRoID0gY3VycmVudFVybC5zcGxpdChcIi9cIik7XHJcbiAgICBwYXRoLnNwbGljZSgzLCBwYXRoLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHBhdGguam9pbihcIi9cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHNwYWNlSUQgZnJvbSB1cmwgd2hlbiBpbiB2aXNpdCAzRFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYWNlSURGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZpc2l0VXJsID0gZ2V0VmlzaXRVcmwodXJsKTtcclxuICAgIHJldHVybiB2aXNpdFVybC5zcGxpdChcIi9cIilbMl07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEb3dubG9hZCByZWxhdGVkXHJcbiAqL1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSBcImZpbGUtc2F2ZXJcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZpbGUoZmlsZVVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGZpbGVVcmwgKyBmaWxlTmFtZSwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRvY3VtZW50KGZpbGVVcmw6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikge1xyXG4gICAgd2luZG93Lm9wZW4oYCR7ZmlsZVVybCArIGZpbGVOYW1lfSNkb2M9JHtpZH1gLCBcIl9ibGFua1wiLCBcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRXF1aXBtZW50RG9jdW1lbnQgPSBhc3luYyAoXHJcbiAgICBkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50LFxyXG4pOiBQcm9taXNlPE9iamVjdCB8IHZvaWQ+ID0+IHtcclxuICAgIGNvbnN0IHNpZ25lZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVBc09iamVjdChkb2N1bWVudF8udXJsKTtcclxuICAgIGlmIChzaWduZWRGaWxlKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRvd25sb2FkQmxvYihzaWduZWRGaWxlLkJvZHksIGRvY3VtZW50Xy5maWxlbmFtZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tFbGVtZW50QnlJZChzZWxlY3Rvcikge1xyXG4gICAgbGV0IHF1ZXJ5U2VsZWN0b3IgPSBudWxsO1xyXG4gICAgd2hpbGUgKHF1ZXJ5U2VsZWN0b3IgPT09IG51bGwpIHtcclxuICAgICAgICBhd2FpdCByYWZBc3luYygpO1xyXG4gICAgICAgIHF1ZXJ5U2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTZWxlY3RvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gcmFmQXN5bmMoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSk7IC8vIGZhc3RlciB0aGFuIHNldCB0aW1lIG91dFxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qIEBwYXJhbSB7QXJyYXl9IG51bWJlcnMgQW4gYXJyYXkgb2YgbnVtYmVycy5cclxuICogQHJldHVybiB7TnVtYmVyfSBUaGUgY2FsY3VsYXRlZCBhdmVyYWdlIChvciBtZWFuKSB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWRcclxuICogICAgIG51bWJlcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVhbihudW1iZXJzOiBudW1iZXJbXSkge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGZvciAoY29uc3QgbnVtYmVyIG9mIG51bWJlcnMpIHtcclxuICAgICAgICB0b3RhbCArPSBudW1iZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG90YWwgLyBudW1iZXJzLmxlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUaW1lc3RhbXBUb0xvY2FsWm9uZSh0aW1lc3RhbXA6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xyXG4gICAgY29uc3QgbG9jYWxPZmZzZXQgPSAtMSAqIHNlbGVjdGVkRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICBjb25zdCBzdGFtcCA9IHRpbWVzdGFtcCArIGxvY2FsT2Zmc2V0O1xyXG4gICAgcmV0dXJuIHN0YW1wO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHN0cmluZyBmb3IgcGVyaW9kIG9mIHRpbWUuIFBhcmFtZXRlcnMgYXJlIERhdGVUaW1lIG9iamVjdHMgb2YgbHV4b24gbGlicmFyeS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEYXRlUGVyaW9kKFxyXG4gICAgdHJhbnNsYXRlU2VydmljZTogYW55LFxyXG4gICAgZGF0ZVN0YXJ0UGVyaW9kOiBhbnksXHJcbiAgICBkYXRlRW5kUGVyaW9kOiBhbnksXHJcbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcmV0dXJuIGAke2RhdGVTdGFydFBlcmlvZC50b0xvY2FsZVN0cmluZyh7XHJcbiAgICAgICAgbG9jYWxlLFxyXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgfSl9IC0gJHtkYXRlRW5kUGVyaW9kLnRvTG9jYWxlU3RyaW5nKHtcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICB9KX0gYDtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4qIFJldHVybiBsb2NhbCBpbiB0aGUgY2Fub25pY2FsIGZvcm06IFwiZW4tR0JcIiwgXCJmci1GUlwiXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGxhbmcgPT09IFwiZW5cIikge1xyXG4gICAgICAgIHJldHVybiBcImVuLUdCXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bGFuZ30tJHtsYW5nLnRvVXBwZXJDYXNlKCl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBsb2NhbCBpbiB0aGUgc2hvcnQgZm9ybTogXCJlblwiLCBcImZyXCJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVTaG9ydCh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgc3RyaW5nIHRvIGxvd2VyY2FzZSwgbm8gc3BhY2VzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9Mb3dlcmNhc2VOb1NwYWNlcyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHdvcmRzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvXFxzKy8pO1xyXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oXCJcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIHRoZSBvYmplY3QgPT09IHt9XHJcbiAqIEBwYXJhbSBvYmogb2JqZWN0IHtrZXk6dmFsdWV9XHJcbiAqIEByZXR1cm5zIGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCB4IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUFycmF5KGFycmF5OiBhbnlbXSkge1xyXG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcclxuICAgICAgICBjb25zdCBpbmRleE5ldyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpbmRleCArIDEpKTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICBbbmV3QXJyYXlbaW5kZXhdLCBuZXdBcnJheVtpbmRleE5ld11dID0gW1xyXG4gICAgICAgICAgICBuZXdBcnJheVtpbmRleE5ld10sXHJcbiAgICAgICAgICAgIG5ld0FycmF5W2luZGV4XSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9EYXRlU3RyaW5nKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGpzRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XHJcbiAgICByZXR1cm4ganNEYXRlLnRvTG9jYWxlU3RyaW5nKFwiZnItRlJcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvblRvU3RyaW5nKFxyXG4gICAgZHVyYXRpb246IG51bWJlcixcclxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKGR1cmF0aW9uIC8gMzYwMCAvIDI0KTtcclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoZHVyYXRpb24gLSBkYXlzICogMjQgKiAzNjAwKSAvIDM2MDApO1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uICUgMzYwMCkgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAlIDYwKTtcclxuXHJcbiAgICBjb25zdCBkYXlzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJkYXkocylcIik7XHJcbiAgICBjb25zdCBob3Vyc1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiaG91cihzKVwiKTtcclxuICAgIGNvbnN0IG9uZUhvdXJTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImhvdXJcIik7XHJcbiAgICBjb25zdCBtaW51dGVzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJtaW51dGUocylcIik7XHJcbiAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJzZWNvbmQocylcIik7XHJcblxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCAqIDI0ICogNykge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDAgKiAyNCkge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9ICR7aG91cnN9ICR7aG91cnNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA9PT0gMzYwMCkge1xyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtvbmVIb3VyU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwKSB7XHJcbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke2hvdXJzU3RyaW5nfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtob3Vyc1N0cmluZ30gJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+PSA2MCkge1xyXG4gICAgICAgIGlmIChzZWNvbmRzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ30gJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50VG9TdHJpbmcocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHggPSBwb2ludC54LnRvRml4ZWQoMyk7XHJcbiAgICBjb25zdCB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgY29uc3QgeiA9IHBvaW50LnoudG9GaXhlZCgzKTtcclxuXHJcbiAgICByZXR1cm4gYHsgeDogJHt4fSwgeTogJHt5fSwgejogJHt6fSB9YDtcclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
548
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWdCdkc7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQy9CLEdBQW9EO0lBRXBELElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQUksQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sT0FBTyxNQUFNLEVBQUUsU0FBUyxLQUFLLFFBQVE7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNuRixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDTCxDQUFDO0FBS0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQVc1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QUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsU3dpdGNoVmlzaXRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGFsLXN3aXRjaC12aXNpdC9tb2RhbC1zd2l0Y2gtdmlzaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRvd25sb2FkRmlsZUFzT2JqZWN0IH0gZnJvbSBcIi4vc2VydmljZXMvczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXVpcG1lbnREb2N1bWVudCwgTGV2ZWxTdGF0dXMsIExvY2FsZSwgTWlzc2lvbiwgUG9pVHlwZSwgUm9sZVN0YXR1cyB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBNYXBzIHRoZSBjb29yZGluYXRlIHNwYWNlIFBPSSBwb3NpdGlvbnMgd2VyZSBjYXB0dXJlZCBpbiBvbnRvIHRoZSBsb2FkZWQgbW9kZWwncyBvd24gc3BhY2UuXHJcbiAqXHJcbiAqIFRhZyBjb29yZGluYXRlcyBjb21lIGZyb20gd2hpY2hldmVyIHZpZXdlciBjcmVhdGVkIHRoZW0gLSB0eXBpY2FsbHkgTWF0dGVycG9ydCAtIGFuZCB0aGUgLmdsYiBpc1xyXG4gKiBhIHNlcGFyYXRlIGNhcHR1cmUgd2l0aCBpdHMgb3duIG9yaWdpbiwgYXhlcyBhbmQgdW5pdHMuIFdpdGhvdXQgdGhpcywgYSB0YWcgY3JlYXRlZCBpbiBvbmUgdmlld2VyXHJcbiAqIGxhbmRzIGluIHRoZSB3cm9uZyBwbGFjZSBpbiB0aGUgb3RoZXIgZXZlbiB0aG91Z2ggYm90aCByZWFkIHRoZSBzYW1lIHJlY29yZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWVKc0FsaWdubWVudCB7XHJcbiAgICB0cmFuc2xhdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgLyoqIEV1bGVyIGFuZ2xlcyBpbiByYWRpYW5zLCBhcHBsaWVkIFhZWi4gKi9cclxuICAgIHJvdGF0aW9uPzogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH07XHJcbiAgICBzY2FsZT86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFdoZXJlIGEgUE9JIHBsYWNlZCBpbiBhIFRocmVlLmpzIG1vZGVsIHNheXMgaXQgd2FzIHBsYWNlZCwgb3IgbnVsbCBmb3IgYW55IG90aGVyIFBPSS5cclxuICpcclxuICogYGZyYW1lYCBpcyAnbW9kZWwnIHdoZW4gaXRzIGNvb3JkaW5hdGVzIGFyZSBpbiB0aGF0IG1vZGVsJ3Mgb3duIHNwYWNlIC0gaXQgd2FzIHBsYWNlZCBiZWZvcmUgdGhlXHJcbiAqIG1vZGVsIHdhcyBjYWxpYnJhdGVkIC0gcmF0aGVyIHRoYW4gaW4gdGhlIHNwYWNlIHRhZ3Mgc2hhcmUgd2l0aCB0aGUgb3RoZXIgdmlzaXRzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRocmVlSnNQb2lPcmlnaW4oXHJcbiAgICBwb2k6IHsgbWV0YWRhdGE/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4pOiB7IGNhcHR1cmVJRDogc3RyaW5nOyBmcmFtZTogXCJtb2RlbFwiIHwgbnVsbCB9IHwgbnVsbCB7XHJcbiAgICBpZiAoIXBvaT8ubWV0YWRhdGEpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFyc2VkPy5jYXB0dXJlSUQgPT09IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgPyB7IGNhcHR1cmVJRDogcGFyc2VkLmNhcHR1cmVJRCwgZnJhbWU6IHBhcnNlZC5mcmFtZSA9PT0gXCJtb2RlbFwiID8gXCJtb2RlbFwiIDogbnVsbCB9XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiogV2hpY2ggb2YgYSBtb2RlbCdzIG93biBheGVzIHBvaW50cyB1cCwgZm9yIGEgbW9kZWwgd2hvc2UgZmlsZSBoYXMgaXQgdGhlIG90aGVyIHdheS4gKi9cclxuZXhwb3J0IHR5cGUgVGhyZWVKc01vZGVsVXAgPSBcInhcIiB8IFwieVwiIHwgXCJ6XCIgfCBcIi14XCIgfCBcIi15XCIgfCBcIi16XCI7XHJcblxyXG5leHBvcnQgY29uc3QgVEhSRUVKU19NT0RFTF9VUF9PUFRJT05TOiBUaHJlZUpzTW9kZWxVcFtdID0gW1wieVwiLCBcInpcIiwgXCJ4XCIsIFwiLXlcIiwgXCItelwiLCBcIi14XCJdO1xyXG5cclxuLyoqIFdoZXJlIHRoZSBjYW1lcmEgc3RhcnRzIHdoZW4gYSBUaHJlZS5qcyB2aXNpdCBpcyBvcGVuZWQuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWVKc1BsYWNlbWVudCB7XHJcbiAgICBjYW1lcmFQb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgcm90YXRpb24/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTtcclxuICAgIGFsaWdubWVudD86IFRocmVlSnNBbGlnbm1lbnQ7XHJcbiAgICAvKiogU2V0IG9uY2Ugc29tZW9uZSBoYXMgY2hvc2VuIHRoZSB2ZXJ0aWNhbCBheGlzIGJ5IGhhbmQ7IGFic2VudCBtZWFucyBcIndvcmsgaXQgb3V0XCIuICovXHJcbiAgICB1cD86IFRocmVlSnNNb2RlbFVwO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIHRoZSBwbGFjZW1lbnQgc3RvcmVkIGluIGEgVGhyZWUuanMgY2FwdHVyZSdzIG1ldGFkYXRhLCBvciBudWxsIHdoZW4gdGhlcmUgaXMgbm9uZS5cclxuICpcclxuICogQm90aCB0aGUgaW1wb3J0ICh3cml0aW5nIHRoZSBuYXZpZ2F0aW9uIGVudHJ5KSBhbmQgdGhlIHZpZXdlciAoZnJhbWluZyB0aGUgY2FtZXJhKSBuZWVkIHRoaXMsIHNvXHJcbiAqIGl0IGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gb24gZWl0aGVyIHNlcnZpY2UuIFBsYWNlbWVudCBpcyBvcHRpb25hbCAtIHRoZSB2aWV3ZXIgZnJhbWVzIHRoZSBtb2RlbFxyXG4gKiBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgaXQgLSBzbyB1bnVzYWJsZSBtZXRhZGF0YSBpcyB3YXJuZWQgYWJvdXQgYW5kIGRyb3BwZWQsIG5ldmVyIHRocm93bi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRocmVlSnNQbGFjZW1lbnQobWV0YWRhdGE6IHN0cmluZyk6IFRocmVlSnNQbGFjZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG1ldGFkYXRhKTtcclxuICAgICAgICBjb25zdCBpc1ZlY3RvciA9ICh2YWx1ZTogYW55KSA9PlxyXG4gICAgICAgICAgICB2YWx1ZSAmJiBbXCJ4XCIsIFwieVwiLCBcInpcIl0uZXZlcnkoKGF4aXMpID0+IHR5cGVvZiB2YWx1ZVtheGlzXSA9PT0gXCJudW1iZXJcIik7XHJcbiAgICAgICAgY29uc3QgcGxhY2VtZW50OiBUaHJlZUpzUGxhY2VtZW50ID0ge307XHJcbiAgICAgICAgaWYgKGlzVmVjdG9yKHBhcnNlZC5jYW1lcmFQb3NpdGlvbikpIHtcclxuICAgICAgICAgICAgcGxhY2VtZW50LmNhbWVyYVBvc2l0aW9uID0gcGFyc2VkLmNhbWVyYVBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNWZWN0b3IocGFyc2VkLnJvdGF0aW9uKSkge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnQucm90YXRpb24gPSBwYXJzZWQucm90YXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBwYXJzZWQuYWxpZ25tZW50O1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxpZ25tZW50OiBUaHJlZUpzQWxpZ25tZW50ID0ge307XHJcbiAgICAgICAgICAgIGlmIChpc1ZlY3Rvcihzb3VyY2UudHJhbnNsYXRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQudHJhbnNsYXRpb24gPSBzb3VyY2UudHJhbnNsYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzVmVjdG9yKHNvdXJjZS5yb3RhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIGFsaWdubWVudC5yb3RhdGlvbiA9IHNvdXJjZS5yb3RhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTY2FsZSAwIHdvdWxkIGNvbGxhcHNlIGV2ZXJ5IHRhZyBvbnRvIGEgcG9pbnQsIHNvIHRyZWF0IGl0IGFzIHVuc2V0IHJhdGhlciB0aGFuIGhvbm91ciBpdC5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2Uuc2NhbGUgPT09IFwibnVtYmVyXCIgJiYgc291cmNlLnNjYWxlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50LnNjYWxlID0gc291cmNlLnNjYWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhhbGlnbm1lbnQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudC5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChUSFJFRUpTX01PREVMX1VQX09QVElPTlMuaW5jbHVkZXMocGFyc2VkLnVwKSkge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnQudXAgPSBwYXJzZWQudXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGxhY2VtZW50LmNhbWVyYVBvc2l0aW9uIHx8IHBsYWNlbWVudC5yb3RhdGlvbiB8fCBwbGFjZW1lbnQuYWxpZ25tZW50IHx8IHBsYWNlbWVudC51cFxyXG4gICAgICAgICAgICA/IHBsYWNlbWVudFxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJJZ25vcmluZyB1bnBhcnNlYWJsZSBUaHJlZS5qcyBwbGFjZW1lbnQgbWV0YWRhdGE6XCIsIG1ldGFkYXRhKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhzdGFydFBvaW50LCBlbmRQb2ludCkge1xyXG4gICAgY29uc3QgZHggPSBlbmRQb2ludC54IC0gc3RhcnRQb2ludC54O1xyXG4gICAgY29uc3QgZHkgPSBlbmRQb2ludC55IC0gc3RhcnRQb2ludC55O1xyXG4gICAgY29uc3QgZHogPSBlbmRQb2ludC56IC0gc3RhcnRQb2ludC56O1xyXG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6KTtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKGRpc3RhbmNlICogMTAwKSAvIDEwMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaVR5cGVUb1N0cmluZyh0eXBlOiBQb2lUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcImVxdWlwbWVudFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcInRpY2tldFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJkYXRhXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgIHJldHVybiBcImRhdGFcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgICAgIHJldHVybiBcImluZm9ybWF0aW9uXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgIHJldHVybiBcIm1lYXN1cmVcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuUEVPUExFOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJwZW9wbGVcIjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gXCJ0aWNrZXRcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdhaXQodGltZW91dDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aW1lb3V0ID0gdGltZW91dCB8fCAyMDAwO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHdhaXRVbnRpbCA9IChjb25kaXRpb246ICgpID0+IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMzApO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW51bVRvQXJyYXkoZW51bWVyYWJsZTogYW55KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bWVyYWJsZSlcclxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPT09IHRydWUpXHJcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBlbnVtZXJhYmxlW2tleV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxzQmVsb3cobGV2ZWw6IExldmVsU3RhdHVzKTogTGV2ZWxTdGF0dXNbXSB7XHJcbiAgICBjb25zdCBhbGwgPSBbXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUlOSU1VTSxcclxuICAgICAgICBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUVESVVNLFxyXG4gICAgICAgIExldmVsU3RhdHVzLkhJR0gsXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUFYSU1VTSxcclxuICAgIF07XHJcbiAgICBzd2l0Y2ggKGxldmVsKSB7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NQVhJTVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuSElHSDpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1FRElVTTpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSgzLCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLkxPVzpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNLCBMZXZlbFN0YXR1cy5MT1ddO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUlOSU1VTTpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IExldmVsU3RhdHVzIHtcclxuICAgIGxldCBsYXRlc3RWaXNpYmxlTGV2ZWxzID0gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3Npb25zKSB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZUxldmVscyA9IGdldExldmVsc0JlbG93KG0ubGV2ZWwpO1xyXG4gICAgICAgIGlmICh2aXNpYmxlTGV2ZWxzLmxlbmd0aCA+IGxhdGVzdFZpc2libGVMZXZlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxhdGVzdFZpc2libGVMZXZlbHMgPSB2aXNpYmxlTGV2ZWxzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAobGF0ZXN0VmlzaWJsZUxldmVscy5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLkxPVztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NRURJVU07XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuSElHSDtcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NQVhJTVVNO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhtaXNzaW9uczogTWlzc2lvbltdKTogUm9sZVN0YXR1cyB7XHJcbiAgICBsZXQgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1I7XHJcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2lvbnMpIHtcclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSb2xlU3RhdHVzLkFETUlOO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk9XTkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLk1BTkFHRVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk1BTkFHRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0UgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgIT09IFJvbGVTdGF0dXMuTUFOQUdFUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuU0VSVklDRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuT0NDVVBBTlQgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuT0NDVVBBTlQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0pIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaWdoZXN0Um9sZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVzQmVsb3dGb3JNYW5hZ2VyKHJvbGU6IFJvbGVTdGF0dXMpOiBSb2xlU3RhdHVzW10ge1xyXG4gICAgY29uc3QgYWxsID0gW1xyXG4gICAgICAgIFJvbGVTdGF0dXMuVklTSVRPUixcclxuICAgICAgICBSb2xlU3RhdHVzLk9DQ1VQQU5ULFxyXG4gICAgICAgIFJvbGVTdGF0dXMuU0VSVklDRSxcclxuICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IG11c2V1bSA9IFtSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNLCBSb2xlU3RhdHVzLkdVSURFX01VU0VVTV07XHJcbiAgICBzd2l0Y2ggKHJvbGUpIHtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuQURNSU46XHJcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5tdXNldW1dO1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PV05FUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg1LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuTUFOQUdFUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gbXVzZXVtO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBhbGwuc3BsaWNlKDQsIDIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFycmF5T2ZPYmplY3RzOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBhcnJheU9mT2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgKHYsIGluZGV4LCBhKSA9PiBhLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gdi5pZCkgPT09IGluZGV4LFxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChvYmplY3Q6IE9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xyXG4gICAgICAgIGlmIChvYmplY3Rba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgb2JqZWN0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGVzdCBpZiBhIGRhdGUgaGFzIGV4cGlyZWRcclxuICogQHBhcmFtIGRhdGVcclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBoYXMgZXhwaXJlZCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUhhc0V4cGlyZWQoXHJcbiAgICBkYXRlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKSA8PSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTG9jYWxlVG9FbnVtKGxvY2FsZTogc3RyaW5nKTogTG9jYWxlIHtcclxuICAgIHN3aXRjaCAobG9jYWxlKSB7XHJcbiAgICAgICAgY2FzZSBcImVuXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRU47XHJcbiAgICAgICAgY2FzZSBcImZyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRlI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsZS5FTjtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhRm9ySW1hZ2UodXJsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsICgpID0+IHJlamVjdCgpKTtcclxuICAgICAgICBpbWcuc3JjID0gdXJsO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzb3J0QWxwaGFiZXRpY2FsbHlPbk5hbWUoYXJyYXk6IHsgbmFtZTogc3RyaW5nOyB9W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJlID1cclxuICAgICAgICAvXigoW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSsoXFwuW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSspKil8KFwiLitcIikpQCgoXFxbKD86XFxkezEsM31cXC4pezN9XFxkezEsM31dKXwoKFtcXGRBLVphLXpcXC1dK1xcLikrW0EtWmEtel17Mix9KSkkLztcclxuICAgIHJldHVybiByZS50ZXN0KGVtYWlsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQmxvYihibG9iLCBmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZSB8fCBcImRvd25sb2FkXCI7XHJcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tIYW5kbGVyKTtcclxuICAgICAgICB9LCAxNTApO1xyXG4gICAgfTtcclxuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgYS5jbGljaygpO1xyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuXHJcbi8qXHJcbiAgICBPcGVuIG1vZGFsIGlmIG9uZSBoYXMgdG8gc3dpdGNoIHZpcnR1YWwgdmlzaXRcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoKFxyXG4gICAgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIG1vZGVsM0Q6IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRhdGFUb01vdmU6IHsgc3dlZXBUb01vdmU6IHN0cmluZywgcm90YXRpb246IGFueTsgfSB8IG51bGwgPSBudWxsXHJcbikge1xyXG4gICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSBtb2RhbFNlcnZpY2Uub3BlbihNb2RhbFN3aXRjaFZpc2l0Q29tcG9uZW50KTtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmNvbnRlbnQgPVxyXG4gICAgICAgIFwiVGhpcyBvYmplY3QgYmVsb25ncyB0byBhbm90aGVyIDNEIHZpc2l0LiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3dpdGNoIHRoZSB2aXNpdD9cIjtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLm1vZGVsM0QgPSBtb2RlbDNEO1xyXG4gICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2Uuc3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBpZiAoZGF0YVRvTW92ZSkge1xyXG4gICAgICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmRhdGFUb01vdmUgPSBkYXRhVG9Nb3ZlO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IHRyYW5zbGF0ZS5nZXRDdXJyZW50TGFuZygpIHx8IHRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKSB8fCBcImZyXCI7XHJcblxyXG4gICAgLy8gQ2xlYW4gdXAgbGVhZGluZyBtZXNzXHJcbiAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9eW18tXSsvLCAnJyk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGZyX0ZSIG9yIGZyLUZSICh0YWtlIHByaW1hcnkgbGFuZ3VhZ2UpXHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIl9cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIl9cIilbMF07XHJcbiAgICB9XHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIi1cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIi1cIilbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5zdXJlIDItbGV0dGVyIGNvZGUgKElTTyA2MzktMSlcclxuICAgIGlmIChsYW5nLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzdHJpbmcgb2YgYSBnaXZlbiBkYXRlIHRpbWUgaW4gbG9jYWwgZm9ybWF0LlxyXG4gKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcclxuICAgIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBtb2RlPyxcclxuKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgIGxhbmcgPSBnZXRDdXJyZW50TGFuZyh0cmFuc2xhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcHRpb25zOiB7XHJcbiAgICAgICAgbW9udGg/O1xyXG4gICAgICAgIHllYXI/O1xyXG4gICAgICAgIGRheT87XHJcbiAgICAgICAgaG91cj87XHJcbiAgICAgICAgbWludXRlPztcclxuICAgICAgICBzZWNvbmQ/O1xyXG4gICAgICAgIGRhdGVTdHlsZT87XHJcbiAgICAgICAgdGltZVN0eWxlPztcclxuICAgICAgICB3ZWVrZGF5PztcclxuICAgICAgICB0aW1lWm9uZT87XHJcbiAgICAgICAgdGltZVpvbmVOYW1lPztcclxuICAgIH07XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICBjYXNlIFwiZGF5X251bWVyaWNcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHdlZWtkYXk6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGVTdHlsZTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNob3J0X2RhdGVfdGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgeWVhcjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5X3RpbWVfem9uZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lU3R5bGU6IFwic2hvcnRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsYW5nLCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHR3byBzdHJpbmcgYXJyYXlzXHJcbiAqIEBwYXJhbSBhcnJheTFcclxuICogQHBhcmFtIGFycmF5MlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0NvbnRhaW5TYW1lRWxlbWVudHMoXHJcbiAgICBhcnJheTE6IHN0cmluZ1tdLFxyXG4gICAgYXJyYXkyOiBzdHJpbmdbXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBhcnJheTEuc29ydCgpO1xyXG4gICAgYXJyYXkyLnNvcnQoKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnJheTEpID09PSBKU09OLnN0cmluZ2lmeShhcnJheTIpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2l0VXJsKGN1cnJlbnRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXRoID0gY3VycmVudFVybC5zcGxpdChcIi9cIik7XHJcbiAgICBwYXRoLnNwbGljZSgzLCBwYXRoLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHBhdGguam9pbihcIi9cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHNwYWNlSUQgZnJvbSB1cmwgd2hlbiBpbiB2aXNpdCAzRFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYWNlSURGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZpc2l0VXJsID0gZ2V0VmlzaXRVcmwodXJsKTtcclxuICAgIHJldHVybiB2aXNpdFVybC5zcGxpdChcIi9cIilbMl07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEb3dubG9hZCByZWxhdGVkXHJcbiAqL1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSBcImZpbGUtc2F2ZXJcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZpbGUoZmlsZVVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGZpbGVVcmwgKyBmaWxlTmFtZSwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRvY3VtZW50KGZpbGVVcmw6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikge1xyXG4gICAgd2luZG93Lm9wZW4oYCR7ZmlsZVVybCArIGZpbGVOYW1lfSNkb2M9JHtpZH1gLCBcIl9ibGFua1wiLCBcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRXF1aXBtZW50RG9jdW1lbnQgPSBhc3luYyAoXHJcbiAgICBkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50LFxyXG4pOiBQcm9taXNlPE9iamVjdCB8IHZvaWQ+ID0+IHtcclxuICAgIGNvbnN0IHNpZ25lZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVBc09iamVjdChkb2N1bWVudF8udXJsKTtcclxuICAgIGlmIChzaWduZWRGaWxlKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRvd25sb2FkQmxvYihzaWduZWRGaWxlLkJvZHksIGRvY3VtZW50Xy5maWxlbmFtZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tFbGVtZW50QnlJZChzZWxlY3Rvcikge1xyXG4gICAgbGV0IHF1ZXJ5U2VsZWN0b3IgPSBudWxsO1xyXG4gICAgd2hpbGUgKHF1ZXJ5U2VsZWN0b3IgPT09IG51bGwpIHtcclxuICAgICAgICBhd2FpdCByYWZBc3luYygpO1xyXG4gICAgICAgIHF1ZXJ5U2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTZWxlY3RvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gcmFmQXN5bmMoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSk7IC8vIGZhc3RlciB0aGFuIHNldCB0aW1lIG91dFxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qIEBwYXJhbSB7QXJyYXl9IG51bWJlcnMgQW4gYXJyYXkgb2YgbnVtYmVycy5cclxuICogQHJldHVybiB7TnVtYmVyfSBUaGUgY2FsY3VsYXRlZCBhdmVyYWdlIChvciBtZWFuKSB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWRcclxuICogICAgIG51bWJlcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVhbihudW1iZXJzOiBudW1iZXJbXSkge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGZvciAoY29uc3QgbnVtYmVyIG9mIG51bWJlcnMpIHtcclxuICAgICAgICB0b3RhbCArPSBudW1iZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG90YWwgLyBudW1iZXJzLmxlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUaW1lc3RhbXBUb0xvY2FsWm9uZSh0aW1lc3RhbXA6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xyXG4gICAgY29uc3QgbG9jYWxPZmZzZXQgPSAtMSAqIHNlbGVjdGVkRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICBjb25zdCBzdGFtcCA9IHRpbWVzdGFtcCArIGxvY2FsT2Zmc2V0O1xyXG4gICAgcmV0dXJuIHN0YW1wO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHN0cmluZyBmb3IgcGVyaW9kIG9mIHRpbWUuIFBhcmFtZXRlcnMgYXJlIERhdGVUaW1lIG9iamVjdHMgb2YgbHV4b24gbGlicmFyeS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEYXRlUGVyaW9kKFxyXG4gICAgdHJhbnNsYXRlU2VydmljZTogYW55LFxyXG4gICAgZGF0ZVN0YXJ0UGVyaW9kOiBhbnksXHJcbiAgICBkYXRlRW5kUGVyaW9kOiBhbnksXHJcbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcmV0dXJuIGAke2RhdGVTdGFydFBlcmlvZC50b0xvY2FsZVN0cmluZyh7XHJcbiAgICAgICAgbG9jYWxlLFxyXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgfSl9IC0gJHtkYXRlRW5kUGVyaW9kLnRvTG9jYWxlU3RyaW5nKHtcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICB9KX0gYDtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4qIFJldHVybiBsb2NhbCBpbiB0aGUgY2Fub25pY2FsIGZvcm06IFwiZW4tR0JcIiwgXCJmci1GUlwiXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGxhbmcgPT09IFwiZW5cIikge1xyXG4gICAgICAgIHJldHVybiBcImVuLUdCXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bGFuZ30tJHtsYW5nLnRvVXBwZXJDYXNlKCl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBsb2NhbCBpbiB0aGUgc2hvcnQgZm9ybTogXCJlblwiLCBcImZyXCJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVTaG9ydCh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgc3RyaW5nIHRvIGxvd2VyY2FzZSwgbm8gc3BhY2VzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9Mb3dlcmNhc2VOb1NwYWNlcyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHdvcmRzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvXFxzKy8pO1xyXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oXCJcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIHRoZSBvYmplY3QgPT09IHt9XHJcbiAqIEBwYXJhbSBvYmogb2JqZWN0IHtrZXk6dmFsdWV9XHJcbiAqIEByZXR1cm5zIGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCB4IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUFycmF5KGFycmF5OiBhbnlbXSkge1xyXG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcclxuICAgICAgICBjb25zdCBpbmRleE5ldyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpbmRleCArIDEpKTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICBbbmV3QXJyYXlbaW5kZXhdLCBuZXdBcnJheVtpbmRleE5ld11dID0gW1xyXG4gICAgICAgICAgICBuZXdBcnJheVtpbmRleE5ld10sXHJcbiAgICAgICAgICAgIG5ld0FycmF5W2luZGV4XSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9EYXRlU3RyaW5nKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGpzRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XHJcbiAgICByZXR1cm4ganNEYXRlLnRvTG9jYWxlU3RyaW5nKFwiZnItRlJcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvblRvU3RyaW5nKFxyXG4gICAgZHVyYXRpb246IG51bWJlcixcclxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKGR1cmF0aW9uIC8gMzYwMCAvIDI0KTtcclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoZHVyYXRpb24gLSBkYXlzICogMjQgKiAzNjAwKSAvIDM2MDApO1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uICUgMzYwMCkgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAlIDYwKTtcclxuXHJcbiAgICBjb25zdCBkYXlzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJkYXkocylcIik7XHJcbiAgICBjb25zdCBob3Vyc1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiaG91cihzKVwiKTtcclxuICAgIGNvbnN0IG9uZUhvdXJTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImhvdXJcIik7XHJcbiAgICBjb25zdCBtaW51dGVzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJtaW51dGUocylcIik7XHJcbiAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJzZWNvbmQocylcIik7XHJcblxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCAqIDI0ICogNykge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDAgKiAyNCkge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9ICR7aG91cnN9ICR7aG91cnNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA9PT0gMzYwMCkge1xyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtvbmVIb3VyU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwKSB7XHJcbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke2hvdXJzU3RyaW5nfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtob3Vyc1N0cmluZ30gJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+PSA2MCkge1xyXG4gICAgICAgIGlmIChzZWNvbmRzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ30gJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50VG9TdHJpbmcocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHggPSBwb2ludC54LnRvRml4ZWQoMyk7XHJcbiAgICBjb25zdCB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgY29uc3QgeiA9IHBvaW50LnoudG9GaXhlZCgzKTtcclxuXHJcbiAgICByZXR1cm4gYHsgeDogJHt4fSwgeTogJHt5fSwgejogJHt6fSB9YDtcclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -47,7 +47,9 @@ export class SecurityCamera extends SceneComponent {
|
|
|
47
47
|
this.makeHighlight();
|
|
48
48
|
// attach highighting to the mesh it represents
|
|
49
49
|
// TODO (scene query): this is very brittle but is the only way to attach something to a room of the model
|
|
50
|
-
|
|
50
|
+
if (this.highlight) {
|
|
51
|
+
this.outputs.objectRoot.parent.parent.add(this.highlight);
|
|
52
|
+
}
|
|
51
53
|
// create the animation mixer to rotate the camera
|
|
52
54
|
this.makeAnimation();
|
|
53
55
|
}
|
|
@@ -86,6 +88,12 @@ export class SecurityCamera extends SceneComponent {
|
|
|
86
88
|
this.edges = null;
|
|
87
89
|
}
|
|
88
90
|
function edgesToCylinders(edgesGeometry, thickness) {
|
|
91
|
+
// API to be updated in bundle - JSSDK-1222
|
|
92
|
+
const merge = THREE.mergeBufferGeometries ?? THREE.BufferGeometryUtils?.mergeBufferGeometries;
|
|
93
|
+
// not exported by the three.js of recent SDK bundles: the caller falls back to plain lines
|
|
94
|
+
if (!merge)
|
|
95
|
+
return null;
|
|
96
|
+
const Cylinder = THREE.CylinderGeometry ?? THREE.CylinderBufferGeometry;
|
|
89
97
|
const { position } = edgesGeometry.attributes;
|
|
90
98
|
const { array, count } = position;
|
|
91
99
|
const r = thickness / 2;
|
|
@@ -95,15 +103,14 @@ export class SecurityCamera extends SceneComponent {
|
|
|
95
103
|
const b = new THREE.Vector3(array[i + 3], array[i + 4], array[i + 5]);
|
|
96
104
|
const vec = new THREE.Vector3().subVectors(b, a);
|
|
97
105
|
const len = vec.length();
|
|
98
|
-
const geom = new
|
|
106
|
+
const geom = new Cylinder(r, r, len, 8);
|
|
99
107
|
geom.translate(0, len / 2, 0);
|
|
100
108
|
geom.rotateX(Math.PI / 2);
|
|
101
109
|
geom.lookAt(vec);
|
|
102
110
|
geom.translate(a.x, a.y, a.z);
|
|
103
111
|
geoms.push(geom);
|
|
104
112
|
}
|
|
105
|
-
|
|
106
|
-
return THREE.mergeBufferGeometries(geoms);
|
|
113
|
+
return merge(geoms);
|
|
107
114
|
}
|
|
108
115
|
const frustumLength = this.inputs.farPlane - this.inputs.nearPlane;
|
|
109
116
|
const boxGeometry = new THREE.BoxGeometry(2, 2, frustumLength);
|
|
@@ -139,6 +146,16 @@ export class SecurityCamera extends SceneComponent {
|
|
|
139
146
|
});
|
|
140
147
|
this.box = new THREE.Mesh(boxGeometry, boxMaterial);
|
|
141
148
|
const edgesGeometry = edgesToCylinders(new THREE.EdgesGeometry(boxGeometry), 0.015);
|
|
149
|
+
if (!edgesGeometry) {
|
|
150
|
+
// thick edges need mergeBufferGeometries: draw the frustum with lines
|
|
151
|
+
this.edges = new THREE.LineSegments(new THREE.EdgesGeometry(boxGeometry), new THREE.LineBasicMaterial({
|
|
152
|
+
color: this.inputs.color,
|
|
153
|
+
opacity: 0.8,
|
|
154
|
+
transparent: true,
|
|
155
|
+
depthWrite: false,
|
|
156
|
+
}));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
142
159
|
this.edges = new THREE.Mesh(edgesGeometry, new THREE.MeshBasicMaterial({
|
|
143
160
|
color: 0xffffff,
|
|
144
161
|
opacity: 0.25,
|
|
@@ -159,8 +176,12 @@ export class SecurityCamera extends SceneComponent {
|
|
|
159
176
|
makeHighlight() {
|
|
160
177
|
const THREE = this.context.three;
|
|
161
178
|
// TODO (scene query): this is very brittle and hardcoded but is the only way to get room geometries until we have a better way to query the scene graph
|
|
162
|
-
const floorMesh = this.outputs.objectRoot.parent
|
|
163
|
-
const roomMesh = floorMesh
|
|
179
|
+
const floorMesh = this.outputs.objectRoot.parent?.parent?.getObjectByName('FloorMesh:0');
|
|
180
|
+
const roomMesh = floorMesh?.children[0];
|
|
181
|
+
if (!roomMesh?.geometry) {
|
|
182
|
+
// no room mesh found in the scene graph: the frustum is shown without the highlight
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
164
185
|
updateHighlightUniforms(this.projector, this.highlightUniforms);
|
|
165
186
|
this.highlightUniforms.color.value.setHex(this.inputs.color);
|
|
166
187
|
const shader = new THREE.ShaderMaterial({
|
|
@@ -251,4 +272,4 @@ export const securityCameraType = 'mp.securityCamera';
|
|
|
251
272
|
export const makeSecurityCamera = function () {
|
|
252
273
|
return new SecurityCamera();
|
|
253
274
|
};
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdXLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUN4QyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQTJCbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQ3hDLElBQUksR0FBb0IsSUFBSSxDQUFDO0lBQzdCLEtBQUssR0FBb0IsSUFBSSxDQUFDO0lBQzlCLEdBQUcsR0FBZ0IsSUFBSSxDQUFDO0lBQ3hCLEtBQUssR0FBZ0IsSUFBSSxDQUFDO0lBQzFCLFNBQVMsQ0FBb0I7SUFDN0IsU0FBUyxHQUFnQixJQUFJLENBQUM7SUFDOUIsaUJBQWlCLEdBQXNCO1FBQzdDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQzdCLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFO1FBQ3RDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFO0tBQ3RDLENBQUE7SUFDTyxLQUFLLENBQWlCO0lBRXJCLE1BQU0sR0FBVztRQUN4QixTQUFTLEVBQUUsR0FBRztRQUNkLFFBQVEsRUFBRSxDQUFDO1FBQ1gsYUFBYSxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ2QsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbkMsYUFBYSxFQUFFLEVBQUUs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LENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIE9iamVjdDNELCBNZXNoLCBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCwgQm94R2VvbWV0cnksIFNoYWRlck1hdGVyaWFsLCBMaW5lQmFzaWNNYXRlcmlhbCwgRWRnZXNHZW9tZXRyeSxcclxuICBBbmltYXRpb25NaXhlciwgQ29sb3IsIE1hdHJpeDQsIFZlY3RvcjNcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIFRIUkVFOiBhbnk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgSW5wdXRzIHtcclxuICBuZWFyUGxhbmU6IG51bWJlcjtcclxuICBmYXJQbGFuZTogbnVtYmVyLFxyXG4gIGhvcml6b250YWxGT1Y6IG51bWJlcixcclxuICBhc3BlY3Q6IG51bWJlcixcclxuICBsb2NhbFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XHJcbiAgbG9jYWxSb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyOyB9O1xyXG4gIGNvbG9yOiBudW1iZXI7XHJcbiAgcGFuUGVyaW9kOiBudW1iZXI7XHJcbiAgcGFuQW5nbGU6IG51bWJlcjtcclxufVxyXG5cclxudHlwZSBIaWdobGlnaHRVbmlmb3JtcyA9IHtcclxuICBjb2xvcjogeyB2YWx1ZTogQ29sb3IgfSxcclxuICBwcm9qUG9zaXRpb246IHsgdmFsdWU6IFZlY3RvcjMgfTtcclxuICBsaWdodE1hdHJpeDogeyB2YWx1ZTogTWF0cml4NCB9O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5Q2FtZXJhIGV4dGVuZHMgU2NlbmVDb21wb25lbnQge1xyXG4gIHByaXZhdGUgcm9vdDogT2JqZWN0M0QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHBpdm90OiBPYmplY3QzRCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgYm94OiBNZXNoIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGdlczogTWVzaCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcHJvamVjdG9yOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIGhpZ2hsaWdodDogTWVzaCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaGlnaGxpZ2h0VW5pZm9ybXM6IEhpZ2hsaWdodFVuaWZvcm1zID0ge1xyXG4gICAgY29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvcigpIH0sXHJcbiAgICBwcm9qUG9zaXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IzKCkgfSxcclxuICAgIGxpZ2h0TWF0cml4OiB7IHZhbHVlOiBuZXcgTWF0cml4NCgpIH0sXHJcbiAgfVxyXG4gIHByaXZhdGUgbWl4ZXI6IEFuaW1hdGlvbk1peGVyO1xyXG5cclxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcclxuICAgIG5lYXJQbGFuZTogMC4xLFxyXG4gICAgZmFyUGxhbmU6IDQsXHJcbiAgICBob3Jpem9udGFsRk9WOiA4MCxcclxuICAgIGFzcGVjdDogMTYgLyA5LFxyXG4gICAgbG9jYWxQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCB6OiAwIH0sXHJcbiAgICBsb2NhbFJvdGF0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSxcclxuICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgIHBhblBlcmlvZDogMjAsXHJcbiAgICBwYW5BbmdsZTogMTgwLFxyXG4gIH07XHJcblxyXG4gIG92ZXJyaWRlIG91dHB1dHM6IGFueSA9IHt9O1xyXG5cclxuXHJcbiAgb3ZlcnJpZGUgb25Jbml0KCkge1xyXG4gICAgY29uc3QgVEhSRUUgPSB0aGlzLmNvbnRleHQudGhyZWU7XHJcblxyXG4gICAgdGhpcy5yb290ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnBpdm90ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnJvb3QuYWRkKHRoaXMucGl2b3QpO1xyXG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICB0aGlzLnJvb3QucG9zaXRpb24uc2V0KHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueCwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi55LCB0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLnopO1xyXG5cclxuICAgIGNvbnN0IGV1bGVyID0gbmV3IFRIUkVFLkV1bGVyKHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueCAqIE1hdGguUEkgLyAxODAsIHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueSAqIE1hdGguUEkgLyAxODAsIHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueiAqIE1hdGguUEkgLyAxODAsICdZWFonKTtcclxuICAgIHRoaXMucGl2b3QucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoZXVsZXIpO1xyXG5cclxuICAgIGNvbnN0IGFzcGVjdCA9IHRoaXMuaW5wdXRzLmFzcGVjdDtcclxuICAgIGNvbnN0IERFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgUkFEMkRFRyA9IDEgLyBERUcyUkFEO1xyXG4gICAgY29uc3QgdmVydGljYWxGT1YgPSAyICogTWF0aC5hdGFuKDEgLyBhc3BlY3QgKiBNYXRoLnRhbigwLjUgKiB0aGlzLmlucHV0cy5ob3Jpem9udGFsRk9WICogREVHMlJBRCkpICogUkFEMkRFRztcclxuICAgIHRoaXMucHJvamVjdG9yID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKHZlcnRpY2FsRk9WLCBhc3BlY3QsIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSwgdGhpcy5pbnB1dHMuZmFyUGxhbmUpO1xyXG4gICAgLy8gb3JpZW50YXRpb24gb2YgdGhlIHByb2plY3RvciBpcyBoYW5kbGVkIGJ5IHRoZSBwaXZvdFxyXG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5wcm9qZWN0b3IpO1xyXG5cclxuICAgIHRoaXMubWFrZUZydXN0dW1WaXN1YWxzKCk7XHJcblxyXG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5ib3gpO1xyXG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5lZGdlcyk7XHJcblxyXG4gICAgdGhpcy5tYWtlSGlnaGxpZ2h0KCk7XHJcblxyXG4gICAgLy8gYXR0YWNoIGhpZ2hpZ2h0aW5nIHRvIHRoZSBtZXNoIGl0IHJlcHJlc2VudHNcclxuICAgIC8vIFRPRE8gKHNjZW5lIHF1ZXJ5KTogdGhpcyBpcyB2ZXJ5IGJyaXR0bGUgYnV0IGlzIHRoZSBvbmx5IHdheSB0byBhdHRhY2ggc29tZXRoaW5nIHRvIGEgcm9vbSBvZiB0aGUgbW9kZWxcclxuICAgIHRoaXMub3V0cHV0cy5vYmplY3RSb290LnBhcmVudC5wYXJlbnQuYWRkKHRoaXMuaGlnaGxpZ2h0KTtcclxuXHJcbiAgICAvLyBjcmVhdGUgdGhlIGFuaW1hdGlvbiBtaXhlciB0byByb3RhdGUgdGhlIGNhbWVyYVxyXG4gICAgdGhpcy5tYWtlQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBvblRpY2soZGVsdGE6IG51bWJlcikge1xyXG4gICAgdXBkYXRlSGlnaGxpZ2h0VW5pZm9ybXModGhpcy5wcm9qZWN0b3IsIHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMpO1xyXG4gICAgaWYgKHRoaXMubWl4ZXIpIHtcclxuICAgICAgdGhpcy5taXhlci51cGRhdGUoZGVsdGEgLyAxMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmhpZ2hsaWdodCAmJiB0aGlzLmhpZ2hsaWdodC5wYXJlbnQpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQucGFyZW50LnJlbW92ZSh0aGlzLmhpZ2hsaWdodCk7XHJcbiAgICAgICh0aGlzLmhpZ2hsaWdodC5tYXRlcmlhbCBhcyBTaGFkZXJNYXRlcmlhbCkuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRnZXMpIHtcclxuICAgICAgdGhpcy5lZGdlcy5nZW9tZXRyeS5kaXNwb3NlKCk7XHJcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ib3gpIHtcclxuICAgICAgdGhpcy5ib3guZ2VvbWV0cnkuZGlzcG9zZSgpO1xyXG4gICAgICAodGhpcy5ib3gubWF0ZXJpYWwgYXMgTWVzaEJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VGcnVzdHVtVmlzdWFscygpIHtcclxuICAgIGNvbnN0IFRIUkVFID0gdGhpcy5jb250ZXh0LnRocmVlO1xyXG4gICAgaWYgKHRoaXMuYm94KSB7XHJcbiAgICAgIHRoaXMucm9vdC5yZW1vdmUodGhpcy5ib3gpO1xyXG4gICAgICAodGhpcy5ib3gubWF0ZXJpYWwgYXMgTWVzaEJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuYm94Lmdlb21ldHJ5IGFzIEJveEdlb21ldHJ5KS5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuYm94ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XHJcbiAgICAgIHRoaXMucm9vdC5yZW1vdmUodGhpcy5lZGdlcyk7XHJcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XHJcbiAgICAgICh0aGlzLmVkZ2VzLmdlb21ldHJ5IGFzIEVkZ2VzR2VvbWV0cnkpLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5lZGdlcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZWRnZXNUb0N5bGluZGVycyhlZGdlc0dlb21ldHJ5OiBFZGdlc0dlb21ldHJ5LCB0aGlja25lc3M6IG51bWJlcikge1xyXG4gICAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBlZGdlc0dlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgIGNvbnN0IHsgYXJyYXksIGNvdW50IH0gPSBwb3NpdGlvbjtcclxuICAgICAgY29uc3QgciA9IHRoaWNrbmVzcyAvIDI7XHJcbiAgICAgIGNvbnN0IGdlb21zID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQgKiAzIC0gMTsgaSArPSA2KSB7XHJcbiAgICAgICAgY29uc3QgYSA9IG5ldyBUSFJFRS5WZWN0b3IzKGFycmF5W2ldLCBhcnJheVtpICsgMV0sIGFycmF5W2kgKyAyXSk7XHJcbiAgICAgICAgY29uc3QgYiA9IG5ldyBUSFJFRS5WZWN0b3IzKGFycmF5W2kgKyAzXSwgYXJyYXlbaSArIDRdLCBhcnJheVtpICsgNV0pO1xyXG5cclxuICAgICAgICBjb25zdCB2ZWMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnN1YlZlY3RvcnMoYiwgYSk7XHJcbiAgICAgICAgY29uc3QgbGVuID0gdmVjLmxlbmd0aCgpO1xyXG4gICAgICAgIGNvbnN0IGdlb20gPSBuZXcgVEhSRUUuQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeShyLCByLCBsZW4sIDgpO1xyXG4gICAgICAgIGdlb20udHJhbnNsYXRlKDAsIGxlbiAvIDIsIDApO1xyXG4gICAgICAgIGdlb20ucm90YXRlWChNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgZ2VvbS5sb29rQXQodmVjKTtcclxuICAgICAgICBnZW9tLnRyYW5zbGF0ZShhLngsIGEueSwgYS56KTtcclxuICAgICAgICBnZW9tcy5wdXNoKGdlb20pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEFQSSB0byBiZSB1cGRhdGVkIGluIGJ1bmRsZSAtIEpTU0RLLTEyMjJcclxuICAgICAgcmV0dXJuIChUSFJFRSBhcyBhbnkpLm1lcmdlQnVmZmVyR2VvbWV0cmllcyhnZW9tcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJ1c3R1bUxlbmd0aCA9IHRoaXMuaW5wdXRzLmZhclBsYW5lIC0gdGhpcy5pbnB1dHMubmVhclBsYW5lO1xyXG4gICAgY29uc3QgYm94R2VvbWV0cnk6IEJveEdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KDIsIDIsIGZydXN0dW1MZW5ndGgpO1xyXG4gICAgY29uc3QgaGFsZkhBbmdsZSA9IHRoaXMuaW5wdXRzLmhvcml6b250YWxGT1YgKiAwLjUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgbmVhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMubmVhclBsYW5lO1xyXG4gICAgY29uc3QgZmFySGFsZldpZHRoID0gTWF0aC50YW4oaGFsZkhBbmdsZSkgKiB0aGlzLmlucHV0cy5mYXJQbGFuZTtcclxuICAgIGNvbnN0IG5lYXJIYWxmSGVpZ2h0ID0gbmVhckhhbGZXaWR0aCAvIHRoaXMuaW5wdXRzLmFzcGVjdDtcclxuICAgIGNvbnN0IGZhckhhbGZIZWlnaHQgPSBmYXJIYWxmV2lkdGggLyB0aGlzLmlucHV0cy5hc3BlY3Q7XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25zID0gYm94R2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmNvdW50OyBpKyspIHtcclxuICAgICAgY29uc3QgdmVydGV4WiA9IHBvc2l0aW9ucy5nZXRaKGkpO1xyXG4gICAgICBjb25zdCB2ZXJ0ZXhYID0gcG9zaXRpb25zLmdldFgoaSk7XHJcbiAgICAgIGNvbnN0IHZlcnRleFkgPSBwb3NpdGlvbnMuZ2V0WShpKTtcclxuICAgICAgaWYgKHZlcnRleFogPiAwKSB7XHJcbiAgICAgICAgLy8gYmFjayBvZiB0aGUgY2FtZXJhXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFgoaSwgdmVydGV4WCAqIG5lYXJIYWxmV2lkdGgpXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFkoaSwgdmVydGV4WSAqIG5lYXJIYWxmSGVpZ2h0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBmcm9udCBvZiB0aGUgY2FtZXJhXHJcbiAgICAgICAgcG9zaXRpb25zLnNldFgoaSwgdmVydGV4WCAqIGZhckhhbGZXaWR0aClcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogZmFySGFsZkhlaWdodCk7XHJcbiAgICAgIH1cclxuICAgICAgcG9zaXRpb25zLnNldFooaSwgdmVydGV4WiAtIDAuNSAqIGZydXN0dW1MZW5ndGggLSB0aGlzLmlucHV0cy5uZWFyUGxhbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBib3hNYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXHJcbiAgICAgIG9wYWNpdHk6IDAuMDUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICBzaWRlOiBUSFJFRS5CYWNrU2lkZSxcclxuICAgICAgYmxlbmRpbmc6IFRIUkVFLk5vcm1hbEJsZW5kaW5nLFxyXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ib3ggPSBuZXcgVEhSRUUuTWVzaChib3hHZW9tZXRyeSwgYm94TWF0ZXJpYWwpO1xyXG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeSA9IGVkZ2VzVG9DeWxpbmRlcnMobmV3IFRIUkVFLkVkZ2VzR2VvbWV0cnkoYm94R2VvbWV0cnkpLCAwLjAxNSk7XHJcbiAgICB0aGlzLmVkZ2VzID0gbmV3IFRIUkVFLk1lc2goZWRnZXNHZW9tZXRyeSwgbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICBvcGFjaXR5OiAwLjI1LFxyXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IGVkZ2VzR2VvbWV0cnkyID0gZWRnZXNUb0N5bGluZGVycyhuZXcgVEhSRUUuRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDYpO1xyXG4gICAgY29uc3QgZWRnZXMyID0gbmV3IFRIUkVFLk1lc2goZWRnZXNHZW9tZXRyeTIsIG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiB0aGlzLmlucHV0cy5jb2xvcixcclxuICAgICAgb3BhY2l0eTogMC4wNSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIGJsZW5kaW5nOiBUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nLFxyXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcclxuICAgIH0pKTtcclxuICAgIHRoaXMucGl2b3QuYWRkKGVkZ2VzMik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VIaWdobGlnaHQoKSB7XHJcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcclxuXHJcbiAgICAvLyBUT0RPIChzY2VuZSBxdWVyeSk6IHRoaXMgaXMgdmVyeSBicml0dGxlIGFuZCBoYXJkY29kZWQgYnV0IGlzIHRoZSBvbmx5IHdheSB0byBnZXQgcm9vbSBnZW9tZXRyaWVzIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHF1ZXJ5IHRoZSBzY2VuZSBncmFwaFxyXG4gICAgY29uc3QgZmxvb3JNZXNoID0gdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QucGFyZW50LnBhcmVudC5nZXRPYmplY3RCeU5hbWUoJ0Zsb29yTWVzaDowJyk7XHJcbiAgICBjb25zdCByb29tTWVzaCA9IGZsb29yTWVzaC5jaGlsZHJlblswXSBhcyBNZXNoO1xyXG5cclxuICAgIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHRoaXMucHJvamVjdG9yLCB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zKTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMuY29sb3IudmFsdWUuc2V0SGV4KHRoaXMuaW5wdXRzLmNvbG9yKTtcclxuXHJcbiAgICBjb25zdCBzaGFkZXIgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xyXG4gICAgICBwb2x5Z29uT2Zmc2V0OiB0cnVlLFxyXG4gICAgICBwb2x5Z29uT2Zmc2V0VW5pdHM6IC0wLjEsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICB1bmlmb3JtczogdGhpcy5oaWdobGlnaHRVbmlmb3JtcyxcclxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcclxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBhIG1lc2ggdG8gcmVwcmVzZW50IHRoZSBcImhpZ2hsaWdodFwiXHJcbiAgICB0aGlzLmhpZ2hsaWdodCA9IG5ldyBUSFJFRS5NZXNoKHJvb21NZXNoLmdlb21ldHJ5LCBzaGFkZXIpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlld0ZydXN0dW0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHQpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQudmlzaWJsZSA9ICF0aGlzLmhpZ2hsaWdodC52aXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRnZXMpIHtcclxuICAgICAgdGhpcy5lZGdlcy52aXNpYmxlID0gIXRoaXMuZWRnZXMudmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBpdm90KSB7XHJcbiAgICAgIHRoaXMucGl2b3QudmlzaWJsZSA9ICF0aGlzLnBpdm90LnZpc2libGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VBbmltYXRpb24oKSB7XHJcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcclxuXHJcbiAgICAvLyBwcmVhcHBseSB0aGUgaW5pdGlhbCByb3RhdGlvbiBvZiB0aGUgcm9vdCBzbyB0aGF0IHBhbkFuZ2xlIGlzIHJlbGF0aXZlIHRvIGl0LlxyXG5cclxuICAgIC8vIFRPRE86IGZpeCBpdCFcclxuICAgIGNvbnN0IHJvb3RSb3RhdGlvbiA9IHRoaXMuY29udGV4dC5yb290LnF1YXRlcm5pb247XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAxLCAwKTtcclxuICAgIGNvbnN0IGZyYW1lMCA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgMCkucHJlbXVsdGlwbHkocm9vdFJvdGF0aW9uKTtcclxuICAgIGNvbnN0IGZyYW1lMSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgdGhpcy5pbnB1dHMucGFuQW5nbGUpLnByZW11bHRpcGx5KHJvb3RSb3RhdGlvbik7XHJcblxyXG4gICAgLy8gYSB0cmFjayB0aGF0IGhhcyBkZWxheXMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZm9yIDUlIG9mIHRoZSBhbmltYXRpb25cclxuICAgIGNvbnN0IHRyYWNrID0gbmV3IFRIUkVFLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrKCcucXVhdGVybmlvbicsIFtcclxuICAgICAgMCwgdGhpcy5pbnB1dHMucGFuUGVyaW9kICogMC4wNSwgdGhpcy5pbnB1dHMucGFuUGVyaW9kICogMC45NSwgdGhpcy5pbnB1dHMucGFuUGVyaW9kXHJcbiAgICBdLCBbXHJcbiAgICAgIGZyYW1lMC54LCBmcmFtZTAueSwgZnJhbWUwLnosIGZyYW1lMC53LFxyXG4gICAgICBmcmFtZTAueCwgZnJhbWUwLnksIGZyYW1lMC56LCBmcmFtZTAudyxcclxuICAgICAgZnJhbWUxLngsIGZyYW1lMS55LCBmcmFtZTEueiwgZnJhbWUxLncsXHJcbiAgICAgIGZyYW1lMS54LCBmcmFtZTEueSwgZnJhbWUxLnosIGZyYW1lMS53LFxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgY2xpcCA9IG5ldyBUSFJFRS5BbmltYXRpb25DbGlwKCdwYW5uaW5nJywgdGhpcy5pbnB1dHMucGFuUGVyaW9kLCBbdHJhY2tdKTtcclxuXHJcbiAgICAvLyBUaGVyZSBpcyBubyBhcGkgdG8gY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgcm9vdCwgc28gd2Ugd2lsbCB1c2UgYSBwcml2YXRlIHByb3BlcnR5IHRvIGFjY2VzcyB0aGUgT2JqZWN0M0QuXHJcbiAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IG5lZWQgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuXHJcbiAgICB0aGlzLm1peGVyID0gbmV3IFRIUkVFLkFuaW1hdGlvbk1peGVyKCh0aGlzLmNvbnRleHQucm9vdCBhcyBhbnkpLm9iajNEKTtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMubWl4ZXIuY2xpcEFjdGlvbihjbGlwKTtcclxuICAgIGFjdGlvbi5sb29wID0gVEhSRUUuTG9vcFBpbmdQb25nO1xyXG4gICAgYWN0aW9uLnBsYXkoKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB2ZXJ0ZXhTaGFkZXIoKTogc3RyaW5nIHtcclxuICByZXR1cm4gYFxyXG4gICAgdW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xyXG5cclxuICAgIHZhcnlpbmcgdmVjNCB2TGlnaHRDb29yZHM7XHJcblxyXG4gICAgdm9pZCBtYWluKCkge1xyXG4gICAgICAvLyBjcmVhdGUgYSBVViByZWdpb24gWzAsMV0geCBbMCwxXSB0byByZXByZXNlbnQgd2hhdCB0aGUgbGlnaHRNYXRyaXggXCJzZWVzXCJcclxuICAgICAgdkxpZ2h0Q29vcmRzID0gbGlnaHRNYXRyaXggKiAgbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xyXG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xyXG4gICAgfVxyXG4gIGA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZyYWdtZW50U2hhZGVyKCkge1xyXG4gIHJldHVybiBgXHJcbiAgICB1bmlmb3JtIHZlYzMgY29sb3I7XHJcblxyXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcclxuXHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgIHZlYzIgbGlnaHRVViA9IHZMaWdodENvb3Jkcy54eSAvIHZMaWdodENvb3Jkcy53O1xyXG4gICAgICBmbG9hdCBpblZpZXcgPSBmbG9hdChtYXgobGlnaHRVVi54LCBsaWdodFVWLnkpIDw9IDEuMCAmJiBtaW4obGlnaHRVVi54LCBsaWdodFVWLnkpID49IDAuMCAmJiB2TGlnaHRDb29yZHMueiA+IDAuMCk7XHJcblxyXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBtaW4oaW5WaWV3LCAwLjIpKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyhwcm9qZWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJhLCB1bmlmb3JtczogSGlnaGxpZ2h0VW5pZm9ybXMpIHtcclxuICBwcm9qZWN0b3IuZ2V0V29ybGRQb3NpdGlvbih1bmlmb3Jtcy5wcm9qUG9zaXRpb24udmFsdWUpO1xyXG5cclxuICAvLyBzaW1pbGFyIHRvIGEgc2hhZG93IG1hdHJpeCwgYnV0IHdlJ3JlIHVzaW5nIGl0IGFzIGEgXCJyZWN0YW5ndWxhclwiIHNwb3RsaWdodFxyXG4gIC8vIFtsaWdodEJpYXNdICogW3Byb2plY3Rpb25dICogW3ZpZXdNYXRyaXhdXHJcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubWFrZVNjYWxlKDAuNSwgMC41LCAwLjUpO1xyXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLnNldFBvc2l0aW9uKG5ldyBWZWN0b3IzKDAuNSwgMC41LCAwLjUpKVxyXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5wcm9qZWN0aW9uTWF0cml4KTtcclxuICB1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZS5tdWx0aXBseU1hdHJpY2VzKHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLCBwcm9qZWN0b3IubWF0cml4V29ybGRJbnZlcnNlKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNlY3VyaXR5Q2FtZXJhVHlwZSA9ICdtcC5zZWN1cml0eUNhbWVyYSc7XHJcbmV4cG9ydCBjb25zdCBtYWtlU2VjdXJpdHlDYW1lcmEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgcmV0dXJuIG5ldyBTZWN1cml0eUNhbWVyYSgpO1xyXG59XHJcbiJdfQ==
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdXLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUN4QyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQTJCbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQ3hDLElBQUksR0FBb0IsSUFBSSxDQUFDO0lBQzdCLEtBQUssR0FBb0IsSUFBSSxDQUFDO0lBQzlCLEdBQUcsR0FBZ0IsSUFBSSxDQUFDO0lBQ3hCLEtBQUssR0FBK0IsSUFBSSxDQUFDO0lBQ3pDLFNBQVMsQ0FBb0I7SUFDN0IsU0FBUyxHQUFnQixJQUFJLENBQUM7SUFDOUIsaUJBQWlCLEdBQXNCO1FBQzdDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQzdCLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFO1FBQ3RDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFO0tBQ3RDLENBQUE7SUFDTyxLQUFLLENBQWlCO0lBRXJCLE1BQU0sR0FBVztRQUN4QixTQUFTLEVBQUUsR0FBRztRQUNkLFFBQVEsRUFBRSxDQUFDO1FBQ1gsYUFBYSxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ2QsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbkMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbkMsS0FBSyxFQUFFLFFBQVE7UUFDZixTQUFTLEVBQUUsRUFBRTtRQUNiLFFBQVEsRUFBRSxHQUFHO0tBQ2QsQ0FBQztJQUVPLE9BQU8sR0FBUSxFQUFFLENBQUM7SUFHbEIsTUFBTTtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRyx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLCtDQUErQztRQUMvQywwR0FBMEc7UUFDMUcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFUSxNQUFNLENBQUMsS0FBYTtRQUMzQix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQThCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUE4QixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JELENBQUM7SUFFSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBOEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQXdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBOEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQTBCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUVELFNBQVMsZ0JBQWdCLENBQUMsYUFBNEIsRUFBRSxTQUFpQjtZQUN2RSwyQ0FBMkM7WUFDM0MsTUFBTSxLQUFLLEdBQUksS0FBYSxDQUFDLHFCQUFxQixJQUFLLEtBQWEsQ0FBQyxtQkFBbUIsRUFBRSxxQkFBcUIsQ0FBQztZQUNoSCwyRkFBMkY7WUFDM0YsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDeEIsTUFBTSxRQUFRLEdBQUksS0FBYSxDQUFDLGdCQUFnQixJQUFLLEtBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUM5QyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUNsQyxNQUFNLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBZ0IsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNqRSxNQUFNLGNBQWMsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRXhELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEIscUJBQXFCO2dCQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUE7Z0JBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sc0JBQXNCO2dCQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUE7Z0JBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsSUFBSSxXQUFXLEdBQXNCLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQy9ELEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDcEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQzlCLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BHLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxHQUFHO2dCQUNaLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQ3JFLEtBQUssRUFBRSxRQUFRO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUNoQyxVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRixNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQ3hFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUNoQyxVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRWpDLHdKQUF3SjtRQUN4SixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RixNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBUyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDeEIsb0ZBQW9GO1lBQ3BGLE9BQU87UUFDVCxDQUFDO1FBRUQsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDdEMsYUFBYSxFQUFFLElBQUk7WUFDbkIsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHO1lBQ3hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ2hDLFlBQVksRUFBRSxZQUFZLEVBQUU7WUFDNUIsY0FBYyxFQUFFLGNBQWMsRUFBRTtTQUNqQyxDQUFDLENBQUM7UUFFSCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRWpDLGdGQUFnRjtRQUVoRixnQkFBZ0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWxELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTlHLHVFQUF1RTtRQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUU7WUFDN0QsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1NBQ3JGLEVBQUU7WUFDRCxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN2QyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVoRixnSEFBZ0g7UUFDaEgsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUVGO0FBRUQsU0FBUyxZQUFZO0lBQ25CLE9BQU87Ozs7Ozs7Ozs7R0FVTixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYztJQUNyQixPQUFPOzs7Ozs7Ozs7OztHQVdOLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxTQUE0QixFQUFFLFFBQTJCO0lBQ3hGLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELDhFQUE4RTtJQUM5RSw0Q0FBNEM7SUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgT2JqZWN0M0QsIE1lc2gsIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIE1lc2hCYXNpY01hdGVyaWFsLCBCb3hHZW9tZXRyeSwgU2hhZGVyTWF0ZXJpYWwsIExpbmVCYXNpY01hdGVyaWFsLCBMaW5lU2VnbWVudHMsIEVkZ2VzR2VvbWV0cnksXHJcbiAgQW5pbWF0aW9uTWl4ZXIsIENvbG9yLCBNYXRyaXg0LCBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBTY2VuZUNvbXBvbmVudCB9IGZyb20gJy4uL3NjZW5lLWNvbXBvbmVudC9TY2VuZUNvbXBvbmVudCc7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBUSFJFRTogYW55O1xyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIElucHV0cyB7XHJcbiAgbmVhclBsYW5lOiBudW1iZXI7XHJcbiAgZmFyUGxhbmU6IG51bWJlcixcclxuICBob3Jpem9udGFsRk9WOiBudW1iZXIsXHJcbiAgYXNwZWN0OiBudW1iZXIsXHJcbiAgbG9jYWxQb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyOyB9O1xyXG4gIGxvY2FsUm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcclxuICBjb2xvcjogbnVtYmVyO1xyXG4gIHBhblBlcmlvZDogbnVtYmVyO1xyXG4gIHBhbkFuZ2xlOiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgSGlnaGxpZ2h0VW5pZm9ybXMgPSB7XHJcbiAgY29sb3I6IHsgdmFsdWU6IENvbG9yIH0sXHJcbiAgcHJvalBvc2l0aW9uOiB7IHZhbHVlOiBWZWN0b3IzIH07XHJcbiAgbGlnaHRNYXRyaXg6IHsgdmFsdWU6IE1hdHJpeDQgfTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWN1cml0eUNhbWVyYSBleHRlbmRzIFNjZW5lQ29tcG9uZW50IHtcclxuICBwcml2YXRlIHJvb3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBwaXZvdDogT2JqZWN0M0QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGJveDogTWVzaCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZWRnZXM6IE1lc2ggfCBMaW5lU2VnbWVudHMgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmE7XHJcbiAgcHJpdmF0ZSBoaWdobGlnaHQ6IE1lc2ggfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGhpZ2hsaWdodFVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3JtcyA9IHtcclxuICAgIGNvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoKSB9LFxyXG4gICAgcHJvalBvc2l0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMygpIH0sXHJcbiAgICBsaWdodE1hdHJpeDogeyB2YWx1ZTogbmV3IE1hdHJpeDQoKSB9LFxyXG4gIH1cclxuICBwcml2YXRlIG1peGVyOiBBbmltYXRpb25NaXhlcjtcclxuXHJcbiAgb3ZlcnJpZGUgaW5wdXRzOiBJbnB1dHMgPSB7XHJcbiAgICBuZWFyUGxhbmU6IDAuMSxcclxuICAgIGZhclBsYW5lOiA0LFxyXG4gICAgaG9yaXpvbnRhbEZPVjogODAsXHJcbiAgICBhc3BlY3Q6IDE2IC8gOSxcclxuICAgIGxvY2FsUG9zaXRpb246IHsgeDogMCwgeTogMCwgejogMCB9LFxyXG4gICAgbG9jYWxSb3RhdGlvbjogeyB4OiAwLCB5OiAwLCB6OiAwIH0sXHJcbiAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICBwYW5QZXJpb2Q6IDIwLFxyXG4gICAgcGFuQW5nbGU6IDE4MCxcclxuICB9O1xyXG5cclxuICBvdmVycmlkZSBvdXRwdXRzOiBhbnkgPSB7fTtcclxuXHJcblxyXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcclxuICAgIGNvbnN0IFRIUkVFID0gdGhpcy5jb250ZXh0LnRocmVlO1xyXG5cclxuICAgIHRoaXMucm9vdCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5waXZvdCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5yb290LmFkZCh0aGlzLnBpdm90KTtcclxuICAgIHRoaXMub3V0cHV0cy5vYmplY3RSb290ID0gdGhpcy5yb290O1xyXG4gICAgdGhpcy5yb290LnBvc2l0aW9uLnNldCh0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLngsIHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueSwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi56KTtcclxuXHJcbiAgICBjb25zdCBldWxlciA9IG5ldyBUSFJFRS5FdWxlcih0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnggKiBNYXRoLlBJIC8gMTgwLCB0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnkgKiBNYXRoLlBJIC8gMTgwLCB0aGlzLmlucHV0cy5sb2NhbFJvdGF0aW9uLnogKiBNYXRoLlBJIC8gMTgwLCAnWVhaJyk7XHJcbiAgICB0aGlzLnBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGV1bGVyKTtcclxuXHJcbiAgICBjb25zdCBhc3BlY3QgPSB0aGlzLmlucHV0cy5hc3BlY3Q7XHJcbiAgICBjb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcclxuICAgIGNvbnN0IFJBRDJERUcgPSAxIC8gREVHMlJBRDtcclxuICAgIGNvbnN0IHZlcnRpY2FsRk9WID0gMiAqIE1hdGguYXRhbigxIC8gYXNwZWN0ICogTWF0aC50YW4oMC41ICogdGhpcy5pbnB1dHMuaG9yaXpvbnRhbEZPViAqIERFRzJSQUQpKSAqIFJBRDJERUc7XHJcbiAgICB0aGlzLnByb2plY3RvciA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSh2ZXJ0aWNhbEZPViwgYXNwZWN0LCB0aGlzLmlucHV0cy5uZWFyUGxhbmUsIHRoaXMuaW5wdXRzLmZhclBsYW5lKTtcclxuICAgIC8vIG9yaWVudGF0aW9uIG9mIHRoZSBwcm9qZWN0b3IgaXMgaGFuZGxlZCBieSB0aGUgcGl2b3RcclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMucHJvamVjdG9yKTtcclxuXHJcbiAgICB0aGlzLm1ha2VGcnVzdHVtVmlzdWFscygpO1xyXG5cclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuYm94KTtcclxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuZWRnZXMpO1xyXG5cclxuICAgIHRoaXMubWFrZUhpZ2hsaWdodCgpO1xyXG5cclxuICAgIC8vIGF0dGFjaCBoaWdoaWdodGluZyB0byB0aGUgbWVzaCBpdCByZXByZXNlbnRzXHJcbiAgICAvLyBUT0RPIChzY2VuZSBxdWVyeSk6IHRoaXMgaXMgdmVyeSBicml0dGxlIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIHNvbWV0aGluZyB0byBhIHJvb20gb2YgdGhlIG1vZGVsXHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHQpIHtcclxuICAgICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QucGFyZW50LnBhcmVudC5hZGQodGhpcy5oaWdobGlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNyZWF0ZSB0aGUgYW5pbWF0aW9uIG1peGVyIHRvIHJvdGF0ZSB0aGUgY2FtZXJhXHJcbiAgICB0aGlzLm1ha2VBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uVGljayhkZWx0YTogbnVtYmVyKSB7XHJcbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XHJcbiAgICBpZiAodGhpcy5taXhlcikge1xyXG4gICAgICB0aGlzLm1peGVyLnVwZGF0ZShkZWx0YSAvIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ICYmIHRoaXMuaGlnaGxpZ2h0LnBhcmVudCkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodC5wYXJlbnQucmVtb3ZlKHRoaXMuaGlnaGxpZ2h0KTtcclxuICAgICAgKHRoaXMuaGlnaGxpZ2h0Lm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsKS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lZGdlcykge1xyXG4gICAgICB0aGlzLmVkZ2VzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJveCkge1xyXG4gICAgICB0aGlzLmJveC5nZW9tZXRyeS5kaXNwb3NlKCk7XHJcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUZydXN0dW1WaXN1YWxzKCkge1xyXG4gICAgY29uc3QgVEhSRUUgPSB0aGlzLmNvbnRleHQudGhyZWU7XHJcbiAgICBpZiAodGhpcy5ib3gpIHtcclxuICAgICAgdGhpcy5yb290LnJlbW92ZSh0aGlzLmJveCk7XHJcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xyXG4gICAgICAodGhpcy5ib3guZ2VvbWV0cnkgYXMgQm94R2VvbWV0cnkpLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5ib3ggPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRnZXMpIHtcclxuICAgICAgdGhpcy5yb290LnJlbW92ZSh0aGlzLmVkZ2VzKTtcclxuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuZWRnZXMuZ2VvbWV0cnkgYXMgRWRnZXNHZW9tZXRyeSkuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLmVkZ2VzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBlZGdlc1RvQ3lsaW5kZXJzKGVkZ2VzR2VvbWV0cnk6IEVkZ2VzR2VvbWV0cnksIHRoaWNrbmVzczogbnVtYmVyKSB7XHJcbiAgICAgIC8vIEFQSSB0byBiZSB1cGRhdGVkIGluIGJ1bmRsZSAtIEpTU0RLLTEyMjJcclxuICAgICAgY29uc3QgbWVyZ2UgPSAoVEhSRUUgYXMgYW55KS5tZXJnZUJ1ZmZlckdlb21ldHJpZXMgPz8gKFRIUkVFIGFzIGFueSkuQnVmZmVyR2VvbWV0cnlVdGlscz8ubWVyZ2VCdWZmZXJHZW9tZXRyaWVzO1xyXG4gICAgICAvLyBub3QgZXhwb3J0ZWQgYnkgdGhlIHRocmVlLmpzIG9mIHJlY2VudCBTREsgYnVuZGxlczogdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHBsYWluIGxpbmVzXHJcbiAgICAgIGlmICghbWVyZ2UpIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCBDeWxpbmRlciA9IChUSFJFRSBhcyBhbnkpLkN5bGluZGVyR2VvbWV0cnkgPz8gKFRIUkVFIGFzIGFueSkuQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTtcclxuICAgICAgY29uc3QgeyBwb3NpdGlvbiB9ID0gZWRnZXNHZW9tZXRyeS5hdHRyaWJ1dGVzO1xyXG4gICAgICBjb25zdCB7IGFycmF5LCBjb3VudCB9ID0gcG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHIgPSB0aGlja25lc3MgLyAyO1xyXG4gICAgICBjb25zdCBnZW9tcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ICogMyAtIDE7IGkgKz0gNikge1xyXG4gICAgICAgIGNvbnN0IGEgPSBuZXcgVEhSRUUuVmVjdG9yMyhhcnJheVtpXSwgYXJyYXlbaSArIDFdLCBhcnJheVtpICsgMl0pO1xyXG4gICAgICAgIGNvbnN0IGIgPSBuZXcgVEhSRUUuVmVjdG9yMyhhcnJheVtpICsgM10sIGFycmF5W2kgKyA0XSwgYXJyYXlbaSArIDVdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmVjID0gbmV3IFRIUkVFLlZlY3RvcjMoKS5zdWJWZWN0b3JzKGIsIGEpO1xyXG4gICAgICAgIGNvbnN0IGxlbiA9IHZlYy5sZW5ndGgoKTtcclxuICAgICAgICBjb25zdCBnZW9tID0gbmV3IEN5bGluZGVyKHIsIHIsIGxlbiwgOCk7XHJcbiAgICAgICAgZ2VvbS50cmFuc2xhdGUoMCwgbGVuIC8gMiwgMCk7XHJcbiAgICAgICAgZ2VvbS5yb3RhdGVYKE1hdGguUEkgLyAyKTtcclxuICAgICAgICBnZW9tLmxvb2tBdCh2ZWMpO1xyXG4gICAgICAgIGdlb20udHJhbnNsYXRlKGEueCwgYS55LCBhLnopO1xyXG4gICAgICAgIGdlb21zLnB1c2goZ2VvbSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1lcmdlKGdlb21zKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmcnVzdHVtTGVuZ3RoID0gdGhpcy5pbnB1dHMuZmFyUGxhbmUgLSB0aGlzLmlucHV0cy5uZWFyUGxhbmU7XHJcbiAgICBjb25zdCBib3hHZW9tZXRyeTogQm94R2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoMiwgMiwgZnJ1c3R1bUxlbmd0aCk7XHJcbiAgICBjb25zdCBoYWxmSEFuZ2xlID0gdGhpcy5pbnB1dHMuaG9yaXpvbnRhbEZPViAqIDAuNSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICBjb25zdCBuZWFySGFsZldpZHRoID0gTWF0aC50YW4oaGFsZkhBbmdsZSkgKiB0aGlzLmlucHV0cy5uZWFyUGxhbmU7XHJcbiAgICBjb25zdCBmYXJIYWxmV2lkdGggPSBNYXRoLnRhbihoYWxmSEFuZ2xlKSAqIHRoaXMuaW5wdXRzLmZhclBsYW5lO1xyXG4gICAgY29uc3QgbmVhckhhbGZIZWlnaHQgPSBuZWFySGFsZldpZHRoIC8gdGhpcy5pbnB1dHMuYXNwZWN0O1xyXG4gICAgY29uc3QgZmFySGFsZkhlaWdodCA9IGZhckhhbGZXaWR0aCAvIHRoaXMuaW5wdXRzLmFzcGVjdDtcclxuXHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBib3hHZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMuY291bnQ7IGkrKykge1xyXG4gICAgICBjb25zdCB2ZXJ0ZXhaID0gcG9zaXRpb25zLmdldFooaSk7XHJcbiAgICAgIGNvbnN0IHZlcnRleFggPSBwb3NpdGlvbnMuZ2V0WChpKTtcclxuICAgICAgY29uc3QgdmVydGV4WSA9IHBvc2l0aW9ucy5nZXRZKGkpO1xyXG4gICAgICBpZiAodmVydGV4WiA+IDApIHtcclxuICAgICAgICAvLyBiYWNrIG9mIHRoZSBjYW1lcmFcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WChpLCB2ZXJ0ZXhYICogbmVhckhhbGZXaWR0aClcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogbmVhckhhbGZIZWlnaHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZyb250IG9mIHRoZSBjYW1lcmFcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WChpLCB2ZXJ0ZXhYICogZmFySGFsZldpZHRoKVxyXG4gICAgICAgIHBvc2l0aW9ucy5zZXRZKGksIHZlcnRleFkgKiBmYXJIYWxmSGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgICBwb3NpdGlvbnMuc2V0WihpLCB2ZXJ0ZXhaIC0gMC41ICogZnJ1c3R1bUxlbmd0aCAtIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJveE1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiB0aGlzLmlucHV0cy5jb2xvcixcclxuICAgICAgb3BhY2l0eTogMC4wNSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIHNpZGU6IFRIUkVFLkJhY2tTaWRlLFxyXG4gICAgICBibGVuZGluZzogVEhSRUUuTm9ybWFsQmxlbmRpbmcsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmJveCA9IG5ldyBUSFJFRS5NZXNoKGJveEdlb21ldHJ5LCBib3hNYXRlcmlhbCk7XHJcbiAgICBjb25zdCBlZGdlc0dlb21ldHJ5ID0gZWRnZXNUb0N5bGluZGVycyhuZXcgVEhSRUUuRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDE1KTtcclxuICAgIGlmICghZWRnZXNHZW9tZXRyeSkge1xyXG4gICAgICAvLyB0aGljayBlZGdlcyBuZWVkIG1lcmdlQnVmZmVyR2VvbWV0cmllczogZHJhdyB0aGUgZnJ1c3R1bSB3aXRoIGxpbmVzXHJcbiAgICAgIHRoaXMuZWRnZXMgPSBuZXcgVEhSRUUuTGluZVNlZ21lbnRzKG5ldyBUSFJFRS5FZGdlc0dlb21ldHJ5KGJveEdlb21ldHJ5KSwgbmV3IFRIUkVFLkxpbmVCYXNpY01hdGVyaWFsKHtcclxuICAgICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXHJcbiAgICAgICAgb3BhY2l0eTogMC44LFxyXG4gICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZWRnZXMgPSBuZXcgVEhSRUUuTWVzaChlZGdlc0dlb21ldHJ5LCBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgIG9wYWNpdHk6IDAuMjUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICBibGVuZGluZzogVEhSRUUuQWRkaXRpdmVCbGVuZGluZyxcclxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeTIgPSBlZGdlc1RvQ3lsaW5kZXJzKG5ldyBUSFJFRS5FZGdlc0dlb21ldHJ5KGJveEdlb21ldHJ5KSwgMC4wNik7XHJcbiAgICBjb25zdCBlZGdlczIgPSBuZXcgVEhSRUUuTWVzaChlZGdlc0dlb21ldHJ5MiwgbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IHRoaXMuaW5wdXRzLmNvbG9yLFxyXG4gICAgICBvcGFjaXR5OiAwLjA1LFxyXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5waXZvdC5hZGQoZWRnZXMyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUhpZ2hsaWdodCgpIHtcclxuICAgIGNvbnN0IFRIUkVFID0gdGhpcy5jb250ZXh0LnRocmVlO1xyXG5cclxuICAgIC8vIFRPRE8gKHNjZW5lIHF1ZXJ5KTogdGhpcyBpcyB2ZXJ5IGJyaXR0bGUgYW5kIGhhcmRjb2RlZCBidXQgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCByb29tIGdlb21ldHJpZXMgdW50aWwgd2UgaGF2ZSBhIGJldHRlciB3YXkgdG8gcXVlcnkgdGhlIHNjZW5lIGdyYXBoXHJcbiAgICBjb25zdCBmbG9vck1lc2ggPSB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQ/LnBhcmVudD8uZ2V0T2JqZWN0QnlOYW1lKCdGbG9vck1lc2g6MCcpO1xyXG4gICAgY29uc3Qgcm9vbU1lc2ggPSBmbG9vck1lc2g/LmNoaWxkcmVuWzBdIGFzIE1lc2g7XHJcbiAgICBpZiAoIXJvb21NZXNoPy5nZW9tZXRyeSkge1xyXG4gICAgICAvLyBubyByb29tIG1lc2ggZm91bmQgaW4gdGhlIHNjZW5lIGdyYXBoOiB0aGUgZnJ1c3R1bSBpcyBzaG93biB3aXRob3V0IHRoZSBoaWdobGlnaHRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHRoaXMucHJvamVjdG9yLCB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zKTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMuY29sb3IudmFsdWUuc2V0SGV4KHRoaXMuaW5wdXRzLmNvbG9yKTtcclxuXHJcbiAgICBjb25zdCBzaGFkZXIgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xyXG4gICAgICBwb2x5Z29uT2Zmc2V0OiB0cnVlLFxyXG4gICAgICBwb2x5Z29uT2Zmc2V0VW5pdHM6IC0wLjEsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICB1bmlmb3JtczogdGhpcy5oaWdobGlnaHRVbmlmb3JtcyxcclxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcclxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBhIG1lc2ggdG8gcmVwcmVzZW50IHRoZSBcImhpZ2hsaWdodFwiXHJcbiAgICB0aGlzLmhpZ2hsaWdodCA9IG5ldyBUSFJFRS5NZXNoKHJvb21NZXNoLmdlb21ldHJ5LCBzaGFkZXIpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlld0ZydXN0dW0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHQpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQudmlzaWJsZSA9ICF0aGlzLmhpZ2hsaWdodC52aXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRnZXMpIHtcclxuICAgICAgdGhpcy5lZGdlcy52aXNpYmxlID0gIXRoaXMuZWRnZXMudmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBpdm90KSB7XHJcbiAgICAgIHRoaXMucGl2b3QudmlzaWJsZSA9ICF0aGlzLnBpdm90LnZpc2libGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VBbmltYXRpb24oKSB7XHJcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcclxuXHJcbiAgICAvLyBwcmVhcHBseSB0aGUgaW5pdGlhbCByb3RhdGlvbiBvZiB0aGUgcm9vdCBzbyB0aGF0IHBhbkFuZ2xlIGlzIHJlbGF0aXZlIHRvIGl0LlxyXG5cclxuICAgIC8vIFRPRE86IGZpeCBpdCFcclxuICAgIGNvbnN0IHJvb3RSb3RhdGlvbiA9IHRoaXMuY29udGV4dC5yb290LnF1YXRlcm5pb247XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAxLCAwKTtcclxuICAgIGNvbnN0IGZyYW1lMCA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgMCkucHJlbXVsdGlwbHkocm9vdFJvdGF0aW9uKTtcclxuICAgIGNvbnN0IGZyYW1lMSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgdGhpcy5pbnB1dHMucGFuQW5nbGUpLnByZW11bHRpcGx5KHJvb3RSb3RhdGlvbik7XHJcblxyXG4gICAgLy8gYSB0cmFjayB0aGF0IGhhcyBkZWxheXMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZm9yIDUlIG9mIHRoZSBhbmltYXRpb25cclxuICAgIGNvbnN0IHRyYWNrID0gbmV3IFRIUkVFLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrKCcucXVhdGVybmlvbicsIFtcclxuICAgICAgMCwgdGhpcy5pbnB1dHMucGFuUGVyaW9kICogMC4wNSwgdGhpcy5pbnB1dHMucGFuUGVyaW9kICogMC45NSwgdGhpcy5pbnB1dHMucGFuUGVyaW9kXHJcbiAgICBdLCBbXHJcbiAgICAgIGZyYW1lMC54LCBmcmFtZTAueSwgZnJhbWUwLnosIGZyYW1lMC53LFxyXG4gICAgICBmcmFtZTAueCwgZnJhbWUwLnksIGZyYW1lMC56LCBmcmFtZTAudyxcclxuICAgICAgZnJhbWUxLngsIGZyYW1lMS55LCBmcmFtZTEueiwgZnJhbWUxLncsXHJcbiAgICAgIGZyYW1lMS54LCBmcmFtZTEueSwgZnJhbWUxLnosIGZyYW1lMS53LFxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgY2xpcCA9IG5ldyBUSFJFRS5BbmltYXRpb25DbGlwKCdwYW5uaW5nJywgdGhpcy5pbnB1dHMucGFuUGVyaW9kLCBbdHJhY2tdKTtcclxuXHJcbiAgICAvLyBUaGVyZSBpcyBubyBhcGkgdG8gY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgcm9vdCwgc28gd2Ugd2lsbCB1c2UgYSBwcml2YXRlIHByb3BlcnR5IHRvIGFjY2VzcyB0aGUgT2JqZWN0M0QuXHJcbiAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IG5lZWQgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuXHJcbiAgICB0aGlzLm1peGVyID0gbmV3IFRIUkVFLkFuaW1hdGlvbk1peGVyKCh0aGlzLmNvbnRleHQucm9vdCBhcyBhbnkpLm9iajNEKTtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMubWl4ZXIuY2xpcEFjdGlvbihjbGlwKTtcclxuICAgIGFjdGlvbi5sb29wID0gVEhSRUUuTG9vcFBpbmdQb25nO1xyXG4gICAgYWN0aW9uLnBsYXkoKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB2ZXJ0ZXhTaGFkZXIoKTogc3RyaW5nIHtcclxuICByZXR1cm4gYFxyXG4gICAgdW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xyXG5cclxuICAgIHZhcnlpbmcgdmVjNCB2TGlnaHRDb29yZHM7XHJcblxyXG4gICAgdm9pZCBtYWluKCkge1xyXG4gICAgICAvLyBjcmVhdGUgYSBVViByZWdpb24gWzAsMV0geCBbMCwxXSB0byByZXByZXNlbnQgd2hhdCB0aGUgbGlnaHRNYXRyaXggXCJzZWVzXCJcclxuICAgICAgdkxpZ2h0Q29vcmRzID0gbGlnaHRNYXRyaXggKiAgbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xyXG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xyXG4gICAgfVxyXG4gIGA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZyYWdtZW50U2hhZGVyKCkge1xyXG4gIHJldHVybiBgXHJcbiAgICB1bmlmb3JtIHZlYzMgY29sb3I7XHJcblxyXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcclxuXHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgIHZlYzIgbGlnaHRVViA9IHZMaWdodENvb3Jkcy54eSAvIHZMaWdodENvb3Jkcy53O1xyXG4gICAgICBmbG9hdCBpblZpZXcgPSBmbG9hdChtYXgobGlnaHRVVi54LCBsaWdodFVWLnkpIDw9IDEuMCAmJiBtaW4obGlnaHRVVi54LCBsaWdodFVWLnkpID49IDAuMCAmJiB2TGlnaHRDb29yZHMueiA+IDAuMCk7XHJcblxyXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBtaW4oaW5WaWV3LCAwLjIpKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyhwcm9qZWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJhLCB1bmlmb3JtczogSGlnaGxpZ2h0VW5pZm9ybXMpIHtcclxuICBwcm9qZWN0b3IuZ2V0V29ybGRQb3NpdGlvbih1bmlmb3Jtcy5wcm9qUG9zaXRpb24udmFsdWUpO1xyXG5cclxuICAvLyBzaW1pbGFyIHRvIGEgc2hhZG93IG1hdHJpeCwgYnV0IHdlJ3JlIHVzaW5nIGl0IGFzIGEgXCJyZWN0YW5ndWxhclwiIHNwb3RsaWdodFxyXG4gIC8vIFtsaWdodEJpYXNdICogW3Byb2plY3Rpb25dICogW3ZpZXdNYXRyaXhdXHJcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubWFrZVNjYWxlKDAuNSwgMC41LCAwLjUpO1xyXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLnNldFBvc2l0aW9uKG5ldyBWZWN0b3IzKDAuNSwgMC41LCAwLjUpKVxyXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5wcm9qZWN0aW9uTWF0cml4KTtcclxuICB1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZS5tdWx0aXBseU1hdHJpY2VzKHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLCBwcm9qZWN0b3IubWF0cml4V29ybGRJbnZlcnNlKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNlY3VyaXR5Q2FtZXJhVHlwZSA9ICdtcC5zZWN1cml0eUNhbWVyYSc7XHJcbmV4cG9ydCBjb25zdCBtYWtlU2VjdXJpdHlDYW1lcmEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgcmV0dXJuIG5ldyBTZWN1cml0eUNhbWVyYSgpO1xyXG59XHJcbiJdfQ==
|